先给结论:判断一个端点支持哪些 Claude 模型,有三条你自己就能跑的命令——
GET /v1/models 列出真实模型清单、故意用一个错的 key 分辨它是原生 Anthropic 协议
还是 OpenAI 套壳、最小请求验证模型真的能调通。三条都不需要问客服,也不需要相信任何
宣传页。宣传页会写错、会过期、会夸大,机器返回的清单不会。
这篇把三条命令、各自的正确返回、以及怎么读懂返回值写清楚,最后给一张五种常见报错的 对照表。
为什么不能只看宣传页
新模型发布后,各家跟进速度差别很大:有的当天就有,有的要等一两周,有的宣传页写了 但实际调不通。宣传页通常是人工维护的,模型下线了也未必会及时删——它反映的是「我们 打算支持什么」,不是「此刻你的 key 能调什么」。
更麻烦的是模型 ID 的写法。同一个模型在不同平台上的 ID 可能带日期后缀、带区域 前缀、带版本号,抄错一个字符就是 404。官方文档里的写法不一定等于你手上这个端点的 写法,尤其是云平台代理的那些,通常会加自己的命名前缀。
所以正确的顺序是:先查清单,再照抄 ID,最后实跑一次。三步都很便宜,加起来不到 五分钟,能省掉后面几小时的排查。
第一条:GET /v1/models 列出真实清单
Anthropic 协议规定了一个只读的 Models 接口,绝大多数兼容端点都实现了它:
curl -s https://你的端点/v1/models \
-H "x-api-key: 你的key" \
-H "anthropic-version: 2023-06-01"
部分端点也接受 Authorization: Bearer <key> 这种写法。有些端点甚至不带 key 就能读,
因为模型清单本身不算敏感信息。
返回是一个 JSON 列表,每个模型对象包含三个关键字段:
| 字段 | 含义 | 怎么用 |
|---|---|---|
id |
模型唯一标识 | 这就是你要填进配置里的字符串,一个字符都不能改 |
display_name |
人类可读名称 | 用来确认这是不是你想要的那个模型 |
created_at |
模型发布时间 | 判断这份清单是不是最新的 |
实测一个端点的返回(2026-09-02 跑的,未带 key 也能读):
$ curl -s https://flex-api.code2ai.codes/v1/models
{"data":[
{"type":"model","id":"claude-fable-5-1","display_name":"Claude Fable 5.1"},
{"type":"model","id":"claude-fable-5", "display_name":"Claude Fable 5"},
{"type":"model","id":"claude-opus-5", "display_name":"Claude Opus 5"},
{"type":"model","id":"claude-sonnet-5", "display_name":"Claude Sonnet 5"}
]}
怎么读这个返回:
- 列表里有你要的模型 ID → 这个端点跟进了,把
id原样抄走 - 列表比宣传页少 → 以列表为准,宣传页过期了
- 返回 404 或者根本没这个接口 → 这个端点没实现 Models API,后面两条命令更要跑
- 返回 200 但列表是空的 → 通常是 key 权限问题,不是端点问题
这条命令的价值在于它是自证的:你不需要信任任何人的说法,列表是机器返回的。
第二条:故意用错的 key,分辨协议类型
这条最容易被跳过,但它能提前发现一类很难排查的问题。
有些端点宣称「兼容 Claude Code」,实际是 OpenAI 协议外面加了一层转换。这种在简单 对话上看不出差别,但在长会话、工具调用、流式输出上容易出问题——而这三件事正是 Claude Code 每天都在做的。等你写到一半发现工具调用不稳定,排查成本就高了。
分辨方法是同时请求两条路径,看哪条存在:
# Anthropic 原生路径
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://你的端点/v1/messages \
-H "content-type: application/json" \
-H "anthropic-version: 2023-06-01" \
-H "x-api-key: 随便填一个错的" \
-d '{"model":"claude-fable-5-1","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
# OpenAI 路径
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://你的端点/v1/chat/completions
判读表:
/v1/messages |
/v1/chat/completions |
说明 |
|---|---|---|
| 401 | 404 | 原生 Anthropic 协议,这是最理想的结果 |
| 200 | 200 | 两套协议都在,多半是转换层。长会话和工具调用要重点测 |
| 404 | 200 | 根本不是 Anthropic 协议,Claude Code 直接用不了 |
401 是好结果,不是坏结果——它说明端点认真校验了 key。真正该警惕的是用错误 key 也返回 200 的端点:那说明鉴权形同虚设。
顺带看一眼错误响应体。标准的 Anthropic 错误长这样:
{"type":"error","error":{"type":"authentication_error","message":"invalid api key"}}
字段结构对得上,说明不是随手糊的转换层。如果返回的是 {"error":{"message":...}}
这种 OpenAI 风格,或者干脆是一段 HTML 错误页,那就要谨慎了。
第三条:最小请求,验证模型真能调
清单里有、协议也对,最后还要确认这个模型在你的 key 权限下真的能调。花几分钱:
curl -s https://你的端点/v1/messages \
-H "content-type: application/json" \
-H "anthropic-version: 2023-06-01" \
-H "x-api-key: $YOUR_KEY" \
-d '{"model":"从清单里抄的ID","max_tokens":16,
"messages":[{"role":"user","content":"只回复 OK"}]}'
⚠️ 一定要从第一条命令的返回里抄 ID,不要从文档或别人的博客里抄。这是 404 最 常见的来源,没有之一。
能返回内容,这条路就通了。
清单之外,还有三件事清单答不了
/v1/models 只回答「有没有」,不回答「好不好用」。以下三件事需要另外验:
上下文长度。清单里通常不带上下文窗口信息。想确认,就发一个刻意超长的请求看它
在哪一步报错——正常端点会返回明确的 context_length_exceeded 类错误,而不是超时
或者截断后照常返回。后者更危险,因为你不会察觉。
工具调用。Claude Code 严重依赖 tool use。测法是发一个带 tools 参数的最小请求,
看返回里有没有正常的 tool_use 块。转换层最容易在这里出问题。
流式输出。加 "stream": true,看返回是不是标准的 SSE 事件流
(message_start / content_block_delta / message_stop)。有些端点会先把完整
结果攒好再一次性吐出来,形式上是流式,体验上完全不是。
五种常见报错的对照排查
| 现象 | 最可能的原因 |
|---|---|
/v1/models 通,最小请求 404 |
模型 ID 抄错,或该模型对你的 key 未开放 |
/v1/models 通,最小请求 401 |
key 无效,或鉴权头格式不对(x-api-key 还是 Bearer) |
| 两条都 404 | URL 拼错,最常见的是漏了 /v1 或者多加了一层 /v1 |
| 请求很久没响应然后超时 | 网络链路问题,不是端点问题,换个网络再试一次 |
清单里有模型但 display_name 对不上 |
端点做了模型映射,实际调用的可能不是你以为的模型 |
最后一行值得单独说:清单里的 id 和 display_name 应该是自洽的。如果一个端点
把 claude-opus-5 映射到别的模型,从返回里通常看不出来——这时候只能靠实际输出质量
判断,或者看它有没有公开说明映射关系。一个可操作的办法是准备三五道有标准答案的题,
在官方渠道和待测渠道各跑一遍对比推理质量。
常见问题
不带 key 能查模型清单吗?
看端点实现。有些端点允许匿名读取清单,因为模型列表不算敏感信息;有些要求带 key。 两种做法都合理。如果不带 key 就能读,那你在花钱之前就能确认它支不支持你要的模型, 对选型很方便。
官方 API 也需要这么查吗?
需要。Anthropic 官方的模型清单同样通过 GET /v1/models 提供,而且更近发布的模型
排在前面。用官方 SDK 的话,Python 是 client.models.list(),Go 是
client.Models.Get(),都会返回同样的 id / display_name / created_at 字段。
清单里有模型,是不是就代表所有功能都能用?
不代表。清单只说明「你的 key 有权限看到这个模型」,不保证工具调用、流式输出、超长
上下文这些能力都正常。所以第三条命令(最小请求)不能省,涉及工具调用的场景还要单独
测一次带 tools 参数的请求。
模型 ID 带日期后缀和不带,有什么区别?
带日期的是固定快照(比如 claude-opus-4-5-20251101),不带的通常是别名,会随厂商
更新指向新版本。生产环境建议用带日期的固定版本,避免模型静默升级导致行为变化;
测试环境用别名更省事,不用跟着改配置。
这些命令在 Windows 上怎么跑?
PowerShell 里的 curl 是 Invoke-WebRequest 的别名,参数不兼容,直接跑会报错。
建议在 Git Bash 或 WSL 里跑;也可以把命令里的 curl 换成 curl.exe,强制调用
真正的 curl。
端点返回的清单和我在控制台看到的不一样,信哪个?
信 API 返回的。控制台页面可能有缓存,也可能展示的是「产品支持的全集」而不是「你这个 账号能调的子集」。API 返回的是当前 key 的实际权限,那才是调用时生效的东西。
多久应该重新查一次清单?
新模型发布后查一次,以及每次配置报 404 的时候查一次。平时不用频繁查——但如果你在 脚本里硬编码了模型 ID,建议加一条启动时的清单校验,模型下线时能第一时间发现, 而不是等线上报错。