Live API20 topics·150,000 publishers·English sources

The real-time news API for AI agents.

Pleiades watches 150,000 publishers around the clock and returns a short, cited brief whenever a topic your agent follows changes. Your agent asks on a schedule; Pleiades answers what moved and who reported it — at publish time, not at trend time.

English only · at most 8 items a call · no article bodies · free while we are in early access

pleiades — your agent asks, pleiades answersstreaming
PLEIADES·Awaiting the next ingestion cycle.
01 resolve{"task": "due diligence on Nvidia China exposure"}free · next
→ beat_idb_bb964843350e · NVIDIAwarm
02 pollmoved: false — nothing since cursor c_eyJiIjoi…$0.0005
02 pollmoved: true · pack · 3 items$0.004
awaitingIngestion paused while the topic catalog is rebuilt.system
poll · /v1/pollempty · $0.0005moved · $0.004≤8 items / ≤800 tokensconnecting…
150,000
Publishers watched continuously — every story traced to its source
≤8
Stories per answer — small enough to read, cheap enough to ask hourly
≤800
Tokens per answer, so a news check fits a small context window
30d
Depth on the agent API — recent by design, never a full archive

20 topics configured · ingestion paused while the topic catalog is rebuilt

MCPCoinbase x402Virtuals ACPREST APIWebSocketTelegramDiscord
01 · Category

This is not search.

Search is commoditised at about $0.0012 a query. Pleiades is scheduled awareness — state, cluster breadth and a cursor. If a feature only makes sense in the left column, it belongs to a product we are not building.

Who asks: a human once, or a machine forever.

A search box answers a question and forgets it. A beat keeps state. Your agent polls a cursor and gets one of exactly two answers — nothing moved, or a bounded pack. There is no result page to re-rank and no ranking to argue with.

  • No search box. No playground. No news homepage.
  • Builders copy a worker; they do not copy a screenshot.
  • Empty is a real answer, and it is nearly free.
$0.0012 / queryper wake-up
axissearchscheduled awareness
Who asksA human, onceA machine, forever
What winsRecall and rankingState + breadth
Unit of billingPer queryPer wake-up
IncumbentExa · Tavily · Brave · SerperNone
02 · Contract

Five verbs. One cursor.

Field names freeze after week three; identifiers in mono are exact. The agent rail never serves bodies, and will never serve content older than 30 days.

GET /v1/tools · the five verbslive
verbasks → returnsstatus · price
POST /resolveA task in English stable beat_id, warm firstnext · free → $0.001
POST /pollHas this beat moved? moved:false, or a pack$0.0005 / $0.004
POST /deltaWhat exactly, since the cursor? items newer than high-water$0.004 / $0.02
POST /briefA human asked a question 3–6 cited sentences + packnext · $0.03
POST /watchKeep this beat warm 24-hour hold at 60 or 15 minnext · $0.15–$0.50
GET /v1/catalog · POST /v1/poll · POST /v1/delta ship todayresolve · brief · watch · receipts nextcursor is opaque, signed, beat-bound
The pack

A pack is not an article list.

It is the smallest object that lets a model write one correct, cited sentence. Source breadth — distinct publishers inside the beat’s article cluster — is the field competitors cannot copy, because they never had to compute it.

  • Citations point at publishers. Receipts point at Pleiades. The two identifiers never merge.
  • At most 8 items, 320-character ledes, ≤800 p95 tokens — citation, not reproduction.
  • first_indexed_at on every item: the lead-time claim, in the payload.
POST /v1/poll · 200 OK · moved
{
  "beat_id": "b_dab9c000dca5",
  "beat_label": "EU AI Act",
  "moved": true,
  "item_count": 3,
  "token_estimate": 611,
  "cursor": "c_eyJiIjoi…",
  "receipt_id": "r_01JQ8ZK4M2X",
  "items": [
    {
      "lede": "The Commission opened consultation on GPAI transparency obligations, with responses due 14 October.",
      "source": "Reuters",
      "published_at": "2026-09-09T06:41:00Z",
      "first_indexed_at": "2026-09-09T06:43:00Z",
      "lang": "eng",
      "sentiment": -0.12
    }
  ]
}
03 · Catalog

