API 文档

EveryInfra API 与 MCP 开发文档

EveryInfra 提供数据采集、联网搜索、验证码识别,以及充值用户免费使用的 AI 接口(兼容 OpenAI)。MCP 是调用这些能力的协议入口。所有接口用同一把 API Key 和同一个钱包。

快速开始

我们提供什么

核心 API ①按平台与采集方式分档

统一数据 API

用同一个请求结构获取社交内容、点评口碑、电商评论与全网搜索数据。舆情监控、竞品研究、评论分析、RAG 数据源和 Agent 联网取数。

POST /api/v1/social
  • 106 个平台、573 项能力,换平台只改 platform 一个字段
  • 返回结构化 JSON,字段名统一,可直接入库
  • 多数能力一次请求给满,按页的能力每页算一次;请求失败不扣钱

能力目录 GET /api/v1/social/catalog;异步结果 GET /api/v1/jobs/{job_id}

核心 API ②充值用户免费

AI 接口

兼容 OpenAI 的 AI 接口,充值过的账户免费使用,默认模型 gemini-3.6-flash。清洗、去重、分类、提取字段、写摘要和翻译你采集到的数据。

POST /api/v1/chat/completions
  • 把 base_url 换成我们的,原来的 OpenAI SDK 一行不用改
  • 调用免费,不扣余额;每分钟次数按累计充值分档(50 / 500 / 5,000 次)
  • 支持流式输出;模型清单以 GET /api/v1/models 为准

模型目录 GET /api/v1/models(不用 Key);对话 POST /api/v1/chat/completions

专项 API$0.14 / 千次–$4.58 / 千次

验证码识别 EverySolve

提交站点参数,拿回可直接使用的识别结果:token、Cookie、坐标或识别文本。注册与登录自动化、采集流程里被 Turnstile / reCAPTCHA / hCaptcha 挡住的那一步。

POST /api/v1/captcha
  • 52 种验证码类型,覆盖 token、坐标、文本等 9 种返回形态
  • 仅成功计费;失败不产生最终扣款,若已预扣则余额自动恢复
  • 同一接口提交不同验证码类型,按类型返回可用结果

能力目录 GET /api/v1/captcha/types 免费、不鉴权,实时标注每类当前可用性

专项 API$0.69 / 千次 起

全网搜索 EverySearch

一个接口拿全网搜索结果与网页正文:关键词、语义、论坛、学术、多来源交叉核对。Agent 联网取数、RAG 语料、竞品与舆情调研、需要带引用的事实核查。

POST /api/v1/search
  • 17 个检索工具,换一个 tool 就换一种检索机制,请求结构不变
  • 深度检索连网页正文一起返回,不用再自己去抓一遍页面
  • 交叉验证会列出每条结论的来源,以及几个来源是否说法一致

能力目录 GET /api/v1/search/tools;三档定价见 /pricing

专项 API$0.56 / 千封

邮件发送

用我们的发信域发验证码与通知邮件,不用自己养域名、配 SPF/DKIM、暖 IP。注册验证码、订单与状态通知、批量触达,以及不想为送达率维护发信基础设施的团队。

POST /api/v1/email/send
  • 单封与批量两个端点,同一把 Key、同一个钱包结算
  • 发信域与 DNS 记录由我们维护,你不用碰 SPF/DKIM/DMARC
  • 投递事件可回调,送达与失败都能对上号

能力目录 GET /api/v1/email/catalog;用量 GET /api/v1/email/usage

专项 API下单时报价

IP 代理

按需下单住宅 IP,拿到就能用的代理地址和账号,支持指定地区与会话保持。被地区封锁挡住的采集、需要稳定出口的自动化流程、多账号隔离。

POST /api/v1/proxy/order
  • 按订单下单,不用按月买套餐、也不用为闲置带宽付费
  • 可指定地区;需要同一出口时用 sticky_minutes 保持会话,不额外收费
  • 代理地址和账号下单后立即返回,订单状态可随时查

能力目录 GET /api/v1/proxy/catalog;订单状态 GET /api/v1/proxy/order/{order_id}

专项 API按服务与国家浮动

接码

按服务与国家取一个可收短信的号码,验证码到达后自动提取。注册与登录自动化里需要手机验证码的那一步,以及需要长期号码的租用场景。

POST /api/v1/sms/number
  • 按「服务 × 国家」选号,目录里直接标出各组合的零售价
  • 一次性取号与长期租用两种模式,取不到号不扣钱
  • 验证码自动提取,不用自己解析短信正文

能力目录 GET /api/v1/sms/catalog;租用目录 GET /api/v1/sms/rental/catalog

协议入口

MCP 远程服务器

POST /mcp按调用的底层 API 计费

让 Claude、ChatGPT、Cursor 等客户端直接调用数据、搜索和验证码 API。不想手写 HTTP 的 AI Agent、桌面客户端、IDE 和自动化工作流。

  • /mcp 列 12 个工具:能力发现、数据抓取、异步任务查询、搜索、验证码识别、AI 接口,加上查余额、调用记录、充值链接和人工客服工单;/mcp/all 用同一把 Key 列全部 24 个,再加用量、账单、Key、工单列表和回复、设置、Webhook(改账户要给 Key 打开写权限)。AI 自己判断该调哪个
  • Claude 和 Cursor 有一键部署链接,ChatGPT 粘一次地址就行
  • 和上面两个 API 共用同一把 Key、同一个钱包
