RaabtaHQ
Update status or assignment

Update status or assignment

PATCH/api/v1/conversations/{id}

scope conversations:write

Change the thread’s status or assign it to a member (assigned_to: null unassigns). To move a thread between the assistant and a human, use the takeover and return-to-ai actions instead — those cancel or resume assistant runs, which a field write cannot.

Path parameters

NameTypeDescription
idrequired
string (uuid)Conversation id

Body

application/json
NameTypeDescription
statusoptional
string (enum)Where the thread sits in the inboxopenpendingclosed
assigned_tooptional
string (uuid) | nullMember user id from GET /members, or null
Request
curl -X PATCH "https://your-crm.example.com/api/v1/conversations/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8" \
  -H "Authorization: Bearer $RAABTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "pending"
  }'
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": "pending",
    "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"
  }
}

Response

Wrapped in { data: … }
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.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
422unprocessableThe request was well-formed but cannot be carried out. `reason` is a stable string saying why (for example `outside_window` or `stage_not_in_pipeline`).
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.