Skip to content

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.

On this page

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/articles

Paging

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.