API 与 MCP
在你自己的代码或 AI Agent 中搜索开放网络广告、查询广告主 / 媒体 / 广告网络,并提交按需抓取。
最近更新: 2026-11-07
Adsup.ai API 提供与网页端相同的数据:我们爬虫捕获的广告、广告主 / 媒体 / 广告网络档案、覆盖账本以及按需抓取。每个操作也都是我们 MCP 服务上的一个工具,Claude 等 AI Agent 可以直接调用。
机器可读的接口描述见 /api/v1/openapi.json(OpenAPI 3.1)。
访问与密钥
API 与 MCP 访问包含在 Pro 和 Team 套餐中。在 设置 → API 密钥 创建密钥,并在每个请求中带上:
curl -H "Authorization: Bearer sk_your_key" \
"https://adsup.ai/api/v1/ads?q=vpn&geos=US,DE&pageSize=20"
密钥属于你的账号,删除即立即失效。浏览器 Cookie 不能用于调用 API。
积分
调用会消耗套餐中的积分:Pro 每月 5,000 积分,Team 每月 50,000 积分(年付一次性发放全年积分)。余额、本月用量和每次调用的单价可在 API 密钥页面或 GET /api/v1/me/usage 查看。
| 调用 | 积分 |
|---|---|
| 广告搜索(一页,最多 50 条) | 1 |
| 广告详情 | 1 |
| 广告主 / 媒体 / 广告网络档案 | 1 |
| 覆盖账本 | 1 |
| 抓取请求状态 | 1 |
| 提交按需抓取 | 20 |
GET /api/v1/me/usage、MCP 握手与工具列表 | 0 |
失败的调用(任何 4xx / 5xx,包括“未找到”)会自动退还积分。每个响应都带有 X-Credits-Charged 头。
限额
- 限流: 每个密钥每分钟 60 次请求。超出返回 HTTP 429 并带
Retry-After。每个响应都带X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset。 - 历史深度: Pro 可查最近 180 天,Team 可查全部历史。超出范围的日期条件会被收窄,并在
meta.limited中注明("history")。 - 按需抓取: Pro 每 24 小时 20 次、Team 100 次(与网页端共用),每 30 秒最多一次。
响应与错误
所有响应使用统一信封,HTTP 状态码同步给出:
{ "code": 0, "message": "ok", "data": { "items": [], "total": 0 } }
出错时 code 为 -1,message 是机器可读的错误码:
| HTTP | message | 含义 |
|---|---|---|
| 400 | invalid_request、invalid_json、invalid_url | 参数错误 |
| 401 | missing_api_key、invalid_api_key | 未带密钥,或密钥已删除 / 无效 |
| 402 | insufficient_credits | 剩余积分不足 |
| 403 | plan_required | 当前套餐不含 API / MCP |
| 404 | not_found | 广告、实体或抓取请求不存在 |
| 422 | rejected | 该站点已申请退出抓取 |
| 429 | rate_limited、daily_limit、too_many_requests | 请求过快 / 已达每日抓取上限 |
| 503 | not_ready、unavailable | 数据或抓取服务暂不可用 |
接口
| 方法与路径 | 说明 |
|---|---|
GET /api/v1/ads | 搜索广告。筛选条件放在查询参数中,列表用逗号分隔。 |
POST /api/v1/ads/search | 同上,使用 JSON 请求体(列表为数组)。 |
GET /api/v1/ads/{id} | 单条广告:分布、时间线、主要媒体、落地页与跳转链。 |
GET /api/v1/advertisers/{id} | 广告主档案(?days=7,30,90,365)。 |
GET /api/v1/publishers/{domain} | 媒体(网站)档案。 |
GET /api/v1/networks/{id} | 广告网络档案。 |
GET /api/v1/coverage | 覆盖账本:网络 × 格式 × 国家,近 24 小时与 7 天。 |
POST /api/v1/crawl-requests | 提交抓取:{ "url", "geo", "device" }。 |
GET /api/v1/crawl-requests | 最近的抓取请求与今日用量。 |
GET /api/v1/crawl-requests/{id} | 单个抓取请求的状态。 |
GET /api/v1/me/usage | 套餐、限额、积分余额与本月用量。 |
搜索参数: q、adTypes、networks、geos、devices、platforms、advertiserIds、publisherIds(如 web:example.com)、landingDomains、languages、verticals、sizes(300x250)、seenFrom / seenTo、firstSeenFrom / firstSeenTo(新广告)、minDaysSeen、minPublishers、hasLandingPage、riskMin、sort(last_seen、first_seen、days_seen、publishers、impressions)、order、page、pageSize(最大 50)。
impressions 表示我们的爬虫观测到这条广告的次数,不是实际曝光量、花费或覆盖人数。
curl -X POST https://adsup.ai/api/v1/ads/search \
-H "Authorization: Bearer sk_your_key" \
-H "Content-Type: application/json" \
-d '{"adTypes":["native"],"geos":["US"],"firstSeenFrom":"2026-11-01","sort":"first_seen"}'
MCP 服务
MCP 服务地址为 https://adsup.ai/api/mcp(Streamable HTTP),与 REST API 使用相同的密钥、积分和限额。服务基于官方 MCP TypeScript SDK,无状态,任何符合规范的客户端都可连接。
工具:search_ads、get_ad、get_advertiser、get_publisher、get_network、coverage、request_crawl、get_crawl_request、get_usage。每次工具调用的积分与对应 REST 接口相同;握手和工具列表免费。
Claude Code:
claude mcp add --transport http adsup https://adsup.ai/api/mcp \
--header "Authorization: Bearer sk_your_key"
使用 JSON 配置的客户端(如 Claude Desktop、Cursor):
{
"mcpServers": {
"adsup": {
"type": "http",
"url": "https://adsup.ai/api/mcp",
"headers": { "Authorization": "Bearer sk_your_key" }
}
}
}
然后可以这样提问:“找出本周在德国首次出现的 VPN 类原生广告,并总结它们的落地页。”
告警 Webhook
Team 套餐可以把保存搜索的每日告警同时推送到 Webhook(在 保存的搜索与告警 中设置)。Slack Incoming Webhook 地址(hooks.slack.com)会收到 Slack 消息,其他地址收到:
{
"type": "alert.new_ads",
"alert_id": "…",
"rule": { "kind": "saved_search", "target": "…", "name": "VPN native US" },
"count": 3,
"ads": [
{
"id": "…",
"title": "…",
"thumb_url": "…",
"url": "https://adsup.ai/app/ads/…"
}
],
"sent_at": "2026-11-07T06:00:00.000Z"
}
请校验 X-Adsup-Signature: t=<unix>,v1=<hex> 头:v1 是用 Webhook 旁显示的签名密钥对 t + "." + body 计算的 HMAC-SHA256。Webhook 地址必须是公网主机上的 https://,不跟随重定向。