# API Key (/docs/zh-CN/api-keys)

在 [API Key](https://www.ohmygpt.com/keys) 页面创建和管理 Key。建议每个应用或环境各用一个 Key：这样可以单独限制它的消费、只允许它调用部分模型，或者直接吊销，不影响其他 Key。

## 发送 Key [#发送-key]

所有端点都接受以下任一请求头传递 Key，所以 OpenAI 和 Anthropic 的 SDK 无需任何改动就能用：

```bash
-H "Authorization: Bearer $OHMYGPT_API_KEY"   # OpenAI SDKs, curl
-H "x-api-key: $OHMYGPT_API_KEY"              # Anthropic SDK, Claude Code
```

Gemini 的 `generateContent` 端点还接受 `x-goog-api-key`，也就是 Google GenAI SDK 发送的请求头。Key 只放在其中一个请求头里。

## Key 设置 [#key-设置]

每个 Key 都有独立的设置，每次请求都会检查：

| 设置 | 作用 | 生效后的响应 |
|---|---|---|
| 消费额度 | Key 的消费达到这个数额后停止工作 | `402 api_key_spend_limit_exceeded` |
| 可调用的模型 | 只允许 Key 调用你列出的模型 | `403 model_not_allowed` |
| 可使用的供应商 | Key 的请求只发给你选的供应商 | 选中的供应商都不提供这个模型时返回 `403 provider_not_allowed` |
| 到期日期 | 过了这个日期 Key 停止工作 | `401 api_key_expired` |
| 启用 | 关闭 Key 但不删除 | `401 api_key_disabled` |
| 管理员 Key | 允许 Key 读取整个账户的数据（例如 [`GET /v1/usage`](/docs/zh-CN/api/usage/listUsage)）并管理账户 | 没开时这些接口返回 `403 permission_denied` |
| TEE 机密计算证明 | 响应附带签名回执，见 [TEE 机密计算证明](/docs/zh-CN/tee-proof) | 响应带 `X-VeriRelay-*` 响应头 |

可调用的模型里可以选尚未开通的模型：开通后这把 Key 直接就能调用，不用回来改。

被 Key 设置拦下的请求不收费，错误信息会说明该改哪项设置：

```json
{
  "error": {
    "param": "model",
    "code": "model_not_allowed",
    "message": "This API key cannot use the model `openai/gpt-5.4-nano`. Update the key's allowed models at https://www.ohmygpt.com/keys.",
    "type": "permission_error"
  }
}
```

所有 Key 共用账户余额。余额用完后，调用会返回 `402 insufficient_credits`；到[账单](https://www.ohmygpt.com/billing)页面充值后即可恢复。

## 速率限制 [#速率限制]

你的账户有一个每分钟请求数上限，由账户下所有 Key 共享。累计充值越多，上限越高：

| 累计充值 | 每分钟请求数 |
|---|---|
| 不足 ¥20 | 60 |
| ¥20 及以上 | 1,000 |
| ¥300 及以上 | 10,000 |

`GET /v1/me` 返回你当前的上限，以及下一档的上限和门槛：

```bash
curl https://api.ohmygpt.com/v1/me -H "Authorization: Bearer $OHMYGPT_API_KEY"
```

```json
{
  "rpm": 60,
  "recharge_band": "normal",
  "next_recharge_band": "vip",
  "next_recharge_rpm": 1000,
  "next_recharge_threshold_cny": 20
}
```

模型端点会在每个响应里告诉你当前的用量情况：

```http
X-RateLimit-Limit-Requests: 60
X-RateLimit-Remaining-Requests: 59
X-RateLimit-Reset-Requests: 1s
```

`X-RateLimit-Reset-Requests` 是距离限额重置的时长，写法如 `1s` 或 `500ms`。超出上限时，调用会返回 `429 rate_limit_exceeded`，并带上以秒为单位的 `Retry-After` 头；等待相应时间后再重新发送。
