API 怎么配置:从 API Key、Base URL 到第一次调用

配置 API 不是把四个字段粘进输入框就结束。你需要先确定协议,再拼出最终请求地址,用一次可重复的最小调用证明地址、凭证、模型和权限真的匹配。

API 地址、凭证、协议与最小请求验证主题示意图
主题示意图,不代表当前界面或实际调用结果
直接答案Base URL 是客户端构造请求的起点,API Key 是认证凭证,模型 ID 决定调用哪个模型,接口路径和请求体则由协议决定。四项必须来自同一服务的当前说明;先用脱敏的最小请求验证,再把同一套字段填入客户端。

先把字段、协议和最终路径分开

下面的地址只是结构示例,不是可以直接调用的服务地址。真正值以服务商当前控制台和对应协议文档为准。

概念常见后缀认证/请求头请求体重点什么时候使用
OpenAI Responses/responsesAuthorization: Bearer <KEY>model + input + 可选 max_output_tokens客户端或网关明确要求 Responses
OpenAI Chat Completions/chat/completionsAuthorization: Bearer <KEY>model + messages兼容 OpenAI Chat Completions 的客户端
Anthropic Messages/messagesx-api-key + anthropic-versionmodel + max_tokens + messagesClaude/Anthropic 协议的客户端或网关
最终 URL 才是判断对象

例如 Base URL 为 https://api.example.com/v1,客户端追加 /chat/completions,最终 POST 地址才是 https://api.example.com/v1/chat/completions。如果日志出现 /v1/v1,先修正路径组合,不要先换 Key。

这篇教程解决什么问题

适合:第一次接入 API你拿到了服务商给的地址、Key 和模型,但不知道应该填到哪个客户端字段。
适合:配置后不知道是否成功你想先用一次最小请求区分地址、认证、模型、权限和网络问题。
不适合:寻找固定模型清单模型、价格、额度和可用协议会随服务商和账户变化,本页不把动态字段写死。
不适合:把完整 Key 发出来排错排错只需要脱敏后的状态码、错误代码、最终路径和时间,不需要秘密本身。

开始前准备

  1. 确定客户端和协议:OpenAI Responses、OpenAI Chat Completions、Anthropic Messages,或服务商另行定义的协议。
  2. 从同一份当前说明复制 Base URL、API Key 类型、模型 ID 和必填请求头。
  3. Windows 准备 PowerShell 7 或系统自带 curl.exe;macOS/Linux 准备 curl。
  4. 准备一个只返回短文本的低风险测试,不要用真实业务数据。
先验证,再配置客户端

如果最小请求尚未跑通,直接在 Codex、Claude Code 或 CC Switch 里反复改字段会把多个问题混在一起。先保留一套可复现的请求地址、请求体和脱敏响应。

从控制台到客户端的 6 步流程

01

确认协议和客户端追加路径

先看文档写的是 Responses、Chat Completions 还是 Anthropic Messages,再确认客户端会不会自动追加 /v1、/responses、/chat/completions 或 /messages。

02

记录最终 URL,而不是只记录输入框

把 Base URL 和客户端追加的路径合成最终 POST 地址。最终地址只能出现一次版本前缀和一次接口路径。

03

把 Key 放进当前终端的环境变量

命令示例只在当前终端使用占位符;不要把真实 Key 写进脚本、网页、截图、聊天记录或 Git。

04

发送短请求并保存脱敏响应

使用固定的 Reply with exactly OK.,记录 HTTP 状态码、Content-Type、错误代码、请求时间和服务端 request ID。

05

按证据判断下一步

200 且返回预期 JSON 才能进入客户端配置;401/403 查认证和权限,404 查最终 URL、协议和模型,429 查额度或限流,HTML 响应查是否打到了网页路由。

06

最后才填入 Codex、Claude Code 或其他客户端

把已经验证过的 Base URL、凭证类型、模型 ID 和协议原样迁移,并在客户端运行同一个短任务复测。

先用最小请求验证 API

下面的命令是教学示例,不代表某个账户已经调用成功。把同一服务当前文档中的 Base URL、Key 和模型 ID 替换进去;如果服务只支持 Responses 或 Anthropic Messages,选择对应分支。命令会把响应头保存为 response.headers、正文保存为 response.json,分享前必须脱敏。

PowerShell · Chat Completions
# 教学示例:请先替换 3 个占位符,并确认服务商支持 Chat Completions
$env:API_BASE_URL = "https://api.example.com/v1"
$env:API_KEY = "<YOUR_API_KEY>"
$env:MODEL_ID = "<MODEL_ID>"

