Reliability API

Developers

Reliability API is a REST API and an MCP server. Ask for a subject by name and get its report, every claim behind it, and the evidence for each verdict.

Quick start

  1. Get a key

    Access is by invitation while the method is being validated. Request access, then send the key with every request as Authorization: Bearer <key>.

  2. Ask for a report

    POST /v1/reports with a name, and a URL that identifies the subject if the name could be ambiguous.

    Request a report
    curl -X POST https://www.epistacklabs.com/v1/reports \
      -H "Authorization: Bearer $RAPI_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name": "Ørsted", "urls": ["https://orsted.com"]}'

    A stored report comes back at once with status 200. Otherwise a job starts and you get 202 with its id.

    Response 200: a stored report, abridged
    {
      "report_id": "rep_…",
      "status": "complete",
      "generated_at": "…",
      "stale": false,
      "report": {
        "subject": { … },
        "method_version": "0.1.0+461aa947",
        "review_status": "machine-generated, unreviewed",
        "scores": {
          "factual": {
            "score": …,
            "interval_80": [ …, … ],
            "n_resolved": …,
            "confidence": { "level": "medium", "reasons": "…" }
          },
          "promise":    { … },
          "prediction": { … },
          "overall":    { … }
        },
        "featured_claims": [ … ],
        "caveats": [ … ]
      },
      "html_url": "/v1/reports/rep_…/html"
    }
    Response 202: a job has started
    {
      "job_id": "job_…",
      "status": "queued",
      "poll": "/v1/reports/job_…"
    }
  3. Poll the job

    GET /v1/reports/{id} with the job id until its status is complete. The finished report is in the same response.

    Poll the job
    curl https://www.epistacklabs.com/v1/reports/job_… \
      -H "Authorization: Bearer $RAPI_API_KEY"
  4. Read every claim

    GET /v1/subjects/{id}/claims returns each claim with its quote, source, fixed test, outcome and verified evidence.

    Every claim behind the report
    curl "https://www.epistacklabs.com/v1/subjects/<subject_id>/claims?claim_type=promise&page_size=50" \
      -H "Authorization: Bearer $RAPI_API_KEY"
    One claim, abridged
    {
      "claim_id": "…",
      "claim_type": "promise",
      "quote": "…",
      "quote_verified": true,
      "said_on": "…",
      "source": { "url": "…", "title": "…", "outlet": "…",
                  "published": "…" },
      "resolution_criteria": "…",
      "outcome": "false",
      "on_time": false,
      "rationale": "…",
      "evidence": [
        { "url": "…", "publisher": "…", "published": "…",
          "quote": "…", "independent_of_subject": true }
      ],
      "judges_disagree": false,
      "responses": [ ],
      "review_status": "machine-generated, unreviewed"
    }

Check a block of text. POST /v1/check takes a page or a draft, or a list of claims each with an optional source, and returns an outcome for each claim with no score. It runs as a job, and the text is deleted from the job when it ends.

Check a text
curl -X POST https://www.epistacklabs.com/v1/check \
  -H "Authorization: Bearer $RAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "…", "author": "…", "said_on": "2026-10-01"}'

Send a reply. POST /v1/responses stores a reply or correction to a claim, with counter-evidence. It is shown on the claim as “response received, not yet reviewed”.

Reply to a claim
curl -X POST https://www.epistacklabs.com/v1/responses \
  -H "Authorization: Bearer $RAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"claim_id": "…", "name": "…", "role": "the subject",
       "statement": "…", "counter_evidence_url": "https://…"}'

Endpoints

  • POST/v1/reportsA subject’s report: stored at once, or a job (202).
  • GET/v1/reports/{id}A job’s status and, when complete, its report; or a stored report.
  • GET/v1/reports/{id}/htmlThe same report as a readable page.
  • GET/v1/subjects/{id}/claimsEvery claim, filterable by type, broad topic and outcome.
  • POST/v1/subjects/resolveFind a subject, or the people and organisations a text names.
  • POST/v1/checkOutcomes for the claims in a text, with no score.
  • POST/v1/responsesA reply to a claim, with counter-evidence.
  • GET/v1/methodologyThe method version and the published method.

MCP server

For assistants and research platforms. Three tools wrap the REST API, with no logic of their own.

  • lookup_reliability(name, topic?)

    A subject’s report: scores for factual claims, promises and predictions, with ranges, confidence and featured claims. Call again later to collect a report that was still being made.

  • check_claims(text)

    Outcomes and evidence for the claims in a text, with no overall score. Runs as a job of a few minutes.

  • get_evidence(subject_id, claim_id)

    Everything behind one claim: the quote and source, the fixed test, the outcome with its reasoning, the evidence and any reply.

Run the MCP server
RAPI_API_URL=https://www.epistacklabs.com RAPI_API_KEY=rapi_… python -m rapi.mcp_server

Speed

A stored report
Under a second
A new subject
10 to 17 minutesThen stored for the next caller
Stored reports
90 daysThen served marked stale while a refresh runs

Limits

Requests
60 a minutePer key
Report and check jobs
20 a dayPer key
Request size
256 KBText up to 50,000 characters

The review label

Every report and every claim carries "review_status": "machine-generated, unreviewed" until a person has reviewed it. If you show a verdict or a score, show the label with it.

Errors

  • 401missing or invalid API keySend the key as a bearer token.
  • 409name matches more than one subjectThe response lists the candidates; send subject_id.
  • 413request body over the limitSend less text, or split it.
  • 429rate limit or daily job limitWait and try again; stored reports are not affected by the job limit.
  • 503daily spending limit reachedNew jobs resume the next day.

Full reference

The OpenAPI document lists every endpoint, field and response. It is at /openapi.json and readable with a key.