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

# Quick Start

> Primera conversación in-app: Chat App, dos usuarios, JWT y un mensaje.

<Tip>
  De **cero al primer mensaje**: **Chat App** → **usuarios** → **JWT en tu backend** → **conversación** → **envío**.
</Tip>

## En pocas palabras

* **Crea un Chat App** y guarda `id`, `publicKey` y el **signing secret** (solo en el servidor).
* **Da de alta usuarios** con `externalUserId` estable.
* **Emite el JWT** en tu backend (`POST /v1/chat/users/token`). La app solo recibe el token.
* **Abre el 1:1 con la API Key** (las flags de creación por JWT vienen apagadas).
* **Envía** con la API Key (`senderExternalUserId`) o con el JWT del miembro.

Contexto: [Introducción](/es/chat-api/como-funciona/introducao). Alcances: [Alcances de la API Key](/es/chat-api/como-funciona/escopos-da-api-key).

<Warning>
  Nunca incrustes el signing secret en la app. Solo tu servidor firma JWT.
</Warning>

## 1. Crear Chat App

Panel: **Visión general → Chat** → **Nuevo app**. O API:

```http theme={null}
POST /v1/chat/apps
Content-Type: application/json
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{
  "name": "Mi App",
  "allowedOrigins": ["https://app.tusitio.com"]
}
```

Alcance: **`chat:apps:create`**. Guarda el **`id`**. El `signingSecret` solo aparece en la creación o al rotar.

## 2. Usuarios

```http theme={null}
PUT /v1/chat/users
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{ "chatAppId": "clxxapp...", "externalUserId": "user_alice", "name": "Alice" }
```

Repite para `user_bob`. Alcance: **`chat:users`**.

## 3. JWT (tu backend)

```http theme={null}
POST /v1/chat/users/token
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{ "chatAppId": "clxxapp...", "externalUserId": "user_alice", "ttlSec": 3600 }
```

Entrega `data.token` solo al cliente autenticado como Alice. TTL por defecto **3600** s; máximo **86400**.

## 4. Conversación 1:1 (API Key)

Con las flags por defecto el JWT **no** crea conversación (**403** `CHAT_CLIENT_CREATE_DISABLED`).

```http theme={null}
POST /v1/chat/conversations
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{
  "chatAppId": "clxxapp...",
  "type": "DIRECT",
  "members": ["user_alice", "user_bob"]
}
```

`DIRECT` exige **exactamente dos** `USER`. El par ya existe → **409** `CHAT_DIRECT_EXISTS`.

## 5. Enviar

Mismo contrato PIV1 que los otros canales: `from` (id del Chat App), `to` (id de la conversación), `type` y `payload`.

Cada envío consume **1 crédito** (`CHAT_MESSAGE`).

```http theme={null}
POST /v1/chat/messages
Authorization: Bearer sk_live_xxxxx
```

```json theme={null}
{
  "from": "clxxapp...",
  "to": ["cnv_xxxxx"],
  "type": "text",
  "payload": { "message": "Hola, Alice" },
  "senderExternalUserId": "user_bob",
  "clientMessageId": "msg_001"
}
```

Con JWT del miembro: el mismo path, sin `senderExternalUserId`. El path antiguo `POST /v1/chat/conversations/{id}/messages` sigue funcionando.

## 6. WebSocket

`wss://api.notifique.dev/v1/chat/ws` — primer frame `{ "type": "auth", "token": "<jwt>" }` (sin token en la query).

## Próximos pasos

* [Introducción](/es/chat-api/como-funciona/introducao)
* [Usuario y agente](/es/chat-api/como-funciona/usuario-e-agente)
* [Enviar mensajes](/es/chat-api/como-funciona/enviar-mensagens)
* [Alcances](/es/chat-api/como-funciona/escopos-da-api-key)
* [Eventos de webhooks](/es/chat-api/como-funciona/eventos-do-webhooks)
