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

# Lead System (V2)

> O script V2 (experimental.js) é a integração recomendada da xTracky — sistema de leads, detecção automática de plataforma, SPA e multi-step.

## Instalação

Cole no `<head>` de **todas** as páginas do seu funil, o mais cedo possível:

```html theme={null}
<script
  src="https://cdn.xtracky.com/scripts/experimental.js"
  data-token="SEU_PRODUCT_ID"
  data-step-id="checkout"
  async>
</script>
```

<Check>
  O `async` garante que o script não bloqueie renderização. Ele começa a rastrear assim que estiver pronto.
</Check>

## Atributos

<ParamField path="data-token" type="string" required>
  Product ID (UUID) do seu produto na xTracky.
</ParamField>

<ParamField path="data-step-id" type="string">
  Identificador da etapa do funil. Usado pra tracking multi-step no painel.\
  Exemplos: `landing`, `pre-checkout`, `checkout`, `obrigado`.
</ParamField>

<ParamField path="data-auto-checkout" type="boolean" default="true">
  Se `true`, botões com `data-xtracky-checkout` disparam `initiate_checkout` automaticamente.\
  Ver [Botão de checkout](/scripts/botao-checkout).
</ParamField>

## O que ele faz automaticamente

<CardGroup cols={2}>
  <Card title="Detecta a plataforma" icon="fingerprint">
    Lê `ttclid`, `fbclid`, `gclid`, `click_id` na URL e escolhe o prefixo do `LeadId`.
  </Card>

  <Card title="Persiste o Lead" icon="cookie-bite">
    Cookie + localStorage + sessionStorage — sobrevive navegação, aba fechada, dias depois.
  </Card>

  <Card title="Intercepta SPAs" icon="arrows-rotate">
    Navigation API + History API — sabe quando o roteador SPA troca de "página".
  </Card>

  <Card title="Deduplica" icon="shield-halved">
    LeadId + orderId → evita disparo duplo de `Purchase`.
  </Card>
</CardGroup>

## Eventos que ele dispara

O V2 pode disparar eventos direto do navegador quando você não quer envolver o backend:

```javascript theme={null}
// Dispara initiate_checkout manual
window.xtracky?.track('initiate_checkout', {
  orderId: 'ORDER_123',
  amount: 9990,
});

// Dispara add_to_cart manual
window.xtracky?.track('add_to_cart', {
  orderId: 'ORDER_123',
  amount: 9990,
});
```

<Warning>
  **Nunca dispare `purchase` do navegador.** Purchase deve sempre vir do webhook do gateway ou de uma chamada backend, pra evitar fraude e duplicatas.
</Warning>

## Acessando o LeadId no cliente

Se você precisa incluir o `LeadId` num formulário ou passar pro seu backend:

```javascript theme={null}
const leadId = window.xtracky?.getLeadId();
// Ex: "TT-1763007625226-yn4xita3qylwh"

// Anexar num campo hidden
document.querySelector('input[name="utm_source"]').value = leadId;
```

O `getLeadId()` é seguro pra chamar antes do script terminar de carregar — retorna `null` até estar pronto. Se precisar aguardar:

```javascript theme={null}
window.addEventListener('xtracky:ready', () => {
  const leadId = window.xtracky.getLeadId();
  console.log('Lead:', leadId);
});
```

## Debug

Adicione `?xtracky_debug=1` à URL pra ativar logs verbose no console do navegador. Você verá:

* Qual `LeadId` foi gerado (e por qual regra)
* Cada evento disparado e seu payload
* Tentativas de rede e respostas da API