$uri = "$($env:API_BASE_URL.TrimEnd('/'))/chat/completions"
$body = @{
  model = $env:MODEL_ID
  messages = @(@{ role = "user"; content = "Reply with exactly OK." })
  max_tokens = 16
} | ConvertTo-Json -Depth 5
$body | Set-Content -LiteralPath request.json -Encoding utf8NoBOM

curl.exe --silent --show-error --dump-header response.headers --output response.json --write-out "\nHTTP %{http_code}" --request POST $uri --header "Authorization: Bearer $env:API_KEY" --header "Content-Type: application/json" --data-binary "@request.json"

# 预期:HTTP 200 + 当前协议的 JSON 响应。不要把真实 Key 提交到脚本或日志。
macOS / Linux · Chat Completions
# 教学示例:请先替换 3 个占位符,并确认服务商支持 Chat Completions
export API_BASE_URL="https://api.example.com/v1"
export API_KEY="<YOUR_API_KEY>"
export MODEL_ID="<MODEL_ID>"

cat > request.json <<JSON
{"model":"$MODEL_ID","messages":[{"role":"user","content":"Reply with exactly OK."}],"max_tokens":16}
JSON

curl --silent --show-error --write-out "\nHTTP %{http_code}\n" \
  --request POST "${API_BASE_URL%/}/chat/completions" \
  --dump-header response.headers --output response.json \
  --header "Authorization: Bearer $API_KEY" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

# 预期:HTTP 200 + 当前协议的 JSON 响应。
Responses 分支

只有当前服务明确支持 Responses 时,才把路径改为 /responses,请求体改为 model + input。Windows 示例:

PowerShell · Responses
# 仅当当前服务/客户端明确支持 OpenAI Responses 时使用;请替换下面 3 个占位符
$env:API_BASE_URL = "https://api.example.com/v1"
$env:API_KEY = "<YOUR_API_KEY>"
$env:MODEL_ID = "<MODEL_ID>"
$uri = "$($env:API_BASE_URL.TrimEnd('/'))/responses"
$body = @{ model = $env:MODEL_ID; input = "Reply with exactly OK."; max_output_tokens = 16 } | ConvertTo-Json
$body | Set-Content -LiteralPath request.json -Encoding utf8NoBOM
curl.exe --silent --show-error --dump-header response.headers --output response.json --write-out "\nHTTP %{http_code}" --request POST $uri --header "Authorization: Bearer $env:API_KEY" --header "Content-Type: application/json" --data-binary "@request.json"

# 预期:HTTP 200 + Responses 格式 JSON;不要把它当作 Chat Completions 响应解析。
Anthropic Messages 分支

Claude/Anthropic 协议通常使用 x-api-key、anthropic-version 和 model + max_tokens + messages,不能只把域名换掉:

macOS / Linux · Anthropic Messages
# 仅当服务商明确提供 Anthropic Messages 兼容入口时使用
export API_BASE_URL="https://api.example.com"
export API_KEY="<YOUR_API_KEY>"
export MODEL_ID="<MODEL_ID>"

cat > request.json <<JSON
{"model":"$MODEL_ID","max_tokens":16,"messages":[{"role":"user","content":"Reply with exactly OK."}]}
JSON

curl --silent --show-error --write-out "\nHTTP %{http_code}\n" \
  --request POST "${API_BASE_URL%/}/messages" \
  --dump-header response.headers --output response.json \
  --header "x-api-key: $API_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --header "content-type: application/json" \
  --data-binary @request.json

# 预期:HTTP 200 + Anthropic Messages 格式 JSON。

怎样判断这次调用真的成功

先看命令末尾的 HTTP 状态,再打开保存的响应文件。状态码只说明 HTTP 层结果,不能代替协议和内容检查。

观察到的结果可以确认什么下一步
200 + 预期 JSON本次地址、认证、协议和模型至少完成了一次可用调用。记录脱敏证据,再迁移同一套字段到客户端。
401 / invalid_api_key请求到达了 HTTP 服务,但认证链失败。查请求头、Key 来源、空格、撤销状态和旧环境变量。
403凭证可能有效,但资源、账户或策略拒绝。查模型权限、组织/项目、地区和网关策略。
404 / HTML最终路径、协议、模型路由或目标层可能不对;HTML 常表示网页或代理路由。保留最终 host/path 和 Content-Type,查重复版本前缀和接口后缀。
429频率、并发、余额或消费上限中的至少一项触发。读取 Retry-After 和错误代码;额度类错误停止无意义重试。
  • 响应的 Content-Type 与所选协议一致,不是登录页或 WAF HTML。
  • 响应里的模型、输出字段和错误结构符合当前协议。
  • 保存了 HTTP 状态、错误代码、时间和 request ID,但没有保存 Key、Cookie 或真实业务输入。

