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
通过 Server-Sent Events (SSE) 实时接收 Session 中的所有事件。连接建立后,服务端会推送该 Session 的完整事件历史,并在有新事件产生时继续推送。
请求头
| 头部 | 必选 | 说明 |
|---|
Authorization | 是 | Bearer <PAT> |
Accept | 推荐 | text/event-stream |
路径参数
| 参数 | 类型 | 必选 | 说明 |
|---|
session_id | string | 是 | Session ID(sess_ 前缀) |
查询参数
| 参数 | 类型 | 必选 | 说明 |
|---|
after_id | string | 否 | 仅接收该事件 ID 之后的事件 |
示例请求
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"
示例响应
HTTP 200 OK
Content-Type: text/event-stream
每个事件遵循 SSE 标准格式:
id: <event_id>
event: <event_type>
data: <json_payload>
SSE 格式示例
用户消息:
id: evt_019e392c0d787cfaa21bda98e06cd913
event: user.message
data: {"id": "evt_019e392c0d787cfaa21bda98e06cd913", "type": "user.message", "content": "你好", "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"}
会话调度:
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 回复:
id: evt_f8599c68e7784f2d8c490af1b3056716
event: agent.message
data: {"id": "evt_f8599c68e7784f2d8c490af1b3056716", "type": "agent.message", "content": [{"text": "收到!消息已成功接收。", "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"}
会话空闲(Turn 完成):
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 (SSE field) | 说明 |
|---|
user.message | 用户发送的消息 |
session.status_rescheduled | Agent 开始被调度处理 |
span.model_request_start | 模型推理请求开始 |
agent.thinking | Agent 思考中(内部推理) |
agent.message | Agent 生成的回复消息 |
session.status_idle | 处理完成,Session 回到空闲 |
span.model_request_end | 模型推理请求结束 |
session.error | 处理过程中发生错误 |
terminated | Turn 被终止 |
典型事件流生命周期
一次完整的对话 Turn 通常按以下顺序接收事件:
user.message — 用户消息入队
session.status_rescheduled — Agent 被调度
span.model_request_start — 开始模型调用
agent.thinking — Agent 内部推理
agent.message — Agent 生成回复
session.status_idle — Turn 完成,回到空闲(含 usage 统计)
span.model_request_end — 模型调用结束
客户端实现建议
- 使用
EventSource API 或支持 SSE 的 HTTP 客户端
- 监听
session.status_idle 事件判断一轮对话是否结束
- 通过
turn_id 字段关联同一轮对话的所有事件
- 连接会保持打开直到客户端断开,服务端持续推送新事件
错误码
| HTTP | type | 触发条件 |
|---|
| 401 | authentication_error | PAT 无效或过期 |
| 404 | not_found_error | Session 不存在 |
完整错误信封说明详见 错误参考。