API de Afer
Integra tu web, tu e-commerce o tus sistemas con Afer: crea facturas, albaranes, pedidos, contactos y oportunidades de CRM, consulta disponibilidad de alquiler y publica tu flota de charter desde cualquier aplicación.
https://api.afer.pro/{endpoint}
Cómo funciona
Todos los endpoints se llaman por HTTP POST con un cuerpo
JSON y cabecera Content-Type: application/json.
El nombre del endpoint va en la ruta y no distingue mayúsculas de minúsculas:
/crearFactura y /crearfactura son equivalentes.
curl -X POST 'https://api.afer.pro/crearContacto' \
-H 'Content-Type: application/json' \
-d '{
"cliente_afer_fk": 108,
"contacto": {
"persona_contacto": "Maria Ferrer",
"email_contacto": "maria@ejemplo.com"
}
}'
<?php
$data = [
'cliente_afer_fk' => 108,
'contacto' => [
'persona_contacto' => 'Maria Ferrer',
'email_contacto' => 'maria@ejemplo.com',
],
];
$ch = curl_init('https://api.afer.pro/crearContacto');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$respuesta = json_decode(curl_exec($ch), true);
curl_close($ch);
const respuesta = await fetch('https://api.afer.pro/crearContacto', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
cliente_afer_fk: 108,
contacto: {
persona_contacto: 'Maria Ferrer',
email_contacto: 'maria@ejemplo.com'
}
})
});
const resultado = await respuesta.json();
Identificación
Según el endpoint, la cuenta de Afer sobre la que se opera se identifica de una de estas formas:
cliente_afer_fkint |
Identificador numérico de tu cuenta de Afer. Se envía en el cuerpo de la petición. Lo usan los endpoints de facturación y CRM. Afer te facilita este identificador al activar la integración. |
accessTokenstring |
Token cifrado que identifica tu cuenta. Se envía en el cuerpo de la petición. Lo usan los endpoints de charters y del portal del cliente. Afer te facilita este token al activar la integración. |
api_tokenstring |
Token cifrado opcional que refuerza la identificación en crearFactura: si se envía, debe corresponder a la misma cuenta que cliente_afer_fk o la petición se rechaza. |
Trata accessToken y api_token como secretos: guárdalos en el servidor y no los expongas en código que se ejecute en el navegador. Las llamadas desde dominios web requieren que Afer autorice previamente tu dominio (CORS).
Identificadores cifrados
La API nunca expone identificadores internos de base de datos. Los endpoints de creación
devuelven el identificador del elemento creado en forma de token cifrado
(por ejemplo "aBc123XyZ…"), y los endpoints que aceptan referencias a elementos
(boardId, charterId, templateId…) esperan ese mismo
formato cifrado. Guarda estos tokens tal cual: son estables y sirven para llamadas posteriores.
Respuestas
Las respuestas son JSON. El resultado de la operación llega envuelto en la clave
data:
{
"data": {
"url": "https://clientes.aferapp.com/mi-empresa/?loginToken=aBc123XyZ"
}
}
En endpoints de creación, data contiene directamente el identificador cifrado
del elemento creado. Cuando una búsqueda no produce resultados, data puede ser
false.
Errores
Hay dos formas de error, según el endpoint:
- Excepciones de validación — parámetros obligatorios ausentes o identificación inválida. La petición devuelve un mensaje de error descriptivo (por ejemplo "El parametro fecha inicio está vacío.").
- Errores de negocio — algunos endpoints devuelven el detalle en el propio resultado, como una cadena que empieza por
Error:o un objeto{"msg": "…", "error": "error"}. Cada ficha de endpoint documenta sus casos.
Endpoints disponibles
Facturación y ventas
/crearFactura/crearAlbaran/crearPedido/crearRecurrenteCRM y marketing
/crearContacto/crearOportunidad/inscribirEventoAlquiler y disponibilidad
/numDisponibilidadArticuloAlquiler/consultarDisponibilidadArticulos/consultarReservasArticulosCharters
/listCharters/getCharter/getBookingCharter