Listar eventos
Liste o histórico de eventos de webhook da sua conta — as notificações que a Selectwin gerou (ex.: transaction.approved) junto com o registro de cada tentativa de entrega aos seus endpoints. Use esta
Liste o histórico de eventos de webhook da sua conta — as notificações que a Selectwin gerou (ex.: transaction.approved) junto com o registro de cada tentativa de entrega aos seus endpoints. Use esta listagem para auditar o que aconteceu, diagnosticar entregas que falharam e localizar o evento que você quer reenviar.
GET /v1/webhooks/events
Como funciona
Um evento de webhook é o registro de algo que aconteceu na sua conta (uma transação foi aprovada, um saque mudou de estado, etc.). Cada evento tem um type (ex.: transaction.approved), aponta para o recurso de origem (resource + requestPayload) e guarda o histórico de despachos (dispatches[]) — uma tentativa de entrega por endpoint configurado.
Entender a diferença entre os dois objetos é a chave para usar esta página:
- Evento (
wbh_…): a notificação em si. Existe uma vez, independentemente de quantos endpoints você tem. Tem umstatusagregado de entrega. - Despacho (
wdi_…): a tentativa de entregar aquele evento a um endpoint. Guarda o código HTTP que seu servidor respondeu (responseStatusCode), o tempo de resposta, o corpo retornado e quantas tentativas foram feitas. Se você tem três endpoints inscritos no mesmo tipo, um evento gera três despachos.
Esta é uma operação de leitura paginada. Ela não cria nem altera nada — é segura para repetir. A resposta segue o padrão de paginação por offset/limit da API e inclui _links (HATEOAS) e o bloco merchant. Para reenviar um evento que falhou, veja Reenviar evento.
Nota
Esta listagem é uma ferramenta de auditoria e diagnóstico, não um substituto para receber webhooks. Não fique consultando este endpoint em laço para descobrir mudanças de estado — receba os webhooks no seu servidor. Veja Proibição de polling.
Quando usar
- Você recebeu um webhook estranho (ou nenhum) e quer ver o que a Selectwin realmente tentou entregar.
- Seu endpoint ficou fora do ar e você precisa achar os eventos com
status=failedpara reenviar. - Suporte/conciliação: confirmar que um evento específico (
transaction.approvedde uma transação) foi gerado e entregue. - Inspecionar a resposta HTTP do seu próprio servidor (
responseStatusCode,responseBody,responseTime) para depurar timeouts ou erros 5xx do seu lado.
Quando não usar: para reagir a mudanças de estado em tempo real (use o webhook em si) ou para buscar o objeto de negócio completo (consulte o recurso de origem, ex.: GET /v1/transactions/{id}).
Requisição
Headers
| Cabeçalho | Obrigatório | Valor |
|---|---|---|
SelectKey | sim | Sua chave de API. Produção: sl_live_…; sandbox: sl_test_…. Veja Autenticação. |
Por ser uma leitura sem corpo, não envie Content-Type nem X-Idempotency-Key. Nunca use Authorization: Bearer/Basic — a Selectwin autentica apenas pelo header SelectKey.
Parâmetros de query
Todos são opcionais. Combine-os livremente; os filtros são aplicados em conjunto (E lógico).
| Parâmetro | Tipo | Valores / faixa | Descrição |
|---|---|---|---|
limit | integer | 1–100 (padrão: 20) | Quantidade máxima de eventos por página. |
offset | integer | ≥ 0 (padrão: 0) | Quantos eventos pular — base da paginação. Veja Paginação. |
sort | string | ascending | descending | Ordem por data (mais recentes primeiro com descending). |
status | string | delivered | failed | Filtra pelo status de entrega do evento. |
type | string | ex.: transaction.approved | Filtra por tipo de evento. Veja Catálogo de eventos. |
eventid | string | ^[a-z]+_[A-Za-z0-9]+$ (ex.: wbh_01hqzvabc) | Filtra por um ID de evento específico. |
resource | string | ex.: transaction | Filtra pelo tipo de recurso de origem. |
resourceid | string | ^[a-z]+_[A-Za-z0-9]+$ (ex.: tra_987654321) | Filtra pelos eventos de um recurso (ex.: todos os eventos de uma transação). |
endpoint | string | substring da URL | Filtra por eventos cujos despachos foram para um endpoint que contém este texto. |
daterange | string (ISO 8601) | ex.: 2026-01-01T00:00:00Z | Filtra para um único dia: a API expande o valor para o início e o fim daquele dia. |
daterangegt | string (ISO 8601) | — | Limite inferior exclusivo: somente registros estritamente depois desta data. |
daterangegte | string (ISO 8601) | — | Limite inferior inclusivo: registros nesta data ou depois. |
daterangelt | string (ISO 8601) | — | Limite superior exclusivo: somente registros estritamente antes desta data. |
daterangelte | string (ISO 8601) | — | Limite superior inclusivo: registros nesta data ou antes. |
Dica
Para uma janela de tempo (e não um único dia), combine daterangegte e daterangelte. Ex.: ?daterangegte=2026-04-01T00:00:00Z&daterangelte=2026-04-30T23:59:59Z.
Atenção aos nomes: os parâmetros são
eventideresourceid(tudo minúsculo), e o status válido édelivered/failed— nãosucceeded. Datas seguem ISO 8601 em UTC; veja Convenções.
Exemplos curl
Listar os eventos mais recentes:
curl https://api.selectwin.io/v1/webhooks/events?limit=20&sort=descending \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Encontrar tudo que falhou para reenviar:
curl "https://api.selectwin.io/v1/webhooks/events?status=failed&sort=descending" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Todos os eventos de uma transação específica, em abril de 2026:
curl "https://api.selectwin.io/v1/webhooks/events?resourceid=tra_987654321&daterangegte=2026-04-01T00:00:00Z&daterangelte=2026-04-30T23:59:59Z" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta
200 OK com um objeto paginado. O array data traz os eventos; cada evento embute seus dispatches[]. O bloco merchant e _links ficam na raiz.
{
"offset": 0,
"limit": 20,
"total": 100,
"hasMore": true,
"page": {
"current": 1,
"total": 5,
"offset": { "first": 0, "prev": 0, "next": 20, "last": 80 }
},
"data": [
{
"id": "wbh_01hqzvabc",
"resource": "transaction",
"type": "transaction.approved",
"attempts": 1,
"lastAttempt": "2026-04-12T17:56:33.000Z",
"description": "Transaction approved event",
"requestPayload": {
"id": "tra_987654321",
"amount": 1500,
"status": "approved"
},
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:32.000Z",
"source": "api",
"dispatches": [
{
"id": "wdi_01hqzvabc",
"status": "success",
"endpoint": "https://webhooks.mydomain.com/selectwin",
"attempts": 1,
"lastAttemptAt": "2026-04-12T17:56:33.100Z",
"successAt": "2026-04-12T17:56:33.150Z",
"responseStatusCode": 200,
"responseTime": 120,
"responseBody": "OK",
"correlationId": "corr_abc123",
"updatedAt": "2026-04-12T17:56:33.150Z",
"createdAt": "2026-04-12T17:56:33.000Z"
}
]
}
],
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": {
"href": "https://api.selectwin.io/v1/webhooks/events",
"method": "GET"
}
}
}Envelope de paginação
| Campo | Tipo | Descrição |
|---|---|---|
offset | integer | Deslocamento aplicado nesta página. |
limit | integer | Tamanho de página efetivo. |
total | integer | Total de eventos que casam com os filtros. |
hasMore | boolean | true se há mais páginas além desta. |
page | object | Navegação: current, total e offset (first/prev/next/last) para montar links. |
data | array | Os eventos desta página (veja abaixo). |
merchant | object | Dados da conta: name, merchantId, isSubAccount. |
_links | object | HATEOAS — self aponta para esta própria listagem. |
Campos do evento (data[])
| Campo | Tipo | Descrição |
|---|---|---|
id | string (wbh_…) | Identificador do evento. Use-o no reenvio. |
resource | string | Tipo do recurso de origem (ex.: transaction). |
type | string | Tipo do evento (ex.: transaction.approved). Veja o Catálogo de eventos. |
attempts | integer | Total de tentativas de entrega somadas para este evento. |
lastAttempt | string (date-time) | Quando ocorreu a última tentativa. |
description | string | Descrição legível do evento. |
requestPayload | object | Resumo do recurso no momento do evento: id, amount (centavos), status. |
source | string | Origem do evento (ex.: api). |
createdAt / updatedAt | string (date-time) | Criação e última atualização do evento (ISO 8601 UTC). |
dispatches | array | Tentativas de entrega, uma por endpoint (veja abaixo). |
Campos do despacho (data[].dispatches[])
| Campo | Tipo | Descrição |
|---|---|---|
id | string (wdi_…) | Identificador do despacho. |
status | string | Resultado desta entrega (ex.: success). |
endpoint | string | URL para a qual o evento foi enviado. |
attempts | integer | Tentativas feitas para este endpoint. |
lastAttemptAt | string (date-time) | Horário da última tentativa. |
successAt | string (date-time) | Horário em que a entrega teve sucesso (se houve). |
responseStatusCode | integer | Código HTTP que seu servidor respondeu. |
responseTime | integer | Tempo de resposta do seu servidor, em milissegundos. |
responseBody | string | Corpo retornado pelo seu servidor (truncado). |
correlationId | string | ID de correlação para rastrear o despacho no suporte. |
createdAt / updatedAt | string (date-time) | Criação e última atualização do despacho. |
Importante
Itens de lista são projeções: para inspecionar o recurso de origem por completo (a transação inteira, por exemplo), use o requestPayload.id e consulte o recurso individual — ex.: GET /v1/transactions/tra_987654321. Trate todos os IDs como opacos; veja Convenções.
Erros
A resposta de erro segue o envelope padrão; trate sempre pelo error.code, nunca pela message. Veja Tratamento de erros e o Catálogo de códigos de erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de query malformado (ex.: limit fora de 1–100, status fora do enum, data não-ISO). |
invalidWebhookEventId / webhookEventIdInvalid | 400 | eventid informado não tem formato válido (prefixo_valor). |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Chave autenticada, mas sem permissão para ler eventos de webhook. |
unprocessableEntity | 422 | Combinação de filtros não processável. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes e use backoff. Veja API Limits. |
serverError | 500 | Erro interno — repita com backoff; se persistir, contate o suporte. |
Boas práticas
- Não use isto como polling. Receba os webhooks no seu servidor; recorra a esta listagem só para auditoria, diagnóstico e reenvio.
- Pagine pelos campos certos. Avance com
offset += limitenquantohasMorefortrue, ou usepage.offset.next. Mantenhalimitem até100. - Filtre antes de paginar. Combine
status=failedcomresourceidou umdaterange*para reduzir o conjunto em vez de varrer todas as páginas. - Diagnostique pelo despacho, não pelo evento. O motivo de uma entrega falhar está em
dispatches[]— olheresponseStatusCode,responseTimeeresponseBodypara distinguir um 5xx do seu lado de um timeout. - Use a janela de datas certa.
daterangecobre um único dia; para intervalos, combinedaterangegte+daterangelte(lembre quegt/ltsão exclusivos egte/lteinclusivos). - Trate IDs como opacos. Guarde
id(wbh_…) erequestPayload.idcomo strings inteiras; não faça parsing nem confie no comprimento. - Da listagem ao reenvio. Achou um evento com
status=failed? Pegue oide dispare o reenvio.
Veja também
- Visão geral de Webhook Events — o recurso, o modelo do objeto e o ciclo de vida.
- Reenviar evento — reentrega manual de um evento por
id. - Catálogo de eventos — todos os
typedisponíveis. - Verificando assinaturas de webhook — valide a autenticidade no seu servidor.
- Paginação e Convenções — padrões transversais.
How is this guide?