Dossier's claims, verdicts and sources, over HTTP. Generate a key in Settings and send it with each request.
Keys
A key is shown once, when you generate it. Send it in the Authorization header as Bearer <key>.
Each key allows 100 requests per hour. A request over the limit gets a 429 with a Retry-After header. An account holds up to 5 keys, and any of them can be revoked.
Endpoints8
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| GET | /api/v1/corpus | Claims with a recorded verdict, each with its detection and verification records | API key |
| GET | /api/v1/stories | Published stories, each with its lead claim's verdict | API key |
| GET | /api/v1/stories/:id | One story with its evidence, timeline and contributions | API key |
| GET | /api/v1/entities | The most-mentioned entities | API key |
| GET | /api/v1/entities/:slug | One entity, the entities seen with it, and the stories that mention it | API key |
| GET | /api/v1/index/snapshots | Article snapshots by source: created, edited, deleted | API key |
| GET | /api/v1/index/sources | Indexed sources with snapshot counts for a recent window | API key |
| GET | /api/v1/health | Service status and claim counts | Public |
Sample response/api/v1/corpus
Every claim that has reached a verdict, with its source grade and the record of when it was detected and verified. These are the 2 most recent.
/api/v1/corpus?limit=2curl -H "Authorization: Bearer pk_live_YOUR_KEY" \
https://app.getdossier.io/api/v1/corpus?limit=2{
"data": [
{
"claim_id": "00000000-0000-4000-8000-000000000201",
"claim_key": null,
"claim": "Belgian F-16s scrambled twice this week to intercept unidentified UAVs.",
"fact": {
"subject": null,
"fact_type": "event",
"predicate": null,
"value": null
},
"verdict": {
"status": "confirmed",
"confidence_score": 84,
"source_reliability": "B",
"information_credibility": "2",
"independent_source_count": 3,
"model": null,
"verified_at": null
},
"provenance": {
"detection": {
"topic": "0.0.8451859",
"seq": 1001
},
"verification": {
"topic": "0.0.8451861",
"seq": 1002
}
},
"source": "De Morgen",
"created_at": "2026-10-10T20:02:02.382164+00:00"
},
{
"claim_id": "00000000-0000-4000-8000-000000000203",
"claim_key": null,
"claim": "FIFA hides unsold seats behind banners during televised matches.",
"fact": {
"subject": null,
"fact_type": "claim",
"predicate": null,
"value": null
},
"verdict": {
"status": "debunked",
"confidence_score": 22,
"source_reliability": "D",
"information_credibility": "4",
"independent_source_count": 0,
"model": null,
"verified_at": null
},
"provenance": {
"detection": {
"topic": "0.0.8451859",
"seq": 1004
},
"verification": {
"topic": "0.0.8451861",
"seq": 1005
}
},
"source": "RTL",
"created_at": "2026-10-10T20:02:02.382164+00:00"
}
],
"meta": {
"count": 2,
"limit": 2,
"network": "hedera-testnet",
"attestation_topics": {
"detections": "0.0.8053004",
"verifications": "0.0.8053005",
"contributions": "0.0.8053006"
}
}
}