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

# Lista mensagens de um chat

> Retorna as mensagens mais recentes primeiro.



## OpenAPI

````yaml /openapi/gateway.json get /v1/messaging/chats/{chatId}
openapi: 3.0.0
info:
  title: Spark
  description: >-
    Documentação da API pública do Spark CRM. Respostas de erro usam `{
    statusCode, code, message }`; trate erros pelo campo `code` (veja catálogo
    completo abaixo).


    ## Erros da API


    Todas as respostas de erro seguem o formato `{ statusCode, code, message }`.

    O campo **`code`** é estável entre versões — trate erros pelo código, não
    pela mensagem.


    | Código | HTTP | Descrição |

    | --- | ---: | --- |

    | `API_KEY_MISSING` | 401 | Cabeçalho `X-API-Key` ausente. Inclua a chave em
    todas as requisições autenticadas. |

    | `API_KEY_INVALID` | 401 | Prefixo ou valor da API Key não reconhecido.
    Verifique se copiou a chave correta do painel. |

    | `API_KEY_WRONG_TYPE` | 401 | O tipo da chave (pública ou privada) não é
    aceito neste endpoint. |

    | `DEVELOPERS_DISABLED` | 401 | Habilite o ambiente de desenvolvedores no
    painel antes de usar a API. |

    | `SUBSCRIPTION_INACTIVE` | 403 | O tenant não possui plano ativo ou a
    assinatura está suspensa/cancelada. |

    | `LEAD_LIMIT_EXCEEDED` | 403 | A operação criaria leads além do limite do
    plano atual. Faça upgrade ou remova leads. |

    | `FORM_INACTIVE` | 403 | O formulário existe, mas está desativado e não
    pode ser exibido nem receber envios. |

    | `RESOURCE_ACCESS_DENIED` | 403 | O recurso pertence a outro tenant ou a
    chave não tem escopo para lê-lo. |

    | `ENTRYPOINT_NOT_FOUND` | 404 | Nenhum entrypoint com o ID informado foi
    encontrado para o tenant autenticado. |

    | `FORM_NOT_FOUND` | 404 | Nenhum formulário com o ID público informado foi
    encontrado para o tenant autenticado. |

    | `CHAT_NOT_FOUND` | 404 | Nenhum chat com o ID informado foi encontrado
    para o tenant autenticado. |

    | `RESOURCE_NOT_FOUND` | 404 | O recurso solicitado não existe ou não está
    acessível para o tenant autenticado. |

    | `FORM_ALREADY_SUBMITTED` | 409 | Cada telefone pode enviar apenas uma
    resposta por formulário. |

    | `VALIDATION_ERROR` | 400 | Corpo, query ou parâmetros não passaram na
    validação de schema. |

    | `INVALID_PHONE` | 400 | O telefone informado não pôde ser normalizado para
    E.164. |

    | `ENTRYPOINT_PLATFORM_UNSUPPORTED` | 400 | O entrypoint informado pertence
    a uma plataforma não suportada pela operação. |

    | `PLATFORM_UNSUPPORTED` | 400 | Valor de filtro `platform` inválido ou não
    suportado. |

    | `FORM_MISSING_ENTRYPOINTS` | 400 | O formulário não possui entrypoints de
    destino configurados para receber leads. |

    | `FORM_INVALID_ANSWERS` | 400 | Perguntas ausentes, duplicadas,
    desconhecidas ou com opções inválidas. |

    | `FORM_INVALID_DESTINATION` | 400 | Um ou mais entrypoints configurados no
    formulário são inválidos ou inacessíveis. |

    | `MEDIA_UPLOAD_EMPTY` | 400 | O upload multipart não incluiu nenhum
    arquivo. |

    | `MEDIA_UPLOAD_TOO_MANY_FILES` | 400 | Mais arquivos foram enviados do que
    o permitido por requisição. |

    | `MEDIA_FILE_TOO_LARGE` | 400 | Um ou mais arquivos ultrapassam o limite de
    tamanho. |

    | `MEDIA_INVALID_FORMAT` | 400 | O tipo MIME ou conteúdo do arquivo não é
    aceito para upload de mídia. |

    | `INVALID_REQUEST` | 400 | A combinação de campos ou parâmetros da
    requisição não é permitida. |

    | `UNPROCESSABLE_REQUEST` | 422 | A requisição está bem formada, mas não
    pode ser processada no estado atual. |

    | `MESSAGE_CAMPAIGN_NOT_ALLOWED` | 422 | O corpo da mensagem referencia
    campanha, o que não é permitido na API pública. |

    | `CAMPAIGN_NOT_FOUND` | 404 | Nenhuma campanha com o ID informado foi
    encontrada para o tenant autenticado. |

    | `CAMPAIGN_NAME_ALREADY_EXISTS` | 400 | O nome da campanha deve ser único
    dentro da organização. |

    | `CAMPAIGN_TEMPLATE_NOT_FOUND` | 404 | O templateId informado não existe ou
    não pertence ao tenant autenticado. |

    | `CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH` | 400 | Templates oficiais só podem
    ser usados em WhatsApp Business ou Instagram. |

    | `CAMPAIGN_INVALID_FILTERS` | 422 | Um ou mais filtros possuem campo,
    operador ou valor incompatível. |

    | `CAMPAIGN_NOT_DRAFT` | 422 | A campanha já foi iniciada, concluída ou
    cancelada. |

    | `CAMPAIGN_ALREADY_PROCESSING` | 422 | Aguarde a conclusão ou cancele a
    execução atual antes de iniciar novamente. |

    | `CAMPAIGN_MISSING_COMMON_VARIABLES` | 400 | Informe commonVariables com as
    chaves var1, var2, etc. exigidas pelo template. |

    | `CAMPAIGN_SIZE_LIMIT_EXCEEDED` | 422 | Reduza o público-alvo ou ajuste os
    filtros antes de iniciar. |

    | `MESSAGE_TEMPLATE_NOT_FOUND` | 404 | Nenhum modelo de mensagem com o ID
    informado foi encontrado. |

    | `RATE_LIMIT_EXCEEDED` | 429 | Muitas requisições em curto intervalo.
    Aguarde e tente novamente. |

    | `INTERNAL_ERROR` | 500 | Falha inesperada no servidor. Se persistir,
    contate o suporte. |


    Schema:
    [`PublicApiErrorResponse`](#/components/schemas/PublicApiErrorResponse).
  version: '1.0'
  contact: {}
servers:
  - url: https://gateway.crmspark.com.br
    description: Oficial
security: []
tags: []
paths:
  /v1/messaging/chats/{chatId}:
    get:
      tags:
        - Messaging
      summary: Lista mensagens de um chat
      description: Retorna as mensagens mais recentes primeiro.
      operationId: messaging_listMessages_v1
      parameters:
        - name: chatId
          required: true
          in: path
          description: ID do chat no Spark
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: Tamanho da página (1-50; padrão 20).
          schema: {}
        - name: cursor
          required: false
          in: query
          description: Cursor da página seguinte (mensagens mais antigas).
          schema: {}
      responses:
        '200':
          description: Página de mensagens
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListPublicMessagesResponseSchema_Output'
        '400':
          description: >-
            - `VALIDATION_ERROR` (400): Corpo, query ou parâmetros não passaram
            na validação de schema.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
              examples:
                VALIDATION_ERROR:
                  value:
                    statusCode: 400
                    code: VALIDATION_ERROR
                    message: Dados da requisição inválidos.
        '401':
          description: >-
            - `API_KEY_MISSING` (401): Cabeçalho `X-API-Key` ausente. Inclua a
            chave em todas as requisições autenticadas.

            - `API_KEY_INVALID` (401): Prefixo ou valor da API Key não
            reconhecido. Verifique se copiou a chave correta do painel.

            - `API_KEY_WRONG_TYPE` (401): O tipo da chave (pública ou privada)
            não é aceito neste endpoint.

            - `DEVELOPERS_DISABLED` (401): Habilite o ambiente de
            desenvolvedores no painel antes de usar a API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
              examples:
                API_KEY_MISSING:
                  value:
                    statusCode: 401
                    code: API_KEY_MISSING
                    message: API Key não fornecida.
                API_KEY_INVALID:
                  value:
                    statusCode: 401
                    code: API_KEY_INVALID
                    message: API Key inválida.
                API_KEY_WRONG_TYPE:
                  value:
                    statusCode: 401
                    code: API_KEY_WRONG_TYPE
                    message: API Key não autorizada a acessar este recurso.
                DEVELOPERS_DISABLED:
                  value:
                    statusCode: 401
                    code: DEVELOPERS_DISABLED
                    message: >-
                      O ambiente de desenvolvedores não está habilitado para
                      este tenant.
        '403':
          description: >-
            - `SUBSCRIPTION_INACTIVE` (403): O tenant não possui plano ativo ou
            a assinatura está suspensa/cancelada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
              examples:
                SUBSCRIPTION_INACTIVE:
                  value:
                    statusCode: 403
                    code: SUBSCRIPTION_INACTIVE
                    message: Sua organização não possui uma assinatura ativa.
        '404':
          description: >-
            - `CHAT_NOT_FOUND` (404): Nenhum chat com o ID informado foi
            encontrado para o tenant autenticado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
              examples:
                CHAT_NOT_FOUND:
                  value:
                    statusCode: 404
                    code: CHAT_NOT_FOUND
                    message: Chat não encontrado.
        '429':
          description: >-
            - `RATE_LIMIT_EXCEEDED` (429): Muitas requisições em curto
            intervalo. Aguarde e tente novamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
              examples:
                RATE_LIMIT_EXCEEDED:
                  value:
                    statusCode: 429
                    code: RATE_LIMIT_EXCEEDED
                    message: Limite de requisições excedido.
      security:
        - api-key: []
components:
  schemas:
    ListPublicMessagesResponseSchema_Output:
      type: object
      properties:
        records:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              text:
                type: string
                nullable: true
              type:
                type: string
              status:
                type: string
              transcription:
                type: string
                nullable: true
              forward:
                type: object
                properties:
                  displayName:
                    type: string
                  type:
                    type: string
                  date:
                    type: number
                required:
                  - displayName
                  - type
                additionalProperties: false
                nullable: true
              replyToId:
                type: string
                nullable: true
              instagram:
                oneOf:
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - comment
                      commentId:
                        type: string
                      mediaId:
                        type: string
                      parentCommentId:
                        type: string
                    required:
                      - kind
                      - commentId
                      - mediaId
                    additionalProperties: false
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - comment_reply
                      parentCommentId:
                        type: string
                    required:
                      - kind
                      - parentCommentId
                    additionalProperties: false
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - private_reply
                      parentCommentId:
                        type: string
                    required:
                      - kind
                      - parentCommentId
                    additionalProperties: false
                nullable: true
                type: object
              media:
                type: object
                properties:
                  id:
                    type: string
                  type:
                    type: string
                    enum:
                      - image
                      - audio
                      - video
                      - document
                  url:
                    type: string
                  mimeType:
                    type: string
                  fileName:
                    type: string
                    nullable: true
                required:
                  - id
                  - type
                  - url
                  - mimeType
                additionalProperties: false
                nullable: true
              location:
                type: object
                properties:
                  latitude:
                    type: number
                  longitude:
                    type: number
                  name:
                    type: string
                  address:
                    type: string
                  url:
                    type: string
                required:
                  - latitude
                  - longitude
                additionalProperties: false
                nullable: true
              sender:
                type: object
                properties:
                  id:
                    type: string
                    nullable: true
                  avatarUrl:
                    type: string
                    nullable: true
                  name:
                    type: string
                  isParticipant:
                    type: boolean
                required:
                  - id
                  - name
                  - isParticipant
                additionalProperties: false
              isOfficialTemplate:
                type: boolean
              templateCharged:
                type: boolean
              templateComponents:
                $ref: '#/components/schemas/WebhookTemplateComponents'
              createdAt:
                type: string
                format: date-time
                pattern: >-
                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
              ad:
                type: object
                properties:
                  id:
                    type: string
                  type:
                    type: string
                    enum:
                      - ad
                      - post
                  url:
                    type: string
                  headline:
                    type: string
                required:
                  - id
                  - type
                  - url
                additionalProperties: false
                nullable: true
            required:
              - id
              - type
              - status
              - sender
              - isOfficialTemplate
              - templateCharged
              - createdAt
            additionalProperties: false
        nextCursor:
          type: string
      required:
        - records
      additionalProperties: false
    PublicApiErrorResponse:
      type: object
      required:
        - statusCode
        - code
        - message
      properties:
        statusCode:
          type: integer
          description: Código HTTP da resposta.
          example: 400
        code:
          type: string
          description: >-
            Código estável e legível por máquina. Use este campo — não parseie
            `message` — para tratar erros no cliente.
          enum:
            - API_KEY_MISSING
            - API_KEY_INVALID
            - API_KEY_WRONG_TYPE
            - DEVELOPERS_DISABLED
            - SUBSCRIPTION_INACTIVE
            - LEAD_LIMIT_EXCEEDED
            - FORM_INACTIVE
            - RESOURCE_ACCESS_DENIED
            - ENTRYPOINT_NOT_FOUND
            - FORM_NOT_FOUND
            - CHAT_NOT_FOUND
            - RESOURCE_NOT_FOUND
            - FORM_ALREADY_SUBMITTED
            - VALIDATION_ERROR
            - INVALID_PHONE
            - ENTRYPOINT_PLATFORM_UNSUPPORTED
            - PLATFORM_UNSUPPORTED
            - FORM_MISSING_ENTRYPOINTS
            - FORM_INVALID_ANSWERS
            - FORM_INVALID_DESTINATION
            - MEDIA_UPLOAD_EMPTY
            - MEDIA_UPLOAD_TOO_MANY_FILES
            - MEDIA_FILE_TOO_LARGE
            - MEDIA_INVALID_FORMAT
            - INVALID_REQUEST
            - UNPROCESSABLE_REQUEST
            - MESSAGE_CAMPAIGN_NOT_ALLOWED
            - CAMPAIGN_NOT_FOUND
            - CAMPAIGN_NAME_ALREADY_EXISTS
            - CAMPAIGN_TEMPLATE_NOT_FOUND
            - CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH
            - CAMPAIGN_INVALID_FILTERS
            - CAMPAIGN_NOT_DRAFT
            - CAMPAIGN_ALREADY_PROCESSING
            - CAMPAIGN_MISSING_COMMON_VARIABLES
            - CAMPAIGN_SIZE_LIMIT_EXCEEDED
            - MESSAGE_TEMPLATE_NOT_FOUND
            - RATE_LIMIT_EXCEEDED
            - INTERNAL_ERROR
        message:
          type: string
          description: Mensagem legível em português, útil para logs e exibição ao usuário.
    WebhookTemplateComponents:
      type: object
      nullable: true
      additionalProperties: true
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: X-API-Key

````