---
title: "Stream run"
method: GET
path: "/runs/{id}/stream"
tags: ["Runs"]
---

# Stream run

`GET /runs/{id}/stream`

## Request

- Base URL: `https://api.edgaze.ai/v1`
- URL: `https://api.edgaze.ai/v1/runs/{id}/stream`
- Auth: HTTP bearer

Server-Sent Events stream of the run's log. Resume with the `Last-Event-ID` header to skip already-received sequences. Each SSE `data:` frame is a `RunEvent` — the `event:` name is the event type (or `run.status` for lifecycle transitions) and `id:` is the `sequence`. Node output arrives as `node.output.delta` frames whose `data.text` you append in order, so this is the endpoint to build a live progress UI on rather than polling. A connection rolls over about every 5 minutes: it ends with `retry: 1000` and an `event: reconnect` frame whose `id:` is the last sequence it sent; reconnect with that id as `Last-Event-ID` and nothing is lost or repeated.

## Path parameters

- `id` string, required: UUID returned from POST /runs.

## Query parameters

- `afterSequence` integer

## Headers

- `Last-Event-ID` string

## Response `200`

SSE stream of run events.

## Other responses

- `400`: Invalid `Last-Event-ID` cursor.
- `401`: Invalid or missing API key.
- `403`: API key is missing the required scope.
- `404`: Run not found.

---

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