https://api.veriko.mx/v1/webhooksCrear un endpoint webhook para recibir eventos
Guía de uso →Registra un endpoint HTTPS que recibirá los eventos suscritos. La URL debe resolver a una dirección pública: localhost y los rangos privados se rechazan.
Cada endpoint puede suscribirse a diferentes eventos, entre ellos:
- Eventos
validation.*: Avisan de cada veredicto de una validación y de cada paso de sus reintentos automáticos (p. ej:validation.completed,validation.error, etc). - Evento
validation.returned: avisa cuando una validación que ya había salidovalidpasa después areturnedporque Banxico reportó la devolución; no se emite al crear la validación, donde el evento esvalidation.completed. Para recibirlo hay que suscribirse a él además de avalidation.completed. - Eventos
billing.*: No producen entregas hasta que haya algún movimiento en la suscripción del usuario (p. ej:billing.subscription_canceled,billing.payment_succeeded, cuotas de uso, etc).
Si se alcanza el tope de endpoints registrados, la creación responde con un estado HTTP 422 (con webhook_limit_reached en el cuerpo) y con el valor del límite en el campo meta.limit.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
url | string (uri) (?–2048) | obligatorio | URL receptora del webhook. Se rechaza si resuelve a una dirección privada o si pasa de 2048 caracteres y, en producción, también si no usa HTTPS. p. ej.https://example.com/webhooks/entregas |
events | array<string> (elementos: 1–10) | obligatorio | Eventos a los que se suscribe el endpoint webhook. Entre 1 y 10. |
description | string | nullanulable (?–255) | opcional | Etiqueta libre para distinguir el endpoint webhook de los demás. Alta de pagos en el ERP |
curl -X POST 'https://api.veriko.mx/v1/webhooks' \
-H 'Authorization: Bearer veriko_••••' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://webhook.example.com/platform",
"events": [
"validation.completed",
"validation.failed",
"validation.error",
"billing.payment_succeeded",
"billing.payment_failed"
]
}'Ejemplo en Python — próximamente.
Ejemplo en JavaScript — próximamente.
Ejemplo en PHP — próximamente.
| Campo | Tipo | Descripción |
|---|---|---|
type* | string | Tipo de recurso JSON:API. Siempre webhook_endpoint |
id* | string (uuid) | Identificador único del endpoint webhook (UUID v4). p. ej.a1b2c3d4-e5f6-7890-abcd-ef0123456789 |
attributes* | object | Datos del endpoint webhook (URL receptora, eventos suscritos, estado y secreto). |
url* | string (uri) | URL receptora del webhook. En producción se rechaza si no usa HTTPS, si resuelve a una dirección privada o si pasa de 2048 caracteres. p. ej.https://example.com/webhooks/entregas |
events* | array (elementos: 1–10, elementos únicos) | Eventos a los que se suscribe el endpoint webhook. Entre 1 y 10. |
description* | string | nullanulable | Etiqueta libre para distinguir el endpoint webhook de los demás. p. ej.Alta de pagos en el ERP |
status* | string | Estado actual del webhook — active |
consecutive_failures* | integer | Cantidad de fallos consecutivos. Se reinicia al primer éxito. p. ej.0 |
last_delivery_at* | TimestampUTC | null | Fecha y hora de la última entrega exitosa, en ISO 8601 UTC. |
secret | string | Clave compartida para verificar firmas. Solo presente en la respuesta de creación y de rotación del endpoint; se omite en cualquier otra respuesta. Se usa para validar las cabeceras a0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566778899aabbccddeeff |
secret_hint | string | Últimos 4 caracteres del secret, con el prefijo ...4f2a |
created_at* | string (date-time) | Timestamp ISO 8601 en UTC con sufijo 2026-05-01T05:14:38Z |
updated_at* | string (date-time) | Timestamp ISO 8601 en UTC con sufijo 2026-05-01T05:14:38Z |
| Código | Clase | Descripción | Cuerpo |
|---|---|---|---|
| 201 | 2xx | Endpoint webhook creado. El campo secret aparece solo en esta respuesta y no puede volver a consultarse: es el que verifica la firma X-Webhook-Signature: sha256=<hex> que acompaña a cada entrega. | WebhookEndpoint |
| 400 | 4xx | El cuerpo de la petición está vacío o no es JSON válido, o la URL apunta a una dirección no pública. | ErrorResponse |
| 401 | 4xx | Se requiere autenticación o las credenciales son inválidas | ErrorResponse |
| 403 | 4xx | Permisos insuficientes | ErrorResponse |
| 413 | 4xx | El cuerpo de la petición supera el tamaño máximo admitido (body_too_large). | ErrorResponse |
| 422 | 4xx | La URL, la lista de eventos o description no superan la validación, o la cuenta de usuario alcanzó su tope de endpoints. webhook_url_invalid_type y webhook_description_invalid_type aparecen cuando el campo llega con un tipo distinto de cadena de texto; webhook_description_too_long cuando description excede 255 caracteres. Todo error de campo trae source.pointer. | ErrorResponse |
| 429 | 4xx | Límite de tasa excedido | ErrorResponse |
| Código | Clave | Ejemplo |
|---|---|---|
| 400 | body_empty | El cuerpo de la petición está vacío. Envelope
|
| 400 | invalid_json | El cuerpo no es JSON válido. Envelope
|
| 400 | url_dns_failed | No se pudo resolver el nombre de la dirección. Envelope
|
| 400 | url_ssrf_blocked | La URL indicada resuelve a una dirección no pública. Envelope
|
| 401 | unauthorized | Credenciales de autenticación ausentes o inválidas. Envelope
|
| 403 | permission_denied | No tienes permiso para acceder a este recurso. Envelope
|
| 413 | body_too_large | El cuerpo de la petición es demasiado grande. Envelope
|
| 422 | validation_error | El campo url es obligatorio. Envelope
|
| 422 | webhook_description_too_long | El campo description no debe exceder 255 caracteres. Envelope
|
| 422 | webhook_event_invalid | El evento indicado no existe. El evento rechazado viene en meta.event. Envelope
|
| 422 | webhook_events_required | El endpoint debe suscribirse a al menos un evento. Envelope
|
| 422 | webhook_events_too_many | Un endpoint admite como máximo 10 eventos. Envelope
|
| 422 | webhook_limit_reached | Se alcanzó el número máximo de endpoints permitidos. El tope aplicado viene en meta.limit. Envelope
|
| 422 | webhook_url_invalid_format | La URL no tiene un formato válido. Envelope
|
| 422 | webhook_url_not_https | La URL debe usar HTTPS. Envelope
|
| 422 | webhook_url_required | El campo url es obligatorio. Envelope
|
| 422 | webhook_url_too_long | La URL no puede exceder 2 048 caracteres. Envelope
|
| 429 | rate_limit_exceeded | Límite de peticiones excedido. Inténtalo de nuevo en 45 segundos. Envelope
Cabeceras de respuesta
|