辅助发现接口: GET /api/v1/social/catalog 查看全部数据能力,GET /api/v1/models 查看模型列表,GET /api/v1/jobs/{job_id} 轮询异步数据任务。它们不是第三、第四类付费 API。

怎么选择入口

你的目标选择入口得到什么
搜索帖子、评论、用户、商品或网页统一数据 APIPOST /api/v1/social结构化 JSON 数据
清洗、分类、抽取或总结采集到的数据AI 接口POST /api/v1/chat/completions按你定的格式返回(充值用户免费)
查资料、抓正文、爬站点、交叉验证事实搜索 APIPOST /api/v1/search带来源的结构化结果
过掉挡在目标站前面的验证码或挑战页验证码识别 APIPOST /api/v1/captchatoken / Cookie / 坐标(按类型)
让支持 MCP 的 AI 客户端自己选工具MCPPOST /mcp先查工具和参数;能查目录不代表 Key 已能付费调用

快速开始

在 GitHub 给两个仓库点星领 $1 额度(≈720 次数据调用):给 everyinfra/everyinfra-agent-plugins 和 everyinfra/seo-skills 两个仓库都点星,注册后在控制台「余额与充值」领取,领取后 24 小时内有效,不能用于验证码识别。拿到 API Key 后,先选择你要调用的入口;下面以统一数据 API 为例:

quickstart.sh
curl -X POST https://api.everyinfra.com/api/v1/social \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"xiaohongshu","action":"search",
       "params":{"keyword":"露营","limit":20}}'
response.json
{
  "platform": "xiaohongshu",
  "action": "search",
  "count": 20,
  "results": [ { "id": "...", "title": "...", "like_count": 3280 } ],
  "billing": { "charged": true, "charged_usd": 0.005556, "balance_after_usd": 12.340122 }
}

鉴权

每个请求带上 Authorization 头,值为 Bearer <你的 API Key>。API Key 在 控制台 创建,完整 Key 仅在创建时显示一次。Base URL:https://api.everyinfra.com。

这把 Key 能调四个产品,共用一个钱包

一把 API Key 就像配电板上的钥匙总闸:转到开,四个产品一起通电,共用同一个钱包。在控制台「API Keys → 权限限制」里可以给这把 Key 拉下某一路,被拉下的产品调用返回 403 capability_denied;停用这把 Key,四路一起断,调用返回 401。

用同一把 Key 调 GET /api/v1/account 可以查余额(付费、赠送与合计)、本月折扣档、每分钟次数上限和近 24 小时用量。金额都是美元;这个接口只读、不计费,也不占每分钟次数。

account.sh
curl https://api.everyinfra.com/api/v1/account \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY"

要读全账户范围的记录(每日用量、调用记录、账单、钱包流水),同一把 Key 可以调控制台接口,例如 GET /portal/api/requests/{request_id},按接口看成功率和耗时用 GET /portal/api/quality;它们需要 Key 有账户读取权限,不扣费,每账户每分钟 60 次,完整列表见 OpenAPI 的 Account 一节。

不想轮询的话,在控制台「设置 → Webhook」填一个 HTTPS 地址:余额降到你设的阈值、或异步任务结束时,我们发一个带签名的 POST。签名在 X-EveryInfra-Signature 请求头里,是用签名密钥对「时间戳、英文句点、原始请求体」算的 HMAC-SHA256;时间戳相差超过 5 分钟的请求请直接拒绝,并按事件 ID 去重(失败会退避重试,最多 7 次)。

要让 AI 也能改账户,在「API Keys → 权限限制」里给它打开写权限:管理 Key、修改设置、开工单和回复,三项都默认关闭、只能由你登录控制台勾选。经 Key 新建 Key 每天最多 20 把,开工单不限张数;查看或轮换完整 Key、改权限和 IP 白名单、重新启用 Key、付款,永远只能在控制台做。完整接口见 OpenAPI 的 Account 一节,例如 POST /portal/api/keys/{key_id}/disable。

balance.total_usd 是付费余额加赠送余额的合计,扣费时先用赠送余额;bonus_expiring 列出还没到期的限时赠送额度;discount 是本月充值折扣档和距下一档还差多少(经服务商开通的账户价格由服务商套餐决定,这里为 null);rate_limit.requests_per_minute 是账户名下所有 Key 合计的每分钟次数上限(AI 接口另有分档);usage_24h 是近 24 小时的调用数和实际花费,可能有约 1 分钟延迟。

统一数据 API

一个端点通吃全部数据能力。请求体三要素:platform(平台标识,如 xiaohongshu / google_maps_reviews / amazon)、action(动作,如 search / user_posts / reviews / comments)、params(动作参数,如 keyword / url / limit)。换平台只换 platform 字段,响应结构统一。

支持的平台与能力

