> For the complete documentation index, see [llms.txt](/llms.txt).
> A full single-fetch corpus is available at [llms-full.txt](/llms-full.txt).
---
title: "Run events"
description: "Follow a run as Server-Sent Events: its durable history first, then the live tail."
method: "GET"
endpoint: "/v1/runs/:runId/events"
order: 13
group: "Gateway: follow a run"
last_verified: 2026-10-08
---



`GET /v1/runs/:runId/events`

Follow a run as Server-Sent Events: its durable history first, then the live tail.


  ## Parameters

  - `X-API-KEY` _header_ **required** — A service key.
  - `runId` _string_ **required** — The run ID.
  - `Accept` _header_ **required** — `text/event-stream`.



> Each durable event carries an `id:` offset. Live-only events, such as logs and output deltas, carry none. The terminal event (`run.completed`, `run.failed`, or `run.cancelled`) carries `id: done`, and the stream ends. See [Streaming output](/docs/run/streaming-output.md) for which events are durable.



  ## Request example


```bash
curl -N "https://gw.agnt5.com/v1/runs/{run_id}/events" \
  -H "X-API-KEY: {service_key}" \
  -H "Accept: text/event-stream"
```

```javascript
const res = await fetch('https://gw.agnt5.com/v1/runs/' + runId + '/events', {
  headers: { 'X-API-KEY': serviceKey, 'Accept': 'text/event-stream' }
})
```


  ```text {{ title: 'Response (Server-Sent Events)' }}
  event: run.started
  data: {"event_type":"run.started","data":{...}}
  id: 3994114

  event: workflow.step.started
  data: {"event_type":"workflow.step.started","data":{...}}
  id: 3994116

  event: run.completed
  data: {"event_type":"run.completed","data":{...}}
  id: done
  ```



