Get run detail
Run detail: a PAGE of responses (light shape — no `answerText`; drill into `GET /api/responses/{id}/` for the full text), plus whole-run aggregated competitors and sources. `responses[]` is paged with `?page=N&page_size=M` (default 200, max 500). Walk `responsesNext` until it is null to collect every response in the run; `responsesCount` is the run's full total. `competitors` and `sources` are aggregated over the ENTIRE run on every page, so they do not need to be accumulated across pages. For poll-loop use — just "is this run done yet" — call `GET /api/runs/{id}/status/` instead: same status fields, none of the per-answer work. A run stays hidden until it is either legacy or published (`published_at` set); an unpublished run 404s the same as a nonexistent one.
/api/runs/{run_id}/Personal Access Token (create one from Settings -> API Keys in the dashboard). Send as Authorization: Bearer gr_live_.... An X-API-Key: gr_live_... header (see the apiKeyAuth scheme) is accepted as an equivalent alternative — send ONE of the two, not both.
In: header
Path Parameters
Query Parameters
1-based page number.
Rows per page. Server-side default/cap vary per endpoint.
Response Body
application/json
curl -X GET "https://example.com/api/runs/0/"{ "id": "9931", "status": "completed", "pollUrl": "/api/runs/9931/", "finishedAt": "2026-06-27T09:11:00+00:00", "brandId": "412", "categoryId": "412", "promptIds": [ "1145", "1146" ], "responses": [ { "id": "220331", "promptId": "1145", "runId": "9931", "model": "chatgpt", "modelLabel": "GPT-5", "surface": "api", "mentioned": true, "sentiment": "positive", "rank": 1, "sources": [ "https://reddit.com/r/smallbusiness/xyz" ], "sampleCount": 3, "timestamp": "2026-06-27T09:10:52+00:00", "hasText": true, "textLength": 842 } ], "responsesCount": 412, "responsesPage": 1, "responsesPageSize": 200, "responsesNext": "/api/runs/9931/?page=2", "competitors": [ { "id": "comp-run-9931-0", "categoryId": "412", "name": "Competitor Co", "mentions": 4, "averageRank": 2, "score": null, "isUserBrand": false, "sourceBreakdown": [], "canonicalKey": "competitor-co", "canonicalName": "Competitor Co" } ], "sources": [ { "domain": "reddit.com", "count": 6 } ]}Get a single response GET
The full single response (`MonitoringAnswer`) a light `GET /api/runs/{id}/` `responses[]` row drills down into — adds the full `answerText`, and optionally `answerHtml`.
Get run status GET
The four poll-loop fields from run detail — `id`, `status`, `pollUrl`, `finishedAt` — and nothing else. Reads a single run row: no answers, no competitor or source aggregation. This is the endpoint a "is the scan finished?" loop should call.