RaabtaHQ
List runs

List runs

GET/api/v1/runs

scope runs:readPaginated

Assistant runs, newest first. Returns ROOT runs only unless you pass parent_run_id: a run that delegates spawns sub-agents, and listing those beside their parent would return six rows for one piece of work. Runs 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)Only runs in this statequeuedrunningwaiting_replywaiting_approvalwaiting_childrencompletedfailedcancelled
assistant_idoptional
string (uuid)Only runs of this assistant
contact_idoptional
string (uuid)Only runs about this contact
conversation_idoptional
string (uuid)Only runs on this conversation
trigger_typeoptional
stringmanual, inbound_message, schedule, event, webhook or delegation
created_sinceoptional
string (date-time)Only runs created at or after this time
parent_run_idoptional
string (uuid)List this run’s sub-agents instead of the root runs
Request
curl "https://your-crm.example.com/api/v1/runs?status=completed&limit=20" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": [
    {
      "id": "3f9a1c2e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
      "assistant_id": "8f2c1d3e-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
      "assistant": {
        "id": "8f2c1d3e-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
        "name": "Front desk",
        "color": "#0ea5e9"
      },
      "status": "completed",
      "goal": "Follow up with Ayesha about her missed appointment and offer to rebook.",
      "trigger": {
        "type": "manual",
        "trigger_id": null,
        "trigger_name": null,
        "event_key": null
      },
      "contact_id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
      "conversation_id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
      "parent_run_id": null,
      "root_run_id": "3f9a1c2e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
      "depth": 0,
      "result": {
        "outcome": "success",
        "summary": "Rebooked for Saturday at 11:00."
      },
      "tick_count": 4,
      "cost_usd": 0.0182,
      "error_code": null,
      "error_message": null,
      "started_at": "2026-09-02T09:00:00.000Z",
      "ended_at": "2026-09-02T09:03:12.000Z",
      "created_at": "2026-09-02T09:00:00.000Z"
    }
  ],
  "meta": {
    "next_cursor": null,
    "has_more": false,
    "limit": 20
  }
}

Response

Wrapped in { data: [...], meta }
NameTypeDescription
idrequired
string (uuid)Run id
assistant_idrequired
string (uuid)The assistant running
assistantrequired
object | nullThe assistant, or null if it has since been deleted
assistant.idrequired
string (uuid)Assistant id
assistant.namerequired
stringAssistant name
assistant.colorrequired
string | nullAccent colour
statusrequired
string (enum)Where the run is in its lifecyclequeuedrunningwaiting_replywaiting_approvalwaiting_childrencompletedfailedcancelled
goalrequired
stringWhat this run was asked to do
triggerrequired
objectWhere the run came from
trigger.typerequired
stringOne of manual, inbound_message, schedule, event, webhook or delegation
trigger.trigger_idrequired
string (uuid) | nullThe assistant trigger, when one fired it
trigger.trigger_namerequired
string | nullThat trigger name
trigger.event_keyrequired
string | nullThe event key, for an event trigger
contact_idrequired
string (uuid) | nullThe contact it concerns, if any
conversation_idrequired
string (uuid) | nullThe thread it may answer in, if any
parent_run_idrequired
string (uuid) | nullSet when this is a sub-agent of another run
root_run_idrequired
string (uuid) | nullThe top of the delegation tree
depthrequired
integer0 for a root run
resultrequired
object | nullPresent once the run has ended
result.outcomerequired
string | nullHow it ended, in one word
result.summaryrequired
string | nullOne line on what happened
tick_countrequired
integerModel turns this run has taken
cost_usdrequired
numberBilled AI spend attributed to this run
error_coderequired
string | nullMachine code when the run failed
error_messagerequired
string | nullOperator-facing failure text
started_atrequired
string (date-time)When the run was created
ended_atrequired
string (date-time) | nullWhen it reached a terminal status
created_atrequired
string (date-time)When the row was written

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.