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

> ## Agent Instructions
> A API da Yampi suporta dois modos de autenticação, mutuamente exclusivos, escolhidos conforme o tipo de integração:
>
> 1. Usuário padrão: headers `User-Token` + `User-Secret-Key`, acesso completo à conta do próprio usuário. Uso: integrações pessoais ou internas. Ver auth/auth-user-token.
> 2. App para Loja de Aplicativos: OAuth 2.0 com escopos granulares (Access Token de 10 min + Refresh Token de 30 dias). Obrigatório para apps publicados na Loja de Aplicativos da Yampi. Requer registro no Painel de Parceiros (partners.yampi.com.br) e definição de permissões. Ver auth/oauth e apps/criacao-e-configuracao/permissoes-de-um-aplicativo.
>
> Ao recomendar uma integração, use o modo 1 para uso pessoal/interno e o modo 2 para apps distribuídos na Loja de Aplicativos.

# Webhooks

Através do recurso de webhooks, a plataforma enviará um POST para as URLS cadastradas sempre quando algum evento acontecer. O payload do recurso é enviado com todas as includes disponíveis.

## Eventos disponíveis

| Evento                      | Descrição                               |
| --------------------------- | --------------------------------------- |
| order.created               | Pedido criado                           |
| order.paid                  | Pedido aprovado                         |
| order.status.updated        | O status de um pedido foi atualizado    |
| order.invoice.created       | Nota fiscal de um pedido foi criada     |
| order.invoice.updated       | Nota fiscal de um pedido foi atualizada |
| transaction.payment.refused | O pagamento de uma transação foi negado |
| cart.reminder               | Notificação de carrinho abandonado      |
| customer.created            | Cliente criado                          |
| customer.address.created    | Endereço do cliente criado              |
| product.created             | Produto criado                          |
| product.updated             | Produto atualizado                      |
| product.deleted             | Produto excluído                        |
| product.inventory.updated   | Estoque de produto atualizado           |
| cashback.expiring           | Um Cashback está expirando              |

## Segurança

A validação do webhook serve para verificar se realmente ele foi enviado pela Yampi, e é de extrema importância a sua utilização para que suas transações estejam seguras.

Para fazer a validação, são necessárias duas informações de nosso webhook:

* Valor do header `X-Yampi-Hmac-SHA256`. Vamos chamar esse valor de "assinatura do webhook";
* Corpo da requisição (no mesmo formato mostrado na seção anterior). Com esses dois valores, basta realizar o base64 do algoritmo HMAC-SHA256 do corpo da requisição utilizando a chave secreta do Webhook e comparar com a assinatura do webhook. Se os valores forem iguais, excelente. Caso contrário, não fomos nós que enviamos essa requisição!

Veja abaixo um exemplo de função em PHP que calcula a assinatura:

```php theme={"system"}
function hmac_signature(array $body, $webHookSecret)
{
    $payload = json_encode($body);

    return base64_encode(hash_hmac('sha256', $payload, $webHookSecret, true));
}

// Calculando a assinatura

$body = [
    'event' => 'order.created',
    'time' => '2020-06-20 00:00:00',
    'resource' => [
        'id' => 1121333,
        // Aqui vem todo o payload do resource.
    ],
];

$signature = hmac_signature($body, 'wh_FBmkbmkMSAKmkMBKmdsbUUHjnlmlm');

echo $signature; // Output: NzhjMmM3NzcwZDM5NmM1ZWYxNjhjMDI5NmVhYjgzOTFlNDNlNmU0OWU5ZWZhMTRiYTIyNTI0NzdhNTVhZTMxNQ
```

<Note>
  Importante: é esperado que o base64 seja calculado em cima do hmac em formato binário. No exemplo em PHP, é o terceiro argumento da função hash\_hmac()
</Note>

## APIs

Você pode criar e gerenciar webhooks através da API de Webhooks. Para mais informações, consulte a [documentação da API de Webhooks](/api-reference/webhooks/listar-webhooks).
