向 Session 发送受支持的 user 事件。
POST /api/v1/cloud/sessions/{session_id}/events
向 Session 发送一个或多个可接受事件。user.message 会异步触发 Agent 执行,Agent 输出通过 list 或 stream 接口读取。
路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
session_id | string | 以 sess_ 为前缀的 Session ID |
请求头
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer $QODER_ACCESS_TOKEN |
Content-Type | 是 | application/json |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
events | array | 是 | 非空事件对象数组 |
支持的事件类型
| 类型 | 必填字段 | 说明 |
|---|---|---|
user.message | content | content 必须是非空 content block 数组 |
user.interrupt | 无 | session_thread_id 可选 |
user.tool_confirmation | tool_use_id, result | result 为 allow 或 deny。deny_message 可选,且仅在 result = "deny" 时允许传入 |
user.tool_result | tool_use_id | self-hosted worker 返回内置工具结果。content 可选;传入时必须是 content block 数组。is_error 可选 |
user.custom_tool_result | custom_tool_use_id | 返回客户端自定义工具结果。content 可选;传入时必须是 content block 数组。is_error 可选 |
user.define_outcome | description, rubric | rubric 是对象,可取 {"type":"text","content":"..."} 或 {"type":"file","file_id":"file_..."};不允许多余字段。max_iterations 可选,必须是 1–20 之间的整数。outcome_id(outc_ 前缀)由服务端生成,客户端不可传 |
events[].content。事件包含 content 字段时,需传 content block 数组。
示例请求
示例响应
HTTP 200 OK
人在环(Human-in-the-loop)响应
当事件流发出需要确认的 agent.tool_use 时,使用 user.tool_confirmation 响应:
user.tool_result 返回结果。tool_use_id 取对应 agent.tool_use 事件的 id:
agent.custom_tool_use 时,由客户端执行该工具并使用 user.custom_tool_result 响应:
错误码
| HTTP | 类型 | 触发条件 |
|---|---|---|
| 400 | invalid_request_error | events 为空、事件类型不支持、缺少必填字段、content block 非法或使用旧字段 |
| 401 | authentication_error | PAT 或 SAT 无效或过期 |
| 404 | not_found_error | Session 或 pending action 不存在 |
| 409 | invalid_request_error | Session 正在处理某个 turn,或其他 Session 状态冲突(注意:type 是 invalid_request_error,不是 conflict_error) |
示例:400 content 非法
向 user.message 传入字符串而非 content block 数组:
示例:404 Session 不存在
示例:409 Session 正在 running
在 Session 已经处于 running 状态时再发送 user.message: