Planificación de turnos
https://api.afer.pro/api/v1/schedules
POST https://api.afer.pro/consultarPlanificacion
Qué turno tiene asignado cada persona cada día de un período, con sus tramos y sus horas previstas.
Una fila por persona y día planificado. Los tramos son los del turno tal y como quedaron aplicados a ese día concreto, así que reflejan también los cambios puntuales sobre el turno base.
horas_previstas se calcula desde los tramos, sumando mañana y tarde y recolocando los que cruzan medianoche. No se usa la columna de total de horas de la tabla: en cuentas antiguas está corrupta y devolvería jornadas imposibles.
Envía tus claves API en las cabeceras X-API-KEY y X-API-SECRET. La cuenta sobre la que se opera se resuelve automáticamente a partir de la clave. Cómo obtener tus claves →
Este endpoint requiere autenticación con API key: sin credenciales responde 401.
Parámetros del cuerpo
El cuerpo de la petición es un objeto JSON con Content-Type: application/json.
fecha_iniciodateobligatorio | Inicio del período, incluido. Formato YYYY-MM-DD. |
fecha_findateobligatorio | Fin del período, incluido. |
empleadoIdstringopcional | Solo la planificación de esta persona. |
paginaintopcional | Página a devolver. Por defecto 1. |
por_paginaintopcional | Resultados por página. Por defecto 500, máximo 2000. |
Ejemplo de petición
curl -X GET 'https://api.afer.pro/api/v1/schedules?fecha_inicio=2026-05-01&fecha_fin=2026-05-31' \
-H 'X-API-KEY: afer_tk_TU_TOKEN' \
-H 'X-API-SECRET: afer_sk_TU_SECRET'
<?php
$ch = curl_init('https://api.afer.pro/api/v1/schedules?fecha_inicio=2026-05-01&fecha_fin=2026-05-31');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: afer_tk_TU_TOKEN',
'X-API-SECRET: afer_sk_TU_SECRET',
]);
$respuesta = json_decode(curl_exec($ch), true);
curl_close($ch);
const respuesta = await fetch('https://api.afer.pro/api/v1/schedules?fecha_inicio=2026-05-01&fecha_fin=2026-05-31', {
method: 'GET',
headers: {
'X-API-KEY': 'afer_tk_TU_TOKEN',
'X-API-SECRET': 'afer_sk_TU_SECRET'
}
});
const resultado = await respuesta.json();
Respuesta
{
"errorCode": 200,
"errorMsg": "",
"data": {
"periodo": {
"desde": "2026-05-01",
"hasta": "2026-05-31"
},
"total_dias_planificados": 1,
"pagina": 1,
"por_pagina": 500,
"num_paginas": 1,
"planificacion": [
{
"planificacionId": "pLn77…",
"fecha": "2026-05-04",
"empleado": {
"empleadoId": "eMp001…",
"nombre": "Ana",
"apellidos": "Pons Ferrer"
},
"turno": {
"turnoId": "tRn9…",
"titulo": "Partido"
},
"manana": {
"inicio": "09:00",
"fin": "13:00"
},
"tarde": {
"inicio": "15:00",
"fin": "18:00"
},
"horas_previstas": 7
}
]
}
}
- Para comparar lo planificado con lo realmente fichado usa consultarResumenHorario, que ya hace la resta.