Open Current logoOpen Current
Open API

Open API.

The same data that feeds Open Current, free for anyone to build on. Read-only JSON, open CORS, no key, no sign-up. Every response is served from Netlify's cache, so it's fast for you and costs the project almost nothing.

Fair use & attribution

  • Link back to the original source. Every item has a u (URL) and s (source name). Show them, and send readers to the original. Please also mention “via Open Current” with a link to https://open-current-feed.netlify.app.
  • Be cache-friendly. Feeds refresh every 10 to 60 minutes (see each endpoint). Polling more often than every 5 minutes gets you the same cached answer. Extra query parameters are ignored by the cache, so don't try to bust it.
  • Headlines and snippets only. We pass on titles, short descriptions and links from public feeds. The articles belong to their publishers.
  • No personal data. We don't log requests, IPs or queries, and there are no keys to track you with.
  • Best effort, no guarantees: a source can go quiet or change its feed at any time. Please don't use this for anything safety-critical or financial decisions.

Endpoints

GET/api/feed/{pack}

Newest headlines from an allowlisted, https-only set of feeds, deduplicated and sorted newest first. Each sources entry is the number of items that feed returned this refresh.

packwhatrefresh
globalWorld desks: 100+ newsrooms, 30+ languages, every region (items carry l language and r region)30 min
worldMajor English-language world news30 min
techpressTech press30 min
warConflict and humanitarian reporting20 min
memesMeme communities (image posts)20 min
arxivNew arXiv papers2 h
ytchannelsNew videos from public YouTube channels60 min
substackIndependent newsletters2 h
artArt and design publications, NFT/crypto-art news and Lemmy art communities (NSFW and nudity-worded items removed)30 min

GET/api/crypto-news

Headlines from 13 crypto newsrooms, newest first. Refreshes every 20 minutes.

GET/api/discover?q={query}

Independent-web search across Wiby, arXiv and Kagi Small Web, with big platforms, insecure and risky links removed. Cached for an hour per query. ?surprise=1 returns a list of random small-web pages. (On the Discover page, Marginalia, Hacker News, Lemmy, Mastodon, OpenAlex and Wikipedia are asked directly from the browser.)

Item format

{
  "updated": 1794579407000,          // when this response was built (ms since 1970, UTC)
  "sources": { "DW English": 3, … },  // items per feed in this refresh
  "items": [{
    "s":  "RTP Notícias",             // source / outlet name
    "t":  "Headline",                 // title
    "u":  "https://…",                // original link (https only, checked)
    "d":  "Short description",        // snippet, may be empty
    "i":  "https://…jpg",             // image, optional
    "ts": 1794579407000,              // published time (ms, UTC; never in the future)
    "l":  "pt",                       // language, when known
    "r":  "europe",                   // region (global pack)
    "k":  ["news"]                    // topics
  }]
}

Discover returns { q, results:[{ u, t, d, e (engine), c (category) }], counts, dropped, errors }.

Live streams: connect directly

Open Current doesn't proxy the real-time firehoses: your app can connect to them straight away, exactly like our pages do in your browser.

WSSBluesky Jetstream

Every public Bluesky post as JSON. Add &cursor= (microseconds) to replay up to about a day.

wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post

WSSNostr relays

Send ["REQ","sub",{"kinds":[1],"since":<unix seconds>}] to any public relay.

wss://relay.primal.net  ·  wss://nos.lol  ·  wss://offchain.pub  ·  wss://relay.nostr.net

SSEWikimedia EventStreams

Server-sent events for every new page, edit and upload across Wikimedia projects.

https://stream.wikimedia.org/v2/stream/page-create
https://stream.wikimedia.org/v2/stream/recentchange

GETAlso public

Hacker News: https://hacker-news.firebaseio.com/v0/newstories.json · Mastodon: https://{server}/api/v1/timelines/public?local=true · Lemmy: https://{server}/api/v3/post/list?sort=New · Misskey: POST https://{server}/api/notes/local-timeline. Please respect each network's own rate limits and terms.

Example

const r = await fetch("https://open-current-feed.netlify.app/api/feed/global");
const { items } = await r.json();
for (const it of items.slice(0, 10))
  console.log(`${it.t} (${it.s}) ${it.u}`);   // always keep the source link

For AI tools and crawlers there's a plain-text guide at /llms.txt. Questions or a feed to suggest? See Sources.