⚠️ AVISO: Los webhooks están disponibles en los planes Avanzado y Total.
La API de webhooks te permite gestionar endpoints, consultar eventos y reenviar notificaciones de forma programática. Puedes crear endpoints, suscribirte a eventos, revisar el historial de envíos y rotar signing secrets, todo mediante la API.
💡 Recomendación: Antes de empezar a desarrollar, te recomendamos crear un entorno de pruebas (sandbox) para hacer tus primeras llamadas sin afectar tus datos reales.
Autenticación
La API de webhooks acepta dos métodos de autenticación:
API Key: añade la cabecera
facturadirecta-api-key: TU_CLAVE_API. La clave debe tener los permisoswebhooks:ready/owebhooks:writeOAuth2: solicita los scopes
webhooks:ready/owebhooks:writeen el flujo de autorización
Endpoints de gestión
Método | Endpoint | Descripción | Scope |
GET | /{companyId}/webhooks/endpoints | Listar endpoints |
|
POST | /{companyId}/webhooks/endpoints | Crear endpoint |
|
GET | /{companyId}/webhooks/endpoints/{endpointId} | Obtener endpoint |
|
PUT | /{companyId}/webhooks/endpoints/{endpointId} | Actualizar endpoint |
|
DELETE | /{companyId}/webhooks/endpoints/{endpointId} | Eliminar endpoint |
|
POST | /{companyId}/webhooks/endpoints/{endpointId}/enable | Reactivar endpoint |
|
POST | /{companyId}/webhooks/endpoints/{endpointId}/disable | Desactivar endpoint |
|
POST | /{companyId}/webhooks/endpoints/{endpointId}/rotate-secret | Rotar signing secret |
|
Endpoints de eventos
Método | Endpoint | Descripción | Scope |
GET | /{companyId}/webhooks/events | Listar eventos (paginación por cursor) |
|
GET | /{companyId}/webhooks/events/{eventId} | Obtener evento |
|
POST | /{companyId}/webhooks/events/{eventId}/retry | Reenviar evento |
|
Ejemplos de código
Crear un endpoint
curl -X POST \
-H "facturadirecta-api-key: TU_CLAVE_API" \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-servidor.com/webhook",
"name": "Integración ERP",
"events": ["invoice.created", "invoice.updated", "contact.created"]
}' \
https://app.facturadirecta.com/api/TU_COMPANY_ID/webhooks/endpoints
La respuesta incluye el signing secret (solo se muestra en este momento):
{
"data": {
"id": "wep_abc123",
"url": "https://tu-servidor.com/webhook",
"name": "Integración ERP",
"events": ["invoice.created", "invoice.updated", "contact.created"],
"status": "active",
"secret": "whsec_a1b2c3d4e5f6..."
}
}
Listar endpoints
curl -H "facturadirecta-api-key: TU_CLAVE_API" \ https://app.facturadirecta.com/api/TU_COMPANY_ID/webhooks/endpoints
Consultar eventos
curl -H "facturadirecta-api-key: TU_CLAVE_API" \ "https://app.facturadirecta.com/api/TU_COMPANY_ID/webhooks/events?endpoint_id=wep_abc123&status=failed&limit=10"
Reenviar un evento
curl -X POST \ -H "facturadirecta-api-key: TU_CLAVE_API" \ https://app.facturadirecta.com/api/TU_COMPANY_ID/webhooks/events/whe_xyz789/retry
Rotar signing secret
curl -X POST \ -H "facturadirecta-api-key: TU_CLAVE_API" \ https://app.facturadirecta.com/api/TU_COMPANY_ID/webhooks/endpoints/wep_abc123/rotate-secret
La respuesta incluye el nuevo signing secret:
{
"data": {
"id": "wep_abc123",
"secret": "whsec_nuevo_secret..."
}
}
Campos del endpoint
Campo | Tipo | Descripción |
| string | ID único del endpoint (formato |
| string | URL HTTPS de destino |
| string | Nombre descriptivo del endpoint |
| array | Lista de tipos de evento suscritos |
| string |
|
| number | Número de fallos consecutivos (se resetea a 0 al reactivar) |
| string | null | Fecha del último envío |
| string | Fecha de creación |
| string | Signing secret (solo en la respuesta de crear o rotar) |
Campos del evento
Campo | Tipo | Descripción |
| string | ID único del evento (formato |
| string | Tipo de evento (ej: |
| string | Estado del evento: |
| string | ID del endpoint al que se envió |
| number | Timestamp Unix del evento (en segundos) |
| boolean |
|
| object | Payload del evento (snapshot del documento) |
| number | null | Código HTTP de la última respuesta |
| number | Número de intentos de entrega realizados |
Filtros de eventos
Al listar eventos (GET /{companyId}/webhooks/events) puedes usar los siguientes filtros:
Parámetro | Tipo | Descripción |
| string | Filtrar por endpoint |
| string | Filtrar por tipo de evento (ej: |
| string | Filtrar por estado ( |
| number | Máximo de resultados por página (hasta 100) |
| string | Cursor para la siguiente página de resultados |
Estados de un evento
Estado | Descripción |
| Evento creado, pendiente de entrega |
| Entregado con éxito (respuesta HTTP 2xx) |
| Todos los reintentos agotados o error permanente |
| El endpoint estaba desactivado en el momento del intento |
Errores comunes
Error 403: Forbidden
Tu clave de API no tiene los permisos necesarios. Verifica que la clave incluye los scopes webhooks:read y/o webhooks:write según la operación.
Error 422: Unprocessable Entity
Los datos enviados no son válidos. Causas habituales:
La URL no empieza por
https://La URL apunta a una IP privada (localhost, 127.x, 10.x, 192.168.x)
No se ha seleccionado ningún evento
El tipo de evento no existe en el catálogo
Error 404: Not Found
El endpoint o evento no existe. Verifica que el ID es correcto y pertenece a tu empresa.