Skip to content
TRU8
Back to Home
01Developer API

The evidence landscape behind any claim. One API call.

Submit a claim, URL, or article. Get back structured evidence — organised by source tier (primary, reporting, commentary) and type (data, official, news, analysis, academic), with element decomposition and relationship mapping.

Grounding APIs return passages and a score. Tru8 returns structure: tier, type, relationship, state, gaps, receipts, manifest. Same claim, Tru8 vs four grounding APIs →

One API call.
Multi-source evidence retrieval.
Structured, not summarised.
Your agent decides what matters.

From £0.02 per call · no subscription required · signed manifests

Prefer to research in the browser? Start a check →

02Quick Start

Three Steps

1

Get an API key

Create a key in your dashboard settings. Your key is shown once — store it in an environment variable immediately:

# Store your key as an environment variable — never hardcode it
export TRU8_API_KEY="tru8_sk_..."

Key security

Your API key carries your identity and usage quota. Treat it like a password.

  • Store in environment variables or a secrets manager — never in source code
  • Never commit keys to git, logs, or client-side bundles
  • If a key is exposed, revoke it immediately in dashboard settings and create a new one
  • Use separate keys per agent or environment for auditability
2

Submit a claim

curl -X POST https://api.trueight.com/api/v1/agent/quick \
  -H "X-API-Key: $TRU8_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"claim": "Global average temperature rose 1.1°C since pre-industrial times"}'

Returns structured result with _meta (executedTier, chargedPence)

3

Retrieve the result

curl https://api.trueight.com/api/v1/agent/result/{check_id} \
  -H "X-API-Key: $TRU8_API_KEY"

Completed checks return the full evidence landscape. Processing checks return status for polling.

03Tiers & Pricing

Four depths. One record shape.

Agent API calls are charged per call, deducted from your prepaid credit balance. Every tier returns the same record shape — the price buys retrieval depth, not a different contract.

TierWhat runsTimePer call
LookupCached prior analysis — instant hash match on your previous research. No pipeline run.instant£0.02
ConsensusCross-user aggregate landscape. Available when 3+ independent checks exist. No pipeline run.instant£0.03
QuickWeb search (1 query/element), heuristic classification, evidence mapping + orientation. Fast triage.~15s£0.07
FullThe complete pipeline: 3 queries/element across 30+ sources incl. government + academic APIs and fact-check lookup, LLM classification + relevance scoring, coverage recovery.~60–90s£0.15

How it works

  • 1.Top up your agent credit balance (prepaid, in GBP pence)
  • 2.Each API call deducts the tier price from your balance
  • 3.Use max_tier to cap maximum spend per call
  • 4.You are only charged for the tier actually executed, not the tier requested
?

Agent credits vs dashboard subscription

The Tru8 Console subscription gives you a monthly check allowance for the web dashboard. Agent API credits are a separate prepaid balance for programmatic access. Both are available on any account — you can use the dashboard and the API independently.

04MCP Integration

MCP Server

Tru8 exposes three tools via the Model Context Protocol. Any MCP-compatible agent (Claude, GPT, Gemini) can discover and use Tru8 automatically.

tru8_check

Evidence research with tier fallback (lookup → consensus → quick → full). Set max_tier to control depth and cost.

varies
tru8_get_result

Retrieve completed check with pre-computed analytics (_computed block)

<1s
tru8_get_result_raw

Retrieve raw check data without computed analytics

<1s

Configure for Claude Desktop:

{
  "mcpServers": {
    "tru8": {
      "command": "python",
      "args": ["-m", "tru8_mcp"],
      "env": {
        "TRU8_API_KEY": "tru8_sk_..."
      }
    }
  }
}

The env block is injected at server startup — the key is never sent to the model. Your Claude Desktop config file (claude_desktop_config.json) is local-only, but ensure it is excluded from any version control or backup sync that could expose secrets.

Full reference — the deep spec continues below

05Async Mode

Non-Blocking Submission

Add ?async=true to /agent/quick or /agent/full to get an immediate 202 response. The pipeline runs in the background — poll for the result when ready.

# Submit async
curl -X POST "https://api.trueight.com/api/v1/agent/full?async=true" \
  -H "X-API-Key: $TRU8_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"claim": "The UK left the EU in 2020"}'

