---
title: "Obtiene los mensajes de la conversación"
method: GET
path: "/workspaces/{workspaceId}/conversations/{convId}/messages"
tags: ["Conversations"]
---

# Obtiene los mensajes de la conversación

`GET /workspaces/{workspaceId}/conversations/{convId}/messages`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/workspaces/{workspaceId}/conversations/{convId}/messages`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Los 50 mensajes más recientes del hilo principal, en orden cronológico, más los hilos abiertos sobre la conversación.

`limit` y `page` recorren el historial hacia atrás: `page=2` trae los 50 anteriores a los de `page=1`, siempre en orden cronológico dentro de la página. **`threads` no se pagina**: viene completo en todas las páginas, igual que hoy.

Con `paginate=true` la respuesta conserva `messages` y `threads` y suma `data` (la misma página que `messages`), `has_more` y `next_cursor`. La primera página son los mensajes más recientes; pasa `next_cursor` en `starting_after` para traer los anteriores, hasta que `has_more` sea `false`. Un mensaje nuevo no corre las páginas que siguen.

## Path parameters

- `workspaceId` number, required
- `convId` number, required

## Query parameters

- `limit` number
- `page` number
- `paginate` boolean
- `starting_after` string

## Response `200`

Sin `paginate` ni `starting_after`, la forma de siempre. Con ellos, `{ data, has_more, next_cursor }`.

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` union, required
    - ChatMessagesResponseDto
      - `messages` ChatMessageResponseDto[], required
        - `content` string, required
        - `conversation_id` number, required
        - `created_at` string, nullable
        - `id` number, required
        - `metadata` object, nullable, required: Metadata del turno: adjuntos, traza del orquestador, acciones ejecutadas. Las URL de `metadata.attachments` se **re-firman en cada lectura** porque el archivo vive en el bucket privado. Son temporales por definición — no las guardes ni las compartas, pide los mensajes de nuevo cuando las necesites.
        - `role` 'user' | 'assistant', required
        - `thread_id` number, nullable, required: `null` en los mensajes del hilo principal; con valor, el mensaje vive en un hilo.
        - `tokens_used` number, nullable
      - `threads` ChatThreadResponseDto[], required
        - `context_data` object
        - `context_id` number, nullable, required: Id numérico de la entidad del contexto (ítem, colección). `null` si no aplica.
        - `context_id_text` string, nullable, required: Id de texto del contexto, para entidades cuyo id no es numérico (tareas).
        - `context_type` 'item' | 'collection' | 'task' | 'general', required: Sobre qué se abrió el hilo.
        - `conversation_id` number, required
        - `created_at` string, nullable
        - `id` number, required
        - `is_closed` boolean
        - `title` string, nullable, required
        - `updated_at` string, nullable
    - ChatMessagesPageDto
      - `data` ChatMessageResponseDto[], required: La misma página que `messages`, en orden cronológico.
        - `content` string, required
        - `conversation_id` number, required
        - `created_at` string, nullable
        - `id` number, required
        - `metadata` object, nullable, required: Metadata del turno: adjuntos, traza del orquestador, acciones ejecutadas. Las URL de `metadata.attachments` se **re-firman en cada lectura** porque el archivo vive en el bucket privado. Son temporales por definición — no las guardes ni las compartas, pide los mensajes de nuevo cuando las necesites.
        - `role` 'user' | 'assistant', required
        - `thread_id` number, nullable, required: `null` en los mensajes del hilo principal; con valor, el mensaje vive en un hilo.
        - `tokens_used` number, nullable
      - `has_more` boolean, required: `true` si hay mensajes más viejos que los de esta página.
      - `messages` ChatMessageResponseDto[], required
        - `content` string, required
        - `conversation_id` number, required
        - `created_at` string, nullable
        - `id` number, required
        - `metadata` object, nullable, required: Metadata del turno: adjuntos, traza del orquestador, acciones ejecutadas. Las URL de `metadata.attachments` se **re-firman en cada lectura** porque el archivo vive en el bucket privado. Son temporales por definición — no las guardes ni las compartas, pide los mensajes de nuevo cuando las necesites.
        - `role` 'user' | 'assistant', required
        - `thread_id` number, nullable, required: `null` en los mensajes del hilo principal; con valor, el mensaje vive en un hilo.
        - `tokens_used` number, nullable
      - `next_cursor` string, nullable, required: Cursor opaco para `starting_after`: trae los mensajes anteriores. `null` cuando `has_more` es `false`.
      - `threads` ChatThreadResponseDto[], required
        - `context_data` object
        - `context_id` number, nullable, required: Id numérico de la entidad del contexto (ítem, colección). `null` si no aplica.
        - `context_id_text` string, nullable, required: Id de texto del contexto, para entidades cuyo id no es numérico (tareas).
        - `context_type` 'item' | 'collection' | 'task' | 'general', required: Sobre qué se abrió el hilo.
        - `conversation_id` number, required
        - `created_at` string, nullable
        - `id` number, required
        - `is_closed` boolean
        - `title` string, nullable, required
        - `updated_at` string, nullable

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/5d9ca294295c?raw)
