https://api.veriko.mx/v1/webhooks Crear un endpoint de webhook
Guía de uso →Registra un nuevo endpoint HTTPS para recibir notificaciones de eventos. El campo secret de firma se devuelve exclusivamente en esta respuesta y no puede recuperarse después — almacénalo de forma segura. Valida con HMAC-SHA256 el cuerpo entrante contra la cabecera X-{Brand}-Signature: sha256=<hex>. Tras crear el endpoint envía una entrega sintética con POST /v1/webhooks/{id}/test para confirmar que el receptor responde 2xx antes de habilitar producción.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
url | string (uri) (?–2048) | obligatorio | URL HTTPS receptora del webhook. Debe ser HTTPS. |
events | array<string> (elementos: 1–10) | obligatorio | Eventos a los que se suscribe el endpoint (1–10). |
description | string (?–255) | opcional | Etiqueta descriptiva del endpoint. |
curl -X POST 'https://api.veriko.mx/v1/webhooks' \
-H 'Authorization: Bearer mxcep_••••' \
-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"
],
"description": "Webhook plataforma completo"
}'
Ejemplo en Python — próximamente.
Ejemplo en JavaScript — próximamente.
Ejemplo en PHP — próximamente.
| Campo | Tipo | Descripción |
|---|---|---|
type * | string | |
id * | string (uuid) | Identificador del endpoint. |
attributes * | object | Atributos canónicos del endpoint de webhook (URL receptora, eventos suscritos, estado y secreto). |
url | string (uri) | URL HTTPS receptora. En producción se rechaza HTTP, URLs que resuelven a IPs privadas (SSRF), y URLs `>2048` caracteres. |
events | array | Lista de eventos suscritos. Máximo 10. |
description | string | null anulable | Etiqueta libre del endpoint. |
status | string | `active` recibe entregas. `disabled` fue apagado manualmente. `auto_disabled` fue desactivado por la plataforma tras superar `webhooks.auto_disable_threshold` fallos consecutivos. |
consecutive_failures | integer | Contador de fallos consecutivos. Se resetea en éxito. |
last_delivery_at | union | Marca de tiempo UTC del último intento de entrega (cualquier status). `null` cuando el endpoint aún no recibió ningún delivery. |
secret | string | Clave compartida para verificar firmas. **Solo presente** en la respuesta de creación y regeneración del endpoint; se omite en cualquier otra respuesta. |
secret_hint | string | Últimos 4 caracteres del secret, prefijados con `...`. Presente en cualquier respuesta donde `secret` está oculto. |
created_at | string (date-time) | Timestamp ISO 8601 en UTC con sufijo `Z` explícito. Ejemplo: `"2026-05-01T05:14:38Z"`. Cada campo `*_at`, `*_end`, `*_start`, `*_date` de la API usa esta forma. El descriptor compañero en `meta.datetime` permite afirmar el contrato en tiempo de ejecución sin volver a leer este spec. El `new Date(value)` nativo del navegador, el `datetime.fromisoformat` (≥3.11) de Python y el `time.Parse(time.RFC3339)` de Go parsean este formato directamente. |
updated_at | string (date-time) | Timestamp ISO 8601 en UTC con sufijo `Z` explícito. Ejemplo: `"2026-05-01T05:14:38Z"`. Cada campo `*_at`, `*_end`, `*_start`, `*_date` de la API usa esta forma. El descriptor compañero en `meta.datetime` permite afirmar el contrato en tiempo de ejecución sin volver a leer este spec. El `new Date(value)` nativo del navegador, el `datetime.fromisoformat` (≥3.11) de Python y el `time.Parse(time.RFC3339)` de Go parsean este formato directamente. |
| Código | Clase | Descripción | Cuerpo |
|---|---|---|---|
| 201 | 2xx | Endpoint creado. El campo `secret` solo aparece en esta respuesta; almacénalo de forma segura para verificar las firmas `X-{Brand}-Signature: sha256=<hex>` (HMAC-SHA256 sobre el cuerpo). | Sin cuerpo |
| 401 | 4xx | Se requiere autenticación o las credenciales son inválidas | ErrorResponse |
| 403 | 4xx | Permisos insuficientes | ErrorResponse |
| 422 | 4xx | Datos inválidos. Códigos posibles: `webhook_url_required`, `webhook_url_too_long`, `webhook_url_invalid_format`, `webhook_url_not_https`, `webhook_events_required`, `webhook_events_too_many`, `webhook_event_invalid`, `webhook_limit_reached`. | ErrorResponse |
| 429 | 4xx | Límite de tasa excedido | ErrorResponse |
| Código | Clave | Detalle |
|---|---|---|
| 401 | unauthorized | Invalid or missing authentication credentials. Envelope
|
| 403 | forbidden | You do not have permission to access this resource. Envelope
|
| 429 | rate_limit_exceeded | Rate limit exceeded. Try again in 45 seconds. Envelope
Cabeceras de respuesta
|