Atualizar um endpoint
Altere a configuração de um endpoint de webhook existente — sua URL de destino, os tipos de evento inscritos, o cabeçalho de autenticação ou os metadados. Use quando precisar redirecionar entregas apó
Altere a configuração de um endpoint de webhook existente — sua URL de destino, os tipos de evento inscritos, o cabeçalho de autenticação ou os metadados. Use quando precisar redirecionar entregas após uma migração de servidor, ajustar quais eventos você recebe ou rotacionar credenciais, sem ter que apagar e recriar o endpoint (o que mudaria o id e o secret).
PUT /v1/webhooks/endpoints/{endpointId}
Um webhook é uma notificação HTTP que a Selectwin envia para a sua URL quando algo acontece na sua conta (uma transação aprovada, um reembolso, etc.). O endpoint é o registro que guarda essa URL, a lista de eventos que você quer receber e como autenticar as entregas. Esta operação edita esse registro.
Como funciona
A atualização é síncrona: o servidor valida o corpo, grava as mudanças e responde na hora com o endpoint já atualizado (HTTP 200). A partir do próximo evento, as entregas passam a respeitar a nova configuração.
Pontos importantes do comportamento:
- O
ide osecretnão mudam. Atualizar o endpoint preserva o identificador (wbe_...) e o segredo de assinatura criado no Create. Sua verificação de assinatura HMAC continua funcionando sem ajustes. Para trocar o segredo, recrie o endpoint. - Substituição, não mesclagem, em campos enviados. Cada campo presente no corpo substitui o valor anterior. Em particular,
eventsé a lista completa de eventos — enviar["transaction.approved"]deixa o endpoint inscrito somente nesse evento; os demais são removidos. Para acrescentar um evento, envie a lista antiga mais o novo. - Atualização parcial. Campos omitidos do corpo mantêm o valor atual. Você pode, por exemplo, enviar só
endpointpara trocar a URL sem mexer nos eventos. - Entregas em andamento não são interrompidas. Eventos já enfileirados para a configuração anterior podem ainda ser entregues; a mudança vale para os eventos seguintes.
- A resposta não repete o
secretnem expõemerchant/_links— é o objeto do endpoint puro, comauthorization.valuemascarado.
Quando usar
- Trocar a URL de destino após mudar de servidor, domínio ou ambiente.
- Ajustar a lista de
eventspara receber mais ou menos tipos de notificação. - Atualizar o cabeçalho de
authorization(rotação de token). - Corrigir o
nameou ajustarmetadata.
Quando NÃO usar:
- Para trocar o segredo de assinatura: não há campo para isso — apague com Delete e recrie com Create.
- Para só consultar a configuração atual: use o read (
GET .../{endpointId}). - Para ativar/desativar entregas sem perder o registro: a flag
enabledaparece na resposta, mas não há campo de corpo documentado para alterá-la aqui; gerencie a inscrição pela lista deevents.
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. |
Content-Type | Sim | application/json |
X-Idempotency-Key | Recomendado | Chave única da operação. Repetir a mesma chave evita aplicar a mesma atualização duas vezes em caso de retry. Veja Idempotência. |
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
endpointId | string | Sim | ID do endpoint a atualizar, no formato wbe_... (ex.: wbe_01hqzvabc). Trate como opaco — veja Convenções. |
Corpo
Todos os campos são opcionais nesta operação: envie apenas o que deseja alterar. Os campos omitidos mantêm o valor atual.
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome de exibição do endpoint (apenas para sua organização). |
endpoint | string (URI) | Nova URL que receberá os payloads. Use HTTPS e garanta que esteja acessível publicamente. |
events | array de strings | Lista completa dos tipos de evento inscritos. Substitui a lista anterior. Veja os tipos disponíveis em Webhook Events. |
forceActivities | boolean | Quando true, envia todos os eventos da conta, independentemente da inscrição em events. Use com cautela: aumenta muito o volume de entregas. |
authorization | objeto | Cabeçalho de autenticação que a Selectwin enviará nas entregas. Veja a tabela abaixo. |
metadata | objeto | Pares chave-valor livres para correlacionar o endpoint com o seu sistema. |
Objeto authorization
| Campo | Tipo | Descrição |
|---|---|---|
authorization.type | string | Tipo do cabeçalho de autorização (ex.: bearer). |
authorization.value | string | Valor do cabeçalho (ex.: o token). Na resposta volta mascarado (sl_wh_***). |
Atenção
events é substituído por completo. Se você enviar events com a intenção de adicionar um tipo, inclua também os tipos que já estavam inscritos — caso contrário eles serão removidos e você deixará de recebê-los.
Exemplo — trocar a URL e a lista de eventos
curl -X PUT "https://api.selectwin.io/v1/webhooks/endpoints/wbe_01hqzvabc" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: 7c2f9d4a-1e88-4a1b-9c6e-3f0a2b5d7e10" \
-d '{
"name": "Webhook MyDomain",
"endpoint": "https://webhooks.mydomain.com/selectwin",
"events": [
"transaction.approved",
"transaction.pending"
],
"forceActivities": false,
"authorization": {
"type": "bearer",
"value": "novo-token-secreto"
},
"metadata": {
"team": "ops"
}
}'Exemplo — atualização parcial (só a URL)
{
"endpoint": "https://webhooks.mydomain.com/selectwin"
}Resposta
200 OK com o objeto do endpoint já atualizado. Diferente do Create, a resposta do update não inclui o secret, e authorization.value vem mascarado.
{
"id": "wbe_01hqzvabc",
"name": "Webhook MyDomain",
"endpoint": "https://webhooks.mydomain.com/selectwin",
"enabled": true,
"authorization": {
"type": "bearer",
"value": "sl_wh_***"
},
"events": [
"transaction.approved",
"transaction.pending"
],
"shotsQty": 3068,
"lastDeliveryAt": "2026-04-12T17:56:33.000Z",
"metadata": {
"team": "ops"
},
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2025-01-26T20:18:05.000Z"
}Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID do endpoint (wbe_...). Inalterado pela atualização. |
name | string | Nome de exibição (já refletindo a mudança). |
endpoint | string | URL de destino atual. |
enabled | boolean | Indica se o endpoint está ativo para receber entregas. |
authorization | objeto | { type, value }, com value mascarado. |
events | array | Lista atual de eventos inscritos. |
shotsQty | integer | Total de tentativas de entrega já feitas a este endpoint. |
lastDeliveryAt | string | null | Data-hora da última entrega (ISO 8601 UTC); null se nunca houve. |
metadata | objeto | Metadados atuais. |
updatedAt | string | Data-hora da última atualização (ISO 8601 UTC). |
createdAt | string | Data-hora de criação do endpoint (ISO 8601 UTC). |
Erros
A resposta de erro segue o envelope padrão com error.code estável — trate sempre pelo code, nunca pela message. Veja Tratamento de Erros.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidWebhookEndpointId | 400 | O endpointId informado é malformado. |
webhookEndpointUrlExists | 400 | A URL enviada em endpoint já está registrada em outro endpoint. |
eventTypeInvalid / webhookEventInvalid | 400 | Algum tipo de evento em events é inválido. |
webhookEventsValidationFailed | 400 | A lista de events falhou na validação. |
invalidParameters | 400 | Falha de validação genérica; veja error.params para os campos. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para o recurso. |
notFound | 404 | Nenhum endpoint com esse endpointId. |
unprocessableEntity | 422 | Corpo bem formado, mas viola uma regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido; respeite error.retryAfterMinutes. |
serverError | 500 | Erro interno; repita com backoff. |
Consulte o Catálogo de Códigos de Erro para a lista completa.
Boas práticas
- Teste a nova URL antes de salvar. Confirme que ela responde
2xxrapidamente a umPOSTHTTPS, antes de apontar o endpoint para ela. - Ao editar
events, leia a lista atual primeiro (via read) e envie a lista completa desejada — lembre queeventssubstitui, não mescla. - Use
X-Idempotency-Keypara que um retry de rede não reaplique a mesma atualização. - Não conte com o update para trocar o segredo. Se precisar de um segredo novo (suspeita de vazamento), recrie o endpoint via Delete + Create e atualize sua verificação de assinatura.
- Faça uma mudança por vez em produção e confira depois se as entregas continuam saudáveis: os contadores acumulados
shotsQty/failedShotsQtyvêm no Listar (data[]) e no read (GET .../{endpointId}); para inspecionar quais disparos individuais falharam, use o Analyze. - Cuidado com
forceActivities: true— ele ignora a lista deeventse envia tudo, podendo gerar um volume muito maior de entregas do que o esperado. - Mantenha
metadatapara auditoria, registrando, por exemplo, quem alterou e quando, do lado do seu sistema.
Veja também
How is this guide?