Proyectos y su económico
https://api.afer.pro/api/v1/projects
POST https://api.afer.pro/consultarProyectos
Cada obra con sus ventas, sus costes, su resultado y su margen, con el mismo criterio que el panel interno.
La tabla que responde a ¿qué obras ganan dinero?. Cada proyecto llega con un bloque economico calculado igual que en el cuadro de mandos interno:
- ventas: líneas de albarán + líneas de factura con
proviene_albaranes = 0, para no contar dos veces el albarán ya facturado. - compras: líneas de albarán de compra + líneas de factura de compra que no vienen de albarán.
- coste_personal: horas fichadas contra el proyecto valoradas al coste/hora del contrato vigente en la fecha de cada fichaje, más plan de pensiones y TGSS.
- coste_maquinaria: las mismas horas valoradas al coste/hora de la máquina imputada.
costes es la suma de los tres, resultado es ventas − costes y margen el porcentaje sobre ventas. Si no hay ventas pero sí coste, el margen se devuelve como -100.
fecha_inicio y fecha_fin acotan el económico —no la lista de proyectos—: los documentos por su fecha de cabecera y las horas por la fecha de entrada del fichaje.
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_iniciodateopcional | Acota el económico desde esta fecha. Formato YYYY-MM-DD. |
fecha_findateopcional | Acota el económico hasta esta fecha. |
busquedastringopcional | Texto a buscar en la descripción o el número del proyecto. |
clienteIdstringopcional | Solo los proyectos de este cliente. |
estadoIdstringopcional | Solo los proyectos en este estado del pipeline. |
paginaintopcional | Página a devolver. Por defecto 1. |
por_paginaintopcional | Resultados por página. Por defecto 100, máximo 500. |
Ejemplo de petición
curl -X GET 'https://api.afer.pro/api/v1/projects?fecha_inicio=2026-01-01&fecha_fin=2026-06-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/projects?fecha_inicio=2026-01-01&fecha_fin=2026-06-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/projects?fecha_inicio=2026-01-01&fecha_fin=2026-06-30', {
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": {
"total_proyectos": 1,
"pagina": 1,
"por_pagina": 100,
"num_paginas": 1,
"proyectos": [
{
"proyectoId": "aBc123XyZ…",
"numero": "OB-2026-07",
"descripcion": "Reforma integral local Palma",
"cliente": {
"clienteId": "dEf456…",
"nombre_fiscal": "ACME OBRAS SL",
"nombre_comercial": "Ferrer Interiors",
"cif": "B07123456",
"email": "admin@ferrerinteriors.com",
"telefono": "971123456",
"movil": "600123456",
"rgpd": {
"comunicaciones_email": true,
"comunicaciones_whatsapp": false,
"comunicaciones_sms": null,
"tratamiento_imagenes": null
}
},
"estado": {
"estadoId": "gHi789…",
"titulo": "En curso"
},
"presupuesto_coste": 42000,
"presupuesto_venta": 68000,
"economico": {
"ventas": 51200,
"compras": 21400,
"coste_personal": 12800.4,
"coste_maquinaria": 1900,
"costes": 36100.4,
"resultado": 15099.6,
"margen": 29.5,
"horas": 742.5
}
}
]
}
}
presupuesto_costeypresupuesto_ventason los objetivos fijados en la ficha del proyecto: compáralos concostesyventaspara detectar sobrecoste o fricción con el cliente.- El detalle de horas por persona lo da consultarTiemposProyecto.