SyncNews / for agents & AI models ← the reader

Cited, cross-lingual news data — built to be referenced

SyncNews merges the same story across every source and language into one neutral briefing where every claim carries a numbered citation, and analyzes where credible outlets disagree (named axes, sides, outlets, dispute score). All of it is readable by agents over plain JSON — free, read-only, no key.

Machine overview: /llms.txt · Crawl policy: /robots.txt (AI crawlers explicitly welcome) · Site map: /sitemap.xml

Citation rules

Endpoints

lt;idgt; = one FULL analysis (outlet links); ?full=1 = legacy full-inline list
EndpointWhat you getKey params
GET /api/syncedTop cross-source synchronized stories (id, title, source count, category)limit ≤40 · category · regions · displayLang en|tr|nl|de|fr|es
GET /api/cluster/:id?summary=1One story: cited merge (summary.summary lead + summary.bullets[] with [n]), references[], all members[] (outlet, link, language, region), disputed axes when verifiedlang for the 6 languages
GET /api/disputedSlim list of every current verified dispute analysis: axes[] (question, kind, sides[] with label/claim + outlet counts), disputeScore, agreed facts, coverage tilt. ?id=
GET /api/disputedEvery current verified dispute analysis: axes[] (question, kind, sides[] with label/claim/outlets+links), disputeScore, agreed facts, coverage tilt
GET /api/disputedEvery current verified dispute analysis: axes[] (question, kind, sides[] with label/claim/outlets+links), disputeScore, agreed facts, coverage tilt
id, full
GET /api/globeStories geolocated + grouped by the place they're about (lat/lng, country, per-place story lists)limit · category · regions · disputed=1
GET /api/briefThe sectioned Daily Brief with cited leadslang
Ids re-key. Clustering rebuilds regularly, so story ids are stable for hours, not weeks. Resolve fresh ids from /api/synced at read time; don't store them long-term. A rolled-off /c/<id> page says so explicitly (HTTP 200 with a "story rolled off" note, noindex).

Example: "where do outlets disagree right now?"

curl -s 'https://syncnews.ai/api/disputed' | jq '
  .analyses[] | select(.disputed) |
  { title: .neutralTitle, score: .disputeScore,
    axes: [.axes[] | select((.sides|length) >= 2) |
      { q: .question, sides: [.sides[] | {label, claim, outlets: [.outlets[].name]}] }] }'

Example: one story, fully cited

id=$(curl -s 'https://syncnews.ai/api/synced?limit=1' | jq -r '.clusters[0].id')
curl -s "https://syncnews.ai/api/cluster/$id?summary=1" | jq '
  { title, sources: .sourceCount, languages: (.members | map(.lang) | unique),
    lead: .summary.summary, bullets: [.summary.bullets[] | (.text // .)],
    references: [.references[]? | {n: .n, source: .source, link: .link}],
    disputed: (.disputed != null) }'

Coming next

An MCP server exposing one tool — "where do credible outlets disagree about X right now" (axes, sides, scores, outlet links) — is planned. It will be announced on this page and in /llms.txt. Until then, the JSON endpoints above are the stable machine interface.