# Response: 202 Accepted
{
  "checkId": "abc-123",
  "status": "processing",
  "tier": "full",
  "chargedPence": 15,
  "pollUrl": "/api/v1/agent/result/abc-123",
  "estimatedSeconds": 60
}

# Poll for result
curl "https://api.trueight.com/api/v1/agent/result/abc-123" \
  -H "X-API-Key: $TRU8_API_KEY"
# While processing: { "status": "processing", "checkId": "abc-123", "hit": false }
# When complete:   { full result payload }

Prefer webhooks over polling — register a callback URL and receive events when checks complete or fail.

06Batch Mode

Multi-Claim Submission

Submit up to 10 claims in a single call. All claims run concurrently in the background at the same tier. Each creates its own check with a separate poll URL.

curl -X POST https://api.trueight.com/api/v1/agent/batch \
  -H "X-API-Key: $TRU8_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tier": "quick",
    "claims": [
      { "claim": "Global sea levels rose 3.6mm per year since 2006" },
      { "claim": "The Amazon rainforest produces 20% of world oxygen" },
      { "claim": "Electric vehicles have lower lifetime emissions than petrol cars" }
    ]
  }'

# Response: 202 Accepted
{
  "accepted": 3,
  "tier": "quick",
  "totalChargedPence": 21,
  "estimatedSeconds": 15,
  "checks": [
    { "index": 0, "checkId": "...", "pollUrl": "/api/v1/agent/result/..." },
    { "index": 1, "checkId": "...", "pollUrl": "/api/v1/agent/result/..." },
    { "index": 2, "checkId": "...", "pollUrl": "/api/v1/agent/result/..." }
  ]
}

Upfront balance check

Total cost is verified before any claims are submitted. If your balance can't cover all claims, the entire batch is rejected with 402.

Webhook per claim

Each claim fires its own check.completed or check.failed webhook event independently.

?

Idempotency in batch

If you send an Idempotency-Key header, each claim receives a derived key (your-key_0, your-key_1, etc). Safe to retry the entire batch on network failure.

07Webhooks

Event Notifications

Register a webhook URL in your dashboard settings to receive POST callbacks when checks complete or fail. No polling required.

check.completed

Pipeline finished successfully. Result is ready to retrieve.

{ "checkId": "...", "status": "completed", "tier": "quick" }
check.failed

Pipeline error or timeout. Credits have been refunded.

{ "checkId": "...", "status": "failed", "error": "Pipeline timed out" }
?

Delivery guarantee

Webhooks are delivered best-effort with automatic retries (2 attempts, exponential backoff). If your endpoint returns a non-2xx status, delivery is retried. Design your handler to be idempotent — you may receive the same event more than once.

08Agent Discovery

Self-Service Endpoints

These endpoints let agents inspect the API programmatically — check availability, discover pricing, and verify their own identity before submitting work.

GET
/agent/health

API and dependency status (database, Redis). No auth required.

public
GET
/agent/tiers

Available tiers with per-call pricing (pence) and estimated latency. No auth required.

public
GET
/agent/me

Authenticated identity, provider type, and current credit balance.

auth
GET
/agent/stats

Usage analytics — transactions by tier and provider, total agent checks.

auth
GET
/agent/credits/balance

Current prepaid credit balance in pence.

auth

An agent can call /agent/health to confirm the API is live, then /agent/tiers to discover current pricing, then /agent/me to check its balance — all before submitting a single claim.

09Rate Limits

Throttling

Rate limits are applied per API key, not per IP address. Agents sharing a cloud IP won't interfere with each other.

