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

# Listar mensajes de una conversación

> Devuelve mensajes y eventos del timeline de la conversación, ordenados cronológicamente ascendente por `sent_at` (el reloj de negocio del mensaje). **El orden no es configurable** (no soporta un param `order` — a diferencia del endpoint de listado de conversations). Paginación cursor opaco compuesto. Default `limit`=50, máximo 100. 

Cada item lleva `type: "message" | "event"` como discriminador. Los SDKs auto-generados exponen esto como tagged union — no hay que inferir del par `(content_type, event_type)` nullables.



## OpenAPI

````yaml /openapi.json get /{slug}/conversations/{uuid}/messages
openapi: 3.1.0
info:
  title: 1TO1 AI Public API
  version: 0.2.0
  description: >-
    API pública de 1TO1 AI para integraciones externas (n8n, CRMs, scripts).
    Auth via Bearer token. Rate limit 60 req/min por API key. Contrato REST
    puro: el body de éxito es el payload directo (status HTTP como señal),
    errores retornan `{code, message}` con ambos campos garantizados. Ver schema
    `PublicError`.
servers:
  - url: https://app.1to1.ai/api/v1/public
    description: Producción
security:
  - bearerAuth: []
paths:
  /{slug}/conversations/{uuid}/messages:
    get:
      tags:
        - Conversations
      summary: Listar mensajes de una conversación
      description: >-
        Devuelve mensajes y eventos del timeline de la conversación, ordenados
        cronológicamente ascendente por `sent_at` (el reloj de negocio del
        mensaje). **El orden no es configurable** (no soporta un param `order` —
        a diferencia del endpoint de listado de conversations). Paginación
        cursor opaco compuesto. Default `limit`=50, máximo 100. 


        Cada item lleva `type: "message" | "event"` como discriminador. Los SDKs
        auto-generados exponen esto como tagged union — no hay que inferir del
        par `(content_type, event_type)` nullables.
      parameters:
        - $ref: '#/components/parameters/SlugPathParam'
        - $ref: '#/components/parameters/ConversationUuidPathParam'
        - schema:
            type: string
            minLength: 1
            maxLength: 512
            description: Cursor opaco devuelto por la página anterior.
          required: false
          description: Cursor opaco devuelto por la página anterior.
          name: cursor
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            description: Items por página. Default 50.
            example: 50
          required: false
          description: Items por página. Default 50.
          name: limit
          in: query
      responses:
        '200':
          description: Página de mensajes
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessagesListData'
        '400':
          description: >-
            UUID o query params inválidos (INVALID_REQUEST) o cursor corrupto
            (INVALID_CURSOR)
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '401':
          description: Token ausente, mal formado o no válido (INVALID_API_TOKEN)
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '403':
          description: >-
            El slug del path no coincide con el business del token
            (TOKEN_BUSINESS_MISMATCH)
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '404':
          description: >-
            Conversación no encontrada o pertenece a otro business
            (CONVERSATION_NOT_FOUND)
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '429':
          description: >-
            Rate limit excedido (RATE_LIMIT_EXCEEDED). Headers `Retry-After`,
            `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`
            indican cuándo reintentar.
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '500':
          description: Error inesperado del servidor (UNKNOWN_ERROR)
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
                description: >-
                  ID único para correlacionar con logs server-side. Si el
                  cliente envía uno válido (UUID), se preserva; si no, se genera
                  uno nuevo.
              required: true
              description: >-
                ID único para correlacionar con logs server-side. Si el cliente
                envía uno válido (UUID), se preserva; si no, se genera uno
                nuevo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