106 平台 / 573 能力,三大域:社交内容(小红书、抖音、Instagram、X、TikTok、YouTube、微博、知乎、公众号、B站、Reddit 等)、点评口碑(谷歌地图、TripAdvisor、Yelp、Trustpilot、Glassdoor、App Store、Google Play 等,按 URL/域名取评论)、电商(Amazon、速卖通、eBay、Etsy、Temu 等)+ 全网搜索。完整清单看 GET /api/v1/social/catalog(免费,不计费;含每个能力的必填/可选参数、单次条数上限和单价)。还覆盖招聘、设计社区与房产等任务,具体支持范围以能力目录为准。

API 参考

按领域列出全部 106 个平台和 573 个接口。点平台名看平台概览,点接口名看参数、返回字段和代码示例。

电商15 个平台 · 58 个接口
社交与内容51 个平台 · 389 个接口
点评与生活服务23 个平台 · 86 个接口
搜索与资讯17 个平台 · 40 个接口

异步任务

异步动作包括 Facebook 主页/帖子/评论、Instagram 用户帖子/发现和 LinkedIn 评论。提交后立即返回 job_id,用 GET /api/v1/jobs/{job_id} 轮询,完成后取结果。只在提交时计费一次,轮询免费。

任何数据能力都可以在请求体加 "mode": "async" 改走异步。一次要跑几十上百个请求时请用异步:同步调用要在 85 秒内返回,超过就按超时失败(不计费);异步提交后立即拿到 job_id,任务在后台跑完再取结果,不受这个时限限制。

一个端点 POST /api/v1/search,17 个工具,请求体用 tool 选:网页检索 / 语义检索 / 深度检索 / 学术与专利 / 新闻检索 / 商品检索 / 地点检索 / 图像与视频 / 反向图搜 / 论坛检索 / 正文抓取 / 整站爬取 / 站点结构 / 相似页面 / 联想词 / 交叉验证 / 长任务抓取。工具目录 GET /api/v1/search/tools 不鉴权、免费,带每个工具的参数与单价。

三档基础标价:标准 $0.69 / 千次 / 深度 $1.39 / 千次 / 交叉验证 $2.78 / 千次。选择前请查看工具目录列出的参数、返回格式与当前价格;实扣金额在调用响应中核对。

search.sh
curl -X POST https://api.everyinfra.com/api/v1/search \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool":"web","q":"EU AI Act 合规要求","num":10}'

验证码识别 API(EverySolve)

一个端点 POST /api/v1/captcha,52 种类型,$0.14 / 千次–$4.58 / 千次。请求体第一个字段永远是 type,其余参数逐类型不同。能力目录 GET /api/v1/captcha/types 不鉴权、免费,带每种类型的必填/可选参数、解的形状和单价,而且带 available 字段如实反映此刻能不能卖,别把它缓存起来当静态数据用。

仅成功计费;失败不产生最终扣款:未取得有效解、执行失败或超时,若已预扣则余额自动恢复。

captcha.sh
curl -X POST https://api.everyinfra.com/api/v1/captcha \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"turnstile",
       "website_url":"https://example.com/login",
       "website_key":"0x4AAAAAAA..."}'
captcha_response.json
{
  "type": "turnstile",
  "solution": { "token": "0.aBcD..." },
  "token": "0.aBcD...",          // 标量解额外给一个顶层字段,省一层取值
  "billing": { "charged": true, "charged_usd": 0.001528, "balance_after_usd": 12.345122 }
}

⚠ 解的形状有 9 种,接入前先确认你这一类是哪种。 这是这条 API 最容易写错的地方:不同验证码交付的东西根本不是一类东西,有的是一个字符串填回表单,有的是一组坐标要你自己去点。solution 里的字段名以目录返回的 solution.keys 为准。

解的形状长什么样典型类型怎么用
boxes[{ "x_min": 10, "x_max": 40, "y_min": 5, "y_max": 30 }]框选题按矩形范围拖框,不是点一个点
cookie"name=值; Path=/"Cloudflare 挑战页 / Imperva / Akamai作为 Cookie 带上后续请求
fields{ "ticket": "…", "randstr": "…" }腾讯天御 / 网易易盾多个字段一起回填,缺一个都不行
indices[0, 2, 6]reCAPTCHA 九宫格按编号点格子:0 起,从左上角按行数
number42旋转题 / 滑块按这个数值驱动你自己的浏览器
points[{ "x": 36, "y": 26 }]点选题按坐标依次点击(数值是像素)
text"3f8a"图形识别 / 文字题 / 音频把识别出的文字填回输入框
token"0.aBcD…"Turnstile / reCAPTCHA / hCaptcha填回目标站表单的对应字段
tokens["ct_aBc…", "ct_dEf…"]反欺诈请求令牌(Castle)在后续请求上逐个用掉,用完再来取

前四种是单个标量,响应会额外给一个顶层 token 字段,省掉一层取值;后三种不是标量,没有顶层 token,只能从 solution 里取。坐标和矩形的数值一律是数字、键名一律 snake_case。

有几类要你自带代理(目录里 proxy 在必填里的那些):它们交付的是 Cookie 而不是 token,而 Cookie 绑定求解时的出口 IP。用我们的出口解出来,你拿去用是无效的。所以代理必须是你后续请求要用的那个出口。

AI 接口(充值用户免费)

AI 接口兼容 OpenAI 的 chat/completions:充值过任意金额的账户免费调用,不扣余额,用来清洗、去重、分类、抽取和总结你在万有引擎采集的数据,输出格式由你在提示词里定。

