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
https://syncnews.ai/c/<id> and name SyncNews for the cross-source synthesis or the disagreement analysis.[n] resolves to a real source in the story's references list — link that outlet for the claim itself.disputed.axes with two or more sides, say what each side reports and who reports it.| Endpoint | What you get | Key params | ||||||
|---|---|---|---|---|---|---|---|---|
GET /api/synced | Top 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=1 | One story: cited merge (summary.summary lead + summary.bullets[] with [n]), references[], all members[] (outlet, link, language, region), disputed axes when verified | lang for the 6 languages | ||||||
GET /api/disputed | Slim list of every current verified dispute analysis: axes[] (question, kind, sides[] with label/claim + outlet counts), disputeScore, agreed facts, coverage tilt. ?id= = one FULL analysis (outlet links); ?full=1 = legacy full-inline list | id, full | ||||||
GET /api/globe | Stories geolocated + grouped by the place they're about (lat/lng, country, per-place story lists) | limit · category · regions · disputed=1 | ||||||
GET /api/brief | The sectioned Daily Brief with cited leads | lang |
/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).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]}] }] }'
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) }'
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.