API 参考
原生 HTTP 请求、认证、限制与响应字段。
基础地址与认证
使用主应用域名加 /v1,例如 https://your-deployment.example.com/v1,通过 Authorization: Bearer YOUR_API_KEY 提交平台密钥。密钥归属于账户,并使用该账户的积分余额。文档站与推理 API 是不同的服务。
POST /v1/systemone
设置 Content-Type: application/json,并可发送由客户端生成的 Idempotency-Key。请求与响应都是普通 JSON,不提供流式响应。
本页对应契约 typesafe-2026-09-18。在 typesafe-native 模式下,显式提供模型的请求会保留通过验证的原始 UTF-8 JSON 文本,包括排版、键顺序和扩展字段。响应只作检查,不会重建。错误参考与幂等章节说明安全例外及旧缓存行为。
{
"model": "jev-latest",
"state": { "message": "同一笔订单被扣款两次。" },
"questions": {
"team": {
"type": "choice",
"instructions": "选择负责审核的团队。",
"criteria": { "billing": "付款与退款", "support": "技术支持" }
},
"urgency": {
"type": "score",
"instructions": "根据有序标准评估紧急程度。",
"criteria": ["常规审核", "及时回复", "立即由人工处理"]
},
"duplicate": {
"type": "noul",
"instructions": "消息是否反映了重复扣款?"
}
}
}将请求体保存为 request.json。以下 shell 示例在设置真实地址和密钥后会发起真实请求:
curl "$SYSTEM_ONE_BASE_URL/systemone" \
-H "Authorization: Bearer $SYSTEM_ONE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: example-order-001' \
--data-binary @request.jsonWindows PowerShell 请使用 curl.exe 并按 PowerShell 语法读取环境变量,或直接使用 SDK 示例。每次新的逻辑操作都应使用新幂等键;上面的固定键仅用于示意。
请求字段
| 字段 | 约定 |
|---|---|
model | 非全空白的别名或版本 ID,1–128 个字符,不含控制字符。显式值原样传给 TypeSafe;省略时平台补入当前部署默认值,未配置时为 jev-latest。 |
state | 字段必填,值可为字符串、JSON 对象、数组或 null,供所有问题共享。 |
questions | 必填,包含 1–32 个命名问题的对象。 |
questions.*.type | 原生类型 choice、score 或 noul,不能使用 boolean。 |
questions.*.instructions | 可省略,值可为字符串、JSON 对象、数组或 null。 |
Choice 的 criteria | 必填,包含 1–255 个命名选项及描述的对象。 |
Score 的 criteria | 必填,包含 2–10 个有序档位描述的数组,下标从零开始。 |
Noul 的 criteria | 可省略、为 null,或包含可选 true / false 描述的对象。 |
问题与选项名必须包含非空白字符,最多 128 个字符。原生请求、问题和 Noul 标准对象的扩展字段会被保留,仍需满足大小、深度限制及上游校验。描述可以包含嵌套 JSON。可为 null 的状态、可省略或为 null 的说明,以及可为 null 的 Noul 标准与官方 @typesafe-ai/sdk@0.6.0 声明对齐;省略 State 字段仍然无效,最终接受情况由上游决定。项目 SDK 0.3.0 的输入校验更严格,这些形式请使用原生 HTTP 或官方客户端。
显式模型优先于部署默认值。省略模型时,网关直接在根 JSON 文本中插入默认值,不重新序列化既有数值。别名的解析结果可能随时间变化;需要可复现模型版本时,应提供上游支持的固定版本。模型列表不是版本名称的本地白名单。
原生传输会保留 9007199254740993、1e-400 等数字 token,插入默认模型时也不会改变。重复对象键(包括转义后同名)及超出受支持有限范围的数字会被拒绝。Playground 直接从编辑器生成保留精确十进制值的紧凑 JSON。计费使用解析后的规范化请求;幂等比较精确数字,避免不同高精度输入误命中同一缓存。
平台限制
| 限制 | 数值 |
|---|---|
| 原始 UTF-8 JSON 请求体 | 64 KiB / 65,536 字节 |
| 每次请求的问题数 | 32 |
| 每道 Choice 的选项数 | 255 |
| 每道 Score 的有序档位数 | 10 |
| JSON 嵌套深度 | 32 |
| 每个账户的决策请求 | 默认每分钟 120 次 |
同一账户的 API 密钥和 Playground 共享限流。所有到达账户计数器的尝试,包括重放,都会占用额度。部署者可通过 SYSTEM_ONE_RATE_LIMIT 调整限流。API 认证前还会按哈希化 IP 限制每分钟 600 次尝试。这些是平台边界,不代表所有 Jev 版本或上游的能力。
响应
以下数值仅展示响应结构,并非真实模型输出记录:
{
"model": "jev1.13.0",
"answers": {
"team": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.8, "support": 0.2 },
"confidence": 0.6
},
"urgency": {
"type": "score",
"score": 1.5,
"probabilities": { "0": 0.1, "1": 0.3, "2": 0.6 },
"confidence": 0.3,
"legend": { "0": "常规审核", "1": "及时回复", "2": "立即由人工处理" }
},
"duplicate": { "type": "noul", "noul": 0.8 }
},
"usage": { "input_tokens": 120, "output_tokens": 0 }
}model 表示上游解析出的模型名称,上面的版本和数值仅为示例。TypeSafe 原生 Choice 必须包含 type、choice、probabilities 和 confidence。Score 必须包含 type、score、probabilities、confidence 和 legend。分布键需匹配请求,分数需在校验容差内符合标准的概率加权结果。详见决策原语。
TypeSafe 响应保留 Fetch 实际收到的 JSON 文本、状态及扩展字段。缺失的 usage、token 计数、warnings 和 rounding 不会被添加;缺失或为 null 的 token 计数在账本中保持未知。示例中的零代表明确提供的数值,不是缺省值。校验可采用 Jev 两位小数的显示容差,但不会改变数值或插入 rounding。
成功正文不再添加平台 billing、request_id 或 replayed。上游可以自行返回这些同名字段;应将其保留为上游数据,不能用于平台记账。平台积分与标识均从下表的响应头读取。
项目 SDK 0.3.0 将 Noul 映射为 { type: 'boolean', probability },将用量转为驼峰命名,可能补充自身默认值,也不会暴露全部原始字段。使用 Fetch 或官方客户端的 withResponse() 获取 HTTP 头;官方客户端的快捷 requestId 是 TypeSafe 跟踪 ID,不是平台账本 ID。请显式读取 X-Request-Id。
响应头
| 响应头 | 含义 |
|---|---|
X-Request-Id | 平台请求 / 账本 ID;成功重放保留原始 ID。 |
X-Upstream-Request-Id | 有值时按 x-typesafe-request-id、x-request-id、request-id 的顺序选择上游 ID。 |
X-TypeSafe-Request-Id | 原始 TypeSafe 跟踪头,供官方客户端的 withResponse().requestId 使用。 |
X-System-One-Credits | 本次新增的平台积分扣除;成功重放或确认退款后为零。即时对账失败时省略。 |
X-RateLimit-Limit、X-RateLimit-Remaining | 账户窗口上限与剩余次数,在账户限流检查通过时返回。 |
X-RateLimit-Reset | 当前窗口重置时的 Unix 秒时间戳。 |
X-Upstream-RateLimit-* | 使用独立命名空间保留上游上限、剩余量和重置值。 |
Retry-After | 原样保留上游秒数或 HTTP 日期;平台本地限制使用秒数。 |
X-Idempotency-Replayed | 成功重放时为 true。 |
X-System-One-Response-Mode | typesafe-native、openrouter-adapted 或 legacy-cache。 |
X-System-One-Error-Source | 透传 JSON 错误为 upstream;本地错误或替换后的错误为 platform。 |
X-System-One-Error-Code | 与上游错误文字独立的稳定平台分类。 |
响应设置 Cache-Control: no-store。显式服务端幂等缓存具有独立的 24 小时规则。
只转发 Content-Type、Retry-After 及指定的跟踪、限流头,不转发上游 Cookie、跳转、认证或任意其他头。平台安全与 CORS 头仍由平台控制。OpenRouter 显式适配 /decisions 并标记 openrouter-adapted,不承诺 TypeSafe 字节保真。旧缓存按幂等章节说明标记 legacy-cache。
GET /v1/models
需要 平台 Bearer 密钥。网关使用运营者凭据读取已配置的 TypeSafe 上游,返回真实 { "models": [...] } 正文,包括各模型的 name、description、release_date 及扩展字段。不会虚构 OpenAI 风格的 { "data": [...] } 列表,也不再提供匿名能力元数据。
curl "$SYSTEM_ONE_BASE_URL/models" \
-H "Authorization: Bearer $SYSTEM_ONE_API_KEY" \
-H 'Accept: application/json'此认证请求读取实时列表,不预扣积分、不创建决策记录,使用独立的每账户每分钟 60 次限制。上游未配置时返回 503,OpenRouter 部署返回 501 model_listing_not_supported。有效版本 ID 不一定出现在列表中。Playground 直接输入模型名,不依赖这个受保护端点。
其他端点
| 端点 | 认证 | 用途 |
|---|---|---|
GET /v1/models | 平台 Bearer 密钥 | 上文说明的真实 TypeSafe { models } 响应。 |
GET /api/system-one/config | 公开 | 部署默认模型、就绪状态、欢迎积分、计费可用性、文档地址,以及 limits: { bytes, questions, choiceOptions, scoreLevels, depth },不包含凭据。 |
GET /api/system-one/keys | Better Auth 会话 | 列出自己的密钥元数据与前缀。 |
POST /api/system-one/keys | 会话 + 同源 | 用 { "name": "Server" } 创建密钥,完整密钥仅返回一次。 |
DELETE /api/system-one/keys/:id | 会话 + 同源 | 撤销自己的密钥。 |
GET /api/system-one/usage | 会话 | 当前余额、最近 30 个 UTC 日用量及该窗口内最新 50 次请求。 |
POST /api/system-one/playground | 会话 + 同源 | 使用相同的原生决策验证、上游、限制与计费流程。 |
浏览器管理端点使用现有 Better Auth 会话,不能用 Bearer 密钥代替。修改操作必须携带与应用配置完全一致的 Origin。每个账户最多 20 个有效密钥,密钥创建每分钟最多 10 次。已撤销或未知的密钥无法认证。