# API 参考 (/docs/zh-CN/api)

一个 OhMyGPT Key 就能通过 OpenAI、Anthropic 或 Gemini 协议调用模型列表里的所有模型。项目里现有的 SDK 不用换，只需改两项配置：Base URL 和 Key。在 [API Key](https://www.ohmygpt.com/keys) 页面创建 Key。

用 `ohmygpt/mock` 可以免费测试接入。所有对话端点都能调用它，流式和非流式均可：

```bash
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "ohmygpt/mock", "messages": [{"role": "user", "content": "ping"}]}'
```

```json
{
  "id": "chatcmpl-ohmygpt-mock",
  "object": "chat.completion",
  "model": "mock",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready."
      }
    }
  ],
  "usage": { "prompt_tokens": 15, "completion_tokens": 17, "total_tokens": 32 }
}
```

跑通之后，把 `model` 换成真实的模型 ID 即可。

## 对话协议 [#对话协议]

每个对话模型都支持全部四种协议。你的 SDK 或工具用哪种，就选哪种：

| 协议 | 端点 | SDK Base URL | 鉴权请求头 |
|---|---|---|---|
| [OpenAI Chat Completions](/docs/zh-CN/api/chat-completions) | `POST /v1/chat/completions` | `https://api.ohmygpt.com/v1` | `Authorization: Bearer` |
| [OpenAI Responses](/docs/zh-CN/api/responses) | `POST /v1/responses` | `https://api.ohmygpt.com/v1` | `Authorization: Bearer` |
| [Anthropic Messages](/docs/zh-CN/api/messages) | `POST /v1/messages` | `https://api.ohmygpt.com`（不带 `/v1`） | `x-api-key` |
| [Gemini](/docs/zh-CN/api/gemini) | `POST /v1/models/{model}:generateContent` | `https://api.ohmygpt.com`，API 版本 `v1` | `x-goog-api-key` |

`Authorization: Bearer` 和 `x-api-key` 在所有端点上都可用，所以各家 SDK 默认的请求头都能直接用。`x-goog-api-key` 可用于 Gemini 端点。Key 只放在其中一个请求头里发送。

[协议](/docs/zh-CN/api/protocols)一页说明了通过每种协议调用模型时，请求怎么发、响应长什么样。

## 其他端点 [#其他端点]

| 端点 | 用途 |
|---|---|
| `POST /v1/messages/count_tokens` | 计算 Claude 请求的输入 token 数，免费 |
| `POST /v1/embeddings` | 向量嵌入 |
| `POST /v1/rerank` | 按查询对文档重新排序 |
| `POST /v1/images/generations`、`POST /v1/images/edits` | 生成和编辑图片 |
| `POST /v1/audio/speech`、`POST /v1/audio/transcriptions` | 文字转语音、语音转文字 |
| `POST /v1/moderations` | 内容审核 |
| `POST /v1/ocr` | 从文档中提取文字 |
| [`POST /v1/decisions`](/docs/zh-CN/api/decisions) | 以结构化答案回答分类问题 |
| [`POST /v1/systemone`](/docs/zh-CN/api/decisions#typesafe-system-one) | TypeSafe System One 评估 |
| `GET /v1/models` | 模型列表，无需 Key |

调用这些端点时，请选择在 `GET /v1/models` 中列出了该端点的模型，方法见下文。

## 查找支持某个端点的模型 [#查找支持某个端点的模型]

模型列表经常变化，模型 ID 请查询获取，不要写死在代码里。`GET /v1/models` 的每个条目都在 `protocols` 中列出了该模型支持的端点：

```bash
curl -s https://api.ohmygpt.com/v1/models \
  | jq -r '.data[] | select(.id | test("claude-haiku")) | [.id, ([.protocols[].path] | join(" "))] | @tsv'
```

```text
anthropic/claude-haiku-4-5	/v1/chat/completions /v1/responses /v1/messages /v1/models/{id}:generateContent
anthropic/claude-haiku-5-5	/v1/chat/completions /v1/responses /v1/messages /v1/models/{id}:generateContent
```

用 `?service=` 按产品类型筛选，例如 `embedding`、`rerank`、`image`、`tts`、`stt`、`moderation` 或 `ocr`：

```bash
curl -s "https://api.ohmygpt.com/v1/models?service=embedding" | jq -r '.data[].id'
```

所有模型的价格见[模型](https://www.ohmygpt.com/models)页面。

## 每个响应都带有费用 [#每个响应都带有费用]

每个响应都会告诉你这次请求花了多少钱：

| 响应头 | 值 |
|---|---|
| `X-Cost-Credits` | 本次费用，单位为 Credits（1 美元 = 250,000 Credits）。流式请求的费用在流里返回，见[流式输出](/docs/zh-CN/api/streaming#流式请求的费用)。 |
| `X-Request-ID` | 请求 ID。之后可以用它查询这次请求，联系客服时也请附上它。 |

完整的调用记录见[用量](https://www.ohmygpt.com/usage)页面。

## 给代码生成工具和 AI agent 用 [#给代码生成工具和-ai-agent-用]

| URL | 内容 |
|---|---|
| [`https://api.ohmygpt.com/openapi.json`](https://api.ohmygpt.com/openapi.json) | 本参考文档所依据的 OpenAPI 规范 |
| [`https://www.ohmygpt.com/llms.txt`](https://www.ohmygpt.com/llms.txt) | 所有机器可读资源的索引：模型、价格和这份文档 |
| [`https://www.ohmygpt.com/skill.md`](https://www.ohmygpt.com/skill.md) | Agent Skill：端点、base URL、编程工具配置与错误处理 |

每个文档页面也有 Markdown 版本：在 URL 后面加上 `.md` 即可。

<Cards>
  <Card title="协议" href="/docs/zh-CN/api/protocols" description="同一个模型，四种协议：请求怎么发，响应长什么样" />
  <Card title="流式输出" href="/docs/zh-CN/api/streaming" description="各协议的事件格式，流末尾的用量与费用" />
  <Card title="参数" href="/docs/zh-CN/api/parameters" description="采样与输出参数在各模型系列上如何生效" />
  <Card title="思考" href="/docs/zh-CN/api/thinking" description="Claude、Gemini 和 GPT 模型的推理控制" />
</Cards>
