API ReferenceEndpointsConversations

Listing a conversation's messages

GET
/conversations/{conversation}/messages

Lists the conversation's messages, newest first, with cursor pagination. Load the first page to show the latest messages, then follow links.next for older ones.

Authenticate with the participant's token, not the API key. A token of a visitor outside the conversation gets 403.

Only what the visitor sees is listed: the visitor's messages, the agent's replies and files the agent shared. A file that no longer exists keeps its place with url set to null. File URLs are signed and stop working at expires_at; list the messages again to get new ones.

When a scheduled task runs, it runs in a child conversation, and the parent conversation gets a message of type conversation pointing to it through conversation_id. List the child's messages with this same endpoint and the same token. A child conversation is a record of the run, so sending a message to it fails with 422.

Authorization

participantToken
headerAuthorizationBearer <token>

A participant's token, from the conversation's _embedded.participants, sent as Authorization: Bearer <token>. Used to send and list messages as that participant, in every conversation they take part in. It lasts 90 days.

Path Parameters

conversation*string

The conversation's id.

Formatuuid

Query Parameters

per_page?integer

How many messages to return.

Range1 <= value <= 100
Default20
cursor?string

The cursor of the page to load. Take it from links.next/links.prev or meta.next_cursor.

Response Body

A page of messages, newest first.

application/json
  1. response
data*array<|||>
links*
meta*
curl -X GET 'https://api.rundispatch.ai/v1/conversations/497f6eca-6276-4993-bfeb-53cbbbba6f08/messages'
{  "data": [    {      "id": "0199d2f4-1c4e-7a1b-9e0e-3b1f5c6d7e80",      "role": "agent",      "type": "file",      "content": "",      "file": {        "name": "menu.pdf",        "mime_type": "application/pdf",        "url": "https://files.rundispatch.ai/menu.pdf?signature=4f9c2e7a",        "preview_url": null,        "download_url": "https://files.rundispatch.ai/menu.pdf?download=1&signature=4f9c2e7a",        "expires_at": "2026-10-13T09:00:00+00:00"      },      "failed": false,      "created_at": "2026-10-13T08:00:05+00:00"    },    {      "id": "0199d2f4-1a2b-7c3d-8e4f-5a6b7c8d9e0f",      "role": "agent",      "type": "text",      "content": "Here's our menu.",      "failed": false,      "citations": [        {          "url": "https://docs.example.com/menu",          "title": "Our menu"        }      ],      "created_at": "2026-10-13T08:00:04+00:00"    },    {      "id": "0199d2f4-0f1e-7d2c-9b3a-4c5d6e7f8091",      "role": "user",      "type": "text",      "participant_id": "0199e4a0-5b6c-7d8e-9f01-23456789abcd",      "content": "Show me the menu",      "context": [        {          "label": "Page",          "description": "Page the visitor is on",          "value": "/menu"        }      ],      "created_at": "2026-10-13T08:00:00+00:00"    }  ],  "links": {    "first": null,    "last": null,    "prev": null,    "next": "https://api.rundispatch.ai/v1/conversations/0199d2f4-0a1b-7c2d-8e3f-405162738495/messages?cursor=eyJpZCI6MX0"  },  "meta": {    "path": "https://api.rundispatch.ai/v1/conversations/0199d2f4-0a1b-7c2d-8e3f-405162738495/messages",    "per_page": 20,    "next_cursor": "eyJpZCI6MX0",    "prev_cursor": null  }}