> ## Documentation Index
> Fetch the complete documentation index at: https://legitimuz.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 5. Webhook

> Cadastre o endpoint que recebe a decisão da verificação e confirme a primeira entrega.

Ao final deste passo o seu backend recebe os eventos da verificação sozinho, sem perguntar. Sem
webhook, o seu sistema só sabe do resultado se ficar consultando.

O catálogo de eventos, o formato do envelope e a conferência da assinatura estão em
[webhooks](/api/webhooks). Aqui está como cadastrar o endpoint e confirmar que ele responde.

## Cadastre o endpoint

<Steps>
  <Step title="Abra Webhooks">
    Em **Integrações**, abra a sua integração e vá em **Segurança** → **Webhooks**.
  </Step>

  <Step title="Preencha o formulário">
    Clique em **Novo Endpoint** e informe:

    * **URL do endpoint** — a rota do seu backend que recebe o `POST`, por exemplo
      `https://api.suaempresa.com.br/webhooks/legitimuz`.
    * **Eventos** — ao menos um. A lista é fechada: só entram eventos do catálogo, porque salvar
      um nome livre significaria esperar para sempre por um evento que nunca dispara.

    <Frame>
      <img src="https://mintcdn.com/legitimuz/7lQQUiJ9e5iQbgeZ/images/placeholder.svg?fit=max&auto=format&n=7lQQUiJ9e5iQbgeZ&q=85&s=bf49073b1ebddfe05f2241d098d54068" alt="Aba Webhooks da integração, com o formulário Novo Endpoint aberto, a URL preenchida e a lista de eventos" width="1600" height="900" data-path="images/placeholder.svg" />
    </Frame>
  </Step>

  <Step title="Crie">
    Clique em **Criar Endpoint**. O segredo de assinatura nasce junto com o endpoint.
  </Step>

  <Step title="Dispare um teste">
    Com o endpoint selecionado, clique em **Testar**. A Legitimuz envia um evento real para a sua
    URL e ele aparece em **Entregas**.
  </Step>
</Steps>

## Toda entrega é assinada

Não existe caminho para entrega sem assinatura: o segredo nasce com o endpoint e não há opção de
desligar. O seu handler precisa conferir a assinatura antes de confiar no corpo — o passo a passo
da conferência está em [webhooks](/api/webhooks).

<Warning>
  Confira a assinatura sobre o **corpo cru**, byte a byte, antes de qualquer `JSON.parse`.
  Reserializar o JSON muda bytes e quebra a conferência, mesmo com o segredo certo.
</Warning>

## Confira que funcionou

Em **Entregas**, a linha do evento de teste mostra:

| Coluna                | O que olhar                          |
| --------------------- | ------------------------------------ |
| **Status**            | o estado lógico da entrega           |
| **HTTP**              | o código que o seu servidor devolveu |
| **Quando**            | o horário do disparo                 |
| **Próxima tentativa** | preenchido só quando houve falha     |

Status lógico e HTTP são coisas diferentes, e os dois aparecem. Se o seu endpoint respondeu `2xx`,
está pronto.

O **Status** do endpoint na listagem passa a `Ativo`. `Falhando` é veredito do sistema sobre as
entregas, não algo que você configura — se aparecer, a causa está no seu lado.

## Próximo passo

<Card title="6. Integrar" icon="code" href="/setup/integrate">
  Emita a sdkUrl no seu backend e monte o widget na sua página.
</Card>
