基础信息
- Base URL:
https://agentapi.kira.art(浏览器直连,不经 kira-be) - 开发环境:
http://localhost:8090 - 认证:Bearer JWT(客户端)或
X-Internal-Key(服务器到服务器),见下 - 响应格式:JSON;
/stream为text/event-stream(SSE) - 设计风格:纯 REST,用 HTTP 状态码而非自造 string enum;无 v4 message 兼容
认证按路由分三种:agent 端点(
/task、/stream、/messages、/thread/:id/current-task)挂 eitherAuth()(JWT 或 X-Internal-Key);POST /video/submit/:taskId 挂 supabaseAuth()(仅 JWT);GET /(根信息)与 GET /health 无认证(在根 app 上)。CORS 放行 localhost:3000、*.kira.art、*.poisson.art,并放过 Last-Event-ID 与 W3C trace header(traceparent / tracestate / baggage)。认证
- 客户端:
Authorization: Bearer <Supabase JWT>——hono/jwk验 ES256,从jwtPayload.sub取userId。 - 服务器到服务器:
X-Internal-Key: $INTERNAL_KEY。 - agent 端点两条路径派发到同一中间件
eitherAuth();POST /video/submit/:taskId单独挂supabaseAuth()(只认 JWT,无 internal-key 路径);GET /与GET /health无认证。 - 资源归属校验:
task.userId/messages.resource_id/video行的resource_id必须等于当前userId,否则403/404。
Endpoint 索引
| Method | Path | Auth | 用途 | 成功 / 失败 |
|---|---|---|---|---|
| POST | /task | eitherAuth | 启动 agent run(dedup lock + plan 校验 + 可选 rewind) | 201 {taskId} / 409 {taskId,reason:"running"} / 503 draining |
| GET | /task/:taskId | eitherAuth | 查 task 状态 | 200 TaskInfo / 404 / 403 |
| DELETE | /task/:taskId | eitherAuth | 停 task(幂等,发 abort 信号) | 204 / 404 / 403 |
| GET | /stream/:taskId | eitherAuth | SSE 流(支持 Last-Event-ID 续读) | 200 text/event-stream / 404 / 403 |
| GET | /thread/:threadId/current-task | eitherAuth | thin lookup:thread 当前在途 task | 200 {task:null|{...}} / 403 |
| GET | /messages/:threadId | eitherAuth | thread 历史 messages(v5,升序) | 200 {messages:[...]} / 500 |
| POST | /video/submit/:taskId | JWT only | 重试失败视频生成(insufficient_*) | 200 {success:true} / 400 / 401 / 404 / 500 |
| GET | / | none | 服务信息 | 200 {service:"kira-agent",version} |
| GET | /health | none | 健康检查(draining 时 503) | 200 {status:"ok"} / 503 {status:"draining"} |
HTTP 语义约定
| 状态码 | 含义 |
|---|---|
201 | POST /task 成功创建并启动 run |
409 | 同 thread 已有在途 run(dedup lock 命中);body 带现役 taskId 供客户端续连 |
204 | DELETE /task 成功(幂等;task 仍 running 时才真正发 abort) |
200 | 查询类成功 |
404 | task 不存在(已过 TTL 或从未创建) |
403 | 资源不属于当前用户 |
401 | 缺/无效 JWT |
503 | 实例正在 graceful drain(拒新 run / health 摘机) |
一次完整对话的调用顺序
打开 thread,检查在途 task
GET /thread/:threadId/current-task。若有在途 task,直接去 GET /stream/:taskId 续连;否则准备发新消息。