What Chinese-speaking developers are discussing
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.
8 active endpoints. Every call is 1 credit.
- POST/v2ex/v1/search
- POST/v2ex/v1/node_topics
- POST/v2ex/v1/latest
- POST/v2ex/v1/hot
- POST/v2ex/v1/topic
- POST/v2ex/v1/user_topics
- POST/v2ex/v1/member
- +1 more
What V2EX endpoints does ReefAPI ship?
8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
V2EX API
3 of 8 endpoints, ready to run
The currently-hot topics with their titles, bodies, nodes and links.
{ "ok": true, "meta": { "api": "v2ex", "endpoint": "hot", "mode": "live", "latency_ms": 739, "record_count": 8, "cache_hit": false }, "data": { "topics": [ { "id": 1237979, "source": "v2ex", "title": "[吉吉 ] 纯血 Pro 倍率 0.16 缓存近 90%,首字 1S 起,自用实时监测无降智,回复送测试鸡蛋。", "content": "是的是大佬们认识的这个吉吉 https://www.jiji.cc\n \n 无论新老用户回复都送测试鸡蛋\n \n 对于价格吉吉现有三策:\n \n 上策:稳定组 pro 倍率 0.2 (主打稳如老够)\n \n 中策:活动组 pro 倍率 0.16 (时有延迟)\n \n 下策:优惠组 plus 倍率 0.1 (备用,主用不推)\n \n 另有不限量几块钱就能造一天的 luna\n \n ", "url": "https://www.v2ex.com/t/1237979", "node": { "id": 864, "name": "promotions", "title": "推广", "title_en": "Promotions", "url": "https://www.v2ex.com/go/promotions" }, "reply_count": 96, "last_reply_by": "idragonet", "created_at": 1787929594, "created_at_iso": "2026-08-28T15:06:34Z", "last_touched_at": 1788012374, "last_touched_at_iso": "2026-08-29T14:06:14Z", "updated_at": 1787929594, "deleted": false }, { "id": 1238000, "source": "v2ex", "title": "没交物业费,物业起诉我之后还没开庭,法院直接冻结我的定期存款了,合法吗?", "content": "v 友们,我在湖北的一个小县城买了一套房子,一直没住,所以我也没交物业费,然后物业起诉我了,九月十号开庭,但是还没开庭,我有一笔定期存在银行里,然后法院直接给我冻结了,这合法吗?没有任何通知我,直接冻结我的钱,关键是还没开庭呢。", "url": "https://www.v2ex.com/t/1238000", "node": { "id": 557, "name": "life", "title": "生活", "title_en": "Life", "url": "https://www.v2ex.com/go/life" }, "reply_count": 69, "last_reply_by": "pinkrab", "created_at": 1787967501, "created_at_iso": "2026-08-29T01:38:21Z", "last_touched_at": 1787276301, "last_touched_at_iso": "2026-08-21T01:38:21Z", "updated_at": 1787970538, "deleted": false }, { "id": 1238019, "source": "v2ex", "title": "还真有人信孙割说的话?", "content": "孙割是顶级掠食者,他说的每句话做的每件事前,都是计算好了成本和收益的。\n孙割说的每一千个字,最多只有 2 个字是真的.\n这次小作文,唯一能证实的就是:\n孙割花钱 P 了景田几次。\n什么白月光/老照片这些话你真的能信孙割?\n现在的孙割,要的是话题是流量,几千万对他来说就是炒作成本。\n孙割要的是:\n巨大的话题流量继续红+再拉一波盘割一次+感受到川普家族对他的威胁需要热度保命+给自己立一个痴情种人设+等着傻子们帮他冲+最好几千万还能要回来白嫖\n你看,再割一波+热度保命 才是最重要的,白嫖都是排最后的。顶级掠食者是我全都要。\n能将人性随意玩弄操控的,上一个集大成者还是 PDD 黄峥吧。\n一个是随意全球收割韭菜,一个是靠拿捏人性扭转中国电商生态格局。", "url": "https://www.v2ex.com/t/1238019", "node": { "id": 494, "name": "gossip", "title": "业界八卦", "title_en": "Gossip", "url": "https://www.v2ex.com/go/gossip" }, "reply_count": 43, "last_reply_by": "Greatshu", "created_at": 1787976848, "created_at_iso": "2026-08-29T04:14:08Z", "last_touched_at": 1787993060, "last_touched_at_iso": "2026-08-29T08:44:20Z", "updated_at": 1787979214, "deleted": false } ], "returned": 8, "source": "v2ex" } }
How the V2EX API works
V2EX is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 184 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Reaching a developer market that English-language sources miss entirely
Product research done only in English has a systematic blind spot. This community is where a large Chinese-speaking developer audience discusses tools, jobs and pricing openly.
{"q": "爬虫", "node": "jobs"}Node-scoped search is the precise instrument — the jobs node is a different signal from the general discussion.
{"limit": 20}And the hot list for what the community is currently reacting to, with bodies included rather than titles alone.
Topic bodies arrive with the list rather than behind a per-topic call, so a scan of twenty topics is one request.
curl -X POST https://api.reefapi.com/v2ex/v1/hot \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{}'{
"ok": true,
"data": { … },
"meta": {
"api": "v2ex",
"endpoint": "hot",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}V2EX node slugs and their numeric ids
Almost every action here is scoped by a node, the sub-forum slug, and the search index stores nodes as bare numeric ids. These pairs are what you need to move between the two. Each row was read live on 2026-08-27 from the response that returned it.
| node slug | Title (Chinese / English) | node id | Measured on 2026-08-27 |
|---|---|---|---|
| qna | 问与答 / Questions and Answers | 12 | 241,092 topics, 4,511 subscribers, parent node v2ex |
| jobs | 酷工作 / Jobs | 43 | 60,700 topics, 6,539 subscribers, no parent node |
| programmer | 程序员 / Programmer | 300 | Read from the node block of topic 1236386 |
| all4all | 二手交易 / All for All | 69 | Read from the node block of a search hit |
| promotions | 推广 / Promotions | 864 | Read from the node block of a search hit |
The directory holds 1,364 nodes in total. nodes with a name returns exactly one for roughly 650 bytes; nodes with a query searches slug, Chinese title and English title together. Every timestamp comes back twice: created_at as Unix epoch seconds (1787750719) and created_at_iso as UTC (2026-08-26T13:25:19Z), same for last_touched_at and joined_at. meta.rate_limit passes V2EX's own budget straight through, with x-rate-limit-limit 600, the remaining count, and an epoch reset.
What this source is good for, and what it is not
Measured on the hot list and on search.
The hot and latest endpoints return each topic's content, not just its title. Scanning a community for relevance needs the body, and fetching it per topic is what makes that expensive elsewhere.
Nodes are this site's topic areas, and scoping a search to one is the difference between a signal and a firehose. Date filtering makes historical questions answerable rather than only current ones.
Titles and bodies come back as written. This is a source specifically for reaching past the English-language web, so pair it with a translation endpoint if your pipeline works in English — do not expect it to arrive translated.
A developer-heavy, technically-sophisticated and fairly narrow audience. It is a strong early signal for developer tools and a poor proxy for Chinese consumers generally.
Topics resolve to their authors and a member's own topics are retrievable, which is how you tell a recurring voice from a one-off post when weighing a signal.
What people build with V2EX
The jobs this data is most often used for.
endpoints
credit per call
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.
What V2EX data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 184 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/v2ex/v1/hot \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{}'import requests
r = requests.post(
"https://api.reefapi.com/v2ex/v1/hot",
headers={"x-api-key": REEF_KEY},
json={},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up V2EX.
Get a free key →How do I find the right V2EX node slug?▾
Call nodes. Pass query to search the directory by slug, Chinese title or English title, or pass name to fetch exactly one node cheaply. The whole taxonomy is 1,364 nodes. The ones that carry commercial traffic are qna (问与答, node id 12, 241,092 topics measured 2026-08-27), jobs (酷工作, id 43, 60,700 topics), programmer (程序员, id 300) and outsourcing (外包). The slug is what node_topics and the search node filter both want.
Why did match=all return zero rows when the search reports thousands of matches?▾
Because the upstream index is loose and match=all is applied to the page you got back, not to the whole index. A live search for 树莓派 教程 with match all on 2026-08-27 returned total_matches_upstream 2,650, filtered_out 5 and returned 0: the index handed over five hits, none of which actually contained both tokens, and all five were dropped. The upstream total stays large because it counts loose matches. Raise limit so more rows survive the filter, or use the default match=any and score the results yourself.
How far back does the search go, and how deep can I page?▾
Every topic since 2010, title, body and replies. A live search for 爬虫 (web scraping) on 2026-08-27 reported total_matches_upstream 12,849. Paging is the real limit: the index refuses anything past offset + limit = 1000, so with limit 50 you can reach 20 pages and no further. Narrow with node, since and until rather than paging deeper.
Does the topic action return every reply?▾
It returns up to replies_limit, and it tells you when it stopped. A live read of topic 1236386 with replies_limit 2 came back with replies_returned 2, replies_total 8, replies_truncated true and replies_match_counter true. reply_count on the topic object is always the true total, so truncation is never silent. replies_limit goes up to 1,000.
Why does node_topics only ever return ten topics?▾
That is the node feed's own ceiling, and the response says so: meta.feed_cap 10 with meta.paginated false. The limit parameter is capped at 10 for the same reason. node_topics is a freshness feed, not an archive. For depth in one node, use search with the node filter, which reaches the full history.
Why does the author object differ between search and the other actions?▾
The search index and the site's own JSON API return different amounts of member data. A search hit's author carries only username and url. A node_topics, latest, hot or topic row carries id, username, url, tagline and avatar, and each reply also carries author_id alongside the nested author. If you need the numeric member id, take it from one of those actions or from member, not from a search hit.
Can last_touched_at be earlier than created_at?▾
Yes, and it was on a live read. Topic 1237466 in the jobs node returned created_at 1787750719 (2026-08-26T13:25:19Z) with last_touched_at 1787750659 (2026-08-26T13:24:19Z), sixty seconds earlier. V2EX sets the two from different clocks on the posting path, so do not assume last_touched_at is greater than or equal to created_at and do not compute a duration from the pair.
Does the response tell me how much V2EX quota is left?▾
It does. meta.rate_limit on node_topics, topic, member and nodes passes V2EX's own headers straight through: x-rate-limit-limit 600, x-rate-limit-remaining, and x-rate-limit-reset as an epoch second. That budget is the site's, counted per hour, and it is separate from your ReefAPI credits. The search action goes through a different index and does not report it.
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.
25 Media, Film & Knowledge APIs on the same key
One key, one credit pool, one response envelope. If you are pulling V2EX, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-30.