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

# Descripción general de la API del host de Narya

> El contrato HTTP entre el host de Narya y cada cliente: un socket Unix, un stream de eventos, un envelope de error, y paginación por cursor.

<Tip>
  **Esta sección es para desarrolladores.** Si quieres una descripción general a nivel de negocio de Narya, consulta [Qué es Narya](/es/platform/narya/what-is-narya).
</Tip>

Narya ejecuta agentes de programación detrás de una única API HTTP. Un host de larga duración es dueño de las sesiones, el almacén y las conexiones a los modelos. El cliente de terminal y el comando de un solo uso que distribuye Lerian manejan esta API. Un cliente que tú escribas maneja la misma.

## Transporte y autorización

***

El host escucha en un socket Unix dentro de tu home de Narya. Narya crea el socket solo para su propietario, y los permisos del archivo son toda la autorización. No hay contraseña, ni token, ni TLS.

El socket es `narya.sock` dentro del home de Narya. El home es `$NARYA_HOME`, o `$XDG_CONFIG_HOME/narya`, o `~/.config/narya`, en ese orden.

Las solicitudes son HTTP/1.1 con cuerpos JSON. Los nombres de campo están en camelCase. Marca el socket y envía una solicitud común:

```bash theme={null}
curl --unix-socket ~/.config/narya/narya.sock http://localhost/v1/host
```

La autoridad en esa URL se ignora, porque la conexión ya es el socket. Cualquier nombre de host funciona.

## El trabajo se acepta, y los resultados llegan en stream

***

Los resultados nunca llegan en la respuesta de la solicitud que los causó. `POST /v1/sessions/{sessionId}/messages` responde `202` con un id de turno. Todo lo que produce el turno llega en stream a través de `GET /v1/events` como server-sent events.

Cada frame lleva una línea `id:`, una línea `data:` y una línea en blanco. El payload de `data` es un envelope de evento en JSON, y su propiedad `type` indica de qué evento se trata. Los frames no llevan línea `event:` ni `retry:`.

```
id: 1011
data: {"id":"1011","type":"turn-finished","sessionId":"6b9f6d2e-1c3a-4f5b-9d7e-2a8c4e6f0b1d","timestamp":"2026-08-08T12:05:00Z","payload":{"turnId":"4d8e2f6a-0b1c-4d3e-9f5a-7b9c1d3e5f0a","stopReason":"completed"}}

```

Dos parámetros de consulta dan forma al stream. `sessionId` lo limita a una sesión. `hostEvents=true` agrega los eventos que no pertenecen a ninguna sesión, y solo se aplica junto con `sessionId`.

Para reanudar, envía el último id que recibiste en el encabezado de solicitud `Last-Event-ID`. El stream continúa desde el primer evento después de ese que el almacén todavía conserva. Compara el primer id que recibes con el que enviaste, y vuelve a leer el estado a través de las operaciones `GET` cuando haya un vacío. Un cursor más reciente que cualquiera que tenga el almacén recibe `409` con el código `NRY-0026`, y el mismo cursor se rechaza de forma idéntica cada vez.

## Los dos envelopes

***

Una lista paginada responde con un envelope de cursor: `items`, `limit` y un `nextCursor` cuando queda más contenido. Los cursores son opacos. Pasa uno de vuelta como parámetro de consulta `cursor` para obtener la página siguiente.

Un envelope de error: `code`, `title` y `message`, además de un mapa `fields` en un `422`. Los códigos son `NRY-` y cuatro dígitos.

```json theme={null}
{
  "code": "NRY-0002",
  "title": "Session not found",
  "message": "No session with id 6b9f6d2e-1c3a-4f5b-9d7e-2a8c4e6f0b1d exists on this host."
}
```

<Columns cols={2}>
  <Card title="La API del host" icon="server" href="/es/platform/narya/the-host-api">
    Lee qué sirve el host y por qué el contrato tiene esta forma.
  </Card>

  <Card title="Lista de errores" icon="triangle-exclamation" href="/es/reference/platform/narya/host-api-error-list">
    Busca todos los códigos que responde el host.
  </Card>
</Columns>
