RaabtaHQ
List conversations

List conversations

GET/api/v1/conversations

scope conversations:readPaginated

Threads in the shared inbox, newest first. Filter by status, channel, contact, assignee, unread state, or last update. Threads on a member’s private personal-WhatsApp number are never returned.

Query parameters

NameTypeDescription
limitoptional
integerPage size, 1–100Default: 20
cursoroptional
stringThe `next_cursor` from the previous page
statusoptional
string (enum)Where the thread sits in the inboxopenpendingclosed
channeloptional
string (enum)The channel the thread lives onwhatsappmessengerinstagramwebchatpersonal_whatsapp
contact_idoptional
string (uuid)Only this contact’s threads
assigned_tooptional
string (uuid)Only threads assigned to this member
unreadoptional
string (enum)Only threads with unread inbound messagestrue
updated_sinceoptional
string (date-time)Only threads updated at or after this time
Request
curl "https://your-crm.example.com/api/v1/conversations?status=open&limit=20" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": [
    {
      "id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
      "contact_id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
      "contact": {
        "id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
        "name": "Ayesha Khan",
        "phone": "+971501234567"
      },
      "channel": "whatsapp",
      "connection_id": null,
      "status": "open",
      "assigned_to": null,
      "ai_ownership": null,
      "needs_attention": false,
      "handoff_reason": null,
      "last_message_text": "Is the clinic open on Saturday?",
      "last_message_at": "2026-09-02T09:58:00.000Z",
      "unread_count": 1,
      "created_at": "2026-09-01T08:15:00.000Z",
      "updated_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
contact_idrequired
string (uuid)UUID
contactrequired
objectThe person on the other side
contact.idrequired
string (uuid)UUID
contact.namerequired
string | nullDisplay name
contact.phonerequired
string | nullE.164 phone number, when the channel has one
channelrequired
string (enum)The channel the thread lives onwhatsappmessengerinstagramwebchatpersonal_whatsapp
connection_idrequired
string (uuid) | nullFor personal WhatsApp: the linked number this thread is on
statusrequired
string (enum)Where the thread sits in the inboxopenpendingclosed
assigned_torequired
string (uuid) | nullMember user id, or null when unassigned
ai_ownershiprequired
string (enum) | nullWho is answering: the assistant, a human, or null = inherit from the channel’s assistant bindingaihuman
needs_attentionrequired
booleanThe assistant handed this thread to a human and nobody has picked it up
handoff_reasonrequired
string | nullWhy the thread was handed to a human, when it was
last_message_textrequired
string | nullPreview of the most recent message
last_message_atrequired
string (date-time) | null
unread_countrequired
integerInbound messages not yet marked read
created_atrequired
string (date-time)ISO 8601 timestamp
updated_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.
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.