Demand grows the graph. We do not guess it.

Warm beats will be precomputed; cold beats compute on demand and promote once two distinct paying agents read them inside seven days. Publishing buyer counts is the point — builders should self-select toward packs that are already cheap and fast.

One beat, one article cluster.

We do not re-cluster the world for you. A beat is a living query, and its English articles form that beat’s article cluster — deduplicated and ordered by publication time. What you subscribe to is exactly what you get: no opaque grouping, no story-merging you did not ask for.

  • Cluster per beat, addressed by a stable beat_id
  • English only, so no translation drift in the stream
  • Newest first, with a cursor that never skips and never repeats
  • Every beat carries a warm or cold state you can route on
GET /v1/catalog · live0 active
awaitingCatalog unreachable — the terminal shows what it last saw.system
warm · precomputedcold · on demandpromotion + buyer counts next
04 · Lead time

The claim is a measurement.

Minutes from publisher timestamp to first appearance in the index, against Exa, Tavily, Brave, Serper and Perplexity grounding. Every pack already carries its own evidence as first_indexed_at.

median minutes · breaking sample · last 7dharness next
Pleiades███░░░░░░░░░░░░░░░░░2.4
Serper██████████░░░░░░░░░░7.1
Brave██████████████░░░░░░9.8
Tavily████████████████░░░░11.6
Exa██████████████████░░13.0
Perplexity████████████████████14.4
target board · illustrative until the public harness shipsflat category → $0.004 is unsupportable

a category that comes back flat is better learned in week six than month nine — the harness ships open source and runs on the same workers that serve the rail.

05 · Price card

Charge the wake-up, not the month.

Empty is nearly free so hourly polling is rational. Cold is dear so reuse is rewarded. Prices live in a table, not in code.

poll · empty
$0.0005

Most mornings, most beats have not moved. Empty is a feature, not a failure.

poll moved / delta warm
$0.004

Under a cent for a bounded, cited pack. Reuse is rewarded, re-reading is not.

delta · cold
$0.02

On-demand compute against the replica, cached for 15 minutes.

brief
$0.03

The only call that spends a mid-tier model. Kept off the cheap path on purpose.

published ahead of the meter · calling is free today, billing turns on with the ledger

Caps

A looping tool call is the default failure mode.

Not a theoretical risk — it is the first thing a misconfigured agent does. Caps ship with the meter, so a runaway loop hits a wall instead of an invoice.

  • Default daily ceiling: $0.50 per identity
  • 50 distinct beats per day per identity
  • 8 items and 800 tokens are enforced in schema today
  • The 30-day depth wall lands with the meter
builder estimate · not a subscription
beats watched              3
polls per beat / day      24
move rate                 30%
briefs per day             1
────────────────────────────
est. agent-day         $0.14
≈ 30 days              $4.25
06 · Settlement next

402 is the onboarding.

An unprovisioned agent has to decide whether to pay without asking a human. The challenge will state what it is buying, what it costs, and where the schema lives.

Deposit once. Draw off-chain.

The same retry loop works on x402, prepaid credit and invoice. A $5 card top-up loses about 9% to processing; the same deposit in USDC on Base loses about 0.016%. That — not “agents have wallets” — is why the crypto rail exists.

  • No per-call chain write: a deposit funds a balance, calls draw against it
  • Settling an empty poll on-chain would cost more than the call
  • One retry loop for x402, prepaid and invoice
HTTP 402 Payment Required · next
nonce: n_01JQ8ZK4M2X
{
  "amount_micros": 4000,
  "currency": "USDC",
  "accepts": ["x402-base", "prepaid", "invoice"],
  "min_deposit_micros": { "x402-base": 5000000 },
  "resource": {
    "call": "delta",
    "beat_id": "b_dab9c000dca5",
    "beat_label": "EU AI Act",
    "description": "Items newer than cursor."
  },
  "docs": "/v1/tools"
}
07 · Receipts next

