> ## Documentation Index
> Fetch the complete documentation index at: https://developer.omni.z-api.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Origens do SDK

> Libere os domínios que podem chamar o SDK de conexão e diagnostique falhas silenciosas

## Conceituação

O SDK de conexão resolve `{ success: false }` **sem dizer o motivo**. Na prática ele falha por dois caminhos muito diferentes, e este endpoint resolve o primeiro.

## Falha 1 — origem não liberada

O SDK só funciona a partir de domínios cadastrados em `allowOrigins`. Se a origem do navegador não estiver na lista, ele aborta com:

```
[Omni Z-API SDK] Origin "https://app.suaempresa.com" is not in the allowed origins list.
```

Use este endpoint **antes** de chamar o SDK para saber se a origem atual está liberada:

```javascript theme={null}
const info = await fetch(
  `https://api.omni.z-api.io/instances/${channelId}/sdk-info`,
  { headers: { Authorization: SUA_PUBLIC_KEY } },
).then((r) => r.json());

const liberado = info.allowOrigins.includes(window.location.origin);
```

<Note>
  O domínio do painel do Omni Z-API é sempre aceito, mesmo sem constar em `allowOrigins`. Você só precisa cadastrar os **seus** domínios — inclusive `http://localhost:3000` para desenvolvimento.
</Note>

<Warning>
  Cadastrar origens é feito no painel, em **Segurança**. Não há endpoint público para isso.
</Warning>

## Falha 2 — popup bloqueado

O SDK abre uma janela com `window.open`. Se você chamar `client.connect()` **depois de um `await`**, o gesto do usuário já se perdeu e o navegador bloqueia o popup — o SDK também devolve `{ success: false }`.

```javascript theme={null}
// Errado: o await consome o gesto do clique
async function onClick() {
  const dados = await carregarAlgo();
  await client.connect({ channelId });   // popup bloqueado
}

// Certo: connect() é a primeira coisa após o clique
async function onClick() {
  const promessa = client.connect({ channelId });
  const dados = await carregarAlgo();
  await promessa;
}
```

## Autenticação

Este é o **único** endpoint que aceita a Public Key, e ela vai crua no header — sem `Bearer`:

```bash theme={null}
curl https://api.omni.z-api.io/instances/ID_DO_CANAL/sdk-info \
  -H "Authorization: SUA_PUBLIC_KEY"
```

Isso é intencional: o endpoint é chamado do frontend, onde a [Public Key pode ser exposta](/authentication).


## OpenAPI

````yaml pt/channels/openapi-sdk-info.json GET /instances/{channelId}/sdk-info
openapi: 3.1.0
info:
  title: Omni Z-API - Informações do SDK
  description: Consulta as origens liberadas para o SDK de conexão de canais
  version: 1.0.0
servers:
  - url: https://api.omni.z-api.io
security: []
paths:
  /instances/{channelId}/sdk-info:
    get:
      tags:
        - Canais
      summary: Consultar origens do SDK
      description: >-
        Retorna as origens liberadas para o SDK de conexão daquele canal.


        Autenticado com a **Public Key** no header `Authorization` — sem o
        prefixo `Bearer`. É o único endpoint que aceita a Public Key, justamente
        para poder ser chamado do frontend.
      operationId: getSdkInfo
      parameters:
        - name: channelId
          in: path
          required: true
          description: ID do canal
          schema:
            type: string
            example: 019E4C54B1B375A28970B605CA9B03C3
      responses:
        '200':
          description: Origens do canal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SdkInfo'
              example:
                allowOrigins:
                  - https://app.suaempresa.com
                  - http://localhost:3000
        '401':
          description: Public Key inválida ou ausente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Canal não encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - publicKey: []
components:
  schemas:
    SdkInfo:
      type: object
      properties:
        allowOrigins:
          type: array
          items:
            type: string
          description: Origens liberadas para o SDK
    Error:
      type: object
      properties:
        error:
          type: integer
        message:
          type: string
  securitySchemes:
    publicKey:
      type: apiKey
      in: header
      name: Authorization

````