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
20 topics configured · ingestion paused while the topic catalog is rebuilt
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.
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.
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.
{
"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
}
]
}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
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.
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.
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.
Most mornings, most beats have not moved. Empty is a feature, not a failure.
Under a cent for a bounded, cited pack. Reuse is rewarded, re-reading is not.
On-demand compute against the replica, cached for 15 minutes.
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
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
beats watched 3 polls per beat / day 24 move rate 30% briefs per day 1 ──────────────────────────── est. agent-day $0.14 ≈ 30 days $4.25
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
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"
}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.
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/…
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 01No bodies
Packs never contain full article text. No body field exists at any price on this rail.
invariant 0230-day wall
The agent rail never serves content older than 30 days. Not for a bigger customer. Not once.
invariant 03No 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 04Resolve stays cheap
The front door is free to 100 calls a day and near-free after that, permanently. Never meter the funnel.
invariant 05Deterministic beats
Two agents describing the same task hash to the same beat_id. Always — so a cursor stays valid across runtimes.
invariant 06Boring 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
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{
"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"]
}
}
}]
}// not served yet — GET /v1/tools is live today
{
"mcpServers": {
"pleiades": {
"url": "https://pleiades.news/mcp",
"headers": {
"X-PAYMENT": "${PLEIADES_CREDENTIAL}"
}
}
}
}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.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
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 scheduleAgents & 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 · 402Newsrooms & creators
See which narratives are forming while they are still cheap to write about, with every claim traceable to a publisher.
citation on every itemWhat is shipped, and what is not.
Early users deserve to know exactly where the line is. This is it.
Catalog, 20 seeded beats, English article clusters, poll, delta, webhooks, live terminal
Topic queries for a 100-beat catalog; resolve, receipts, the meter and prepaid keys
Brief and watch verbs, MCP server, WebSocket push, Telegram + Discord, lead-time harness
x402 self-serve settlement, ACP jobs, prepaid and invoice rails, desk export
The questions we get first.
What is actually live today?
Is this a search engine?
Do I get article bodies?
How fast is “before the mainstream”?
How do I get access?
Can my agent pay for itself?
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