Bring NewProteinBase into your agent
MCP, RSS, API — three ways to read the same data: highlights, trending, daily, weekly and monthly. Pick the one your tool supports. All anonymous read-only; no signup and no API key.
Anonymous GET, ready to use
No token needed; browsers across origins, curl, and the default HTTP client of any language can call it directly. Paths start with /api/v1; fields and error codes follow the OpenAPI spec.
curl --compressed 'https://newproteinbase.com/api/v1/items?mode=selected&window=24h&limit=20'Filter by category
Add category to an items request to get that category only; omit it to include every category. Items also return category using the values below.
| Category | Parameters |
|---|---|
| Business | category=business |
| Funding | category=funding |
| Products | category=products |
| Technology | category=technology |
| Markets | category=markets |
| Policy | category=policy |
| Opinion | category=opinion |
Cheaper and faster
- 01Use compression
Add
--compressedto curl, or enable gzip or br in other clients. Compressed JSON is 1/4 to 1/8 of its original size. - 02Send the ETag
Save the ETag from the response and send it as
If-None-Matchnext time; when nothing changed you get a 304 with no body. - 03Rate limits
News and Trending at most once a minute; Daily once after Daily at 08:00, Weekly and Monthly once after each issue; when paging backwards, stop at the first item you already have.
How often content changes: new items arrive throughout the day, Highlights change from a few to a few dozen times a day, and Daily (Daily at 08:00), Weekly (Mondays at 10:00), and Monthly (1st of each month at 10:30) each come out once (Beijing time).
API overview
| Path | What it is for | How often to poll |
|---|---|---|
| News | ||
/api/v1/items | Highlights or the last 7 days of All updates; filter by category, time window, or keyword | At most once a minute |
| Trending & events | ||
/api/v1/hot-topics | Current Trending top 10 | At most once a minute |
/api/v1/stories/{publicId} | Timeline, AI digest and related events | On demand |
| Daily | ||
/api/v1/dailies/latest | Latest daily | Once after Daily at 08:00 |
/api/v1/dailies/{date} | Daily for a given date; retractions remove the reference | Revalidate the ETag before use once the cache has expired |
/api/v1/dailies | Daily archive | Once a day |
| Weekly & monthly | ||
/api/v1/weeklies/latest | Latest Weekly: top story, overview, and the week's key items, grouped by section | Once after Mondays at 10:00 |
/api/v1/weeklies/{week} | A given week, ISO week such as 2026-W39; retractions remove the reference | Revalidate the ETag before use once the cache has expired |
/api/v1/weeklies | Weekly archive | Once a week |
/api/v1/monthlies/latest | Latest monthly | Once after 1st of each month at 10:30 |
/api/v1/monthlies/{month} | A given month, such as 2026-09 | Revalidate the ETag before use once the cache has expired |
/api/v1/monthlies | Monthly archive | Once a month |
| For AI assistants | ||
/api/v1/agent | Usage notes for Agents; the listed URLs serve a prepared Markdown guide | On demand |
| Full Highlights sync | ||
/api/v1/selected/snapshot | The current full set of Highlights, fetched in pages | First time only |
/api/v1/selected/changes | Later additions, edits, and removals | Every few minutes |
Common recipes
# First call: save the ETag from the response headers
curl --compressed -i 'https://newproteinbase.com/api/v1/items?mode=selected&window=24h&limit=20'
# After that, at most once a minute, sending the ETag; a 304 means nothing changed
curl --compressed -i -H 'If-None-Match: <ETag from last time>' 'https://newproteinbase.com/api/v1/items?mode=selected&window=24h&limit=20'To page backwards, send page.nextCursor back as cursor and stop at the first item you already have; do not re-page through the last 7 days every time.
When something fails
- 400
- Bad parameters: fix them according to the OpenAPI spec and the error code; do not silently widen the query. An invalid cursor, or one that has fallen out of the time window, returns invalid_cursor — start again from the first page.
- 409
- snapshot_required: the incremental feed cannot be resumed safely; take a fresh full snapshot.
- 429
- Too many requests: wait for Retry-After; do not retry concurrently.
- 5xx
- Back off exponentially and keep using the last successful result; this public service makes no SLA commitment.
Being able to call anonymously does not mean every use is licensed; seeTerms of use.