runs

One run's own event log, whatever workspace it is in

The run log as the RunAgent Durable Object holds it, unredacted: internal_detail, the raw failure text, the fanout and wave-fanout measurements, role_loop_no_answer, synthesis_fallback, and every error event. THE ONE CROSS-WORKSPACE READ on this API. It answers for any run id, which is the point: the per-call diagnostics the pipeline writes are invisible to wrangler tail (a Workflow step’s console output does not reach it), the Observability query API needs a token scope this project does not hold, the AI Gateway runs with collect_logs: false, and D1 holds no event rows — so before this endpoint a diagnosis needed a key bound to the run’s own workspace, and a run in a workspace nobody held a key for could not be read at all. Owner session, or an API key with admin:read (admin implies it). Every call writes an operator.run_events.read audit row naming the run and how many events were returned, and nothing else. Read only: there is no write on this path.

get/v1/admin/runs/{id}/events

Request

  • Base URL: https://api.hyperresearch.ai
  • URL: https://api.hyperresearch.ai/v1/admin/runs/{id}/events
  • Auth: one of:
    • HTTP bearer
    • API key in cookie hr_session

Path parameters

idstring required

Query parameters

afterinteger nullable

Return events with seq strictly greater than this. Omit to start at the beginning.

limitinteger

Page size, 1–1000 (default 200). The Durable Object caps its own page at 1000.

kindsstring

Comma-separated kinds to keep, matched against both the event type and its kind — provider_rejected,error or fanout,wave-fanout or just step. Filtering happens AFTER the page is fetched, so next_after still advances past events that were filtered out and a page can come back empty with has_more true.

Response

A page of the run log

run_idstring required
workspace_idstring required
statusstring required

The control row status at the moment of the read.

afterinteger required
limitinteger required
kindsstring[] nullable required
scannedinteger required

Events the page held before the kinds filter.

countinteger required

Events returned after the filter.

next_afterinteger required

Cursor for the next page: the highest seq scanned, filtered or not.

has_moreboolean required

True when the page came back full, so there is certainly more log behind it.

Changes

No recorded changes to this operation across all 1 revision of this API.