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

# Configuração

> Referência completa do iGamingSDK.init() — todos os campos, defaults e quando ajustar.

A função `init(config)` aceita um objeto com as opções abaixo. Todos os campos
exceto `organizationId` e `brandId` são opcionais — os defaults são pensados
para uma operação típica de iGaming.

## Exemplo completo

```javascript theme={null}
window.iGamingSDK.init({
  // ===== Obrigatórios =====
  organizationId: 'org_SEU_ID',
  brandId:        'brand_SEU_ID',

  // ===== Endpoint =====
  endpoint: 'https://ingest.atlas.io/v1/sdk-events',

  // ===== Privacidade =====
  respect_dnt:                  true,
  opt_out_capturing_by_default: false,
  property_denylist:            ['password', 'cvv', 'cpf', 'card_number'],

  // ===== Auto-captura =====
  autocapture:         true,
  capture_pageview:    true,
  capture_pageleave:   true,
  capture_dead_clicks: true,
  capture_exceptions:  true,
  capture_performance: true,

  // ===== Heatmap =====
  heatmap: { enabled: true, sampleRate: 0.1 },

  // ===== Persistência =====
  persistence:            'localStorage+cookie',
  cookie_domain:           undefined,           // auto-detect
  cross_subdomain_cookie:  true,
  session_idle_timeout_seconds: 1800,

  // ===== URL → game mapping =====
  gameUrlPatterns: [
    { type: 'casino', pattern: '/cassino/jogo/([\\w-]+)' },
    { type: 'sport',  pattern: '/esportes/evento/([\\w-]+)' }
  ]
});
```

## Obrigatórios

| Campo            | Tipo            | Descrição                                                                    |
| ---------------- | --------------- | ---------------------------------------------------------------------------- |
| `organizationId` | `string` (UUID) | ID da organização Atlas. Fornecido pela equipe Atlas no onboarding.          |
| `brandId`        | `string` (UUID) | ID da marca dentro da organização. Operadores multi-brand usam um por brand. |

## Endpoint

| Campo      | Default                                 | Descrição                                                                                      |
| ---------- | --------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `endpoint` | `https://ingest.atlas.io/v1/sdk-events` | URL completa do endpoint de ingestão. Ajuste para staging Atlas, region edge ou localhost dev. |

## Privacidade e LGPD

| Campo                          | Default     | Descrição                                                                                    |
| ------------------------------ | ----------- | -------------------------------------------------------------------------------------------- |
| `respect_dnt`                  | `true`      | Auto opt-out se `navigator.doNotTrack === '1'`                                               |
| `opt_out_capturing_by_default` | `false`     | Inicia em silêncio até chamar `opt_in_capturing()` — recomendado para fluxos com banner LGPD |
| `property_denylist`            | `[]`        | Keys removidas de toda chamada `capture()` antes do envio                                    |
| `sanitize_properties`          | `undefined` | Função custom `(props, eventName) => props` para sanitização avançada                        |

<Warning>
  Em fluxos LGPD compliant, prefira `opt_out_capturing_by_default: true`
  e chame `opt_in_capturing()` somente após consentimento explícito do usuário.
  Veja [Privacidade & LGPD](/sdk/web-analytics/privacy).
</Warning>

## Auto-captura

Cada flag liga/desliga um collector específico. Todos ligados por padrão.

| Campo                 | Default | O que faz                                                                                   |
| --------------------- | ------- | ------------------------------------------------------------------------------------------- |
| `autocapture`         | `true`  | Click / change / submit em `<a>`, `<button>`, `<input>`, `<form>`, `<select>`, `<textarea>` |
| `capture_pageview`    | `true`  | Pageview inicial + SPA navigation (intercepta `pushState`/`replaceState`)                   |
| `capture_pageleave`   | `true`  | Evento `page.left` antes de mudar de rota                                                   |
| `capture_dead_clicks` | `true`  | Click sem mutação DOM em 3s                                                                 |
| `capture_exceptions`  | `true`  | `window.onerror` + `unhandledrejection`                                                     |
| `capture_performance` | `true`  | Core Web Vitals (requer lib peer `web-vitals`)                                              |
| `heatmap.enabled`     | `true`  | Click XY tracking                                                                           |
| `heatmap.sampleRate`  | `0.1`   | Fração de sessões amostradas (0.0–1.0). Determinístico por hash de `session_id`.            |

