List conversation messages
Read the message history (inbound and outbound) for one conversation, oldest first.
This is how you read inbound replies; for a real-time feed subscribe to the message.received webhook instead of polling.
Messages come oldest first and the cursor walks forward, so ?limit=1 returns the first message in the conversation, not the newest reply. Take the newest reply from the message.received webhook (it carries message_id and the body), or page through to the end; the SDK's messagesAll() walks every page for you.
Always branch on has_media, not on body. A customer who sends a photo or a PDF with no caption produces an empty body. Without has_media that is indistinguishable from an empty text message, and the attachment is silently missed.
media_status is pending while we fetch the asset from WhatsApp, downloaded once it is stored, and failed when the download permanently gave up. Treat failed as terminal: WhatsApp's media handle has expired by then and the asset cannot be recovered. Poll or wait for the webhook rather than assuming a null media_url means there is no attachment.
To fetch a file, call media_download_path with your API key (GET /api/v1/conversations/{id}/messages/{messageId}/media): it answers with a signed URL that works for five minutes. media_download_path is null when the message has no file.
media_url is deprecated and will be removed on 2027-04-15: use media_download_path. Until then it is a signed link minted for each read that works for one hour (it was the stored link before, which for files you sent stayed valid for seven days). Never store it: read it again, or call the download path, when you need the file.
Request
- Base URL: https://app.blueticked.com
- URL: https://app.blueticked.com/api/v1/conversations/{id}/messages
- Auth: HTTP bearer
Path parameters
The resource's unique identifier.
Query parameters
Maximum number of items to return.
Opaque pagination cursor. Pass the next_cursor from a previous response; do not construct it yourself.
Response
Success
Example response
{
"data": [
{
"id": "763c4dc3-d46b-4c10-8bd4-3f233a933ea0",
"body": "Yes, 2pm works",
"status": "delivered",
"created_at": "2026-05-22T10:30:00.000Z",
"updated_at": "2026-05-22T10:30:00.000Z",
"media_type": "document",
"media_mime": "application/pdf",
"media_filename": "invoice-4471.pdf",
"media_status": "downloaded",
"media_download_path": "/api/v1/conversations/fa3efd47-67b2-428c-b75f-17d1dd2e9790/messages/089542d5-2dc1-4619-8063-38a4eda42716/media",
"media_url": "https://…/storage/v1/object/sign/inbound-media/…/invoice-4471.pdf?token=…"
}
],
"request_id": "req_b2e3d610e10f1b07468721ee98f0e1d2"
}Changes
No recorded changes to this operation across all 1 revision of this API.