先把当时的情况摆出来。用 OpenRouter 的兼容接口调 anthropic/claude-3.5-sonnet,返回 404,原文 No endpoints found matching your data policy,换 openai/gpt-4o 又能通,请求里带了 provider 排序参数。
这类报错背后常见的原因有几处,逐个排除就行。账号的隐私设置不允许把请求发给会记录数据的供应商。少数情况下是provider.order 里写死的供应商没有该模型的端点。
还有一种情况,模型 slug 少写了厂商前缀,路由匹配不到。另外,allow_fallbacks 设成 false 后没有可用备选。
动手时先查这个模型当前有哪些可用端点
curl -s https://openrouter.ai/api/v1/models -H "Authorization: Bearer $OPENROUTER_KEY" | jq -r '.data[] | select(.id=="anthropic/claude-3.5-sonnet") | .id'
接着把请求里的 provider 字段整段去掉再试
curl -s https://openrouter.ai/api/v1/chat/completions -H "Authorization: Bearer $OPENROUTER_KEY" -H "Content-Type: application/json" -d '{"model":"anthropic/claude-3.5-sonnet","messages":[{"role":"user","content":"ping"}]}'
随后打开 allow_fallbacks 让路由自己挑
curl -s https://openrouter.ai/api/v1/chat/completions -H "Authorization: Bearer $OPENROUTER_KEY" -d '{"model":"anthropic/claude-3.5-sonnet","allow_fallbacks":true,"messages":[{"role":"user","content":"ping"}]}'
剩下的就是在账号设置里把数据策略改成允许后再验证
curl -s https://openrouter.ai/api/v1/key -H "Authorization: Bearer $OPENROUTER_KEY" | jq '.data'
怎么算真的好了,看的是同一批现象。同一请求返回 200,响应体 provider 字段有具体供应商名,日志里不再出现 No endpoints found。
404 在这里不代表模型不存在,而是没有符合数据策略的端点,先看账号策略再看路由参数。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