最小请求成功后,再迁移到 Codex 或 Claude Code

把已经验证的四项内容逐字迁移:Base URL、认证方式、模型 ID、协议。Codex 的 provider 配置与 Claude Code 的环境变量不是同一套字段,不能把一方的配置块直接粘到另一方。

用 Codex继续看 Codex / Claude Code 手动配置 API,确认 provider 的 wire_api 与服务实际支持的协议一致。
用 Claude Code继续看 Claude Code 网关配置,按当前网关要求设置 Base URL、认证变量和模型 ID。
用 CC Switch把它当作配置管理器;切换后仍要在客户端运行同一个“回复 OK”小任务,确认没有旧 Provider 覆盖新值。

配置不通时按证据分流

401 Unauthorized 或 invalid_api_key

先确认请求头类型、Key 是否完整、是否已撤销,以及当前终端和客户端是否仍读取旧变量;不要在排错消息中回显 Key。

403 Forbidden

Key 可能有效,但账户、模型、组织、地区或网关策略没有目标资源权限。重复生成 Key 通常不能解决授权策略。

404 Not Found 或路径重复

打印最终 URL,检查是否出现 /v1/v1、把控制台地址当 Base URL,或用 Responses 客户端请求了 Chat Completions 路径;再核对模型 ID。

400、422 或响应结构错误

地址和认证可能已通过,但请求体不符合该协议。对照当前接口文档检查字段名、必填项、模型 ID 和请求头,不要只换模型。

429 Too Many Requests 或余额不足

区分频率/并发限制和账户额度。前者按 Retry-After 或服务建议退避,后者需要处理余额或消费上限,盲目重试不会增加额度。

200 但返回 HTML、登录页或奇怪 JSON

HTTP 成功只说明拿到了响应;检查 Content-Type、响应结构和最终域名,确认没有落到控制台、WAF 或代理错误页。

无状态码超时

按 DNS、TCP、TLS、HTTP 首包和流式中断分层记录;网页能打开不能证明 API 端口、认证和流式接口都可用。

每轮只改一个因素:地址、协议、Key、模型、并发或客户端配置来源。否则即使下一次成功,也无法知道真正修复了什么。

完成后的验收标准

  • 协议、客户端追加规则和最终 POST URL 已写下来。
  • Base URL、认证方式、模型 ID 和必填请求头来自同一份当前说明。
  • 真实 Key 只存在于受控环境变量或客户端安全存储。
  • 最小请求返回预期协议的 JSON,而不是网页 HTML。
  • HTTP 状态、错误代码、时间和 request ID 已脱敏保存。
  • 客户端使用同一套字段复测通过,旧配置来源没有覆盖新值。

FAQ

Base URL 一定要加 `/v1` 吗?

不一定。是否包含版本路径取决于服务商和客户端的协议约定。先看最终 URL,避免客户端已经追加 /v1 时再次添加。

控制台能登录,为什么 API 还是 404?

控制台是网页路由,API 是另一组路径;也可能是接口协议不匹配或版本前缀重复。检查最终 POST URL 和 Content-Type,不要只测试首页。

一个 API Key 可以给 Codex 和 Claude Code 共用吗?

只有在服务商明确支持两种协议、请求头和权限时才可以。Key 相同不代表 Responses 与 Anthropic Messages 兼容。

收到 HTTP 200 就算配置成功了吗?

不算。还要确认 Content-Type、响应结构、模型字段和输出内容符合目标协议;HTML 登录页也可能返回 200。

排错时可以把请求完整贴给别人吗?

不应贴出 Authorization、x-api-key、Cookie、完整请求体中的隐私数据或内部地址。保留脱敏后的状态码、错误代码、最终路径和时间即可。

什么时候应该改用客户端专用教程?

当最小 API 请求已经成功后,再按 Codex、Claude Code 或 CC Switch 的配置字段迁移;客户端仍失败时,检查配置覆盖顺序和它实际使用的协议。

资料来源与动态字段说明

接口路径、模型、价格、额度和网关能力会变化。下面的官方文档用于解释协议和字段,服务商控制台用于确定你当前账户真正能用的值。页面内容按 2026-10-12 的编辑范围整理,未把本站实时调用记录写成实测结果。

最小请求通过后,再迁移到客户端配置。

进入服务商控制台查看当前 Base URL、凭证类型、模型 ID 和协议说明;小贺 API 的动态字段也以登录后当前页面为准。

进入小贺API查看当前字段

下一步