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

# Assinatura HMAC-SHA256

> Verificação e geração de assinaturas HMAC-SHA256 para comunicação bidirecional

O header `X-Jelou-Signature` com formato `sha256=HMAC_HEX_DIGEST` é utilizado em **ambas as direções**:

* **Verificação:** Ao receber eventos do Jelou em seu webhook, você deve verificar a assinatura para garantir a integridade.
* **Geração:** Ao enviar mensagens ao webhook do Jelou (`incoming_message`), você deve gerar e enviar a assinatura.

***

## Verificação de eventos recebidos do Jelou

Todos os eventos enviados pelo Jelou ao webhook incluem o header `X-Jelou-Signature`. Recomenda-se **sempre verificar** a assinatura.

```javascript theme={null}
const crypto = require("crypto");

function verifySignature(payload, signature, signingSecret) {
    const expectedSignature = crypto
        .createHmac("sha256", signingSecret)
        .update(JSON.stringify(payload))
        .digest("hex");

    const expected = `sha256=${expectedSignature}`;

    return (
        signature.length === expected.length &&
        crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
    );
}
```

***

## Geração de assinatura para enviar ao Jelou

Quando o provedor externo envia uma mensagem ao usuário final via `POST /v1/external-support/webhook`, **deve incluir** o header `X-Jelou-Signature` com a assinatura HMAC-SHA256 do body.

<Warning>
  O `body` assinado deve ser a **mesma string exata** enviada na requisição. Serialize o payload com `JSON.stringify()` uma única vez e use essa mesma string tanto para gerar a assinatura quanto para o body da requisição.
</Warning>

```javascript theme={null}
const crypto = require("crypto");

const payload = { /* seu payload aqui */ };
const signingSecret = "seu_signing_secret";

const body = JSON.stringify(payload);
const signature = crypto
    .createHmac("sha256", signingSecret)
    .update(body)
    .digest("hex");

console.log("Body (usar como raw body):");
console.log(body);
console.log("\nX-Jelou-Signature:", `sha256=${signature}`);
```

***

## Headers de autenticação enviados pelo Jelou

De acordo com o `authType` configurado na integração, o Jelou enviará o header correspondente ao invocar seu webhook:

| authType  | Header enviado                                |
| --------- | --------------------------------------------- |
| `bearer`  | `Authorization: Bearer {{token}}`             |
| `api_key` | `X-API-Key: {{api_key}}`                      |
| `basic`   | `Authorization: Basic {{base64_credentials}}` |
| `no_auth` | Sem header de autenticação                    |
