API 参考

Cordy Gateway 数据平面的接口、鉴权、作用域、请求与响应结构,以及完整的错误表。

这是 Cordy Gateway 数据平面 API 的参考——即你客户端在 8002 端口调用的、兼容 OpenAI 的接口面。可运行示例见客户端集成

Base URL 与版本

https://<host>:8002/v1

每个推理与账户接口都同时提供 /v1 前缀形式与非 /v1 别名(例如 /v1/chat/completions/chat/completions 是同一处理器)。为兼容 OpenAI SDK,建议使用 /v1 形式。唯一例外是用量分析,它仅在 /v1/account/analytics 提供。

鉴权

以下两种请求头之一携带 wnx_ API 密钥:

Authorization: Bearer wnx_<key>
X-API-Key: wnx_<key>

密钥必须放在请求头中。URL 查询串中的密钥不被接受。网关只保存每个密钥的 SHA-256 哈希。

作用域

每个接口族都需要一个作用域。API 密钥携带一组已授予的作用域;对某接口的请求,若密钥不具备该接口所需作用域,则返回 403 scope_denied

作用域授予访问
chat/v1/chat/completions
completions/v1/completions
embeddings/v1/embeddings
models/v1/models/v1/models/{id}
balance/v1/balance/v1/subscriptions/v1/packages/v1/account/analytics
admin/metrics/*(运维指标)

作用域列表被视为遗留的默认允许:密钥可访问其拥有者本可使用的任何接口。非空列表则是白名单。签发新密钥时应遵循其所需的最小权限——例如为聊天功能签发一个仅 chat 的密钥。

接口

推理

方法路径用途作用域
POST/v1/chat/completions对话补全(流式与非流式)chat
POST/v1/completions遗留文本补全(流式与非流式)completions
POST/v1/embeddings创建嵌入embeddings

模型

方法路径用途作用域
GET/v1/models列出该密钥可用的公开模型models
GET/v1/models/{id}按 slug 获取单个公开模型models

账户

方法路径用途作用域
GET/v1/balance令牌配额与预付信用余额balance
GET/v1/subscriptions订阅等级、套餐与状态balance
GET/v1/packages只读平台套餐目录balance
GET/v1/account/analytics?period_days=自助用量/时延/成本汇总balance

健康(公开,无需密钥)

方法路径用途
GET/health存活——进程在运行(200
GET/v1/health/health
GET/status/health
GET/health/liveKubernetes 风格存活探针
GET/health/ready就绪——此刻能否服务对话/嵌入(200/503
GET/health/providers各供应商健康明细(200/503
GET/health/detailed能力、供应商与许可证诊断

指标(运维)

方法路径用途访问
GET/metrics/服务聚合指标(JSON)admin 作用域
GET/metrics/providers各供应商指标(JSON)admin 作用域
GET/metrics/providers/{provider}单个供应商指标(JSON)admin 作用域
GET/metrics/cost成本估算(JSON)admin 作用域
GET/metrics/prometheusPrometheus 文本暴露令牌与/或 CIDR 门禁

/metrics/prometheus 不属于 API 密钥接口面。在生产环境中,除非调用方出示 GATEWAY_METRICS_TOKEN bearer 令牌,或来自 GATEWAY_METRICS_ALLOWED_CIDRS 中的 CIDR,否则被拒绝。见部署

请求与响应结构

推理接口遵循 OpenAI 的 schema。主要请求字段:

POST /v1/chat/completions

字段类型说明
modelstring必填。公开模型 slug。
messagesarray必填、非空。必须至少包含一条 user 消息。
streamboolean默认 falsetrue 返回 SSE。
temperaturenumber02,默认 1
max_tokensinteger可选,> 0
top_pnumber01,默认 1
ninteger≥ 1,默认 1
stopstring 或 array可选。
presence_penaltynumber-22,默认 0
frequency_penaltynumber-22,默认 0
toolsarray可选。函数/工具定义。
tool_choicestring 或 object可选。需要非空的 tools
response_formatobject可选。
seedlogit_biasuser可选,OpenAI 标准。

非流式响应是标准的 chat.completion 对象,含 choicesusage 与可观测性请求头(X-Channel-IdX-ProviderX-Failover-CountX-Routing-Overhead-Ms)。流式响应是 text/event-streamchat.completion.chunk 事件流,以 [DONE] 结束。

消息 content 必须为文本——一个字符串,或一个 {"type":"text","text":"..."} 分片数组。非文本分片会被拒绝。见客户端集成

POST /v1/embeddings

字段类型说明
modelstring必填。公开模型 slug。
inputstring 或 array必填、非空。
encoding_formatstring可选:floatbase64
userstring可选。

POST /v1/completions(遗留)

字段类型说明
modelstring必填。
promptstring 或 array单个字符串,或单元素数组。不支持多元素 prompt 数组。
以及采样字段max_tokenstemperaturetop_pnstreamstop、惩罚项、user

错误格式

所有错误使用 OpenAI 风格的信封:

{
  "error": {
    "type": "authentication_error",
    "message": "API key has been revoked.",
    "code": "revoked_api_key",
    "request_id": "…"
  }
}

code 是可用于分支判断的稳定字符串;type 归类相关错误;request_id 与服务端日志关联。部分错误会附加字段(例如 scope_denied 上的 required_scopegranted_scopes,或校验错误上的 details)。

错误表

状态typecode何时发生
400invalid_request_errorvalidation_error请求体未通过 schema 校验(字段错误、messages 为空、无 user 轮次等)。
400invalid_request_errormalformed_json请求体不是有效 JSON。
400invalid_request_errorinvalid_function_call_payloadtools / tool_choice 格式错误。
401authentication_errormissing_api_key请求中无密钥。
401authentication_errorinvalid_api_key密钥无法识别。
401authentication_errorrevoked_api_key密钥已吊销——不要重试,不要重新鉴权。
401authentication_errorinactive_api_key密钥未激活——管理员可重新激活。
401authentication_errorexpired_api_key密钥已过期。
401authentication_erroraccount_not_active所属账户未激活。
402insufficient_creditsinsufficient_credits账户预付信用耗尽——充值,勿重试。
403permission_errorscope_denied密钥缺少该接口的作用域。
403permission_errormetrics_forbiddenPrometheus 抓取缺少有效令牌 / 允许的 CIDR。
404model_not_foundmodel_not_found模型 slug 未知或对该密钥不可用。
413invalid_request_errorpayload_too_large请求体超过 GATEWAY_MAX_BODY_BYTES(默认 10 MiB)。
429rate_limit_errorquota_exceeded月度令牌配额已耗尽。
429rate_limit_errorrate_limit_exceeded超出每密钥每分钟请求上限(含 Retry-After)。
500api_errorinternal_error意外的服务端错误。
503service_unavailableauth_service_unavailable瞬时的鉴权基础设施故障(含 Retry-After)——重试。

如何应对

  • 可重试: 429(在 Retry-After 之后)、503。退避后重试。
  • 原样不可重试: 400401402403404——先修正请求、密钥、信用、作用域或模型。
  • 402 专门说明: 停止并充值信用;重试无济于事。

流式错误

在流式响应中,流已打开之后发生的上游失败,会作为带内的 SSE error 事件(带字符串 code)投递,随后是 [DONE]。流打开之前的失败(路由、预算、连接)会作为带相应状态码的普通 JSON 错误返回,且绝不打开 SSE 流。若上游在没有 finish reason 的情况下关闭,网关还会发出一个 stream_interrupted 事件。

后续步骤