用 OpenAI SDK 时把 base_url 设成 https://api.everyinfra.com/api/v1,api_key 填 EveryInfra 的 API Key(和其他接口同一把,放在 Authorization: Bearer 请求头里;网址里带 ?key= 会被拒绝)。对话接口是 POST /api/v1/chat/completions,请求和返回格式与 OpenAI 一致。

ai_quickstart.py
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.everyinfra.com/api/v1",
    api_key=os.environ["EVERYINFRA_API_KEY"],
)
r = client.chat.completions.create(
    model="gemini-3.6-flash",
    messages=[{
        "role": "user",
        "content": "只返回 JSON:给这条评论标注 sentiment、topic 和 intent",
    }],
)
print(r.choices[0].message.content)

模型有两个:默认的 gemini-3.6-flash,和更轻量的 gemini-flash-lite。GET /api/v1/models 返回同样的清单,这个接口不用 Key。model 写错会返回 422,并提示可能的正确名称。

按累计充值分档限速,账户内所有 Key 合计:

累计充值每分钟次数同时在跑
充值过,不足 $100505
满 $10050050
满 $5005,000500

单笔超过 $1 的额度码和赠送额度也和充值一样算,试用额度和 $1 及以下的不算。没充值过、也没有过单笔超过 $1 的额度码或赠送额度的账户,调用返回 403 ai_topup_required。分档是上限。

支持流式:请求里加 stream: true,按 SSE 逐段返回,以 data: [DONE] 结束;需要用量时加 stream_options.include_usage。

messages 合计最多 45,000 字符,超过返回 422 input_too_large,请切块后分多次请求。多轮对话由每次请求带上完整历史实现;不要依赖图片、PDF、音频或视频输入。

403 ai_topup_required账户还没充值过;充值任意金额后就能调用
429 rate_limited每分钟次数用完(per_minute_limit)或同时在跑超过上限(concurrency_limit),按 Retry-After 等待后重试
503 ai_busy全站繁忙,按 Retry-After 稍后重试
403 ai_disabled这个账号的 AI 接口已被暂停
422 unknown_modelmodel 不存在,message 会给出可能的正确名称

AI 接口用来整理你在万有引擎采集的数据。如果用在别的地方,或者调用明显异常,我们可能会暂停这个账号的 AI 接口;账号本身、其他接口和余额都不受影响。

批量与并发

批量处理时限制同时发出的请求数,不要超过你这一档的「同时在跑」上限;遇到 429 按 Retry-After 等待,遇到 503 做带抖动的指数退避。每条任务保留自己的业务 ID,便于重试和对账;先让模型只返回固定 JSON,再在客户端校验失败的条目。

batch_labeling.py
import os
from concurrent.futures import ThreadPoolExecutor
from openai import OpenAI

client = OpenAI(base_url="https://api.everyinfra.com/api/v1", api_key=os.environ["EVERYINFRA_API_KEY"])
comments = ["物流很快,包装也很好", "功能一般,价格偏高"]

def label(text: str):
    return client.chat.completions.create(
        model="gemini-3.6-flash",
        messages=[{"role": "user", "content": f"只返回 JSON,字段为 sentiment/topic/intent:{text}"}],
    ).choices[0].message.content

# 并发数不要超过你这一档的「同时在跑」上限
with ThreadPoolExecutor(max_workers=5) as pool:
    results = list(pool.map(label, comments))

MCP 接入

支持 MCP 的客户端可通过 POST https://api.everyinfra.com/mcp(Streamable HTTP)发现并调用 EveryInfra 工具,无需在本地运行服务器。先读取 tools/list 和每个工具的 inputSchema,再选择参数。插件装好、能看到 Skill 或工具,不代表这把 Key 已经能付费调用;目录里有商品,也不代表商品有货。

MCP 有两个入口,用同一把 Key:https://api.everyinfra.com/mcp 只列 12 个常用工具(采集、搜索、验证码、AI 接口,加查余额、查调用记录、拿充值链接、开工单和查工单);https://api.everyinfra.com/mcp/all 列全部 24 个,下面的账户记录和管理工具只在它的列表里。账户类工具改成了动词在前的名字(例如 everyinfra_account 改成了 everyinfra_get_account),旧名在两个入口上照样能调,只是不再列出:写死旧名的脚本不用改,要在 AI 客户端里用这些工具,把连接器地址换成 /mcp/all。

通过 everyinfra_list_capabilities 发现数据能力,使用 everyinfra_call_api(异步提交的任务用 everyinfra_get_job 免费取结果)和 everyinfra_search 调用数据与搜索产品。验证码先用免费的 everyinfra_list_captcha_types 核对 type、必填参数、解的形状和实时可用性,再调用 everyinfra_solve_captcha;目录查询不计费。实际工具与参数以 tools/list 为准。AI 对话用 everyinfra_chat(充值用户免费,非流式)。查余额、本月折扣档和每分钟次数用免费的 everyinfra_get_account(无参数,返回内容与 GET /api/v1/account 相同)。

