Dossier
FeedContribute
APIAboutFeedback
@dossier_io
FeedContribute

API access

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.

Manage keys in Settings

Endpoints8

MethodEndpointDescriptionAuth
GET/api/v1/corpusClaims with a recorded verdict, each with its detection and verification recordsAPI key
GET/api/v1/storiesPublished stories, each with its lead claim's verdictAPI key
GET/api/v1/stories/:idOne story with its evidence, timeline and contributionsAPI key
GET/api/v1/entitiesThe most-mentioned entitiesAPI key
GET/api/v1/entities/:slugOne entity, the entities seen with it, and the stories that mention itAPI key
GET/api/v1/index/snapshotsArticle snapshots by source: created, edited, deletedAPI key
GET/api/v1/index/sourcesIndexed sources with snapshot counts for a recent windowAPI key
GET/api/v1/healthService status and claim countsPublic

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.

GET/api/v1/corpus?limit=2
curl -H "Authorization: Bearer pk_live_YOUR_KEY" \ https://app.getdossier.io/api/v1/corpus?limit=2
Response
{
  "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"
    }
  }
}