Base URL https://api.afer.pro Referencia aferapp.com Reservar demo

Horas imputadas a proyectos

GET https://api.afer.pro/api/v1/project-times
Alias en castellano (v0, sigue operativo): POST https://api.afer.pro/consultarTiemposProyecto

Las horas fichadas contra proyectos entre dos fechas, agregadas por proyecto y por persona, con su coste.

El desglose de la partida coste_personal de consultarProyectos: qué proyecto se ha llevado cuántas horas y de quién.

Solo entran los fichajes cerrados (con salida registrada y posterior a la entrada) que tienen proyecto asignado. Cada hora se valora al coste/hora del contrato vigente en la fecha del fichaje, con el plan de pensiones y la TGSS incluidos — el mismo criterio que el informe interno de proyectos.

Autenticación

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_iniciodate
obligatorio
Inicio del período, incluido. Formato YYYY-MM-DD.
fecha_findate
obligatorio
Fin del período, incluido.
proyectoIdstring
opcional
Solo las horas de este proyecto.
empleadoIdstring
opcional
Solo las horas de esta persona.

Ejemplo de petición

curl -X GET 'https://api.afer.pro/api/v1/project-times?fecha_inicio=2026-04-01&fecha_fin=2026-04-30' \
  -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/project-times?fecha_inicio=2026-04-01&fecha_fin=2026-04-30');
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/project-times?fecha_inicio=2026-04-01&fecha_fin=2026-04-30', {
  method: 'GET',
  headers: {
    'X-API-KEY': 'afer_tk_TU_TOKEN',
    'X-API-SECRET': 'afer_sk_TU_SECRET'
  }
});

const resultado = await respuesta.json();

Respuesta

200 · application/json
{
    "errorCode": 200,
    "errorMsg": "",
    "data": {
        "periodo": {
            "desde": "2026-04-01",
            "hasta": "2026-04-30"
        },
        "totales": {
            "horas": 984.5,
            "coste_personal": 17230.75
        },
        "total_proyectos": 1,
        "proyectos": [
            {
                "proyectoId": "aBc123XyZ…",
                "numero": "OB-2026-07",
                "descripcion": "Reforma integral local Palma",
                "horas": 312,
                "coste_personal": 5460,
                "empleados": [
                    {
                        "empleadoId": "eMp001…",
                        "nombre": "Ana",
                        "apellidos": "Pons Ferrer",
                        "horas": 168,
                        "coste_personal": 2940,
                        "num_fichajes": 21
                    }
                ]
            }
        ]
    }
}
Notas
  • Los apuntes abiertos (sin salida) no suman: aparecen en consultarFichajes marcados con abierto: true.