components:
  parameters:
    SlugPathParam:
      schema:
        $ref: '#/components/schemas/SlugPathParam'
      required: true
      description: >-
        Slug del business, case-insensitive. Debe coincidir con el business del
        token.
      name: slug
      in: path
    ConversationUuidPathParam:
      schema:
        $ref: '#/components/schemas/ConversationUuidPathParam'
      required: true
      description: UUID de la conversación
      name: uuid
      in: path
  schemas:
    MessagesListData:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Message'
        next_cursor:
          type:
            - string
            - 'null'
        has_more:
          type: boolean
      required:
        - items
        - next_cursor
        - has_more
    PublicError:
      type: object
      properties:
        code:
          type: string
          example: INVALID_API_TOKEN
        message:
          type: string
          example: >-
            The provided API token is invalid or has been revoked. Generate a
            new one in Settings → API Token.
      required:
        - code
        - message
      description: >-
        Public API error body. The client should match against `code` (stable
        canonical identifier) and NOT against `message` (human text, may be
        refined between API versions without notice). The HTTP status code is
        the error-type signal (4xx client, 5xx server).
    SlugPathParam:
      type: string
      example: acme
      description: >-
        Slug del business, case-insensitive. Debe coincidir con el business del
        token.
    ConversationUuidPathParam:
      type: string
      format: uuid
      example: 550e8400-e29b-41d4-a716-446655440000
      description: UUID de la conversación
    Message:
      oneOf:
        - $ref: '#/components/schemas/TimelineMessage'
        - $ref: '#/components/schemas/TimelineEvent'
      discriminator:
        propertyName: type
        mapping:
          message:
            $ref: '#/components/schemas/TimelineMessage'
          event:
            $ref: '#/components/schemas/TimelineEvent'
    TimelineMessage:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        conversation_uuid:
          type: string
          format: uuid
        is_from_customer:
          type: boolean
        body:
          type:
            - string
            - 'null'
        author:
          type: object
          properties:
            type:
              type: string
              enum:
                - customer
                - human
                - ai_employee
                - api_token
                - mass_campaign
                - system
            name:
              type:
                - string
                - 'null'
          required:
            - type
            - name
        external_id:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
          description: >-
            Timestamp de auditoría: cuándo se creó la fila en nuestra base. Para
            ordenar el timeline usa `sent_at`.
        sent_at:
          type: string
          format: date-time
          description: >-
            Reloj de negocio del mensaje/evento (timestamp de WhatsApp para
            entrantes, hora simulada en conversaciones tester, o la hora de
            envío). **Es la clave de orden del timeline.** Siempre presente.
        type:
          type: string
          enum:
            - message
        content_type:
          type: string
          enum:
            - text
            - image
            - audio
            - video
            - document
            - location
            - sticker
            - contacts
            - template
            - interactive
            - reaction
        event_type:
          type: 'null'
        status:
          type: string
          enum:
            - pending
            - sent
            - delivered
            - read
            - failed
      required:
        - uuid
        - conversation_uuid
        - is_from_customer
        - body
        - author
        - external_id
        - created_at
        - sent_at
        - type
        - content_type
        - event_type
        - status
    TimelineEvent:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        conversation_uuid:
          type: string
          format: uuid
        is_from_customer:
          type: boolean
        body:
          type:
            - string
            - 'null'
        author:
          type: object
          properties:
            type:
              type: string
              enum:
                - customer
                - human
                - ai_employee
                - api_token
                - mass_campaign
                - system
            name:
              type:
                - string
                - 'null'
          required:
            - type
            - name
        external_id:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
          description: >-
            Timestamp de auditoría: cuándo se creó la fila en nuestra base. Para
            ordenar el timeline usa `sent_at`.
        sent_at:
          type: string
          format: date-time
          description: >-
            Reloj de negocio del mensaje/evento (timestamp de WhatsApp para
            entrantes, hora simulada en conversaciones tester, o la hora de
            envío). **Es la clave de orden del timeline.** Siempre presente.
        type:
          type: string
          enum:
            - event
        content_type:
          type: 'null'
        event_type:
          type: string
          enum:
            - context_note
            - contact_name_updated
            - contact_phone_updated
            - contact_email_updated
            - scheduled_cancel
            - conversion
        status:
          type: 'null'
      required:
        - uuid
        - conversation_uuid
        - is_from_customer
        - body
        - author
        - external_id
        - created_at
        - sent_at
        - type
        - content_type
        - event_type
        - status
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: sk_1to1_<hex>
      description: >-
        API token emitido desde Settings → API Token del dashboard 1TO1 AI.
        Enviar en header Authorization: Bearer sk_1to1_...

````