---
title: "Stream run events"
method: GET
path: "/api/v1/runs/{run_id}/events/stream"
tags: ["Runs"]
---

# Stream run events

`GET /api/v1/runs/{run_id}/events/stream`

## Request

- Base URL: `https://api.studio.kaitoi.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.studio.kaitoi.io/api/v1/runs/{run_id}/events/stream`
- Auth: HTTP bearer

Streams the same persisted lifecycle, progress, and log events returned by the polling endpoint using Server-Sent Events. The SSE id is an opaque cursor and can be sent back as Last-Event-ID or as the cursor query parameter to resume the stream.

## Path parameters

- `run_id` string, required

## Query parameters

- `cursor` string, nullable: Opaque cursor returned by a previous poll page or SSE id.

## Headers

- `Last-Event-ID` string, nullable
- `authorization` string, nullable

## Response `200`

A text/event-stream response containing PublicRunEvent payloads.

- unknown

## Other responses

- `400`: The cursor is invalid.
- `401`: Missing, malformed, expired, or revoked bearer token.
- `403`: The API key lacks the required scope or account capability.
- `404`: The run does not exist or is not owned by this user.
- `422`: Validation Error
- `429`: The client or API key exceeded the REST API rate limit.
- `503`: The shared REST API rate limiter is temporarily unavailable.

---

[API](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api.md) · [All operations](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api/revisions/239a74aa2c64?raw)
