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

# Search messages

> Full-text search over the tenant's messages — the "messages" group of the
app-web Spotlight. Replaces core-api `GET /tenants/:tenantID/messages`.

Hits in conversations the operator cannot read (inbox permissions) are
dropped after the index answers, so a page may hold fewer items than
`perPage` — even none — while `meta.hasMore` is still true. Keep paging
until `hasMore` is false. Returns HTTP 206 instead of 200 when more pages
are available.



## OpenAPI

````yaml /api/services-api.yaml get /v1/tenants/{tenantID}/messages
openapi: 3.0.3
info:
  description: >-
    Talqui is an omnichannel customer service platform that unifies
    conversations from WhatsApp, Instagram, Telegram, and many other channels
    into a single attendant panel, alongside a broader ecosystem of plugins and
    integrations. This API gives developers programmatic access to Talqui's
    services layer, exposing the operations needed to read and manage tenants,
    conversations, plugins, and related resources that power that platform.


    Authentication is available on behalf of an Operator (the default for this
    API), a Plugin Connection, or a Plugin — see the [Talqui authentication
    guide](https://docs.talqui.chat/guides/introduction/authentication/) for how
    each token is obtained and when to use it.


    Need help or have questions not covered here? Reach out to
    support@talqui.com.
  license:
    name: ISC
    url: https://opensource.org/license/isc-license-txt
  title: Talqui - Services API
  version: 0.69.1
servers:
  - description: Production
    url: https://services-api.talqui.chat
security: []
tags:
  - name: Tenants
  - name: Settings
  - name: Analytics/Reports
  - name: Analytics
  - name: Campaigns
  - name: Campaigns/Models
  - name: Contacts
  - name: Contacts/Imports
  - name: Handoff links
  - name: Inboxes
  - name: Messages
  - name: Notifications
  - name: Sessions
  - name: Operators/Shortcuts
  - name: Operators
  - name: Plugins
  - name: Setup
  - name: Uploads
paths:
  /v1/tenants/{tenantID}/messages:
    get:
      tags:
        - Messages
      summary: Search messages
      description: >-
        Full-text search over the tenant's messages — the "messages" group of
        the

        app-web Spotlight. Replaces core-api `GET /tenants/:tenantID/messages`.


        Hits in conversations the operator cannot read (inbox permissions) are

        dropped after the index answers, so a page may hold fewer items than

        `perPage` — even none — while `meta.hasMore` is still true. Keep paging

        until `hasMore` is false. Returns HTTP 206 instead of 200 when more
        pages

        are available.
      operationId: SearchMessagesController
      parameters:
        - in: path
          name: tenantID
          required: true
          schema:
            description: The tenant whose messages are searched.
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            type: string
        - in: query
          name: search
          required: true
          schema:
            description: Free-text term matched against the message text index.
            maxLength: 120
            minLength: 1
            type: string
        - in: query
          name: page
          required: false
          schema:
            default: 1
            description: 1-indexed page number to fetch.
            maximum: 9007199254740991
            minimum: 1
            type: integer
        - in: query
          name: perPage
          required: false
          schema:
            default: 50
            description: Number of hits per page (max 200).
            maximum: 200
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: Messages matching the term, best match first.
                    items:
                      additionalProperties: false
                      properties:
                        contact:
                          additionalProperties: false
                          description: >-
                            The contact of the conversation, for rendering the
                            result.
                          nullable: true
                          properties:
                            contactEmail:
                              type: string
                            contactFirstname:
                              type: string
                            contactID:
                              type: string
                            contactLastname:
                              type: string
                            contactNameVerified:
                              type: boolean
                            contactPhone:
                              type: string
                            contactPhoto:
                              nullable: true
                              type: string
                            contactSummary:
                              nullable: true
                              type: string
                          required:
                            - contactID
                            - contactFirstname
                            - contactLastname
                            - contactEmail
                            - contactPhone
                            - contactPhoto
                            - contactSummary
                            - contactNameVerified
                          type: object
                        contactID:
                          description: The contact this message belongs to.
                          type: string
                        createdAt:
                          description: When this message was created.
                          format: date-time
                          type: string
                        messageDirection:
                          description: Whether this message is inbound or outbound.
                          type: string
                        messageID:
                          description: Unique identifier for this message.
                          type: string
                        messageKey:
                          description: The message content type.
                          type: string
                        messageValue:
                          description: >-
                            Message content — the text, or an object for
                            attachments.
                        operatorID:
                          description: The operator who sent this message, if any.
                          nullable: true
                          type: string
                        sessionID:
                          description: The session this message belongs to.
                          type: string
                      required:
                        - messageID
                        - sessionID
                        - contactID
                        - operatorID
                        - messageKey
                        - messageDirection
                        - messageValue
                        - createdAt
                        - contact
                      type: object
                    type: array
                  meta:
                    additionalProperties: false
                    description: Pagination metadata.
                    properties:
                      count:
                        description: Number of messages in this page.
                        type: number
                      currentPage:
                        description: The page returned by this response.
                        type: number
                      hasMore:
                        description: >-
                          Whether the index has more hits. Can be true on a page
                          with no items — see the endpoint description.
                        type: boolean
                      perPage:
                        description: Page size used for this response.
                        type: number
                    required:
                      - hasMore
                      - count
                      - currentPage
                      - perPage
                    type: object
                required:
                  - data
                  - meta
                type: object
          description: Response for status 200.
        '206':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    description: Messages matching the term, best match first.
                    items:
                      additionalProperties: false
                      properties:
                        contact:
                          additionalProperties: false
                          description: >-
                            The contact of the conversation, for rendering the
                            result.
                          nullable: true
                          properties:
                            contactEmail:
                              type: string
                            contactFirstname:
                              type: string
                            contactID:
                              type: string
                            contactLastname:
                              type: string
                            contactNameVerified:
                              type: boolean
                            contactPhone:
                              type: string
                            contactPhoto:
                              nullable: true
                              type: string
                            contactSummary:
                              nullable: true
                              type: string
                          required:
                            - contactID
                            - contactFirstname
                            - contactLastname
                            - contactEmail
                            - contactPhone
                            - contactPhoto
                            - contactSummary
                            - contactNameVerified
                          type: object
                        contactID:
                          description: The contact this message belongs to.
                          type: string
                        createdAt:
                          description: When this message was created.
                          format: date-time
                          type: string
                        messageDirection:
                          description: Whether this message is inbound or outbound.
                          type: string
                        messageID:
                          description: Unique identifier for this message.
                          type: string
                        messageKey:
                          description: The message content type.
                          type: string
                        messageValue:
                          description: >-
                            Message content — the text, or an object for
                            attachments.
                        operatorID:
                          description: The operator who sent this message, if any.
                          nullable: true
                          type: string
                        sessionID:
                          description: The session this message belongs to.
                          type: string
                      required:
                        - messageID
                        - sessionID
                        - contactID
                        - operatorID
                        - messageKey
                        - messageDirection
                        - messageValue
                        - createdAt
                        - contact
                      type: object
                    type: array
                  meta:
                    additionalProperties: false
                    description: Pagination metadata.
                    properties:
                      count:
                        description: Number of messages in this page.
                        type: number
                      currentPage:
                        description: The page returned by this response.
                        type: number
                      hasMore:
                        description: >-
                          Whether the index has more hits. Can be true on a page
                          with no items — see the endpoint description.
                        type: boolean
                      perPage:
                        description: Page size used for this response.
                        type: number
                    required:
                      - hasMore
                      - count
                      - currentPage
                      - perPage
                    type: object
                required:
                  - data
                  - meta
                type: object
          description: Response for status 206.
        '400':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      oneOf:
                        - $ref: '#/components/schemas/MissingTenantIDError'
                        - $ref: '#/components/schemas/MissingOperatorIDError'
                        - $ref: '#/components/schemas/RequestValidationError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            MissingTenantIDError (error_code 1001): tenantID absent from the
            URL. | MissingOperatorIDError (error_code 1063): the resolved
            identity carries no operatorID. | RequestValidationError (error_code
            1002): params or query fail schema validation.
        '401':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/UnauthorizedError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: 'UnauthorizedError (error_code 1003): missing/invalid operator token.'
        '403':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/ForbiddenError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            ForbiddenError (error_code 1004): operator does not belong to this
            tenant.
        '404':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/TenantNotFoundError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            TenantNotFoundError (error_code 1062): tenantID does not resolve to
            a tenant.
        '500':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      oneOf:
                        - $ref: '#/components/schemas/MissingConfigurationError'
                        - $ref: '#/components/schemas/UnknownError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            MissingConfigurationError (error_code 5001): the search index is not
            configured. | UnknownError (error_code 5999): Unexpected internal
            error not otherwise documented for this endpoint.
components:
  schemas:
    MissingTenantIDError:
      additionalProperties: false
      properties:
        error:
          enum:
            - MissingTenantIDError
          type: string
        error_code:
          enum:
            - 1001
          type: number
        message:
          example: tenantID is required.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    MissingOperatorIDError:
      additionalProperties: false
      properties:
        error:
          enum:
            - MissingOperatorIDError
          type: string
        error_code:
          enum:
            - 1063
          type: number
        message:
          example: operatorID is required.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    RequestValidationError:
      additionalProperties: false
      properties:
        error:
          enum:
            - RequestValidationError
          type: string
        error_code:
          enum:
            - 1002
          type: number
        fields:
          items:
            additionalProperties: false
            properties:
              allowed:
                type: string
              field:
                type: string
              received:
                type: string
            required:
              - field
              - received
              - allowed
            type: object
          type: array
        message:
          example: Invalid request data.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
        - fields
      type: object
    UnauthorizedError:
      additionalProperties: false
      properties:
        error:
          enum:
            - UnauthorizedError
          type: string
        error_code:
          enum:
            - 1003
          type: number
        message:
          example: You are not authorized to perform this request.
          type: string
        statusCode:
          enum:
            - 401
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    ForbiddenError:
      additionalProperties: false
      properties:
        error:
          enum:
            - ForbiddenError
          type: string
        error_code:
          enum:
            - 1004
          type: number
        message:
          example: You do not have access to this resource.
          type: string
        statusCode:
          enum:
            - 403
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    TenantNotFoundError:
      additionalProperties: false
      properties:
        error:
          enum:
            - TenantNotFoundError
          type: string
        error_code:
          enum:
            - 1062
          type: number
        message:
          example: Tenant not found.
          type: string
        statusCode:
          enum:
            - 404
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    MissingConfigurationError:
      additionalProperties: false
      properties:
        error:
          enum:
            - MissingConfigurationError
          type: string
        error_code:
          enum:
            - 5001
          type: number
        message:
          example: Required configuration is missing.
          type: string
        statusCode:
          enum:
            - 500
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    UnknownError:
      additionalProperties: false
      properties:
        error:
          enum:
            - UnknownError
          type: string
        error_code:
          enum:
            - 5999
          type: number
        message:
          example: For some unknown reason your request has not succeeded.
          type: string
        statusCode:
          enum:
            - 500
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.