> ## 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.

# Orígenes del SDK

> Autoriza los dominios que pueden llamar al SDK de conexión y diagnostica fallos silenciosos

## Conceptos

El SDK de conexión resuelve `{ success: false }` **sin decir el motivo**. En la práctica falla por dos caminos muy distintos, y este endpoint resuelve el primero.

## Fallo 1 — origen no autorizado

El SDK solo funciona desde dominios registrados en `allowOrigins`. Si el origen del navegador no está en la lista, aborta con:

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

Usa este endpoint **antes** de llamar al SDK para saber si el origen actual está autorizado:

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

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

<Note>
  El dominio del panel de Omni Z-API se acepta siempre, aunque no figure en `allowOrigins`. Solo tienes que registrar **tus** dominios, incluido `http://localhost:3000` para desarrollo.
</Note>

<Warning>
  El registro de orígenes se hace en el panel, en **Seguridad**. No hay endpoint público para eso.
</Warning>

## Fallo 2 — popup bloqueado

El SDK abre una ventana con `window.open`. Si llamas a `client.connect()` **después de un `await`**, el gesto del usuario ya se perdió y el navegador bloquea el popup: el SDK también devuelve `{ success: false }`.

```javascript theme={null}
// Mal: el await consume el gesto del clic
async function onClick() {
  const datos = await cargarAlgo();
  await client.connect({ channelId });   // popup bloqueado
}

// Bien: connect() es lo primero después del clic
async function onClick() {
  const promesa = client.connect({ channelId });
  const datos = await cargarAlgo();
  await promesa;
}
```

## Autenticación

Este es el **único** endpoint que acepta la Public Key, y va en crudo en el header, sin `Bearer`:

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

Es intencionado: el endpoint se llama desde el frontend, donde la [Public Key se puede exponer](/es/authentication).


## OpenAPI

````yaml es/channels/openapi-sdk-info.json GET /instances/{channelId}/sdk-info
openapi: 3.1.0
info:
  title: Omni Z-API - Información del SDK
  description: Consulta los orígenes permitidos para el SDK de conexión de canales
  version: 1.0.0
servers:
  - url: https://api.omni.z-api.io
security: []
paths:
  /instances/{channelId}/sdk-info:
    get:
      tags:
        - Canales
      summary: Consultar orígenes del SDK
      description: >-
        Devuelve los orígenes permitidos para el SDK de conexión de ese canal.


        Se autentica con la **Public Key** en el header `Authorization`, sin el
        prefijo `Bearer`. Es el único endpoint que acepta la Public Key,
        precisamente para poder llamarse desde el frontend.
      operationId: getSdkInfo
      parameters:
        - name: channelId
          in: path
          required: true
          description: ID del canal
          schema:
            type: string
            example: 019E4C54B1B375A28970B605CA9B03C3
      responses:
        '200':
          description: Orígenes del canal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SdkInfo'
              example:
                allowOrigins:
                  - https://app.suempresa.com
                  - http://localhost:3000
        '401':
          description: Public Key no válida o ausente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Canal no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - publicKey: []
components:
  schemas:
    SdkInfo:
      type: object
      properties:
        allowOrigins:
          type: array
          items:
            type: string
          description: Orígenes permitidos para el SDK
    Error:
      type: object
      properties:
        error:
          type: integer
        message:
          type: string
  securitySchemes:
    publicKey:
      type: apiKey
      in: header
      name: Authorization

````