Articles feed
A signed delta feed of every article you can license: price per read, RSL terms, a change fingerprint, and a removal when a publisher opts out.
A signed list of every article you can license through naulon, for retrieval systems that keep their own index. Each row gives the article's price per read and per citation, where its publisher's RSL terms live, and a fingerprint that changes when the article's text changes. When a publisher leaves the directory or drops an article, the row comes back as a removal, so your index can let it go too.
It's free and needs no key. It never carries the article itself: you read that from the publisher's site and pay per read.
GET https://gate.naulon.app/_naulon/v1/feed/articlesPaging
Paging works exactly as in the papers feed: keep the last next you saw, ask with
cursor later for everything that changed since, or start from a date with since:
curl "https://gate.naulon.app/_naulon/v1/feed/articles"
curl "https://gate.naulon.app/_naulon/v1/feed/articles?since=2026-10-21T00:00:00Z"A row appears again whenever anything it states changes: a price, a summary, the terms, the text. Dedupe
on id, which never changes. key is the article's url, and changes only if the publisher moves it.
To follow one publisher, add site with its host. The cursor works the same way within it:
curl "https://gate.naulon.app/_naulon/v1/feed/articles?site=sandbox.naulon.app"sandbox.naulon.app is a test publisher whose articles settle on Arc Testnet. Its rows appear only when you
name it, never in the full feed. The testnet quickstart buys one of them end to
end.
Rows that changed in the last 60 seconds are held back (lag_seconds), and naulon looks for changes every
five minutes, so a change reaches the feed within about six.
A row
{
"kind": "article",
"id": "a6473a7c-bce0-4288-a968-fc8b27f95de6",
"key": "https://example.com/essays/agentic-payments",
"url": "https://example.com/essays/agentic-payments",
"title": "How agentic payments actually work",
"summary": "An autonomous agent carries a capped spending mandate and settles at the moment of access.",
"changed_at": "2026-10-21T12:05:32.159468+00:00",
"state": "live",
"terms": {
"price_micro": 1100,
"citation_price_micro": 5500,
"currency": "USDC",
"rsl": "https://example.com/license.xml",
"humans": "free"
},
"commitment": { "content_sha256": "9f2c…", "basis": "naulon-extract" }
}Prices are integers in micro-USDC: 1100 is $0.0011 a read. They are the all-in price an agent is charged,
the same figure the article's 402 quotes. People reading in a browser always read free.
rsl is the publisher's RSL licence document. It's null when naulon hasn't seen that document served on
the publisher's site with the current terms, rather than pointing you at one that may be out of date.
commitment.content_sha256 is a SHA-256 of the main text naulon extracted from the article. You can't
recompute it from the page, because it depends on how the text was extracted. Treat it as a signal: when it
changes, the article changed and is worth reading again. It's null for an article whose text naulon
hasn't extracted.
Removals
A removed article is a row with state: "removed", a reason, and no terms, summary or fingerprint:
reason |
What happened |
|---|---|
opted_out |
The publisher took their site out of the directory. |
unlisted |
The publisher stopped offering this article. |
unavailable |
naulon no longer serves this publisher. |
gone |
The publisher's account no longer exists. |
An article that comes back is a change back to live, so you'll see both. Removals are kept, so a cursor
you saved long ago still reaches them.
Checking a page
Pages are signed with the same keys as the papers feed, and checked the same way: see
checking a page. credit names the publishers as the owners of titles and summaries,
and licence says naulon's own statements in the feed are CC0.
Buying a read
how_to_buy on every page says how: request the row's url as a crawler and it answers 402 Payment Required with x402 terms naming the price and the author's wallet, or use the naulon_pay_and_read MCP
tool. Payment goes from you to the author. naulon never holds it.
Receipts
Every page carries links.verify, a template for the page where anyone can check a licence you bought:
"links": { "verify": "https://naulon.app/verify?host={host}&jti={jti}" }A paid read answers with the licence in X-Naulon-License, a signed JWT. Fill {jti} with its jti and
{host} with its aud minus the naulon: prefix, and the link opens that licence, checked in the reader's
own browser against the publisher's published keys.
Limits
A page holds at most 500 rows. Pages are cached at the edge for up to a minute, and the first page for 30
seconds. One address may ask the origin 60 times a minute across this feed and the papers feed together;
past that it answers 429 with retry-after, so wait that long and carry on from the same cursor. A
malformed cursor, since, limit or site gets 400 naming the parameter.