Skip to content

OpenRouter Responses API Beta 使用统一的 JSON 错误格式,所有错误都包含 error.codeerror.message 两个字段。目前有三种错误码:请求校验失败(400)、超过频率限制(429)、服务端内部错误(500+)。由于 API 是无状态的,每次请求失败后需要携带完整对话历史重新发起请求。本页提供错误格式说明和各错误码的处理建议。

Beta API:该 API 处于 beta 阶段,可能存在破坏性变更,生产环境请谨慎使用。

无状态设计:该 API 是无状态的——每次请求相互独立,服务端不保存对话状态。失败后重试需要重新传入完整对话历史。

Responses API Beta 返回统一格式的结构化错误响应。

错误响应格式

所有错误均遵循以下结构:

json
{
  "error": {
    "code": "invalid_prompt",
    "message": "Detailed error description"
  },
  "metadata": null
}

错误码

错误码说明对应 HTTP 状态码
invalid_prompt请求校验失败400
rate_limit_exceeded请求过于频繁429
server_error服务端内部错误500+

错误处理示例

javascript
const response = await fetch('https://openrouter.ai/api/v1/responses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_OPENROUTER_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'openai/o4-mini',
    input: 'Hello',
    max_output_tokens: 9000,
  }),
});

const result = await response.json();

if (result.error) {
  switch (result.error.code) {
    case 'invalid_prompt':
      console.error('请求参数错误:', result.error.message);
      break;
    case 'rate_limit_exceeded':
      console.error('超过频率限制,请稍后重试');
      break;
    case 'server_error':
      console.error('服务端错误,请稍后重试:', result.error.message);
      break;
    default:
      console.error('未知错误:', result.error);
  }
} else {
  // 处理正常响应
  console.log(result.output);
}

各错误码处理建议

invalid_prompt(400):检查请求体格式,确认 modelinput 等必填字段是否正确,结构化消息数组中 typerole 等字段是否符合规范。

rate_limit_exceeded(429):实现指数退避重试,避免立即重试加重压力。可参考响应头中的 Retry-After 字段(如果存在)。

server_error(500+):属于服务端问题,稍后重试即可。如果持续出现,可查看 OpenRouter 状态页或联系支持。

常见问题

Q: 错误响应中 metadata 字段为什么是 null?

A: metadata 字段目前固定为 null,是 API 响应格式的占位字段,未来可能包含更多错误上下文信息。

Q: 如何区分客户端错误和服务端错误?

A: 通过 HTTP 状态码区分:400 系列(如 400、429)是客户端问题,需要修改请求后重试;500 系列是服务端问题,等待后重试即可。

Q: Beta 阶段是否可能新增错误码?

A: 是的。由于 API 处于 beta 阶段,错误码可能随版本更新而变化。建议在错误处理代码中添加兜底 case 处理未知错误码。