Verificação de endpoint
A verificação comprova que a URL por trás de um endpoint é sua e está pronta para receber webhooks. Enviamos a ela um único desafio assinado; ela passa ao devolver o desafio. Até passar, um workspace que exige verificação não entrega nada a ela — isso detecta uma URL digitada errado ou um receptor pela metade antes que eventos reais se acumulem na dead-letter queue, e impede que alguém aponte as nossas entregas para um servidor que nunca as pediu.
O desafio
Iniciar uma verificação envia um POST para a URL do endpoint, assinado com o segredo do endpoint exatamente como uma entrega (os mesmos X-Webhook-Signature e X-Webhook-Timestamp, os headers personalizados do seu endpoint e X-Webhook-Event-Type: webhook.verify):
{"type": "webhook.verify", "data": {"endpoint_id": "ep_3f9a…", "challenge": "Xb9kQ2…"}}O endpoint passa quando responde 2xx com o valor de challenge em qualquer lugar do corpo da resposta. Um 2xx sem o token falha com challenge_not_echoed; qualquer outra coisa falha como uma entrega falharia.
Responder ao desafio
Verifique a assinatura como você faz em toda entrega e depois retorne o desafio:
event = json.loads(raw_body) # after the signature check
if event["type"] == "webhook.verify":
return Response(event["data"]["challenge"], status=200)No REST example here; showing Python.
Executar a verificação
No console, abra o menu do endpoint na página Endpoints e escolha Verify. Pela API:
curl -sX POST https://webhooks.nimbusnexus.net/v1/endpoints/ep_3f9a…/verify \
-H "Authorization: Bearer $ADMIN_KEY"{ "verified": true, "challenge_echoed": true, "status_code": 200, "error": null, "duration_ms": 142, "failure_reason": null }Um endpoint continua verificado até a URL dele mudar; uma URL nova precisa ser verificada de novo.
Quando ela é obrigatória
A verificação é obrigatória para um endpoint quando qualquer um destes estiver ligado:
- o interruptor do workspace — Settings → Endpoint verification no console, ou
PATCH /v1/workspacecom{"require_endpoint_verification": true}; - o interruptor do projeto —
PUT /v1/verification-policy?project_id=…com{"required": true}, para um projeto que precisa dela quando os outros não precisam; - o seu plano, quando o plano a exige. Nesse caso, o console mostra o interruptor travado em ligado.
GET /v1/verification-policy retorna a regra tal como a entrega a aplica (required), junto com os dois interruptores.
O que um endpoint não verificado perde
Quando a verificação é obrigatória, um endpoint não verificado fica de fora quando um evento é distribuído: a resposta da publicação o conta em skipped_unverified, o console marca o endpoint como gated e nenhuma entrega é criada para ele — então nada fica esperando para ser enviado quando ele for verificado. Publique de novo ou reenvie depois que ele passar.
O reenvio é barrado da mesma forma. Reenviar uma entrega para esse endpoint, ou reenviar um evento para ele, é recusado com 409 endpoint_not_verified; um reenvio em lote ou um reenvio por intervalo de tempo o deixa de fora e o conta em skipped_unverified. Uma entrega que já estava na fila ou em retentativa quando o endpoint passa a precisar de verificação — a exigência foi ligada, ou a URL do endpoint mudou — vai para a dead-letter queue sem ser enviada, com last_error começando com "not verified:". Verifique o endpoint e depois reenvie a entrega.
Receptores que não conseguem responder
Alguns receptores aceitam qualquer POST, mas nunca devolvem um corpo escolhido por você — entre eles, os incoming webhooks do Slack e os catch hooks do Zapier. Eles não conseguem passar pela verificação. Quando o seu plano permitir, deixe a verificação desligada no projeto que entrega para eles; caso contrário, coloque na frente deles um pequeno relay seu que responda ao desafio.
Próximos passos
- Verificação de assinatura — a verificação a fazer antes de responder ao desafio.
- Entregas e retentativas — o que acontece depois que o endpoint passa a receber eventos.
- Início rápido — do zero a uma entrega verificada.