Endpoint groupLimitScope
POST /agent/lookup30/minutePer API key
POST /agent/quick10/minutePer API key
POST /agent/full5/minutePer API key
POST /agent/check10/minutePer API key
POST /agent/batch5/minutePer API key
GET /agent/result/*30/minutePer API key
GET /agent/health, /tiers, /me60/minutePer API key

Pipeline endpoints also enforce a concurrency limit of 5 simultaneous processing checks per API key. If you hit this limit, you'll receive a 429 with aRetry-After: 30 header.

10Error Handling

Error Codes

All errors return JSON with a detail field. Agents should handle these programmatically — retry on 429/504, alert on 402, and log on 502.

CodeMeaningAgent action
401Missing or invalid API keyCheck X-API-Key header
402Insufficient credit balanceTop up via /agent/credits/purchase
404Check not found or not ownedVerify check ID and ownership
409Idempotency key reused with different paramsUse a new idempotency key
429Rate limit or concurrency limit exceededWait for Retry-After header value
502Pipeline processing errorRetry with same idempotency key
504Pipeline timed out (no charge)Retry — consider async mode
?

Refund policy

Pipeline errors (502) and timeouts (504) are automatically refunded — credits are returned to your balance immediately. Only successful completions are charged.

11Response Shape

What You Get Back

{
  "id": "check-uuid",
  "status": "completed",
  "claims": [
    {
      "text": "Global average temperature rose 1.1°C since pre-industrial times",
      "claimType": "statistical",
      "claimMap": {
        "elements": [
          {
            "elementId": "e1",
            "text": "Global average temperature increase",
            "state": "supported",
            "evidenceRefs": [
              {
                "evidenceId": "ev1",
                "relationship": "supports",
                "reasoning": "NASA GISS dataset confirms 1.1°C anomaly..."
              }
            ]
          }
        ],
        "orientation": "Evidence broadly supports this claim..."
      },
      "evidence": [
        {
          "evidenceId": "ev1",
          "title": "GISS Surface Temperature Analysis",
          "url": "https://data.giss.nasa.gov/gistemp/",
          "tier": "primary",
          "evidenceType": "data",
          "snippet": "Global mean surface temperature anomaly..."
        }
      ]
    }
  ],
  "_meta": {
    "executedTier": "quick",
    "chargedPence": 7,
    "limitations": ["heuristic_classification", "no_coverage_recovery"],
    "cached": false,
    "landscape": {
      "sourceDiversity": { "uniqueDomains": 5, "typeCoverage": 3 },
      "freshness": { "freshestDaysAgo": 2, "undatedCount": 1 },
      "gaps": [],
      "providerStatus": null
    }
  },
  "_manifest": {
    "checkId": "check-uuid",
    "landscapeHash": "a1b2c3d4...",
    "signedAt": "2026-03-09T12:00:00Z",
    "signature": "hmac-sha256:...",
    "kid": "tru8-2026-03",
    "verifyUrl": "/verify/check-uuid"
  },
  "_computed": {
    "summary": { "totalElements": 3, "supported": 2, "disputed": 0, "unresolved": 1 },
    "evidenceByTier": { "primary": 4, "reporting": 8, "commentary": 2 },
    "evidenceByType": { "data": 3, "official": 2, "news": 5, "analysis": 3, "academic": 1 },
    "corroboration": { "groups": [...], "convergenceCount": 3 },
    "diagnosticValues": [...]
  }
}
?

claims[].claimMap

Each claim is decomposed into 1–5 elements. Evidence maps to elements with relationship types (supports/challenges/context) and reasoning.

?

_meta vs _computed

_meta is always present — tier, cost, limitations, landscape. _computed requires ?computed=true — adds analytics, corroboration, diagnostics.

?

_manifest

HMAC-signed manifest. Agents can verify the signed fields haven't changed since signing via GET /verify/{check_id}.

12Resources

Documentation

13FAQ

Frequently asked questions

How do I get started with the Tru8 API?
Create an API key in your dashboard settings, then POST a claim or URL to the API. The Quick Start above shows a working request; a single call returns a structured evidence landscape.
What does a Tru8 API call return?
A structured evidence landscape: each claim is decomposed into 1–5 elements, evidence is mapped to those elements with supports, challenges or context relationships, every source is classified by tier and type, gaps are named, and the response carries an HMAC-signed manifest. It does not return a true/false verdict. We organise; you decide.
Is there an MCP server for Claude and other AI agents?
Yes. The tru8-mcp package is published on PyPI and exposes tools for submitting a check and retrieving results, so Claude and other agents can request an evidence landscape directly.
How are API calls priced?
Calls are metered per request across four tiers — lookup, consensus, quick and full — billed from prepaid credits. See the Tiers & Pricing section above for the current per-tier rates.
How can an agent confirm a result has not changed?
Every response includes a signed _manifest. A caller can verify the signed fields have not changed since signing by calling GET /verify/{check_id}.
How long does a check take?
Typically 15–90 seconds depending on the tier, because Tru8 retrieves and classifies evidence across 30+ sources rather than returning passages and a score.

Start Building

Create an API key and submit your first check in under a minute.

Get API Key
TRU8 — DEVELOPERS — V1.1