6bb0c3577de2
Find messages by query
Get messages by query with support for filtering and pagination.
Filtering:
- Filter by ticket: ticket=507f1f77bcf86cd799439011. Any identifier GET /tickets/{ticketId} accepts works here too — the human-facing ticket number shown in the dashboard (ticket=143790), the 24-char ObjectId, or the shareToken.
- Filter by type: type=TEXT or type=TEXT,NOTE (comma-separated values match any; bracket syntax such as type[$in]=... is NOT supported)
- Filter by bot messages: bot=true or bot=false
- Filter by date range: createdAt>=2024-01-01&createdAt<=2024-12-31
Ordering: Messages are always returned oldest-first (ascending createdAt); the sort order is not configurable.
Pagination:
- Cursor mode (recommended): pass paginated=true to receive { items, hasMore, nextBefore }; pass before=<messageId> (the previous nextBefore) to fetch the next older page. skip is ignored in this mode; limit defaults to 30 and is clamped to 1-100.
- Legacy mode (no paginated): returns a flat array; limit defaults to 1000 and values above 100 are clamped to 100; skip is applied.
Exporting a full conversation: Filter by ticket rather than by bot. bot=true selects messages exchanged with the AI bot, so on a conversation that was handed over to a human it omits the agent's replies — ticket={ticketId} returns the complete transcript. Thread replies are not part of the main feed either; fetch them per message with GET /messages/{messageId}/thread. Which conversations still exist is governed by retention — AI-only (type=BOT) conversations are deleted about 33 days after they are created, see GET /tickets.
Ticket history: Since August 2026 this endpoint returns conversation messages only. Audit entries — FEEDBACK_UPDATED (status, assignee, team, priority, type, tag, title changes, …) and workflow/system entries — are no longer part of the response; filtering by those types returns an empty result. Fetch them from GET /tickets/{ticketId}/history, which returns them in the same message-compatible shape.
Translation:
- language=es returns messages translated into the given language. Requires the project setting 'translate customer messages'; only conversation messages (TEXT, USER_TEXT, NOTE, BOT, BOT_REPLY, SHARED_COMMENT) are translated, and messages already in the target language are returned unchanged.
Query parameters
- Set to true for cursor mode: returns { items, hasMore, nextBefore }
- Cursor for the next older page (the previous response's nextBefore); only with paginated=true
- Maximum number of messages to return. Cursor mode: default 30, clamped to 1-100. Legacy mode: default 1000, values above 100 are clamped to 100.
- Deprecated, accepted and ignored. Ticket-history entries are served by GET /tickets/{ticketId}/history.
Headers
Response
Ok