V2EX API
The V2EX API returns topics, replies, members and nodes from China's biggest developer community as clean JSON — no login, no token and no China exit required.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary search endpoint runs full-text search across V2EX topics and returns id, title, the full post body, url, the node it belongs to (id, name, Chinese and English titles), the author, reply_count, created_at and the matching snippets. You can also pull latest and hot topics, page one node with node_topics, expand a single topic with its reply thread, read a member profile with their user_topics, and browse the node taxonomy — the live nodes action reports 1,364 nodes. It suits developer-sentiment research, Chinese tech-market monitoring and training-set collection. One ReefAPI key, one shared credit pool, the standard envelope.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/v2ex/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"q": "爬虫",
"limit": 10
}
}{
"ok": true,
"meta": {
"api": "v2ex",
"endpoint": "search",
"mode": "live",
"latency_ms": 2067.2,
"record_count": 10,
"bytes": 800072,
"cache_hit": false,
"method": "keyless_public_json_api_bare_dc_curl_cffi",
"stop_reason": "limit_reached",
"index": "sov2ex",
"match_is_loose_upstream": true,
"node_names_resolved": true
},
"data": {
"topics": [
{
"id": 1236386,
"source": "v2ex",
"title": "最近服务器负载一直下不来,经常到 100%,结果发现是各大 AI 厂商的机器人爬虫,疯狂请求我的网站",
"content": "从上周开始,我上线了一个小网站,需要一个关键字来搜索内容,结果被 chagptbot,claudebot,谷歌,还有 meta facebook 的这些机器人 疯狂提交参数,然后读取返回结果,我一直以为是中病毒了,结果今天一看网站日志,我去。\n\n全是 \n" Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [redacted-email])"\nMozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/[redacted-phone] Mobile Safari/537.36 (compatible; GoogleOther)"\n\n几乎达到了 攻击级别的访问。\n\n把我小站的流量 和 负载 干满了。\n\n在 nginx 里面加了一个\n\nif ($http_user_agent ~* \"(GPTBot|ChatGPT-User|ClaudeBot|anthropic-ai|PerplexityBot|Bytespider|GoogleOther|meta-externalagent|MJ12bot)\") {\n return 403;",
"url": "https://www.v2ex.com/t/1236386",
"node": {
"id": 300,
"name": "programmer",
"title": "程序员",
"title_en": "Programmer",
"url": "https://www.v2ex.com/go/programmer"
},
"author": {
"username": "qxmqh",
"url": "https://www.v2ex.com/u/qxmqh"
},
"reply_count": 1,
"created_at": 1787378570,
"created_at_iso": "[redacted-phone]T06:02:50Z",
"match_snippets": [
"最近服务器负载一直下不来,经常到 100%,结果发现是各大 AI 厂商的机器人爬虫,疯狂请求我的网站"
],
"score": null
},
{
"id": 1236352,
"source": "v2ex",
"title": "周末福利!动态住宅流量免费送,有需要的来领",
"content": "Zooproxy 全球 IP 代理,纯净长效稳定,跨境/采集/AI/codex 全场景覆盖,性价比超高\n🚀动态住宅流量:真实家庭宽带 IP ,按流量计费,不限 IP 数量,适配爬虫、AI 、数据采集、问卷调研等场景;\n🚀长效静态 ISP:固定住宅 IP ,按 IP 收费,不限流量,独享资源、稳定长在线,适配跨境店铺、社媒账号、企业应用托管等场景。\n\n✅ 全场景适配:电商监控 / 舆情分析 / 广告验证 / SEO 优化等 200 + 业务场景\n✅ 无缝集成:支持 Python/Java 等主流开发语言,提供 API 接口与 其他工具包\n✅ 7×24 小时技术支持:专属客户经理 1 对 1 服务,平均问题响应时间< 15 分钟\n\n🎁CDKey (领完可留言继续分享 )\nN88U-CV2C-V682\n5ZP4-DGTU-NT9F\nQ42H-DQDM-J72K\nC628-QT7G-T59V\nL5QV-2R85-WCLX\n点击进入个人中心 CDKey 区域兑换\nhttps://zooproxy.com/?kwd=zsy-v2ex",
"url": "https://www.v2ex.com/t/1236352",
"node": {
"id": 864,
"name": "promotions",
"title": "推广",
"title_en": "Promotions",
"url": "https://www.v2ex.com/go/promotions"
},
"author": {
"username": "0livia",
"url": "https://www.v2ex.com/u/0livia"
},
"reply_count": 0,
"created_at": 1787364733,
"created_at_iso": "[redacted-phone]T02:12:13Z",
"match_snippets": [
"费,不限 IP 数量,适配爬虫、AI 、数据采集、问卷调研等场景;\n🚀长效静态 ISP:固定住宅 IP ,按 IP 收费,不限流量,独享资源、稳定长在线,适配"
],
"score": null
},
{
"id": 1235642,
"source": "v2ex",
"title": "接单| AI 自动化代做(爬虫/脚本/Claude Code 工作流)",
"content": "能帮你做的:\n- 数据抓取:单站点/多站点爬虫,登录态、反爬、分页都能处理\n- 批量处理:Excel/CSV 清洗转换、文件批量重命名归档、报表自动生成\n- AI 工作流搭建:用 Claude Code 把你重复干的活(盯日志、写周报、跑测试、发通知)配成能自动跑的流程,不用你每次手动喊 AI\n\n技术栈:Python / Node.js / Claude Code / Claude Agent SDK\n\n报价按工作量来,简单脚本 300 起,工作流搭建面议。站内私信 or 评论区留需求,当天回复。",
"url": "https://www.v2ex.com/t/1235642",
"node": {
"id": 190,
"name": "outsourcing",
"title": "外包",
"title_en": "Outsourcing",
"url": "https://www.v2ex.com/go/outsourcing"
},
"author": {
"username": "yyfjj",
"url": "https://www.v2ex.com/u/yyfjj"
},
"reply_count": 0,
"created_at": 1787128746,
"created_at_iso": "[redacted-phone]T08:39:06Z",
"match_snippets": [
"接单| AI 自动化代做(爬虫/脚本/Claude Code 工作流)",
"能帮你做的:\n- 数据抓取:单站点/多站点爬虫,登录态、反爬、分页都能处理\n- 批量处理:Excel/CSV 清洗转换、文件批量重命名归档、报表自动生成"
],
"score": null
}
],
"total_matches_upstream": 12845,
"returned": 10,
"offset": 0,
"query": "爬虫",
"match": "any",
"source": "v2ex"
}
}What the V2EX API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Full-text search across EVERY V2EX topic since 2010 (title + body + replies) — the historical archive the site's own JSON API does not expose. Filter by node, date range and sort by recency or relevance; each hit returns the full post body, author handle, node, reply count and markup-free match snippets. | Content platforms call search to get full-text search across EVERY V2EX topic since 2010 (title + body + replies). | q, match, sort, order, node, ... |
| node_topics | The newest topics of one V2EX node (sub-forum) with the COMPLETE post body — a live freshness feed for a niche: 'jobs' for hiring posts, 'outsourcing' for project leads, 'qna' for buying-intent questions, 'programmer' for developer chatter. Returns the node's own metadata (topic count, subscriber count) alongside. | Research tools call node_topics to get the newest topics of one V2EX node (sub-forum) with the COMPLETE post body. | node_name, limit |
| latest | The newest topics across the WHOLE of V2EX (all nodes), each with its full post body — a single-call firehose of what the Chinese dev community is posting right now (typically ~47 topics, the freshest usually minutes old). | Community analysts call latest to get the newest topics across the WHOLE of V2EX (all nodes), each with its full post body. | limit |
| hot | Today's most-discussed V2EX topics with full bodies — the site's own hot list, ordered by the traction the community itself gave them. | Media monitors call hot to get today's most-discussed V2EX topics with full bodies. | limit |
| topic | One V2EX topic by id or URL: the full post body plus the COMPLETE reply thread (every reply, in order, with author handle and timestamp) — the discussion is where the buying intent, the tool recommendations and the salary numbers actually live. | Content platforms call topic to get one V2EX topic by id or URL. | id, with_replies, replies_limit |
| user_topics | The newest topics posted by one V2EX member, with full bodies — follow a recruiter, a vendor or a prolific poster without watching every node. | Research tools call user_topics to get the newest topics posted by one V2EX member, with full bodies. | username, limit |
| member | Public profile of a V2EX member by handle or id: tagline, bio, website, github/twitter handle, self-typed location, join date and PRO status. Only what the member published themselves — the API exposes no e-mail, phone or real name. | Community analysts call member to get public profile of a V2EX member by handle or id. | username |
| nodes | The V2EX node taxonomy — all 1364 sub-forums with slug, Chinese and English title, topic count, subscriber count and parent node. Pass `name` for one node, or `query` to search the directory (matches slug, Chinese title and English title). This is how you find the `node_name` for `node_topics` and the `node` filter for `search`. | Media monitors call nodes to get the V2EX node taxonomy. | name, query, limit |
Call search from your stack
curl -X POST https://api.reefapi.com/v2ex/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"q":"爬虫","limit":10}'import requests
r = requests.post(
"https://api.reefapi.com/v2ex/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"q": "爬虫",
"limit": 10
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/v2ex/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"q": "爬虫",
"limit": 10
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.v2ex.search with {"q":"爬虫","limit":10}.Who uses this API and why
- Developer-relations teams call search to find every V2EX thread discussing their product or a competitor.
- China-market researchers use node_topics on nodes like qna or programmer to track what local developers are asking about.
- Dataset builders use topic to pull a post body together with its complete reply thread as structured JSON.
- Community analysts use member and user_topics to profile an active contributor's posting history.
Questions developers ask before integrating
What is the V2EX API?
V2EX API is a ReefAPI endpoint group for topics, replies, members and nodes from china's biggest developer community. It returns live JSON through POST requests under /v2ex/v1.
Is the V2EX API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. V2EX calls use the same shared credit balance as every other ReefAPI engine.
Do I need a V2EX login or account?
No login to V2EX is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the V2EX data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the V2EX API use?
V2EX actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call V2EX from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call v2ex actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the V2EX API a V2EX scraper?
It is the managed alternative to a DIY V2EX scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same topics, replies, members and nodes from china's biggest developer community back as clean JSON.
Why does my V2EX scraper keep getting blocked?
Most V2EX scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.