如何认证
/v1/* 兼容 API(包括 GET /v1/models)需要用户 API Key 鉴权。公开模型列表请使用 /api/v1/public/model/list。
TokenMP 同时支持 OpenAI 常用的 Authorization Bearer 与 Anthropic 客户端常用的 x-api-key;如果两个 Header 同时存在,服务端会优先使用 x-api-key。
Authorization: Bearer sk-xxx...
x-api-key: sk-xxx...支持的 API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/models | 模型列表 |
| POST | /v1/chat/completions | OpenAI Chat 兼容接口 |
| POST | /v1/messages | Anthropic Messages 兼容接口 |
| POST | /v1/responses | Responses 兼容接口 |
| POST | /v1/images/generations | OpenAI Images 兼容图片生成接口 |
发送一条 Chat 请求
{
"model": "glm-5.1",
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好!"}
],
"stream": false,
"temperature": 0.7,
"max_tokens": 2048
}生成一张图片
POST /v1/images/generations 使用 OpenAI Images 兼容格式,适用于 Panel 中已启用且声明图片生成能力的模型。
模型 ID、尺寸、返回格式和可用参数以 /v1/models、当前路由配置和上游供应商能力为准。
// Request
{
"model": "image-generation-model",
"prompt": "一只橘猫坐在赛博朋克风格的屋顶上",
"size": "1024x1024",
"n": 1
}
// Response
{
"created": 1765699200,
"data": [
{
"url": "https://example.com/generated-image.png"
}
]
}模型上下文与输出上限
下面是 TokenMP 文档建议的模型能力标注。上下文窗口是输入、历史、工具结果和预留输出的总预算;max_tokens / max output 是单次生成上限,实际请求还会受上游、路由和工具客户端限制。
长上下文不等于每次都应塞满上下文。Agent 工具通常还需要给工具调用、压缩摘要和最终输出预留空间;如果出现 context length 或 max_tokens 报错,请减少输入文件、降低 max_tokens 或切换更大上下文模型。
| 模型 | 上下文窗口 | 最大输出 | 说明 |
|---|---|---|---|
| GLM-5.1 | 200K(TokenMP 按 202752 配置) | 128K(131072) | 适合长代码库阅读、复杂重构和多轮 Agent 任务;不同上游可能只展示 200K。 |
| GLM-5 / GLM-5-Turbo | 200K | 128K | 作为 GLM 5 系列通用默认值;Turbo 更适合高频和低延迟任务。 |
| MiMo-V2.5-Pro | 1M(常见精确值 1048576) | 128K(131072) | 超长上下文模型,适合整仓库检索、长链路排障和长会话。 |
| MiMo-V2.5 | 1M | 128K | 同属 MiMo 2.5 长上下文模型;具体能力以当前路由配置为准。 |
| MiMo-V2-Flash | 256K | 64K | 更偏低成本/高并发;长任务前确认当前 Panel 可用模型 ID。 |
模型限制资料来源
| 范围 | 来源 | 说明 |
|---|---|---|
| GLM-5 / GLM-5.1 / GLM-5-Turbo | Z.AI 官方模型文档 | 官方按 200K 上下文、128K 输出描述;TokenMP 对 GLM-5.1 可按精确窗口 202752 标注。 |
| MiMo-V2.5 / MiMo-V2.5-Pro / MiMo-V2-Flash | 小米 MiMo API 模型页与 MiMo-V2.5-Pro 模型卡 | MiMo-V2.5-Pro 常见精确上下文为 1048576,最大输出为 131072。 |
| 工具实际请求 | TokenMP /v1/models 与 Panel 模型配置 | 最终可用模型 ID、上下文窗口和 max_tokens 以当前 TokenMP 路由配置和上游响应为准。 |
客户端错误 (4xx)
项目内稳定错误码以 internal/errorcodes/codes.go 为准。Management API 在 envelope.error_code 返回;/v1/* 协议兼容接口在 OpenAI 风格 error.code 返回;请求日志保存 request_logs.error_code。
上游供应商原始错误不会直接作为平台 error_code 暴露;管理员排障字段使用 provider_error_code、provider_error_type 和 provider_http_status 保存原始信号。HTTP 列为常见终态,少数上游归一化错误会保留上游实际状态码。
兼容 OpenAI 的 error.type 仍可能是 invalid_request_error、authentication_error、insufficient_balance、rate_limit_exceeded、upstream_error 或 server_error;客户端判断业务原因时应优先读取稳定平台码 error.code / error_code。
| 错误码 | HTTP | 说明 |
|---|---|---|
| INVALID_PARAM | 400 | JSON 解析失败、缺少必填字段、字段取值非法或模型选择器格式错误。 |
| UNAUTHORIZED | 401 | JWT、API Key 或 BOT Key 缺失、无效、过期或已停用。 |
| FORBIDDEN | 403 | 当前账号无权执行操作,例如非管理员访问管理接口。 |
| NOT_FOUND | 404 | 请求的用户、模型、供应商、计划、Key、请求日志或兑换码不存在。 |
| CONFLICT | 409 | 资源状态冲突,例如账号、模型、路由组或配置重复。 |
| RATE_LIMITED | 429 | 登录/注册限流、API Key 固定窗口限流,或客户端取消风控临时限制。 |
| CAPTCHA_VERIFICATION_FAILED | 400 | 验证码校验失败,用户需要重新完成验证。 |
| EMAIL_CODE_REQUIRED | 400 | 注册或验证流程缺少邮件验证码。 |
| INVALID_EMAIL_CODE | 400 | 邮件验证码错误或已过期。 |
| QUOTA_EXCEEDED | 402 | Token 套餐或余额不足;客户端不应盲目自动重试。 |
| CLIENT_CANCELED | 499 | 客户端主动断开连接、超时或取消请求;请求日志通常显示未扣费。 |
| MODEL_NOT_FOUND | 404 | 基础模型不存在、未启用或当前用户不可用。 |
| ROUTE_GROUP_NOT_FOUND | 404 | model:group 中的 route group 不存在或不可用。 |
| PROVIDER_NOT_FOUND | 404 | model@provider 中的 provider slug 不存在或不可用。 |
| MODEL_IMAGE_INPUT_UNSUPPORTED | 400 | 请求包含图片输入,但当前模型未声明 vision 能力。 |
| UNSUPPORTED_STREAM_CONVERSION | 400 | 当前协议转换不支持请求的流式模式。 |
| UPSTREAM_INVALID_REQUEST | 400 | 上游判定请求参数非法,需检查 messages、tools、max_tokens 等字段。 |
| UPSTREAM_IMAGE_FORMAT_INVALID | 400 | 上游判定图片格式不支持、data URL/base64 非法或图片内容无法解码。 |
| UPSTREAM_REASONING_STATE_REQUIRED | 400 | 上游 reasoning/thinking 模式要求回传上一轮思考状态。 |
| UPSTREAM_CONTEXT_LENGTH_EXCEEDED | 400 | 输入、历史、工具结果或最大输出超过模型上下文窗口;减少输入或降低 max_tokens。 |
| UPSTREAM_CONTENT_BLOCKED | 400 / 403 / 421 | 上游内容安全、敏感词或 policy 拦截。 |
| UPSTREAM_RATE_LIMITED | 429 | 上游 QPS、RPM、TPM 或并发限制触发。 |
| UPSTREAM_QUOTA_EXCEEDED | 402 / 429 | 上游额度、余额、用量或 credit 不足。 |
| UPSTREAM_BILLING_REQUIRED | 402 / 403 | 上游计费未开通、欠费或服务未开通。 |
| UPSTREAM_PLAN_EXPIRED | 403 | 上游套餐或订阅已过期。 |
| UPSTREAM_PLAN_MODEL_DENIED | 403 | 上游套餐不包含或不允许调用当前模型。 |
| UPSTREAM_DUPLICATE_REQUEST | 409 | 上游判定重复请求或幂等冲突。 |
服务端与上游错误 (5xx)
| 错误码 | HTTP | 说明 |
|---|---|---|
| CAPTCHA_ERROR | 500 | 验证码服务未配置或校验服务异常,通常需要管理员检查配置。 |
| EMAIL_SEND_ERROR | 500 | 验证邮件服务未配置或发送失败。 |
| SERVICE_RESTARTING | 503 | 服务部署或重启进入 draining,新请求会带 Retry-After 提示稍后重试。 |
| NO_AVAILABLE_UPSTREAM | 502 | 模型和选择器合法,但没有匹配协议、endpoint、active key 或 mapping 的可用上游。 |
| NO_LEASE_CAPACITY | 502 | 候选上游 Key 并发容量已满,暂时无可租用通道。 |
| UPSTREAM_ERROR | 502 | 上游请求失败、读取响应失败、协议转换失败等泛上游错误。 |
| UPSTREAM_HTTP_ERROR | 上游状态 / 502 | 上游返回非 2xx 且无法归一化到更具体平台码时的兜底。 |
| UPSTREAM_STREAM_ERROR | 502 / 流式事件 | 流式读取过程中上游返回错误或异常中断。 |
| INTERNAL_ERROR | 500 | 数据库、加解密、构造请求、内部流程等服务端异常。 |
| UPSTREAM_AUTH_INVALID | 401 / 502 | 上游 API Key、Token 或签名无效;通常需要管理员检查 provider key。 |
| UPSTREAM_PERMISSION_DENIED | 403 / 502 | 上游账号、区域、workspace、模型权限或安全策略拒绝。 |
| UPSTREAM_MODEL_NOT_FOUND | 404 / 502 | 上游模型 ID、endpoint 或部署不存在。 |
| UPSTREAM_MODEL_NOT_SUPPORTED | 400 / 404 / 502 | 上游模型不支持当前接口、能力或请求模式。 |
| UPSTREAM_OVERLOADED | 503 | 上游服务繁忙、队列满或临时不可用。 |
| UPSTREAM_TIMEOUT | 408 / 504 / 502 | 上游响应超时、deadline exceeded 或轮询超时。 |
| UPSTREAM_INTERNAL_ERROR | 500 / 502 | 上游内部错误或 5xx 服务异常。 |
兑换码错误
| 错误码 | HTTP | 说明 |
|---|---|---|
| REDEEM_CODE_INACTIVE | 400 | 兑换码未启用或已被管理员停用。 |
| REDEEM_CODE_EXPIRED | 400 | 兑换码已过期。 |
| REDEEM_CODE_EXHAUSTED | 400 | 兑换码已达到最大兑换次数。 |
| REDEEM_CODE_ALREADY_REDEEMED | 409 | 当前用户已兑换过该兑换码。 |
| REDEEM_CODE_PLAN_DOWNGRADE | 400 | 低等级 Coding Plan 兑换码不能覆盖当前更高等级套餐。 |
| REDEEM_CODE_PLAN_INACTIVE | 400 | 兑换码关联的套餐已停用。 |