# Instalar o snippet

> O snippet é a forma mais curta de capturar evidência: duas tags no seu checkout e uma chamada por evento. Ele conversa com o canal navegador por você.

Página: https://doc.rapidchargeback.com/canais/capture/instalar-o-snippet/

O snippet é a forma mais curta de capturar evidência: duas tags no seu checkout e uma chamada por evento. Ele conversa com o [canal navegador](https://doc.rapidchargeback.com/canais/capture/enviar-evento-navegador/) por você.

Se o seu checkout é renderizado no servidor, ou se você prefere não carregar script de terceiro, pule esta página e chame o endpoint direto.

## Onde pegar o token

No painel, em **Configurações › Integrações**, no cartão do SDK de captura. Ative e o painel mostra o snippet pronto, já com o token do merchant selecionado. O cartão aparece para quem tem o produto de disputa ativo.

O token é **publicável**: ele fica no HTML da sua loja e não precisa de proteção. Com ele só é possível enviar evento, nunca ler dado. Evento que não corresponde a um pedido seu é descartado.

## Instalação

```html
<script src="https://api.rapidchargeback.com/sdk/v1/rapid.js"></script>
<script>rapid('init',{token:'seu_token_publicavel'})</script>
```

Duas coisas importam na ordem acima:

1. o `init` tem que vir depois do carregamento do script, por isso a tag não leva `async` nem `defer`
2. o `init` já começa a identificar o aparelho, então chame-o o quanto antes na página, não só na hora do pagamento

O script tem cerca de 5 KB, não tem dependência e não bloqueia a página.

## Chamadas

```js
// Compra finalizada. Captura também os dados do aparelho.
rapid('checkout', { order_ref: 'TXN-2026-001' })

// Cliente aceitou os termos.
rapid('terms', { order_ref: 'TXN-2026-001' })

// Cliente acessou o produto.
rapid('track', 'access_log', { order_ref: 'TXN-2026-001' })

// Cliente usou o produto ou serviço.
rapid('track', 'usage_log', { order_ref: 'TXN-2026-001' })
```

| Chamada | Evento gerado | Payload que o snippet monta |
|---|---|---|
| `rapid('checkout', …)` | `checkout` | identificação do aparelho |
| `rapid('terms', …)` | `terms_acceptance` | a URL da página |
| `rapid('track', 'access_log', …)` | `access_log` | a URL da página |
| `rapid('track', 'usage_log', …)` | `usage_log` | a URL da página |

O `order_ref` é obrigatório em todas. É o identificador do pedido no seu sistema, o mesmo que você manda em `external_id` ao criar a transação. Ver [Tipos e payload](https://doc.rapidchargeback.com/canais/capture/payload/).

Chamada sem `order_ref` é ignorada, não gera evento nem erro visível.

## Fire and forget

O snippet nunca quebra o checkout, e isso tem um custo que vale conhecer:

- toda chamada é silenciosa. Ele não lança exceção, não devolve promessa e não lê a resposta
- erro de validação (tipo errado, `order_ref` longo demais) não aparece no console
- falha de rede não é retentada no navegador

Para **testar** a integração, chame o [endpoint do navegador](https://doc.rapidchargeback.com/canais/capture/enviar-evento-navegador/) direto com curl, onde você vê o status e a mensagem. Depois de validado, o snippet faz o mesmo em produção.

O envio usa `navigator.sendBeacon` quando disponível, com `fetch` em modo `keepalive` como alternativa. Os dois sobrevivem à navegação para a página seguinte, então o evento de checkout não se perde no redirecionamento do pagamento.

## Identificação do aparelho

No `checkout`, o snippet identifica o aparelho antes de enviar o evento. Ele tenta o Fingerprint, com teto de 2 segundos, e cai numa identificação própria se não conseguir (identificador em `localStorage` mais um hash de atributos do navegador).

O resultado vai no campo `fp` do payload:

| `fp` | Significa |
|---|---|
| `pro` | identificação do Fingerprint, validada do lado servidor |
| `fallback` | identificação própria do snippet |

A diferença é prática: só a identificação validada preenche aparelho e IP da transação e gera o registro de verificação. Ver [O evento `checkout`](https://doc.rapidchargeback.com/canais/capture/payload/#o-evento-checkout).

Se o seu site tem CSP restritiva, o Fingerprint é carregado de `https://fpjscdn.net`. Bloqueado ele, a captura continua funcionando em modo `fallback`.

## Como saber se está funcionando

O mesmo cartão do painel mostra se a conta já recebeu evento e quando foi o último. Depois de instalar, faça uma compra de teste e confira ali.

## Próximos passos

- [Tipos e payload](https://doc.rapidchargeback.com/canais/capture/payload/)
- [Enviar evento pelo navegador](https://doc.rapidchargeback.com/canais/capture/enviar-evento-navegador/)
- [Enviar evento pelo servidor](https://doc.rapidchargeback.com/canais/capture/enviar-evento-servidor/)
