Visão geral
Um dispatch (entrega) é o registro de uma tentativa de entregar um evento de webhook a um endpoint específico da sua conta. Cada dispatch guarda o resultado da tentativa — status, número de tentativas
Um dispatch (entrega) é o registro de uma tentativa de entregar um evento de webhook a um endpoint específico da sua conta. Cada dispatch guarda o resultado da tentativa — status, número de tentativas, código HTTP que o seu servidor devolveu e o corpo da resposta — para que você possa auditar entregas, diagnosticar falhas e reenviar uma entrega que não foi confirmada.
O que é um dispatch e por que ele existe
Quando algo acontece na sua conta (uma transação é aprovada, um reembolso é concluído, etc.), a Selectwin cria um evento de webhook — um registro imutável do fato. Esse evento precisa ser entregue aos seus servidores. Cada endpoint de webhook que você cadastrou e que assina aquele tipo de evento recebe a sua própria tentativa de entrega. Essa tentativa é o dispatch.
Em outras palavras:
- O evento responde "o que aconteceu" (e é o mesmo para todos os endpoints).
- O dispatch responde "como correu a entrega a este endpoint" (e é único por endpoint).
Os dispatches são o que você usa para responder perguntas operacionais do dia a dia: "Meu servidor recebeu o evento da transação X? Em quantas tentativas? Ele devolveu 200 ou 500? Posso reenviar?"
Modelo do objeto
Abaixo, um item de dispatch como aparece na listagem, anotado:
{
"id": "wdi_01hqzvabc", // ID opaco do dispatch (prefixo wdi_)
"endpoint": "https://webhooks.mydomain.com/selectwin", // URL de destino desta entrega
"status": "success", // resultado: pending | retrying | success | failed
"event": "transaction.approved", // tipo do evento entregue
"attempts": 1, // quantas tentativas de entrega já houve
"lastAttemptAt": "2026-04-12T17:56:33.000Z", // quando a última tentativa ocorreu (ISO 8601 UTC)
"responseStatusCode": 200, // status HTTP que o SEU servidor devolveu
"responseBody": "OK", // corpo (truncado) da resposta do seu servidor
"successAt": "2026-04-12T17:56:33.050Z", // quando a entrega foi confirmada (null se ainda não)
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:33.000Z"
}Campos
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador opaco do dispatch, com prefixo wdi_. Use-o para reenviar. |
endpoint | string | URL do endpoint de destino para o qual esta entrega foi feita. |
status | string | Resultado da entrega: pending, retrying, success ou failed (veja o ciclo de vida). |
event | string | Tipo do evento entregue (ex.: transaction.approved). Veja o catálogo de eventos. |
attempts | integer | Número de tentativas de entrega já realizadas para este dispatch. |
lastAttemptAt | string (date-time) | Quando a última tentativa foi feita. ISO 8601 UTC. |
responseStatusCode | integer | Código HTTP que o seu servidor retornou na última tentativa (ex.: 200, 500). |
responseBody | string | Corpo da resposta do seu servidor (pode vir truncado), útil para diagnóstico. |
successAt | string (date-time) | Momento em que a entrega foi confirmada com sucesso. null enquanto não houver sucesso. |
updatedAt | string (date-time) | Última atualização do registro de dispatch. |
createdAt | string (date-time) | Quando o dispatch foi criado (primeira tentativa enfileirada). |
Nota
Em listagens, os itens são projeções leves: a Selectwin expõe os campos acima. O responseStatusCode e o responseBody refletem a resposta do seu servidor — são a sua principal pista para entender por que uma entrega falhou. Datas são sempre ISO 8601 em UTC; valores e formatos seguem as Convenções da API.
Ciclo de vida (status)
Cada dispatch evolui por um destes estados. A Selectwin tenta entregar a entrega e aplica uma política de retentativas automáticas com backoff (espera crescente entre tentativas) quando o seu servidor não confirma o recebimento.
| Status | Significado |
|---|---|
pending | Entrega ainda não tentada ou enfileirada, aguardando o primeiro envio. |
retrying | Uma tentativa falhou e o dispatch está na política de retentativa automática. |
success | O seu endpoint respondeu com sucesso (2xx); a entrega foi confirmada. successAt é preenchido. |
failed | A entrega falhou e as tentativas automáticas se esgotaram. Candidato a reenvio manual. |
Dica
Considere "entrega confirmada" apenas quando o seu servidor responder 2xx rapidamente. Responda 200 assim que receber e validar a assinatura, e processe o trabalho pesado de forma assíncrona — assim você evita timeouts que disparam retentativas desnecessárias.
Como o servidor decide o resultado
- O dispatch entra em
successquando o seu endpoint responde com um status 2xx dentro do tempo limite. - Respostas 5xx, timeouts ou erros de rede colocam o dispatch em
retrying; oattemptsaumenta e o backoff espaça as próximas tentativas. - Quando as tentativas automáticas se esgotam, o status vai para
failed. - A qualquer momento você pode forçar uma nova tentativa de uma entrega específica com o reenvio — útil depois que você corrigir uma indisponibilidade do seu lado.
Relação entre eventos e dispatches
Um único evento elegível para vários endpoints gera vários dispatches — um por endpoint:
webhookEvents (1) ──< (N) webhookDispatches
evento "transaction.approved" (id wbh_…)
├── dispatch → endpoint A (id wdi_…, status: success, HTTP 200)
└── dispatch → endpoint B (id wdi_…, status: failed, HTTP 500)- A listagem de eventos já traz os dispatches aninhados em cada evento (
dispatches[]), conveniente para uma visão "por evento". - Os endpoints deste recurso expõem os dispatches como recurso de primeira classe — com filtros próprios (por status, endpoint, código HTTP, período) e reenvio individual — para uma visão "por entrega".
Operações
| Método | Caminho | Descrição | Guia |
|---|---|---|---|
GET | /v1/webhooks/dispatches | Lista paginada de tentativas de entrega, com filtros por status, endpoint, código HTTP, falhas e período. | Listar |
GET | /v1/webhooks/dispatches/analytics | Linhas de tentativas em um período (initdate/enddate) para montar métricas e gráficos de sucesso/falha. | Analytics |
POST | /v1/webhooks/dispatches/{dispatchId} | Reenvia (redispatch) uma entrega específica ao seu endpoint. | Reenviar |
Todas as chamadas usam a base https://api.selectwin.io/v1 e autenticam pelo header SelectKey (nunca Authorization: Bearer/Basic):
curl https://api.selectwin.io/v1/webhooks/dispatches \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Em ambiente de sandbox, a chave começa com
sl_test_. Veja Autenticação.
Identificadores
Os dispatches usam o prefixo de ID wdi_ (ex.: wdi_01hqzvabc). Trate o ID como string opaca — armazene a string inteira e não faça parsing dela. Os IDs relacionados que aparecem nas respostas seguem o mesmo padrão:
| Recurso | Prefixo |
|---|---|
| Webhook dispatch | wdi_ |
| Webhook event | wbh_ |
| Webhook endpoint | wbe_ |
Erros
Os endpoints de dispatches retornam o envelope de erro padrão com um error.code estável (faça o tratamento pelo code, nunca pela message). Códigos relevantes:
error.code | HTTP | Quando ocorre |
|---|---|---|
webhookDispatchIdInvalid | 400 | O dispatchId informado no reenvio é inválido ou malformado. |
invalidParameters | 400 | Parâmetro de filtro inválido na listagem ou no analytics (veja error.params). |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para o recurso. |
notFound | 404 | Dispatch não encontrado. |
unprocessableEntity | 422 | A operação não pôde ser processada por regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes. |
serverError | 500 | Erro interno — repita com backoff. |
Veja o envelope completo e a estratégia de tratamento no Catálogo de Códigos de Erro.
Boas práticas
- Monitore por exceção. Em vez de varrer todas as entregas, use o filtro
onlyerrored=truena listagem para encontrar rapidamente o que falhou e precisa de atenção. - Diagnostique pelo par
responseStatusCode+responseBody. Eles mostram exatamente o que o seu servidor devolveu — é a forma mais direta de descobrir se a falha foi um500na sua aplicação, um timeout ou uma assinatura rejeitada. - Reenvie só depois de corrigir. Use o reenvio para entregas
failedapós restaurar o seu endpoint; reenviar com o servidor ainda quebrado apenas repete a falha. - Garanta idempotência no seu receptor. Como o mesmo evento pode ser tentado várias vezes (
attempts > 1) e reenviado manualmente, o seu servidor deve tratar entregas repetidas do mesmoevent/idsem efeito duplicado. - Acompanhe a saúde com Analytics. Use o Analytics num período fixo para calcular a taxa de sucesso por endpoint e detectar degradação antes que vire incidente.
- Não use polling para o estado do negócio. Os dispatches servem para auditar a entrega; as mudanças de estado da sua conta chegam pelos próprios webhooks — veja Proibição de Polling.
Veja também
- Listar entregas — paginação e todos os filtros disponíveis.
- Analytics de entregas — métricas de sucesso/falha por período.
- Reenviar entrega — forçar nova tentativa de um dispatch.
- Webhook Events — Visão geral — o evento que origina os dispatches.
- Webhook Endpoints — Visão geral — os destinos das entregas.
- Verificando assinaturas de webhook — valide cada entrega que o seu servidor recebe.
- Convenções da API e Códigos de Erro.
How is this guide?