Skip to content
WhatIsUp.dev

Entregas de webhook

Uma entrega é uma linha na tabela webhook_deliveries — um evento, um endpoint, um log de tentativa. Espelha o que o worker está fazendo em seu nome; a única escrita é retentar uma entrega que falhou.

Listar entregas

GET/v1/webhook-deliveriesBearer · API key

Filtre via query params:

ParamEfeito
statuspending | success | failed | retrying
eventfiltra por nome do evento (ex.: message.received)
channel_idfiltra para um único canal

Retorna até 100 linhas por página, as mais recentes primeiro.

curl -s "$WHATISUP_API/v1/webhook-deliveries?status=failed" \
  -H "Authorization: Bearer $WHATISUP_API_KEY"
Schema · Delivery row
FieldTypeRequiredNotes
idstring · uuidrequired
endpoint_idstring · uuidrequired
customer_idstring · uuidrequired
channel_idstring · uuidrequired · nullable
event`message.received` \| `message.sent` \| `message.reaction` \| `message.status` \| `message.edited` \| `message.deleted` \| `channel.connected` \| `channel.disconnected` \| `channel.status` \| `channel.limits` \| `channel.health` \| `qr.updated` \| `group.created` \| `group.updated` \| `group.participant_added` \| `group.participant_removed` \| `group.admin_promoted` \| `group.admin_demoted` \| `chat.updated` \| `chat.archived` \| `chat.pinned` \| `presence.updated` \| `order.placed` \| `order.cancelled` \| `cart.updated` \| `story.viewed` \| `call.offered` \| `call.terminated` \| `contact.resolved`required
event_idstringrequired
payloadunknownrequired
status`pending` \| `success` \| `failed` \| `retrying`required
attempt_countnumberrequired
last_errorstringrequired · nullable
last_response_statusnumberrequired · nullable
next_attempt_atstring · ISO 8601required · nullable
delivered_atstring · ISO 8601required · nullable
created_atstring · ISO 8601required
updated_atstring · ISO 8601required

Obter uma entrega

GET/v1/webhook-deliveries/:idBearer · API key

Retorna a entrega única, incluindo seu payload se a retenção ainda não tiver entrado em ação.

{
  "id": "dlv_01J...",
  "endpoint_id": "wh_01J...",
  "event": "message.received",
  "event_id": "9bc38acc-2edc-482e-93d4-0482b432ffa6",
  "status": "success",
  "attempt_count": 1,
  "last_response_status": 200,
  "last_error": null,
  "payload": {
    "event": "message.received",
    "event_id": "9bc38acc-2edc-482e-93d4-0482b432ffa6",
    "channel_id": "8d653c66-e4ff-43ee-97da-3de5ad5680d4",
    "from": "5511999999999",
    "body": { "type": "text", "text": "hello back" }
  },
  "created_at": "2026-05-01T12:34:56.000Z",
  "delivered_at": "2026-05-01T12:34:57.012Z"
}

O campo payload fica null para entregas com mais de 7 dias (success) ou 30 dias (failed). Os metadados ficam para sempre — você sempre consegue ver que uma entrega aconteceu, só nem sempre dá pra replay do corpo dela. Se precisar de retenção de payload mais longa, faça o log do seu lado.

Retentar uma entrega que falhou

POST/v1/webhook-deliveries/:id/retryBearer · API key

Depois de corrigir seu receptor, mande de novo uma entrega failed. Ela volta pra pending com um orçamento novo de tentativas — o cronograma automático completo, umas 8 horas — e vai pra URL atual do endpoint, assinada com o segredo atual. O corpo é o evento original com o mesmo event_id, então se o seu receptor deduplica por event_id e já guardou esse evento, ele vai tratar como duplicado (o que está certo).

Retorna 202 com a entrega. Retorna 409 webhook_delivery_not_retryable quando a entrega não está failed, já foi retentada, ou o payload já expirou pela política de retenção acima. Uma chave restrita a um canal só retenta entregas do próprio canal.

curl -sX POST "$WHATISUP_API/v1/webhook-deliveries/:id/retry" \
  -H "Authorization: Bearer $WHATISUP_API_KEY"

O que não existe

  • Retentativa em lote. Retente as entregas uma a uma; liste antes com ?status=failed.
  • Endpoint de streaming. Use /v1/events para estado ao vivo; este recurso é para inspeção.