Prove payment. Never provenance.

GET /v1/receipts?since= will be the reconciliation view. When a model tells its user something it learned from a pack, the URL it shows is the publisher’s — never ours.

Two identifiers that never merge.

Receipts point at Pleiades: what was called, for which beat, for how many micros, and when it settled. Citations point at publishers: the only thing a downstream user should ever see.

  • Every metered call will return a receipt_id reconcilable in USD micros
  • Every item carries the publisher URL, source, timestamp and language
  • You are plumbing. Stay plumbing.
GET /v1/receipts?since=2026-09-09T00:00:00Z · next
receipt          call    beat              micros  settled
r_01JQ8ZK4M2X    delta   b_dab9c000dca5      4000  07:00:12Z
r_01JQ8ZK4N91    poll    b_bb964843350e       500  07:00:14Z
r_01JQ8ZK518C    poll    b_191edd8895e2       500  07:00:15Z
r_01JQ8ZL02AA    brief   b_dab9c000dca5     30000  08:12:03Z

// what the user should see — never our domain
The Commission opened consultation on GPAI transparency
obligations, with responses due 14 October.
https://www.reuters.com/…
The invariants

Six promises that do not move.

Every one of these is a constraint on us, not a feature for you. They are what make a cursor worth storing and a price worth trusting.

No raw keys

Agents never receive a newsapi.ai key and never see the query language underneath. Beats are the whole interface.

invariant 01

No bodies

Packs never contain full article text. No body field exists at any price on this rail.

invariant 02

30-day wall

The agent rail never serves content older than 30 days. Not for a bigger customer. Not once.

invariant 03

No per-call chain

x402 funds a balance; calls draw against it off-chain. Settling an empty poll on-chain would cost more than the call.

invariant 04

Resolve stays cheap

The front door is free to 100 calls a day and near-free after that, permanently. Never meter the funnel.

invariant 05

Deterministic beats

Two agents describing the same task hash to the same beat_id. Always — so a cursor stays valid across runtimes.

invariant 06
08 · Install

Boring tools survive model churn.

An OpenAI-compatible tool schema ships today; an MCP server that hits the same handlers ships next. The open spec publishes beat_id canonicalisation, the pack schema and the five verbs — not the graph.

Resolve once, poll forever.

A cron job, a wallet and two requests. If your agent can call a tool, it can hold a beat through a news cycle without a human in the loop. Polling and delta work today; resolve joins them with the canonicalisation spec.

  • Deterministic beats: the same task will hash to the same beat_id
  • Cursor comes back on every call — store it and never re-read
  • 8 items and 800 tokens, enforced by the pack schema
// poll forever — live today
curl -s $PLEIADES/v1/poll \
  -H "Content-Type: application/json" \
  -d '{"beat_id":"b_bb964843350e","cursor":null}'

# resolve (task → beat_id) ships next
curl -s $PLEIADES/v1/resolve \
  -H "Content-Type: application/json" \
  -d '{"task":"I am writing a due diligence
       memo on Nvidia China exposure"}'

# x402 deposit + X-PAYMENT credential land with the meter
GET /v1/tools · live
{
  "tools": [{
    "type": "function",
    "function": {
      "name": "pleiades_poll",
      "description": "Ask whether a beat has
        moved since the cursor. Prefer this
        on a schedule.",
      "parameters": {
        "type": "object",
        "properties": {
          "beat_id": { "type": "string" },
          "cursor": { "type": ["string","null"] }
        },
        "required": ["beat_id"]
      }
    }
  }]
}
MCP · same handlers · next
// not served yet — GET /v1/tools is live today
{
  "mcpServers": {
    "pleiades": {
      "url": "https://pleiades.news/mcp",
      "headers": {
        "X-PAYMENT": "${PLEIADES_CREDENTIAL}"
      }
    }
  }
}
beat_id canonicalisation · public spec
canonical = sorted(concept_uris).join("|")
          + "::" + sorted(topic_filters).join("|")
          + "::" + sorted(languages).join("|")

