Webhooks

Registro de entregas

Cada evento que enviamos a tu endpoint, con cada intento y lo que respondió. Reenvía uno y rota tu secreto sin perder entregas.

Cada evento que enviamos a un endpoint queda en su registro de entregas: qué evento era, cuántas veces lo intentamos, qué respondió tu servidor y cómo terminó. Es lo primero que miras cuando tu sistema dice que no le llegó un aviso.

Consulta las entregas

curl "https://api.fiscalbase.io/v1/webhook-endpoints/8d1f…/deliveries?status=failed" \
  -H "Authorization: Bearer $FISCALBASE_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "0192f7b0-…",
      "object": "webhook_delivery",
      "endpoint_id": "8d1f…",
      "event": {
        "id": "3c1a7e52-…",
        "type": "invoice.authorized",
        "data": {
          "id": "0f6c8f4e-…",
          "object": "invoice",
          "status": "authorized",
          "environment": "live",
          "country": "ec",
          "entity_id": "01926c10-…",
          "number": "001-002-000004813"
        },
        "created_at": "2026-09-29T14:03:52.118Z"
      },
      "status": "failed",
      "attempts": [
        {
          "at": "2026-09-29T14:03:52.301Z",
          "status_code": 500,
          "error": null,
          "duration_ms": 212
        },
        {
          "at": "2026-09-29T14:04:23.090Z",
          "status_code": null,
          "error": "timeout",
          "duration_ms": 15000
        }
      ],
      "created_at": "2026-09-29T14:03:52.118Z",
      "updated_at": "2026-10-02T13:51:10.442Z"
    }
  ],
  "next_cursor": null,
  "prev_cursor": null
}

Las entregas van de la más reciente a la más antigua y se paginan como toda lista. Filtra con:

ParámetroQué filtra
statuspending (enviándose o esperando un reintento), succeeded (respondiste 2xx) o failed (se agotaron los reintentos)
event_typeUn tipo de evento: invoice.authorized
document_idLos eventos de un comprobante: lo que la plataforma muestra en su pestaña de entregas

Cada intento dice qué respondió tu endpoint (status_code) o por qué no respondió (error):

errorQué pasó
timeoutNo respondiste en 15 segundos
connectionNo pudimos conectarnos: DNS, TLS o conexión rechazada
forbidden_addressLa URL apunta a una dirección que no es pública, y nunca nos conectamos a esas
endpoint_disabledDesactivaste el endpoint antes de que se enviara

Reintentamos durante unos tres días, cada vez más espaciado. Después del último intento la entrega queda failed y avisamos por correo a los owner y admin de tu organización.

Reenvía una entrega

Cuando arreglas tu endpoint, reenvía lo que falló:

curl -X POST https://api.fiscalbase.io/v1/webhook-endpoints/8d1f…/deliveries/0192f7b0-…/resend \
  -H "Authorization: Bearer $FISCALBASE_API_KEY"

Responde 201 con una entrega nueva del mismo evento; la anterior se queda en el registro tal como terminó. La entrega nueva lleva el mismo webhook-id, así que si ya la habías procesado la descartas como duplicada.

Rota tu secreto

Si sospechas que tu secreto whsec_… se filtró, o simplemente lo cambias cada cierto tiempo, rótalo:

curl -X POST https://api.fiscalbase.io/v1/webhook-endpoints/8d1f…/rotate-secret \
  -H "Authorization: Bearer $FISCALBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "expires_in_hours": 24 }'

La respuesta trae el secreto nuevo en secret, solo esta vez, y previous_secret_expires_at, hasta cuándo sigue valiendo el anterior. Durante ese traslape cada entrega lleva dos firmas en webhook-signature, una por secreto, y cualquier librería de Standard Webhooks acepta la entrega si una coincide. Así cambias el secreto en tu servidor cuando quieras dentro del traslape, sin perder ninguna entrega.

expires_in_hoursCuándo usarlo
24 (por defecto), hasta 72Una rotación planificada: tienes ese tiempo para desplegar el secreto nuevo
0El secreto se filtró: el anterior deja de firmar enseguida

En esta página