## Persistência

| Campo                          | Default                 | Descrição                                                                                                      |
| ------------------------------ | ----------------------- | -------------------------------------------------------------------------------------------------------------- |
| `persistence`                  | `'localStorage+cookie'` | Modos: `localStorage+cookie` (default — cross-subdomain), `localStorage`, `cookie`, `memory`, `sessionStorage` |
| `cookie_domain`                | auto-detect             | Force para domínios com TLD composto (`.com.br`, `.co.uk`) onde auto-detection falha                           |
| `cookie_name`                  | `ig_atlas_{brandId}`    | Prefixo do nome do cookie                                                                                      |
| `cookie_expiration_days`       | `365`                   | Validade do cookie de identidade                                                                               |
| `secure_cookie`                | auto (true se HTTPS)    | Flag `Secure` no cookie                                                                                        |
| `cross_subdomain_cookie`       | `true`                  | Setar cookie no domínio raiz para single sign-on entre `app.brand.com` e `m.brand.com`                         |
| `session_idle_timeout_seconds` | `1800`                  | Inatividade que fecha a sessão e abre nova (padrão GA4/PostHog)                                                |

## URL → game mapping

| Campo             | Tipo    | Descrição                                                                                                                                            |
| ----------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `gameUrlPatterns` | `array` | Lista de `{ type, pattern, extractGameId? }`. Quando URL bate, o SDK adiciona `game_ext_id`, `game_type` e `game_slug` a todos os eventos da página. |

```javascript Exemplos de patterns theme={null}
gameUrlPatterns: [
  // URL: /cassino/jogo/sweet-bonanza → game_ext_id: 'sweet-bonanza'
  { type: 'casino', pattern: '/cassino/jogo/([\\w-]+)' },

  // URL: /slot/12345 → game_ext_id: 'slot-12345'
  { type: 'casino', pattern: '/slot/(\\d+)', extractGameId: 'slot-$1' },

  // URL: /esportes/futebol/evento/corinthians-vs-palmeiras
  // → game_ext_id: 'corinthians-vs-palmeiras-futebol'
  {
    type: 'sport',
    pattern: '/esportes/(\\w+)/evento/([\\w-]+)',
    extractGameId: '$2-$1'
  }
]
```

<Tip>
  Use `\\w` em vez de `\w` na string JSON (escape duplo). O SDK compila as
  regexes uma vez no `init()`, custo zero por evento.
</Tip>

## Bootstrap (avançado)

Para evitar race condition em apps com feature flags ou IDs pré-conhecidos
no servidor:

```javascript theme={null}
window.iGamingSDK.init({
  organizationId: 'org_SEU_ID',
  brandId:        'brand_SEU_ID',

  bootstrap: {
    distinctId: 'user_already_known_id',
    isIdentified: true,
    featureFlags: {
      experiment_new_deposit_flow: 'B',
      promo_banner_v2: true
    }
  }
});
```

Quando `bootstrap.distinctId` está presente, o SDK pula a geração de UUID e
usa o valor fornecido — útil quando você quer reusar o ID do seu sistema
desde o primeiro pageview.

## Defaults snapshot

Para garantir comportamento estável mesmo com updates do SDK:

```javascript theme={null}
window.iGamingSDK.init({
  organizationId: 'org_SEU_ID',
  brandId:        'brand_SEU_ID',
  defaults: '2026-04-01'   // congela o comportamento na data informada
});
```

Quando você não passa `defaults`, o SDK usa o snapshot mais recente. Operadores
maduros costumam pinar uma data específica e atualizar deliberadamente.

## Validação

```javascript Cole no console depois do init theme={null}
console.log({
  config:   { /* não exposto — confirme via comportamento */ },
  state: {
    distinct_id: iGamingSDK.get_distinct_id(),
    session_id:  iGamingSDK.get_session_id(),
    opted_in:    iGamingSDK.has_opted_in_capturing(),
    version:     iGamingSDK.version
  }
});
```

## Próximos passos

* [Identificar usuário](/sdk/web-analytics/identify) — chamar `identify()` após login
* [Catálogo de eventos](/sdk/web-analytics/events) — eventos automáticos + custom
* [Privacidade & LGPD](/sdk/web-analytics/privacy) — banner consent, masking PII
