Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.qoder.com/llms.txt

Use this file to discover all available pages before exploring further.

GET /v1/sessions/{session_id}/events/stream Receives all events in a session in real time through Server-Sent Events (SSE). After the connection is established, the server pushes the session’s complete event history and continues to stream new events as they occur.

Path parameters

ParameterTypeDescription
session_idstringSession ID with the sess_ prefix

Headers

HeaderRequiredDescription
AuthorizationYesBearer $QODER_PAT
AcceptRecommendedtext/event-stream

Query parameters

ParameterTypeRequiredDescription
after_idstringNoOnly receive events created after this event ID

Example request

curl -N -X GET "https://openapi.qoder.sh/api/v1/cloud/sessions/sess_019e392c0d1e74e095d21ea4c6b41def/events/stream" \
  -H "Authorization: Bearer $QODER_PAT" \
  -H "Accept: text/event-stream"

Example response

HTTP 200 OK Content-Type: text/event-stream Each event follows the standard SSE format:
id: <event_id>
event: <event_type>
data: <json_payload>

SSE format examples

User message:
id: evt_019e392c0d787cfaa21bda98e06cd913
event: user.message
data: {"id": "evt_019e392c0d787cfaa21bda98e06cd913", "type": "user.message", "content": "Hello", "turn_id": "turn_019e392c0d787ceea6bb62943f9ac3ec", "created_at": "2026-05-18T03:40:48.888851795Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:40:48.888851795Z", "schema_version": "1.0"}
Session scheduled:
id: evt_771c1195bcbd4a07834d4ed4dd6450ca
event: session.status_rescheduled
data: {"id": "evt_771c1195bcbd4a07834d4ed4dd6450ca", "type": "session.status_rescheduled", "turn_id": "turn_019e392c0d787ceea6bb62943f9ac3ec", "created_at": "2026-05-18T03:40:50.321Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:40:50.321Z", "schema_version": "1.0"}
Agent reply:
id: evt_f8599c68e7784f2d8c490af1b3056716
event: agent.message
data: {"id": "evt_f8599c68e7784f2d8c490af1b3056716", "type": "agent.message", "content": [{"text": "Got it! Message received.", "type": "text"}], "turn_id": "turn_019e392d6aad7158b377c039c6ba5db3", "created_at": "2026-05-18T03:42:41.194Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "processed_at": "2026-05-18T03:42:41.194Z", "schema_version": "1.0"}
Session idle (turn complete):
id: evt_a289470296c94e7ba8d7ea562efe5925
event: session.status_idle
data: {"id": "evt_a289470296c94e7ba8d7ea562efe5925", "type": "session.status_idle", "usage": {"input_tokens": 150, "output_tokens": 42, "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0}, "status": "idle", "turn_id": "turn_019e392d6aad7158b377c039c6ba5db3", "created_at": "2026-05-18T03:42:41.195Z", "session_id": "sess_019e392c0d1e74e095d21ea4c6b41def", "stop_reason": {"type": "end_turn"}, "processed_at": "2026-05-18T03:42:41.195Z", "schema_version": "1.0"}

Event types

Full event type list:
event (SSE field)Description
user.messageUser-sent message
session.status_rescheduledAgent scheduled for processing
span.model_request_startModel inference request started
agent.thinkingAgent thinking (internal reasoning)
agent.messageAgent-generated reply
session.status_idleProcessing complete, session back to idle
span.model_request_endModel inference request ended
session.errorError occurred during processing
terminatedTurn terminated

Typical event lifecycle

A complete conversation turn typically streams events in this order:
  1. user.message – User message enqueued
  2. session.status_rescheduled – Agent scheduled
  3. span.model_request_start – Model call begins
  4. agent.thinking – Agent internal reasoning
  5. agent.message – Agent generates reply
  6. session.status_idle – Turn complete, back to idle (includes usage stats)
  7. span.model_request_end – Model call ends

Client implementation guidance

  • Use the EventSource API or an HTTP client that supports SSE
  • Listen for the session.status_idle event to detect the end of a conversation turn
  • Use the turn_id field to correlate all events belonging to the same turn
  • The connection stays open until the client disconnects; the server continues to push new events

Errors

HTTPTypeTrigger
401authentication_errorPAT invalid or expired
404not_found_errorSession does not exist
See Errors for the full error envelope.