2026-10-20
Praxis 是智能体云平台。API 按服务组织:智能体、模型、沙箱、搜索、自动化,各在自己的前缀下。请求与响应用 JSON,流式响应用 SSE,使用标准的 HTTP 动词与状态码。所有前缀共用一个地址和一个 Key。
https://api.deepraxis.com使用服务 API 页列出的客户端库。兼容接口使用对应协议的官方 SDK;自动化提供 TypeScript SDK,本地安装方式见自动化 API。
| 服务 | 前缀 | API 页 |
|---|---|---|
| 智能体 | /agent | Agent API |
| 模型 | /model | Model API |
| 沙箱 | /sandbox | Sandbox API |
| 搜索 | /search | Search API |
| 自动化 | /automation | Automation API |
已经在用 OpenAI、Anthropic、Google、E2B 或 Tavily 的代码,不需要改成 Praxis 的接口:平台提供与这些厂商官方 API 一致的兼容前缀,只改地址就能用。
| 厂商 | 前缀 | API 页 |
|---|---|---|
| OpenAI | /openai | OpenAI 兼容 |
| Anthropic | /anthropic | Anthropic 兼容 |
/google | Google 兼容 | |
| E2B | /e2b | E2B 兼容 |
| Tavily | /tavily | Tavily 兼容 |
所有前缀共用在控制台创建的 API Key,随请求放在 Authorization 头里。详见鉴权。
429,响应头告诉你何时可以重试。详见限流。/meta 前缀下。curl https://api.deepraxis.com/model/v1/chat/completions \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-flash", "messages": [{"role": "user", "content": "你好"}]}'所有接口用同一种凭证:在控制台创建的 API Key,随请求放在 Authorization 头里。没有别的鉴权方式,也没有按接口不同的规则。
Authorization: Bearer {key}| 段 | 含义 | 例子 |
|---|---|---|
Bearer | 固定字样 | Bearer |
{key} | 你的 API Key,以 sk-praxis- 开头 | sk-praxis-a1b2… |
一个 Key 通所有前缀下的接口。Key 在控制台 → API Key 创建、轮换和吊销;吊销立即生效。
你不需要自己拼这个头——官方 SDK 会放;我们同时接受各家 SDK 默认使用的头名。
| SDK | 你传什么 | 实际发出的头 |
|---|---|---|
| OpenAI SDK | apiKey | Authorization: Bearer … |
| Anthropic SDK | apiKey | X-API-Key: … |
| Google GenAI SDK | apiKey | x-goog-api-key: … |
| E2B SDK | apiKey | X-API-Key: … |
| Tavily SDK / HTTP | apiKey | Authorization: Bearer … |
curl https://api.deepraxis.com/model/v1/models \
-H "Authorization: Bearer $PRAXIS_API_KEY"Key 缺失、无效或已吊销,返回 401,错误体按该前缀的格式(见错误)。收到 401 不要重试——换对 Key 再发。
PRAXIS_API_KEY),不要写进代码。出错时,HTTP 状态码告诉你错误属于哪一类;错误体按该前缀的格式给出具体原因;每个错误响应还带四个 x-praxis-problem-* 头和一个 x-praxis-recovery-action(限流错误再多带一个 x-praxis-problem-scope,见限流),不论错误体长什么样,重试逻辑只看头就够。
| 状态码 | 含义 | 你该做什么 |
|---|---|---|
400 | 请求字段或格式不合法 | 修正参数,不要原样重试 |
401 | 缺少或无效的凭证 | 检查 API Key |
402 | 余额或付费额度不足 | 补充余额或联系账户管理员 |
403 | 无权访问该资源或操作 | 核对 Key 权限与资源归属;必要时联系支持 |
404 | 资源、模型或路径不存在 | 检查 ID、模型名和路径 |
408 | 请求超时 | 检查网络后重试;写操作先确认是否已完成 |
409 | 资源状态或并发修改冲突 | 重新读取状态,再调整请求 |
413 | 请求体或文件超过大小限制 | 减小内容或改用端点支持的 URL 输入 |
422 | 请求内容无法处理 | 根据错误详情修正参数或输入 |
429 | 请求速率、并发或模型额度超限 | 按 retry-after 等待;并发超限时等待在途请求结束 |
500 | 平台内部错误 | 稍后重试;持续出现请附 X-Request-Id 联系支持 |
501 | 功能尚未支持 | 换用已支持的端点,不要重试 |
502 | 上游调用失败或返回无效响应 | 退避重试,持续失败时换模型或联系支持 |
503 | 服务或可用线路暂不可用 | 退避重试,或选择其它模型 |
504 | 上游响应超时 | 退避重试;写操作先确认结果,避免重复创建 |
以下是常见的机器可读错误码,不是所有端点的封闭枚举。兼容接口的错误体可能使用协议自己的 code/type;跨协议判断可读取 x-praxis-problem-code,其值可能与错误体 code 不同。大小写按返回值区分。
| code | 什么时候出现、该怎么办 |
|---|---|
AUTHENTICATION_ERROR | Key 缺失或无效;检查并更换凭证。 |
VALIDATION_ERROR | 参数不符合格式、类型或范围要求;按详情改参数。 |
INPUT_NOT_REPRESENTABLE | 所选模型或协议无法表达输入选项;删除该选项或换模型。 |
NOT_FOUND | 资源不存在或对当前账户不可见;核对 ID 与账户。 |
MODEL_NOT_FOUND | 模型不存在或不可见;从模型列表选取可用名称。 |
MODEL_PROTOCOL_NOT_OFFERED | 模型不提供所请求的协议;换用其支持的端点或模型。 |
MODEL_PROTOCOL_LINE_UNAVAILABLE | 支持该协议的合格线路暂不可用;退避重试或换模型。 |
GENERATION_NOT_FOUND | 生成记录不存在或不属于当前账户;核对响应头中的生成 ID 与 Key。 |
RATE_LIMITED | 超过速率或并发限额;按 retry-after 等待并降低速率或并发。 |
UPSTREAM_ERROR | 上游调用失败或响应不合法;按 retryable 退避重试,持续失败时换模型或联系支持。 |
PROVIDER_SELECTION_NOT_ALLOWED | 指定供应商 order/only 时没有携带 BYOK;移除供应商选择或提供自己的上游 Key。 |
not_implemented | 该端点或能力未实现;换用已支持的能力,不要原样重试。 |
model_protocol_not_offered | HTTP 404;模型未声明所请求的协议。查询 GET /model/v1/models 的 supported_apis,改用相应入口,例如声明 Google 协议的模型使用 /google/v1beta/models/{model}:generateContent;不要只换前缀而保留另一协议的请求体。 |
provider_unavailable | HTTP 502;本次请求的可用线路全部失败。退避重试,持续失败时换模型,并附 X-Request-Id 联系支持。 |
thinking_disable_unsupported | HTTP 400;模型不能关闭思考,例如对 glm-5.3 设置 reasoning_effort="none"。移除关闭设置或选择支持的思考等级;需要关闭思考时换模型。 |
insufficient_quota / INSUFFICIENT_BALANCE | HTTP 402;余额不足,错误体或响应头的代码因入口而异。充值或联系账户管理员后再重试,不要立即循环重试。 |
validation_error(response_format) | HTTP 400;例如 Model "deepseek-flash" does not support json_schema on this API.。换用在该入口支持 json_schema 的模型;若只需要合法 JSON,可改用 json_object,但它不保证 schema 约束。 |
validation_error(参数被点名) | HTTP 400;设置 provider.require_parameters=true 时,所选模型仍可能无法支持请求参数,例如 param: "logprobs"、does not support the requested logprobs value。按 param 和消息调整参数或换模型;不要只关闭检查后假定参数已生效。 |
错误体的格式跟着地址第一段走,和成功响应一致——你的 SDK 不需要为错误特殊处理。
厂商前缀(/openai /anthropic /google /e2b /tavily):和该前缀对应的官方 API 错误体一模一样。
// /openai
{ "error": { "code": 401, "message": "Invalid API key." } }// /anthropic
{ "type": "error", "error": { "type": "authentication_error", "message": "Invalid API key." } }Praxis 前缀(/agent /model /sandbox /search /meta):标准的 Problem Details(RFC 9457),Content-Type: application/problem+json。
{
"type": "https://deepraxis.ai/problems/authentication_error",
"title": "authentication_error",
"status": 401,
"detail": "Invalid API key.",
"instance": "problem_eqfnxu",
"code": "AUTHENTICATION_ERROR",
"retryable": false
}| 字段 | 含义 |
|---|---|
type | 错误类型的 URL,稳定,可用来分支 |
title / detail | 给人读的摘要与具体原因 |
status | 同 HTTP 状态码 |
instance | 本次错误的 ID,联系支持时附上 |
code | 机器可读的错误码 |
retryable | 原样重试是否可能成功 |
五个通用头与错误体格式无关;第六个 scope 头仅适用于限流错误:
| 头 | 含义 | 例子 |
|---|---|---|
x-praxis-problem-code | 跨协议分类码;可能与错误体的 code 不同 | AUTHENTICATION_ERROR |
x-praxis-problem-kind | 错误大类——出了什么事 | authentication_failure |
x-praxis-problem-origin | 错误归谁——谁能解决它:user(你的请求或凭证)、platform(我们)、upstream_provider(上游厂商)等 | unknown |
x-praxis-problem-retryable | 原样重试是否可能成功 | false |
x-praxis-problem-scope | 仅限流错误:触发的保护层——platform 平台层、model 模型层 | platform |
x-praxis-recovery-action | 建议的处理动作 | relogin |
retryable 为 true(或状态码 429 502 503):指数退避重试;429 优先按 retry-after。Praxis 的限流分两层:平台层按你的 Key 限每秒请求数和同时进行的请求数;模型层按模型限每分钟请求数(RPM)和每分钟 token 数(TPM)。每个响应——不论成功还是 429——都带三个 x-ratelimit-* 头,写明当前额度和重置时间,你不需要猜,也不需要为读额度多发请求。
| 层 | 按什么计 | 限什么 | 超出的表现 |
|---|---|---|---|
| 平台层 | 你的 Key(没带凭证时按来源 IP) | 每秒请求数、同时进行的请求数 | 429 + retry-after,等待后重试 |
| 模型层 | 模型 × 租户 | 每分钟请求数(RPM)、每分钟 token 数(TPM)、月度预算 | 429,见下文模型层 |
两层的 429 都带同样的三个限流头;是哪一层触发的,看错误体的说明(错误)。
默认每个 API Key 每秒最多 5 个请求,同时最多 4 个在途请求。流式请求在流结束前占用并发槽位。超过任一默认限额返回 429,响应带 ratelimit-limit、ratelimit-remaining、ratelimit-reset 和 retry-after;并发超限须等已有请求结束。
实际限额可能因账户而异;以响应头和并发错误详情为准。
x-ratelimit-limit-requests: 5
x-ratelimit-remaining-requests: 4
x-ratelimit-reset-requests: 850ms| 头 | 含义 |
|---|---|
x-ratelimit-limit-requests | 该凭证每秒的请求上限 |
x-ratelimit-remaining-requests | 本秒还剩多少个请求 |
x-ratelimit-reset-requests | 距离额度重置的时间:不满一秒写作 850ms,一秒及以上写作 1s |
同样的三个数也以 IETF 标准名 RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset(整数秒)同时给出。以上 5 次/秒、4 个并发为默认限额;配置覆盖后的请求速率以响应头显示为准。
一秒内的第 N+1 个请求(N 为该 Key 的每秒上限)返回 429,并带 retry-after(整数秒,通常是 1)。被拒绝的请求不消耗额度:x-ratelimit-remaining-requests 保持 0,等窗口重置即可恢复。
同时进行的请求(包括尚未结束的流式响应——流结束前一直占坑)超过该 Key 的并发上限时,多出的请求返回 429,retry-after 为 1。这种情况下仅等待秒级窗口重置不会释放并发槽位:须等一个进行中的请求结束。是并发还是每秒触发的,错误说明里写得很清楚("Concurrent request limit …" / "Requests per second limit …")。
错误体跟着地址第一段走(见错误)。/model/v1/chat/completions 等原生端点是 Problem Details:
{
"type": "https://deepraxis.ai/problems/rate_limit",
"title": "rate_limited",
"status": 429,
"detail": "Requests per second limit of 5 exceeded for this credential. Retry after the listed wait.",
"instance": "problem_eqfnxu",
"kind": "rate_limit",
"scope": "platform",
"retryable": true
}scope: "platform" 表示是平台层触发的(模型层限额的错误不带此字段或为 model)。/openai/v1/chat/completions 等厂商前缀按该家的错误格式,例如 OpenAI 兼容端点:
{ "error": { "code": 429, "type": "rate_limit_error", "message": "Requests per second limit of 5 exceeded for this credential. Retry after the listed wait." } }公开端点(如 GET /model/v1/models)允许不带 Key 调用,这时按来源 IP 计入一个较小的匿名额度,响应头同样给出。带了 Key 就按 Key 计,与 IP 无关。
GET /meta/v1/health 不限流,探活监控可以任意频率调用。
限额维度是模型 × 租户 × 分钟,不是 API Key:
0 表示不限制。429,type 为 rate_limit_error,Retry-After: 60,problem.details.rateLimit 给出当前值与限额。429 处理。模型另有月度预算:按模型当月累计收入计,超出返回 429,type 为 budget_error(QUOTA_EXHAUSTED),无 Retry-After——等待无效,需要提升该模型的预算。
版本号写在地址里,紧跟第一段;每个前缀各自计版本,没有全站统一的版本号。
https://api.deepraxis.com/{protocol}/{version}/…| 前缀 | 版本段 | 由谁决定 |
|---|---|---|
/openai /anthropic | v1 | 跟随厂商 |
/google | v1beta | 跟随厂商 |
/e2b /tavily | 无版本段 | 跟随厂商 |
/agent /model /sandbox /search /meta | v1 | Praxis |
厂商前缀下,版本相关的头(如 Anthropic 的 anthropic-version)原样透传给厂商,行为与官方一致。
删字段、改字段类型或含义、改默认值、收紧校验、改错误码含义。加字段、加端点、放宽校验不算。
/model/v2/…),旧版本继续可用。旧版本或端点弃用时:
Deprecation(RFC 9745,何时弃用)与 Sunset(RFC 8594,何时下线),Link 头指向迁移说明;404。Deprecation: @1767225600
Sunset: Sat, 04 Apr 2026 00:00:00 GMT
Link: </docs/changelog>; rel="deprecation"