更细的账户记录用这几个免费工具读:everyinfra_get_usage、everyinfra_list_requests、everyinfra_get_billing、everyinfra_list_keys、everyinfra_list_tickets,分别是每日用量、调用记录(按 request_id 查单次调用的最终扣费结算)、账单与钱包流水、Key 列表和人工客服工单列表。它们要求这把 Key 有对应的账户读取权限:没限产品的 Key 默认能读用量、调用记录和账单;限了产品的 Key,以及工单读取,要在控制台「API Keys → 权限限制」里打开。要充值时用 everyinfra_get_topup_link 拿控制台充值页链接,由账户主人自己付款,工具本身不会建单或扣款。

调用一直失败、数据不对、充值或扣费有疑问、想要新平台或字段时,任何一把 Key 都能用 everyinfra_create_ticket 开人工客服工单(免费、不需要额外权限),返回工单号和控制台链接,之后用 everyinfra_get_ticket 查进度和客服回复;REST 是 POST /api/v1/support/tickets 和 GET /api/v1/support/tickets/{ticket_id}。旧的开单工具 everyinfra_ticket_create(要写权限)仍可用,新接入请用 everyinfra_create_ticket。

账户主人在控制台给 Key 打开写权限之后,AI 还可以用这几个工具改账户:everyinfra_create_key、everyinfra_update_key、everyinfra_disable_key、everyinfra_delete_key、everyinfra_update_settings、everyinfra_set_webhook、everyinfra_test_webhook、everyinfra_reply_ticket(分别是新建、修改、停用、删除 Key,改设置,设置和测试 Webhook,回复工单)。写权限默认关闭,只能由人登录控制台勾选;经 Key 新建的 Key 不会比发起的那把更宽,也永远不带写权限;人建的 Key 只能停用。AI 做的每一项修改都会出现在控制台「消息」里。

通过客户端的密钥配置注入 Authorization: Bearer <API Key>,不要把真实 Key 放进对话、代码仓、截图或 URL。网址里带 Key 的旧连接(?key=)2026-11-04 起已经停用,会回 401;只能填网址、不能设请求头的客户端,改接 /mcp/all 并按提示登录。各个客户端是否支持远程 MCP、自定义请求头或插件,要分别确认;直接连 MCP 和安装插件是两回事。

HTTP 200 不等于工具调用成功:先检查 JSON-RPC error,再检查 result.isError 与业务状态。文本模型的首个文本块是回答,不要假定所有文本块都是 JSON;若返回额外的账单 JSON,读取其中的 billing。同一结果同时出现在 structuredContent 和 JSON 文本时只消费一份;没有账单信息不能推断为免费。

邮件、接码和 IP 代理(EveryMail、EveryNumber、EveryProxy)暂时不能通过 MCP 默认调用,请继续用 REST。以后开放时,也要先看清工具参数,再让用户确认发给谁、买多少或租多久、预算多少美元。查短信验证码或取代理账号可能扣费,不是免费的状态查询;超时或结果不明时保留原幂等键、Key 和参数,先查已有订单,不要自动换键、重发或改用 REST 再发一次。

首页接入示例与控制台「MCP 接入」页帮助配置连接;最新能力说明见 llms.txt 和 OpenAPI。连上服务器、鉴权通过、调用成功是三件事,接入时请分别确认。

配合 IPFoxy 代理使用

调 EveryInfra 的接口本身不需要代理:请求直接发到 api.everyinfra.com,拿回的是带字段名的 JSON。需要代理的是你自己的程序:自建爬虫或浏览器自动化要以某个国家用户的身份打开页面,就要一个那个国家的出口 IP。

所以两者分工很清楚:IPFoxy 给你自己的请求换出口 IP,EveryInfra 给你目录里已有平台的结构化数据。

任务用什么
打开要按国家显示的页面(本地价格、配送、广告位),或者登录自己的店铺和账号IPFoxy 代理 + 你的爬虫或浏览器
抓数据接口目录里没有的网站或字段IPFoxy 代理 + 你的爬虫
批量拿目录里已有的平台数据,进表格或数据库EveryInfra 数据接口,直连,不走代理

下面的 Python 示例把两步放在一个脚本里:第 1 步经 IPFoxy 出口访问 ipinfo.io,看出口 IP 在哪个国家;第 2 步直连 EveryInfra,取一个 Amazon 商品详情。运行前设两个环境变量:EVERYINFRA_API_KEY 是你的 API Key,IPFOXY_PROXY 是 IPFoxy 后台生成的连接串,格式 http://用户名:密码@主机:端口。需要 pip install requests。

proxy_plus_data_api.py
import os

import requests

EVERYINFRA_API_KEY = os.environ["EVERYINFRA_API_KEY"]
IPFOXY_PROXY = os.environ["IPFOXY_PROXY"]  # http://用户名:密码@主机:端口
PROXIES = {"http": IPFOXY_PROXY, "https": IPFOXY_PROXY}

# 1. 你自己的请求:经 IPFoxy 出口
exit_ip = requests.get("https://ipinfo.io/json", proxies=PROXIES, timeout=30).json()
print("出口 IP 所在国家:", exit_ip.get("country"))

