List a run’s events
GET/api/v1/runs/{id}/events
scope
runs:readPaginatedThe run’s timeline, newest first — every tick, message, tool decision, handoff and failure. seq is a gap-free counter within the run: sort and de-duplicate on it rather than on created_at, which can tie. Payloads carry metadata, never message bodies; read the conversation for those.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string (uuid) | Run id |
Query parameters
| Name | Type | Description |
|---|---|---|
limitoptional | integer | Page size, 1–100Default: 20 |
cursoroptional | string | The `next_cursor` from the previous page |
event_typeoptional | string | Only events of this type |
Request
curl "https://your-crm.example.com/api/v1/runs/3f9a1c2e-5b7d-4e8f-9a0b-1c2d3e4f5a6b/events" \
-H "Authorization: Bearer $RAABTA_API_KEY"Response · 200 OK
{
"data": [
{
"id": "0a1b2c3d-4e5f-4a6b-8c7d-8e9f0a1b2c3d",
"run_id": "3f9a1c2e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
"seq": 1,
"event_type": "run_queued",
"payload": {
"trigger_type": "manual"
},
"created_at": "2026-09-02T09:00:00.000Z"
}
],
"meta": {
"next_cursor": null,
"has_more": false,
"limit": 20
}
}Response
Wrapped in { data: [...], meta }| Name | Type | Description |
|---|---|---|
idrequired | string (uuid) | Event id |
run_idrequired | string (uuid) | The run this belongs to |
seqrequired | integer | Gap-free position in this run feed. Sort and de-duplicate on this rather than on created_at |
event_typerequired | string | run_queued, tick_started, assistant_step, message_sent, handed_off, error, and more |
payloadrequired | map<string, any> | Per-type detail. The keys vary by event_type and may gain fields without a version bump |
created_atrequired | string (date-time) | When the event was recorded |
Errors
| Status | Code | When |
|---|---|---|
| 400 | bad_request | The request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape. |
| 400 | validation_error | The body or query failed validation. `details` lists each failing field with a `path` and a `message`. |
| 401 | unauthorized | No usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable. |
| 403 | forbidden | The 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. |
| 403 | account_suspended | The account this key belongs to is suspended. Rotating the key will not help; contact support. |
| 404 | not_found | No such resource in this account. A resource that exists in another account also returns this. |
| 429 | rate_limited | The per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying. |
| 500 | internal | Something failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists. |