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

# 3. Domínios

> Autorize as origens web e os apps onde o widget pode abrir, e prove a posse do domínio por DNS.

Ao final deste passo a sua integração tem pelo menos uma origem **Verificada** — sem isso o widget
não abre em página nenhuma.

## Por que cadastrar não basta

Cadastrar uma origem não autoriza nada: ela nasce **Aguardando validação**, e só passa a valer
depois da prova de posse. É o que impede que alguém que descobriu o endereço da sua integração
embuta o seu fluxo no site dele.

O que o [Web SDK](/web-sdk/security) faz com essa lista, e como o isolamento do iframe funciona,
está em [segurança](/web-sdk/security).

## Cadastre um domínio web

<Steps>
  <Step title="Abra a aba Segurança da integração">
    Em **Integrações**, abra a sua integração e vá em **Segurança** → **Domínios Autorizados**.
  </Step>

  <Step title="Adicione o domínio">
    Clique em **Adicionar Domínio**, escolha a **Plataforma** e informe o **Domínio**.

    O valor é um hostname nu, minúsculo, sem esquema, porta ou caminho:

    | Aceito                  | Recusado                        |
    | ----------------------- | ------------------------------- |
    | `app.suaempresa.com.br` | `https://app.suaempresa.com.br` |
    | `localhost:5173`        | `app.suaempresa.com.br/kyc`     |
    | `127.0.0.1:3000`        | `*.suaempresa.com.br`           |

    `localhost` e `127.0.0.1` são as únicas origens web que aceitam porta — é assim que o
    navegador manda o `Origin` de uma página servida na sua máquina. Cadastre a sua origem de
    desenvolvimento aqui e você integra sem subir nada.

    <Frame>
      <img src="https://mintcdn.com/legitimuz/SUSGJqxwn2xgSwy6/images/placeholder.svg?fit=max&auto=format&n=SUSGJqxwn2xgSwy6&q=85&s=523f9df675c41fc1fe54bb4f46bef992" alt="Aba Domínios Autorizados da integração, com o formulário Adicionar Domínio aberto e o campo Domínio preenchido" width="1600" height="900" data-path="images/placeholder.svg" />
    </Frame>
  </Step>

  <Step title="Publique o registro TXT">
    A origem entra como **Aguardando validação** e o dashboard mostra o desafio. Publique no DNS
    do seu domínio:

    ```text theme={null}
    Nome:  _legitimuz.app.suaempresa.com.br
    Tipo:  TXT
    Valor: legitimuz-verify=<O_VALOR_MOSTRADO_NO_DASHBOARD>
    ```

    O widget abre no domínio cadastrado e nas sub-rotas dele.
  </Step>

  <Step title="Espere a aprovação">
    A conferência é automática e não tem botão: assim que o TXT estiver publicado e visível, a
    origem passa a **Verificada**. Não é preciso voltar à tela para confirmar.
  </Step>
</Steps>

<Warning>
  Cadastre também as origens de homologação antes de ir para produção. Origem que não está
  **Verificada** faz o navegador recusar o iframe sem avisar a sua página — o sintoma que chega ao
  seu código é o erro `6005`, um timeout, e não uma mensagem sobre domínio.
</Warning>

## Apps iOS e Android

Apps nativos entram na mesma tela, em **App Bundles** → **Adicionar Bundle**, com o identificador
do app (`com.suaempresa.app` no iOS, `br.com.suaempresa.app` no Android).

A prova de posse aqui é diferente: o app envia um **token de attestation** na configuração do SDK
nativo, e a Legitimuz confirma. Você não autoconfirma, e não há desafio DNS.

## Confira que funcionou

A coluna **Status** da origem mostra `Verificada`. Enquanto mostrar `Aguardando validação`, o
widget não abre naquela origem.

## Próximo passo

<Card title="4. Chave de API" icon="key" href="/setup/api-key">
  Crie a chave que autentica o seu servidor na API.
</Card>