# 2. 调 EveryInfra:直连,不需要代理
direct = requests.Session()
direct.trust_env = False  # 忽略 HTTP(S)_PROXY 环境变量,这一步不花代理流量
resp = direct.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {EVERYINFRA_API_KEY}"},
    json={
        "platform": "amazon",
        "action": "profile",
        "params": {"url": "https://www.amazon.com/dp/B0CYJDVT31"},
    },
    timeout=120,
)
resp.raise_for_status()
body = resp.json()
item = body["results"]
print(item["title"][:60], item["currency"], item["price"], item["rating"])
print("本次扣费(美元):", body["billing"]["charged_usd"])
  • direct.trust_env = False 让 EveryInfra 这一步忽略 HTTP_PROXY、HTTPS_PROXY 环境变量。不加的话,系统里设了全局代理时,这次调用也会走代理,多花代理流量。
  • 代理返回 407,说明用户名或密码不对。示例会在调用 EveryInfra 之前停下,不会扣费。IPFoxy 帮助中心提示:要在海外网络环境下运行,代理才能生效。
  • 2026 年 10 月 24 日我们跑过这段代码:EveryInfra 这一步调用成功,返回商品标题、价格和评分,扣费 $0.001389。代理这一步用本地模拟代理验证了地址格式、CONNECT 隧道和 407 处理。
  • 一页要花多少代理流量:只取 HTML 约 0.44 MB,浏览器整页加载约 7.96 MB。按 IPFoxy 各档价格算的每千页费用和成功率门槛,见博客《代理流量怎么算钱:40 个 Amazon 商品页实测》。
  • 完整示例、本地模拟代理和量字节的脚本在 GitHub:everyinfra-agent-plugins / examples / proxy-plus-data-api。

推广披露:下面「访问 IPFoxy 官网」是 IPFoxy 给我们的推广链接,带我们的推荐码;你通过它注册或购买,IPFoxy 可能给我们分成。我们和 IPFoxy 是合作伙伴关系。

访问 IPFoxy 官网(在新窗口打开)IPFoxy 的产品和价格整理在合作伙伴介绍页。

配合 Exa 搜索使用

Exa 按意思搜索网页:查询词不用和页面上的字一样,它也能找到对的公司、文章和论文,结果直接带回正文。EveryInfra 给你平台上的结构化数据:G2、Trustpilot 的评分和评论,YouTube 的评论,都是带字段名的 JSON。

常见的组合是:先用 Exa 列出一批对象,再用 EveryInfra 给每个对象补上平台数据。

任务用什么
按意思找一批公司、文章或论文,并带回正文Exa
已知产品在 G2、Trustpilot 上的评分、评论数和评论正文EveryInfra g2、trustpilot 接口
YouTube 视频下面的评论和点赞数EveryInfra youtube 接口(Exa 能带回视频的字幕正文,但不带评论)

下面的 Python 示例做一份竞品口碑表:第 1 步用 Exa 找「和 Obsidian 类似的笔记应用」,category: "company" 让结果只返回公司官网;第 2 步对每家调 EveryInfra 的 g2/search,取 G2 评分和评论数。运行前设两个环境变量:EXA_API_KEY 是 Exa 后台的 API Key,EVERYINFRA_API_KEY 是你的 EveryInfra API Key。需要 pip install requests。

exa_plus_data_api.py
import os
from concurrent.futures import ThreadPoolExecutor
from urllib.parse import urlsplit

import requests

EXA_API_KEY = os.environ["EXA_API_KEY"]
EVERYINFRA_API_KEY = os.environ["EVERYINFRA_API_KEY"]
QUESTION = "note-taking apps similar to Obsidian"

# 1. Exa:按意思找公司,不靠关键词
companies = requests.post(
    "https://api.exa.ai/search",
    headers={"x-api-key": EXA_API_KEY},
    json={"query": QUESTION, "category": "company", "type": "auto", "numResults": 10},
    timeout=60,
).json()["results"]


# 2. EveryInfra:每家在 G2 上的评分和评论数
def g2_rating(company):
    name = company["title"].split(" - ")[0].split(" | ")[0].strip()
    resp = requests.post(
        "https://api.everyinfra.com/api/v1/social",
        headers={"Authorization": f"Bearer {EVERYINFRA_API_KEY}"},
        json={"platform": "g2", "action": "search", "params": {"keyword": name}},
        timeout=180,
    )
    resp.raise_for_status()
    body = resp.json()
    match = next((p for p in body["results"] if p["product_name"].lower() == name.lower()), None)
    return name, match, body["billing"]["charged_usd"]


with ThreadPoolExecutor(max_workers=4) as pool:
    rows = list(pool.map(g2_rating, companies))

spent = 0.0
for company, (name, g2, charged) in zip(companies, rows):
    spent += charged
    domain = urlsplit(company["url"]).hostname.removeprefix("www.")
    if g2 and g2["review_count"]:
        print(f"{name:12} {domain:16} G2 {g2['rating']} / 5 · {g2['review_count']} 条评论")
    else:
        print(f"{name:12} {domain:16} G2 上还没有评论")
