# API pública

Esta documentación solo cubre los dos métodos públicos disponibles para integraciones externas: enviar mensajes y suscribir eventos en tiempo real.

## Resumen rápido

- Autenticación: `Authorization: Bearer <apiKey>`.
- Enviar mensaje: `POST /api/public/messages/send`.
- Suscribir eventos: `GET /api/public/events` (SSE).
- CORS permite `Authorization` y `Content-Type`.

## Métodos públicos

La API pública expone exactamente dos métodos: uno para enviar mensajes y otro para escuchar eventos entrantes.

### `POST /api/public/messages/send`

Envía un mensaje desde una integración externa.

- **Alcance**: Público
- **Cabeceras**:
  - `Authorization: Bearer <apiKey>`
  - `Content-Type: application/json`
- **Body**:

```json
{
  "phone": "string",
  "message": "string"
}
```

- **Respuesta esperada**:

```json
{
  "ok": true,
  "message": {
    "id": "message_id",
    "chatId": "12345@c.us"
  }
}
```

- **Notas**:
  - La API key debe pertenecer a la sesión elegida.

### `GET /api/public/events`

Abre un stream SSE con eventos de mensajes entrantes.

- **Alcance**: Público
- **Cabeceras**:
  - `Authorization: Bearer <apiKey>`
- **Respuesta esperada**:

```json
{
  "events": [
    {
      "event": "ready",
      "data": {
        "ok": true
      }
    },
    {
      "event": "message:create",
      "data": {
        "id": "message_id",
        "chatId": "12345@c.us"
      }
    },
    {
      "event": "message.received",
      "data": {
        "id": "message_id",
        "chatId": "12345@c.us"
      }
    }
  ]
}
```

- **Notas**:
  - El stream usa Server-Sent Events y mantiene la conexión abierta mientras la integración siga conectada.
  - El evento canónico es `message:create`; `message.received` se conserva como alias para compatibilidad.

## Errores

Las rutas públicas devuelven JSON con la forma `{ "error": "mensaje" }` cuando la API key es inválida, falta la cabecera `Authorization` o el body/query no pasa la validación.
Los status más comunes son `400`, `401` y `500`.

## Versión HTML

La página pública equivalente está en `/tutorial`.