搜索代码不用改,只换 base URL
Search1API 兼容另外七个搜索 API 的请求和响应格式。为其中某一个写好的项目,SDK、请求参数和解析响应的代码都保持不变,只需要换 base URL 和 API key。
https://api.search1api.com/compat/searxng/{key}/compat/tavily/compat/exa/compat/firecrawl/compat/jina/r /compat/jina/s/compat/bing/v7.0/search/compat/brave/res/v1/web/search
响应沿用原 API 的格式,客户端按原来的方式解析。
官方 SDK 以及 Open WebUI、LangChain 等客户端,换了 base URL 就能继续用。
结果按原 API 的响应结构返回。没有对应数据的字段留空,不会编造。
错误沿用原 API 的错误格式,状态码如 401、402、429。
兼容
SearXNG / Tavily / Exa / Firecrawl / Jina / Bing v7 / Brave
改两个值
把原服务的 key 换成 Search1API 的 key,再把客户端指向对应的 base URL。
把 base URL 传给 Tavily SDK。Open WebUI 从 TAVILY_API_BASE_URL 读取。
tavily-python — python difffrom tavily import TavilyClient-client = TavilyClient(api_key="tvly-YOUR_TAVILY_KEY")+client = TavilyClient(+ api_key="YOUR_SEARCH1API_KEY",+ api_base_url="https://api.search1api.com/compat/tavily",+)response = client.search("hono cloudflare workers", max_results=5)
支持的 API
每个 API 在 api.search1api.com 下有自己的路径,key 放在客户端原本使用的鉴权请求头中。
| API | 路径 |
|---|---|
| SearXNG | /compat/searxng/{key}搜索、新闻、图片,支持选择引擎和分类Key 的位置: URL 路径 |
| Tavily | /compat/tavily搜索、extractKey 的位置: Authorization: Bearer |
| Exa | /compat/exa搜索、contentsKey 的位置: x-api-key |
| Firecrawl | /compat/firecrawlscrape 和搜索,v1 与 v2Key 的位置: Authorization: Bearer |
| Jina | /compat/jina/r, /compat/jina/sReader 和搜索Key 的位置: Authorization: Bearer |
| Bing Web Search v7 | /compat/bing/v7.0/search网页、新闻、图片搜索Key 的位置: Ocp-Apim-Subscription-Key |
| Brave Search | /compat/brave/res/v1/web/search网页、新闻、图片搜索Key 的位置: X-Subscription-Token |
工作方式
转换成 Search1API 请求
每个请求转换成对应的 Search1API 搜索、新闻或抓取请求,再按客户端期望的格式返回。
key、计费、限流都一样
兼容请求的费用与原生请求相同,并计入同一个速率限制。读取页面全文时每页 1 credit。
不支持的选项直接忽略
带有 Search1API 无法处理的选项时,请求照常成功。像 Tavily 的生成式答案这类字段返回空值。
兼容 API 覆盖搜索、新闻、图片搜索和读取单个页面,不包括生成式答案、结构化提取、截图、站点地图和异步抓取任务。
已测试的客户端
以下客户端未经修改直接调用兼容端点完成测试:tavily-python 与 @tavily/core;exa-py 与 exa-js;firecrawl-js,以及 firecrawl-py 的 AsyncFirecrawl 和 V1FirecrawlApp;LangChain 的 SearXNG、Bing、Brave 封装;Open WebUI 调用 SearXNG、Jina、Bing 时发出的请求。
常见问题
用哪个 key?
用你的 Search1API API key,放在客户端原本发送 key 的位置:Tavily、Firecrawl、Jina 用 Bearer 请求头,Exa 用 x-api-key,Bing 用 Ocp-Apim-Subscription-Key,Brave 用 X-Subscription-Token,SearXNG 放在 URL 路径里。
兼容请求怎么计费?
与对应的 Search1API 请求相同:每次搜索 1 credit,每读取一个页面的全文再加 1 credit。Exa SDK 和 Jina 搜索默认会读取结果页面,因此默认搜 10 条最多 11 credits。Exa 传 contents: false、Jina 发送 X-Respond-With: no-content 可以关闭读取。
结果会和原服务完全一样吗?
不会。结果来自 Search1API 的引擎,只是以原 API 的响应格式返回。排序、摘要和可用字段都会有差异;客户端需要分数时,分数按排名生成。
Search1API 不支持的选项会怎样?
直接忽略,请求照常成功。每个文档页都列出了哪些选项会被转换、哪些响应字段为空。
这些 API 的所有客户端都能用吗?
允许修改 base URL 或端点的客户端都可以,URL 写死的客户端无法改指向。firecrawl-py 默认的同步客户端只保留 URL 的主机部分;它的 AsyncFirecrawl 和 V1FirecrawlApp 可以正常使用。
SearXNG 的 key 能不放在 URL 里吗?
SearXNG 客户端无法发送鉴权请求头,所以不行。请把这个 URL 当作密钥保管,并在控制台为它单独创建一个 key,方便单独吊销。Search1API 会在自己的日志中隐去这个 key。
了解更多
用你现有的客户端试试
新账户赠送 100 credits。创建一个 key,改掉 base URL,直接运行现有代码。