beat_id = "b_" + sha256(canonical).hexdigest()[:12]

# Published so external implementations can converge on it.
# Not enforced yet: seeded beats carry literal ids until
# resolve ships. Changing it later breaks stored cursors.
09 · Segmentation

Agents get now. Desks get then.

The dividing line is time depth, not content depth. If a fund could replace a six-figure archive contract with forty dollars of metered agent calls, the new rail would eat the business it was meant to extend.

Two rails, one graph.

The agent rail is a bounded pack inside a 30-day window: enough to answer what is happening, cheap enough to ask every hour. The desk rail is the archive — bodies, ranges and export, contracted and dated back to 2014.

  • Agent rail: pack of ≤8 ledes, publisher URL, ≤30 days, per wake-up
  • Desk rail: export, bodies, ranges, contracted feed
  • Same beats underneath, so nothing has to be reconciled twice
segmentation · depth is the line
needagent raildesk rail
QuestionWhat is happening on this?Full history
Depth≤ 30 days2014 →
ShapePack · 8 ledesBodies · ranges
CitePublisher URLContracted feed
compute oncesell many timescharge the wake-up

Traders & desks

Machine-speed awareness on English coverage, deduplicated and time-ordered, so a strategy reacts to structure instead of a headline.

poll on a schedule

Agents & products

A real-time layer your system calls like any other tool — and, with x402 and ACP, pays for on its own without an invoice.

MCP · ACP · 402

Newsrooms & creators

See which narratives are forming while they are still cheap to write about, with every claim traceable to a publisher.

citation on every item
Status

What is shipped, and what is not.

Early users deserve to know exactly where the line is. This is it.

Live

Catalog, 20 seeded beats, English article clusters, poll, delta, webhooks, live terminal

Now

Topic queries for a 100-beat catalog; resolve, receipts, the meter and prepaid keys

Next

Brief and watch verbs, MCP server, WebSocket push, Telegram + Discord, lead-time harness

Later

x402 self-serve settlement, ACP jobs, prepaid and invoice rails, desk export

FAQ

The questions we get first.

What is actually live today?
Live now: the catalog, agent tool schema, pricing, stats, poll, delta and webhooks, against 20 seeded English beats that each carry their own article cluster. Not live yet: resolve, receipts, brief, watch, the meter, the MCP server and x402 settlement. Live ingestion is paused while the topic queries are rebuilt for a 100-beat catalog, so the terminal shows the current state of the graph rather than a moving one.
Is this a search engine?
No, and it is not trying to be. Search answers a question once and forgets it. Pleiades keeps a cursor per beat, so the question your agent asks on a schedule is “has this moved since I last looked?” — and “no” is a cheap, successful, billable answer.
Do I get article bodies?
Never. No body field exists at any price on the agent rail. A pack holds at most 8 items with ledes capped at 320 characters, a bounded token estimate, and publisher URL, source, timestamp, language, concepts and sentiment on every item. You get the signal and the citation; you fetch the body yourself.
How fast is “before the mainstream”?
Beats refresh on a 60-minute target with a 90-minute freshness SLO, and market beats are built to tighten to 5–15 minutes. Every item carries first_indexed_at next to published_at, so lead time is a field in the payload rather than a marketing line. The public comparison harness ships with the next milestone; until then the board above is illustrative.
How do I get access?
Polling is free while the meter is wired, so early access is operator-granted rather than self-serve. Send a note with your use case — trading, newsroom, agent product — and you get access plus a starting balance when billing turns on. Every metered call will then return a receipt you can reconcile in USD micros.
Can my agent pay for itself?
That is the design, and it is not live yet. x402 will take a deposit in USDC on Base so calls draw against a balance off-chain, meaning a $0.0005 empty poll never touches the chain. A default daily cap of $0.50 and 50 distinct beats per identity keeps a looping tool call from becoming an incident.

Never miss the signal.

Tell Pleiades which topics matter, then let your agent ask what changed. One API, every story cited back to the publisher that broke it.

English only · free while we are in early access · one API call at a time