Listar endpoints
Recupera, de forma paginada, todos os webhook endpoints (URLs cadastradas para receber notificações de eventos) da sua conta. Use esta operação para auditar suas integrações, descobrir o id de cada en
Recupera, de forma paginada, todos os webhook endpoints (URLs cadastradas para receber notificações de eventos) da sua conta. Use esta operação para auditar suas integrações, descobrir o id de cada endpoint antes de atualizar, ler ou apagar, e monitorar saúde de entrega pelos contadores de disparos.
GET /v1/webhooks/endpoints
Um webhook endpoint é uma URL HTTPS sua para a qual a Selectwin envia, em tempo real, um POST sempre que ocorre um evento que você assinou (por exemplo
transaction.approved). Listar endpoints é como abrir o "painel" de todas essas URLs de uma vez.
Como funciona
Esta é a operação de leitura em lote do recurso. O servidor devolve uma página de endpoints (não a lista inteira de uma vez) usando o padrão de paginação por offset/limit comum a toda a API. A resposta traz, no nível raiz, os metadados de paginação (offset, limit, total, hasMore, page), o array data com os endpoints, o objeto merchant e os _links HATEOAS para navegação.
Pontos importantes do mecanismo:
- Projeção leve. Cada item de
data[]é uma versão resumida do endpoint. Campos sensíveis e detalhados — comoauthorization(cabeçalho de autenticação) emetadata— não aparecem aqui. Para o objeto completo, consulte Read (GET /v1/webhooks/endpoints/{endpointId}). Osecret(segredo de assinatura) não vem em nenhuma listagem nem leitura: ele aparece apenas na resposta de Create. - Somente leitura. A operação não altera nada e não consome chave de idempotência; pode ser repetida à vontade (respeitando o limite de requisições).
- Contadores de entrega. Os campos
shotsQty(total de disparos) efailedShotsQty(disparos que falharam) ajudam a identificar endpoints com problemas sem precisar abrir cada um. Para o histórico detalhado de entregas, use Analyze. - Ordenação e filtros são aplicados no servidor via parâmetros de query (abaixo), antes da paginação.
Para entender o envelope de paginação em detalhe, veja Paginação.
Quando usar
- Para descobrir o
id(wbe_...) de um endpoint antes de chamar Read, Update, Delete ou Analyze. - Para auditar quais URLs estão cadastradas, quais eventos cada uma assina e se estão habilitadas (
enabled). - Para monitorar saúde comparando
shotsQtycomfailedShotsQtye olhando olastEventSentde cada endpoint.
Quando não usar:
- Para receber atualizações de estado em tempo real (transação aprovada, etc.). Isso é função do próprio webhook chegando à sua URL — não fique consultando esta lista em loop. Veja Proibição de Polling.
- Para obter
authorizationoumetadatade um endpoint específico: use Read, pois esses campos não vêm na listagem. (Osecretnão vem em nenhuma das duas — só na criação.)
Requisição
Headers
| Cabeçalho | Obrigatório | Valor |
|---|---|---|
SelectKey | Sim | Sua chave de API: sl_live_... (produção) ou sl_test_... (sandbox). Nunca use Authorization: Bearer/Basic. Veja Autenticação. |
Esta operação é uma leitura sem corpo, então não envie Content-Type nem X-Idempotency-Key.
Parâmetros de query
Todos são opcionais. Combine paginação, ordenação e filtros livremente.
| Parâmetro | Tipo | Descrição |
|---|---|---|
limit | integer | Máximo de itens por página. Intervalo 1–100. Exemplo: 20. |
offset | integer | Quantos itens pular (base 0) para paginar. Mínimo 0. Exemplo: 0. |
sort | string | Ordem dos resultados. Enum: ascending, descending. Padrão descending (mais recentes primeiro). |
dir | string | Dica de direção da ordenação (usado por alguns clientes). |
name | string | Filtra pelo nome de exibição do endpoint. Exemplo: Production. |
endpoint | string | Filtra por trecho (substring) da URL do endpoint. |
status | string | Filtra pelo status do endpoint. Exemplo: active. |
daterange | string (ISO 8601) | Filtra para um único dia de calendário; a API expande para o início e o fim daquele dia no campo de data relevante. Exemplo: 2026-01-01T00:00:00Z. |
daterangegt | string (ISO 8601) | Limite inferior exclusivo: apenas registros cuja data seja estritamente posterior a este valor. |
daterangegte | string (ISO 8601) | Limite inferior inclusivo: apenas registros cuja data seja igual ou posterior a este valor. |
daterangelt | string (ISO 8601) | Limite superior exclusivo: apenas registros cuja data seja estritamente anterior a este valor. |
daterangelte | string (ISO 8601) | Limite superior inclusivo: apenas registros cuja data seja igual ou anterior a este valor. |
As datas dos parâmetros
daterange*seguem o padrão da API: ISO 8601 em UTC (sufixoZ). Para paginar grandes intervalos, prefira combinardaterangegte+daterangeltcomlimit/offset.
Exemplo de requisição
curl -G https://api.selectwin.io/v1/webhooks/endpoints \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
--data-urlencode "limit=20" \
--data-urlencode "offset=0" \
--data-urlencode "sort=descending" \
--data-urlencode "status=active"Resposta
200 OK. O corpo é o objeto paginado diretamente (sem invólucro extra).
{
"offset": 0,
"limit": 20,
"total": 2,
"hasMore": false,
"page": {
"current": 1,
"total": 1,
"offset": { "first": 0, "prev": null, "next": null, "last": 0 }
},
"data": [
{
"id": "wbe_01hqzvabc",
"name": "Webhook MyDomain",
"endpoint": "https://webhooks.mydomain.com/selectwin",
"enabled": true,
"events": ["transaction.approved", "transaction.pending"],
"shotsQty": 3068,
"failedShotsQty": 12,
"lastEventSent": "2026-04-12T17:56:33.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2025-01-26T20:18:05.000Z"
}
],
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": {
"href": "https://api.selectwin.io/v1/webhooks/endpoints",
"method": "GET",
"description": "List all webhook endpoints."
}
}
}Campos da resposta
Metadados de paginação (nível raiz)
| Campo | Tipo | Descrição |
|---|---|---|
offset | integer | Posição inicial da página retornada. |
limit | integer | Máximo de registros retornados nesta página. |
total | integer | Total de endpoints que casam com os filtros. |
hasMore | boolean | true se há mais registros além desta página. |
page.current | integer | Número da página atual (começa em 1). |
page.total | integer | Total de páginas disponíveis. |
page.offset.first | integer | Offset da primeira página. |
page.offset.prev | integer | null | Offset da página anterior (null na primeira). |
page.offset.next | integer | null | Offset da próxima página (null na última). |
page.offset.last | integer | Offset da última página. |
data | array | Endpoints retornados (projeção leve). |
merchant | object | Conta associada (name, merchantId, isSubAccount). |
_links | object | Links HATEOAS para navegação (ex.: self). |
Item de data[] (projeção do endpoint)
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador opaco do endpoint (prefixo wbe_). Use-o nas demais operações. |
name | string | Nome de exibição do endpoint. |
endpoint | string | URL HTTPS que recebe os payloads. |
enabled | boolean | true se o endpoint está ativo recebendo eventos. |
events | array | Tipos de evento assinados (ex.: transaction.approved). |
shotsQty | integer | Total de disparos (tentativas de entrega) já feitos. |
failedShotsQty | integer | Quantidade desses disparos que falharam. |
lastEventSent | string (date-time) | Data/hora do último evento enviado (ISO 8601 UTC). |
updatedAt | string (date-time) | Última atualização do endpoint. |
createdAt | string (date-time) | Criação do endpoint. |
Erros
Trate sempre pelo error.code estável, nunca pela message. Veja o Catálogo de Códigos de Erro e a estrutura do envelope de erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de query inválido (ex.: limit fora de 1–100, offset negativo, sort fora do enum, daterange* malformado). Detalhes campo a campo em error.params. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Chave autenticada, mas sem permissão para listar webhooks. |
notFound | 404 | Rota inexistente (ex.: caminho digitado errado). |
unprocessableEntity | 422 | Combinação de filtros não processável pela regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes. Veja API Limits. |
serverError | 500 | Erro interno — repita com backoff; se persistir, contate o suporte. |
Exemplo de 400 por paginação inválida:
{
"error": {
"code": "invalidParameters",
"statusCode": 400,
"category": "validation",
"message": "Validation errors occurred.",
"params": [
{ "limit": "O valor de 'limit' deve ser um número inteiro entre 1 e 100" },
{ "offset": "O valor de 'offset' deve ser um número inteiro não negativo" }
]
}
}Boas práticas
- Pagine sempre. Não assuma que tudo cabe numa página: itere usando
page.offset.next(ouoffset += limit) enquantohasMorefortrue. - Filtre no servidor. Use
name,endpointestatuspara reduzir o tráfego em vez de baixar tudo e filtrar no cliente. - Monitore saúde com
failedShotsQty. Um endpoint comfailedShotsQtyalto em relação ashotsQtyprovavelmente está fora do ar ou rejeitando entregas — investigue com Analyze. - Acompanhe
lastEventSent. Um endpointenabled: truesem eventos recentes pode indicar que ele não assina nenhum evento que está de fato acontecendo, ou que algo no roteamento mudou. - Guarde o
id, trate-o como opaco. Use owbe_...para as operações seguintes; não tente interpretar seu conteúdo (veja Convenções). - Não use a lista como polling de estado. Para saber que uma transação foi aprovada, receba o webhook — não fique listando endpoints. Veja Proibição de Polling.
- Use
daterange*para auditorias por período (ex.: endpoints criados num intervalo), sempre em ISO 8601 UTC.
Veja também
- Visão Geral de Webhook Endpoints — modelo do objeto e ciclo de vida.
- Create — cadastrar um novo endpoint.
- Read — obter um endpoint completo (com
authorization/metadata). - Update — alterar URL, eventos ou cabeçalhos.
- Delete — remover um endpoint.
- Analyze — estatísticas de entrega de um endpoint.
- Paginação · Convenções · Autenticação · Catálogo de Códigos de Erro
How is this guide?