LIVE
Developers

CHAINTOPNEWS API v1

REST API for pulling CHAINTOPNEWS stories and headlines into your product.

API key

How to connect

Quick test

curl -H "X-API-Key: YOUR_KEY" "https://chaintopnews.com/api/v1/articles?limit=5"

Response envelope

{
  "ok": true,
  "data": …,
  "meta": { "publisher": "CHAINTOPNEWS", "version": "v1", "generatedAt": "2026-09-28T02:10:00.000Z", "total": 335, "offset": 0, "limit": 20 }
}
// errors
{ "ok": false, "error": { "code": "invalid_api_key", "message": "This API key is invalid or has been revoked." } }
HTTPcodeMeaning
401missing_api_keyNo key sent
403invalid_api_keyUnknown or revoked key
404not_foundUnknown endpoint or slug
429rate_limitedPer-key limit exceeded

REST endpoints

Method / pathReturns
GET/api/v1/statusService info, categories, story count, your key's limits
GET/api/v1/categoriesSections: slug, name, url, story count
GET/api/v1/homeCurated front page: featured, sideFeature, leftList, sideList, latest, sections[]
GET/api/v1/articlesPaged stories (data[], meta.total). Query: category, limit ≤100, offset, images=1|0, since=<ISO>, q=<text>
GET/api/v1/articles/:slugOne story with rendered HTML body
GET/api/v1/liveNewest wire headlines. Query: limit ≤100, since, before, category

JavaScript example

const res = await fetch('https://chaintopnews.com/api/v1/articles?category=world&limit=10', { headers: { 'X-API-Key': 'YOUR_KEY' } });
const { ok, data, meta } = await res.json();
if (ok) data.forEach(a => console.log(a.title, a.url));

Incremental sync (only what changed since your last pull)

curl -H "X-API-Key: YOUR_KEY" "https://chaintopnews.com/api/v1/articles?since=2026-09-28T00:00:00Z&limit=100"

Categories

world, business, technology, crypto, policy

Terms

Content is provided by CHAINTOPNEWS for display in your product with attribution and a link to the story url.