Realtime runs
POST /v1/realtime/runs returns text/event-stream. Use it when your product needs live assistant output, tool progress, artifacts, and a terminal event.
Event format
Each event uses standard Server-Sent Events framing:event name first, then parse the JSON data payload for that event.
Events
| Event | Meaning |
|---|---|
run.created | The run record and conversation are ready. |
message.created | A new assistant message started. |
output_text.delta | Incremental assistant text. |
tool.started | A tool call started. |
tool.completed | A tool call completed. |
artifact.created | A file, image, or artifact was produced. |
run.completed | The run completed successfully. |
run.failed | The run reached a terminal failure. |
error | Stream-level error data. |
ping | Keepalive event. |
Terminal events
Realtime runs end with eitherrun.completed or run.failed.
Client notes
- Reconnect behavior is your responsibility. If the stream disconnects, fetch the run with
GET /v1/runs/{run_id}when you have a run ID. - Realtime runs do not support
webhook_url; the terminal result is delivered through the stream. - Keep rendering tolerant of new event fields. Event payloads may gain additional fields over time.