RaabtaHQ
List messages in a conversation

List messages in a conversation

GET/api/v1/conversations/{id}/messages

scope messages:readPaginated

The thread’s messages, newest first, as the customer saw them. Internal AI-activity notes are excluded.

Path parameters

NameTypeDescription
idrequired
string (uuid)Conversation id

Query parameters

NameTypeDescription
limitoptional
integerPage size, 1–100Default: 20
cursoroptional
stringThe `next_cursor` from the previous page
Request
curl "https://your-crm.example.com/api/v1/conversations/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8/messages" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": [
    {
      "id": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
      "conversation_id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
      "direction": "inbound",
      "sender_type": "customer",
      "type": "text",
      "text": "Is the clinic open on Saturday?",
      "media_url": null,
      "template_name": null,
      "status": "delivered",
      "channel_message_id": "wamid.HBgLOTcxNTAxMjM0NTY3FQIAEhgUM0E5QjZDRkQ0RkQ5QjM3RTQ3NkQA",
      "reply_to_message_id": null,
      "created_at": "2026-09-02T09:58:00.000Z"
    }
  ],
  "meta": {
    "next_cursor": null,
    "has_more": false,
    "limit": 20
  }
}

Response

Wrapped in { data: [...], meta }
NameTypeDescription
idrequired
string (uuid)UUID
conversation_idrequired
string (uuid)UUID
directionrequired
string (enum)inbound = from the customerinboundoutbound
sender_typerequired
string (enum)bot = the assistant or an API key; agent = a member in the inboxcustomeragentbot
typerequired
string (enum)Content typetextimagedocumentaudiovideolocationtemplateinteractive
textrequired
string | nullBody text, or the caption of a media message
media_urlrequired
string | nullURL of the attached image, video, document or audio
template_namerequired
string | nullThe template this message was sent from, for template sends
statusrequired
string (enum)Delivery status as reported by the channelsendingsentdeliveredreadfailed
channel_message_idrequired
string | nullThe channel’s own id (a WhatsApp wamid, a Messenger mid)
reply_to_message_idrequired
string (uuid) | nullThe message this one replies to, when the customer quoted one
created_atrequired
string (date-time)ISO 8601 timestamp

Errors

StatusCodeWhen
400bad_requestThe request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape.
400validation_errorThe body or query failed validation. `details` lists each failing field with a `path` and a `message`.
401unauthorizedNo usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable.
403forbiddenThe key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which.
403account_suspendedThe account this key belongs to is suspended. Rotating the key will not help; contact support.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
429rate_limitedThe per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying.
500internalSomething failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists.