Connect KVwire to your agent
MCP, RSS, API: three ways to read the same data (selected stories, trending, daily, weekly and monthly issues). Pick the one that fits your tools. All anonymous and read-only, no sign-up, no API key.
Anonymous GETs, ready to use
No token: cross-origin browsers, curl and the default HTTP client of any language can call it directly. Paths are under /api/v1; fields and error codes follow the OpenAPI definition.
curl --compressed 'https://kvwire.com/api/v1/items?mode=selected&window=24h&limit=20'Filter by category
Add category to an items request to get one category; without it all categories are included. Returned items use the same values in their category.
| Category | Parameter |
|---|---|
| Standards & Regulation | category=standards |
| Grid Projects | category=grid |
| Tenders & Contracts | category=tenders |
| Failures & Incidents | category=incidents |
| Test Technology | category=technology |
| Market & Business | category=business |
| Methods & Guides | category=guides |
| Research & Analysis | category=research |
Lean and fast
- 01Compress
Add
--compressedto curl, or enable gzip or br in other clients. Compressed JSON is 1/4 to 1/8 of its size. - 02Send the ETag
Keep the ETag from the response and send
If-None-Matchnext time; unchanged content returns 304 with no body. - 03Keep the pace
Items and trending at most once a minute; the daily once after daily at 08:00, the weekly and monthly once after they come out; when paging back, stop at an item you already have.
How often content changes: new items arrive throughout the day, the selection changes a few to a few dozen times a day, and the daily comes out daily at 08:00, the weekly Mondays at 10:00 and the monthly on the 1st of each month at 10:30 (UTC).
Endpoints
| Path | What it is for | How often |
|---|---|---|
| Items | ||
/api/v1/items | Selected or all updates from the last 7 days, filterable by category, window and keyword | At most once a minute |
| Trending and stories | ||
/api/v1/hot-topics | The current top 10 | At most once a minute |
/api/v1/stories/{publicId} | A story's coverage timeline, AI overview and related stories | When needed |
| Dailies | ||
/api/v1/dailies/latest | The latest daily | Once after daily at 08:00 |
/api/v1/dailies/{date} | A given day's daily; retractions remove citations | Revalidate the ETag after the cache expires |
/api/v1/dailies | Index of daily dates | Once a day |
| Weeklies and monthlies | ||
/api/v1/weeklies/latest | The latest weekly: lead story, overview and the week's highlights by section | Once after Mondays at 10:00 |
/api/v1/weeklies/{week} | A given ISO week such as 2026-W39; retractions remove citations | Revalidate the ETag after the cache expires |
/api/v1/weeklies | Index of weeklies | Once a week |
/api/v1/monthlies/latest | The latest monthly | Once after on the 1st of each month at 10:30 |
/api/v1/monthlies/{month} | A given month such as 2026-09 | Revalidate the ETag after the cache expires |
/api/v1/monthlies | Index of monthlies | Once a month |
| For AI assistants | ||
/api/v1/agent | The guide for agents; the addresses it lists return edited English Markdown | When needed |
| Full selection sync | ||
/api/v1/selected/snapshot | The whole current selection, paged | First time only |
/api/v1/selected/changes | Additions, edits and removals since | Every few minutes |
Common uses
# First time: keep the ETag from the response headers
curl --compressed -i 'https://kvwire.com/api/v1/items?mode=selected&window=24h&limit=20'
# Then at most once a minute with the ETag; a 304 means nothing changed
curl --compressed -i -H 'If-None-Match: <last ETag>' 'https://kvwire.com/api/v1/items?mode=selected&window=24h&limit=20'To page back, pass page.nextCursor back as cursor and stop at an item you already have, instead of re-reading 7 days each time.
When something goes wrong
- 400
- Bad parameters: fix them per the OpenAPI definition and the returned code; do not switch to a wider query automatically. An invalid cursor, or one outside the window, returns invalid_cursor; start again from the first page.
- 409
- snapshot_required: changes cannot safely continue; take a fresh full snapshot.
- 429
- Too many requests: wait as Retry-After says and do not retry in parallel.
- 5xx
- Back off exponentially and use the last successful result meanwhile; the public service has no SLA.
Anonymous access does not mean every use is permitted; see the Terms of Use。