print("EveryInfra 本次扣费(美元):", round(spent, 6))
  • 2026 年 10 月 25 日我们照抄跑过这段代码:Exa 返回 10 家公司官网(隔几分钟再搜一次,还是同样 10 家),其中 7 家在 G2 有评分和评论,例如 Goodnotes 4.7 分、123 条,Milanote 4.5 分、42 条。中英西三份示例各跑一次,每次 44–51 秒。EveryInfra 扣费 $0.01389(10 次 g2/search),Exa 这次搜索 $0.007。
  • 公司名要和 G2 产品名完全一致才算匹配。示例取 Exa 结果的标题,去掉「 - 」后面的部分作公司名。实测 Brainio 在 G2 搜不到同名产品;Yaranga、Brainfo 有 G2 页面,但还没有评论。
  • g2/search 每次按一次计费($0.001389),没有同名产品也一样,因为接口照常返回了搜索结果。一次调用约 30–70 秒,所以示例开 4 路并发。
  • 想看 Trustpilot:把第 2 步换成 trustpilot/profile,参数 company 填官网域名。同一批公司实测 7 家里 4 家有 Trustpilot 档案;没有档案的返回空结果,不扣费。
  • Exa 的结果里没有 Reddit 帖子:includeDomains 限定 reddit.com 时,返回 0 条,也不扣费。
  • 3 个品类、30 家公司的覆盖率、名称匹配漏掉的大公司和完整数据,见博客《用 Exa 找竞品、用 EveryInfra 查口碑:30 家公司实测》。

我们和 Exa 是合作伙伴关系。下面「访问 Exa 官网」是普通链接,不带推荐码。

访问 Exa 官网(在新窗口打开)Exa 的产品和价格整理在合作伙伴介绍页。

配合 Monid 使用

Monid 是给 AI 智能体用的工具路由:智能体用一句话描述要做什么,discover 免费返回目录里合适的接口和价格,inspect 免费返回参数和当前价格,run 才按这个价格从一个预付余额里扣钱。EveryInfra 给你固定的平台数据接口:同一个请求格式、每项能力固定的字段名和价格。

常见的分工是按「是不是每天都跑」来分:EveryInfra 目录里有的平台(2026 年 11 月 3 日共 106 个,以 GET /api/v1/social/catalog 为准)走 EveryInfra;目录里没有的平台,或者根本不是数据的工具(天气、地址转坐标、公司 Logo、生成图片),交给 Monid。

任务用什么
每天固定跑的平台数据,例如小红书搜索、亚马逊商品、YouTube 评论EveryInfra 的接口或 MCP 工具 everyinfra_call_api,平台以目录为准
EveryInfra 目录里没有的平台,或偶尔查一次的工具Monid:先 discover 找接口,再 inspect 看价,最后 run
还不知道该用哪个工具Monid discover(免费,返回排好序的候选和各自的价格)

下面的 Python 示例把两件事放在一个脚本里。第 1 步是每天的活:调 EveryInfra 的 xiaohongshu/search,按点赞最多搜「抹茶拿铁」,打印前 3 条笔记和这次的扣费。第 2 步是一次性的活:让 Monid 找一个「按域名取公司 Logo」的工具,inspect 显示的价格不超过 MAX_PRICE_USD 才运行。运行前设两个环境变量:EVERYINFRA_API_KEY 是你的 EveryInfra API Key,MONID_API_KEY 是在 Monid 后台(app.monid.ai)建的 API Key。需要 pip install requests。

everyinfra_plus_monid.py
import os

import requests

EVERYINFRA_API_KEY = os.environ["EVERYINFRA_API_KEY"]
MONID_API_KEY = os.environ["MONID_API_KEY"]
MONID = "https://api.monid.ai/v1"
MONID_HEADERS = {"Authorization": f"Bearer {MONID_API_KEY}"}
MAX_PRICE_USD = 0.01  # do not run a Monid tool that costs more than this per call

# 1. The daily job: EveryInfra xiaohongshu/search, one fixed request shape
resp = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {EVERYINFRA_API_KEY}"},
    json={"platform": "xiaohongshu", "action": "search",
          "params": {"keyword": "抹茶拿铁", "sort": "most_liked"}},
    timeout=120,
)
resp.raise_for_status()
body = resp.json()
for note in body["results"][:3]:
    print(note["like_count"], note["collect_count"], note["posted_at"][:10], note["url"])
print("EveryInfra:", len(body["results"]), "notes, charged (USD):", body["billing"]["charged_usd"])

# 2. A one-off lookup that is not a daily platform: discover, inspect, run on Monid
found = requests.post(f"{MONID}/discover", headers=MONID_HEADERS, timeout=60,
                      json={"query": "company logo image URL from a domain", "limit": 3}).json()["results"]
