Stream session events

⚠️
Preview — this feature is being built; the design below is the spec.
GET https://app.syntic.ai/v1/sessions/{session_id}/stream

Follow a session live as server-sent events. Each event has an id: line and a data: line of JSON. Reconnect with Last-Event-ID to resume without gaps (events are kept for replay for 24 hours). A : keep-alive comment arrives every 15 seconds; the server closes the stream after 10 minutes, and you reconnect.

For how this fits into a full workflow, see Sessions.

Headers

HeaderRequiredValue
AuthorizationYesBearer <key>: a private inference key (sk_live_...). See Authentication.
syntic-betaYes, while in previewagents-2026-11-01. Without it the call fails with 400 beta_required. See Versioning.

Path parameters

ParameterTypeDescription
session_idstringThe session id, starting with sesn_.

Body

No body. Optional request header Last-Event-ID resumes after that event.

Response

200 OK, Content-Type: text/event-stream

id: evt_01JC7M3A
data: {"type":"status.changed","status":"running","outcome":null}

id: evt_01JC7M3B
data: {"type":"tool_call.started","tool_call_id":"call_7","name":"lookup_order","arguments":{"order_id":"88123"},"executor":"client"}

id: evt_01JC7M3C
data: {"type":"status.changed","status":"requires_action","outcome":null}

Event types:

typePayload
status.changedstatus, outcome
message.deltamessage_id, delta
message.completedmessage_id, content
tool_call.startedtool_call_id, name, arguments, executor (syntic or client)
tool_call.completedtool_call_id, output (up to 8 KB), is_error, duration_ms
approval.requiredtool_call_id, name, arguments
usage.updatedusage
errorerror in the standard envelope

The list will grow over time, so skip any type your code does not recognise.

Examples

curl -sSN https://app.syntic.ai/v1/sessions/sesn_01JC7M2K4P6R8T0V2X4Z/stream \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "syntic-beta: agents-2026-11-01" \
  -H "Last-Event-ID: evt_01JC7M3B"

Errors

Errors use the error envelope and carry a request_id. Codes specific to this operation:

StatustypecodeWhen
400invalid_request_errorbeta_requiredThe syntic-beta header is missing.
404not_found_errorsession_not_foundNo session with that id in this workspace.
429rate_limit_errortoo_many_streamsMore than 5 open streams on this session.
401authentication_errorinvalid_api_keyThe key is missing, unknown, revoked or expired.
429rate_limit_errorrate_limitedToo many requests; wait for Retry-After. See Rate-limit headers.
Was this page helpful?