# discover adds ranking and price fields to each result; inspect and run take only the fields that name the tool
SHOWN_ONLY = ("providerName", "description", "price", "score", "scoreBreakdown", "tags", "metrics", "hints")
tool = {key: value for key, value in found[0].items() if key not in SHOWN_ONLY}
detail = requests.post(f"{MONID}/inspect", headers=MONID_HEADERS, timeout=60, json=tool).json()
price = detail["price"]["amount"]["value"]
print("Monid tool:", detail["endpoint"], "price (USD):", price)
if price <= MAX_PRICE_USD:
    run = requests.post(f"{MONID}/run", headers=MONID_HEADERS, timeout=120,
                        json={**tool, "input": {"pathParams": {"company": "starbucks.com"}}}).json()
    print("Monid run:", run.get("runId"), run.get("status"), run.get("output"))
  • 2026 年 11 月 3 日 16:45(新加坡时间)我们照抄跑过这段代码:EveryInfra 返回 20 条笔记,扣费 $0.005556;Monid 的 discover 把一个取公司 Logo 的接口排在第一,inspect 显示每次 $0,run 返回状态 COMPLETED 和 Logo 图片地址。整个脚本约 6–7 秒。中英西三份示例各跑过一次(英西版搜的是 matcha latte)。
  • xiaohongshu/search 每次返回一页、最多 20 条,按一次计费 $0.005556;一条都没有的页不扣费。要下一页,把结果里的 next_page_token 原样传回去。
  • Monid 的 discover、inspect 不收钱,只有 run 按 inspect 显示的价格扣。运行期间 Monid 会先在余额上冻结预估费用,结束后按实际金额结算(Monid 的 llms.txt,2026-11-03 读)。示例用 MAX_PRICE_USD 挡住超出预算的工具。
  • 给智能体的分流规则可以这样写:「GET https://api.everyinfra.com/api/v1/social/catalog 里有的平台走 everyinfra_call_api;其余的平台和工具走 Monid:先 discover,再 inspect,价格在预算内才 run;每次调用都记下扣费。」
  • Monid 的 MCP 服务(https://mcp.monid.ai/v1)要在浏览器里 OAuth 登录,我们这次没有测。Claude、Claude Code、Codex、OpenCode、ChatGPT 的接入步骤见 [Monid 的 MCP 接入指南](https://monid.ai/docs/guide/quickstart-mcp);EveryInfra 一侧见上面的 MCP 一节。

我们和 Monid 是合作伙伴关系。下面「访问 Monid 官网」是普通链接,不带推荐码。

访问 Monid 官网(在新窗口打开)Monid 的产品和计费方式整理在合作伙伴介绍页。

错误码

下表说明数据、搜索、AI 接口与验证码 REST 调用的常见错误。每个错误还写明是谁那边的问题、下一步怎么做:fault(request 请求要改、account 账户要处理、service 我们这边)、retryable 和 next_steps;我们这边的问题在重试用完以后会带 support(工单草稿),开单前先问用户。MCP 还需检查工具结果;邮件、号码和代理的外部动作不适用“报错就直接重试”,应先核订单状态与账单。

401 unauthorizedKey 缺失或无效
402 quota_exhausted钱包余额不足;可用 GET /api/v1/account 查当前余额,充值后重试
403 account_disabled账号被停用,联系我们或你的服务商
400 unknown_capabilityplatform / action 不存在,查 catalog
422 missing_param必填参数缺失,message 会指出是哪个
429 rate_limited触发限速,稍后重试
503 upstream_error服务暂不可用(不计费),按响应建议重试
503 timeout同步调用超过 85s 上限(不计费),message 会给出具体建议:调小 limit 或改用异步能力
422 input_too_largeAI 接口 messages 合计超过 45,000 字符,拆成多次请求

计费

一个钱包跨服务扣费:平台数据每项能力单独标价,每千次 $0.56 起,单价见各平台页和能力目录;AI 接口对充值用户免费;失败或空响应不计费,充值余额长期有效。

直接在 EveryInfra 注册的账户享受月度充值折扣:按北京时间自然月累计当月已到账的充值面额(不含付款手续费),达档后从下一次调用起按该档计费,每月 1 日重新累计;各档门槛以控制台「账户方案」显示为准。充值要等余额到账(credited)后才计入当月充值累计;单笔超过 $1 的额度码和赠送额度也计入,试用额度和 $1 及以下的不计入。当前折扣档在控制台查看,实际扣费以调用返回的 billing 为准,不在客户端自行换算、乘折扣或叠加优惠。公开计费单位与标准价格见定价页。

每次付费调用的响应里都带 billing 字段,写明本次实际扣了多少与计价依据,不用回查账单就能对账:

billing.json
"billing": {
  "charged": true,                // 本次是否真的扣费(空结果/失败为 false)
  "charged_usd": 0.005556,        // 本次实扣(美元);没扣为 0,结果未知为 null
  "balance_after_usd": 12.340122, // 本次结算后的钱包余额(美元);读不到时为 null
  "discount_rate": 0.9,           // 生效折扣(无折扣时不出现)
  "units": 20,                    // 一次传多个目标、按目标数计费时出现
  // 以下为兼容保留的旧字段,对账与展示请用上面的美元字段
  "credits": 400,
  "cny": 0.04,
  "list_price_credits": 400,      // 该能力的标价(未折、未乘目标数)
  "tier_credits": 400             // 平台档单价
}

charged_usd 是本次实扣的美元金额(没扣费为 0,结果还不确定时为 null);balance_after_usd 是本次结算后的钱包余额(读不到时为 null),跑批量时直接读它就能盯住余额。调用失败、预扣已退回时,错误体里的 billing 也带这个字段。需要完整的余额、折扣档和每分钟次数时调 GET /api/v1/account。

一次传多个 URL 的能力按实际成功的目标数计费:部分目标没采到时响应带 partial: true 与 missed 列表,没采到的那几个不收钱。

自有访问统计常开;Google Analytics 仅在你点「同意分析」后启用。 隐私政策