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, opinion, academic), with element decomposition and relationship mapping.
Grounding APIs return passages and a score. Tru8 returns structure: tier, type, relationship, state, gaps, receipts. 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 · charged on the tier that actually ran
Prefer to research in the browser? Start a check →
Three Steps
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. Store it in environment variables or a secrets manager, never in source code, logs or client-side bundles. Use separate keys per agent or environment, and revoke immediately in dashboard settings if one is exposed.
Submit a claim
/agent/check is the endpoint to reach for first. It tries the cheapest route that can answer — your own cached analysis, then cross-user consensus — and only runs the pipeline if neither hits, escalating no further than max_tier.
curl -X POST https://api.trueight.com/api/v1/agent/check \
-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",
"max_tier": "full"
}'Returns the landscape plus _meta.executedTier and _meta.chargedPence
Retrieve the result
curl https://api.trueight.com/api/v1/agent/result/{check_id} \
-H "X-API-Key: $TRU8_API_KEY"Free, and only for your own checks. Still running: {"status": "processing", "hit": false}
Other ways to submit
- POST /agent/quick · POST /agent/full
- Force one tier, no fallback. Add
?async=truefor an immediate 202 carrying apollUrl, and let the pipeline run in the background. - POST /agent/batch
- Up to 10 claims at one tier, run concurrently. The whole batch is costed upfront and rejected with 402 if the balance cannot cover it; each claim fires its own webhook.
- POST /agent/lookup
- Cache only — returns a prior analysis or nothing. Never runs the pipeline.
- GET /agent/health · /tiers · /me
- Availability, live per-tier pricing, and your own identity and balance. The first two need no key, so an agent can check we are up and what we cost before it commits.
Full request and response schemas for every endpoint are in the interactive API reference, generated from the running code.
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.
| Tier | What runs | Time | Per call |
|---|---|---|---|
Lookup | Your own prior analysis of the same claim, matched by hash. No pipeline run. | instant | £0.02 |
Consensus | Cross-user aggregate landscape, available once three different accounts have run a full check on the same claim. No pipeline run. | instant | £0.03 |
Quick | Up to 6 web searches per claim, heuristic classification, evidence mapping and orientation. Fast triage. | ~15s | £0.07 |
Full | The complete pipeline: up to 13 searches per claim across the web plus government, academic and fact-check sources, LLM classification and 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.On
/agent/check,max_tiercaps how far it may escalate./agent/quickand/agent/fullrun exactly the tier you name - 4.You are charged for the tier actually executed, not the tier requested — and
_meta.limitationsnames every stage the executed tier withheld
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.
MCP Server
Tru8 exposes three tools via the Model Context Protocol. Any MCP-compatible agent can discover and use them. Three routes, same tools, same API — pick by how much you want to install.
Hosted — nothing to install
https://api.trueight.com/mcp
Streamable HTTP. Authenticate with an X-API-Key header, or an apiKey query parameter for clients that pass configuration that way. Listing the tools needs no credential; invoking one does.
Smithery registry
Listed as samyatessmith/tru8 for clients that install from a registry. Supply your API key as the single apiKey configuration value.
Local — stdio via PyPI
pip install tru8-mcp
Then, in 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 keep it out of any version control or backup sync that could expose secrets.
The three tools
tru8_checkEvidence research with automatic tier fallback (lookup → consensus → quick → full). Set max_tier to cap depth and cost.
tru8_get_resultRetrieve a completed check with pre-computed analytics (_computed block)
tru8_get_result_rawRetrieve raw check data without computed analytics — smaller payload
What You Get Back
Every tier returns the same record. No verdict, no credibility score — a landscape your agent can reason over.
- claims[]
- Each claim decomposed into 1–5 elements — the separate things that must hold for the claim to hold.
- elements[].state
- supported, disputed, unresolved, or contextual — the last meaning related evidence exists but none of it directly bears on the element. Derived mechanically from what is mapped to that element, never asserted by a model on its own.
- elements[].evidenceRefs[]
- The link between an element and a source: relationship (supports / challenges / context) plus one sentence of reasoning.
- evidence[]
- Every source classified by tier (primary / reporting / commentary) and type (data / official / news / analysis / opinion / academic), with snippet, published date and archive URL.
- _meta
- executedTier, chargedPence, limitations, and a landscape block covering element states, source diversity, freshness and named gaps.
- _computed
- Ready-made analytics — tier and type distributions, corroboration groups, diagnostic values. Included by default; send compact: true to drop it and the evidence arrays.
- _manifest
- A signed hash of the landscape plus a verifyUrl. Null when manifest signing is not enabled on the deployment serving you.
_meta, abridged
"_meta": {
"executedTier": "quick",
"chargedPence": 7,
"limitations": [
"heuristic_classification", "no_api_sources", "no_coverage_recovery",
"no_factcheck_lookup", "reduced_query_breadth", ...
],
"landscape": {
"elementCount": 3,
"elementStates": { "supported": 2, "unresolved": 1 },
"sourceDiversity": { "uniqueDomains": 5, "typeCoverage": 3 },
"freshness": { "freshestDaysAgo": 2, "undatedCount": 1 },
"gaps": [{ "reason": "no_primary_sources" }],
"providerStatus": null
}
}limitations is the honest part
It is derived from the pipeline configuration rather than written by hand, so it cannot drift from what the tier actually skipped. A quick call returns eleven entries. A full call returns none. If you are served a cached analysis produced at a lower tier, cachedTier says so.
Field-by-field schemas for every endpoint live in the interactive reference, generated from the running API.
Limits, Errors, Webhooks
Rate limits
Applied per API key, not per IP — agents sharing a cloud IP do not interfere with each other.
POST /agent/full · /agent/batch | 5 / minute |
POST /agent/check · /agent/quick | 10 / minute |
POST /agent/lookup · GET /agent/result/* | 30 / minute |
GET /agent/health · /tiers · /me · /credits/balance | 60 / minute |
Pipeline endpoints also cap 5 simultaneous processing checks per key. Exceeding either limit returns 429 with a Retry-After header.
Errors worth handling
Every error returns JSON with a detail field. Four matter operationally: 402 means top up (/agent/credits/purchase); 429 means wait for Retry-After; 409 means an Idempotency-Key was reused with different parameters; 502 is a pipeline failure and refunds your credits, 504 is a timeout and applies no charge at all. Either way you are not billed for work that did not complete. The full code list is in the API reference.
Webhooks
Register a callback with your API key and skip polling. Up to 5 active webhooks per account; HTTPS and public addresses only.
curl -X POST https://api.trueight.com/api/v1/webhooks \
-H "X-API-Key: $TRU8_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/hooks/tru8",
"events": ["check.completed", "check.failed"]}'
# The response carries a signing secret, shown once. Store it.Payload shape
{
"event": "check.completed",
"timestamp": "2026-08-06T12:00:00Z",
"data": {
"checkId": "...",
"status": "completed",
"tier": "quick"
}
}Verify before you trust it
Each delivery carries X-Tru8-Signature: an HMAC-SHA256 hex digest of the raw body, keyed with your signing secret. Recompute it and compare before acting. X-Tru8-Event names the event.
Delivery is best-effort: 2 attempts with exponential backoff, and a webhook is deactivated after 10 consecutive failures. Make your handler idempotent — the same event may arrive twice. check.failed carries an error string in place of the tier, and its credits have already been refunded.
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 /agent/check. That one endpoint tries the cheapest route first and escalates only as far as max_tier allows, so a single call returns a structured evidence landscape at the lowest price that can answer it.
- 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, and gaps are named. It does not return a true/false verdict. We organise; you decide.
- Is there an MCP server for Claude and other AI agents?
- Yes, by three routes. Connect straight to the hosted server at https://api.trueight.com/mcp with no install, add it through the Smithery registry, or pip install tru8-mcp to run it locally over stdio. All three expose the same three tools against the same API.
- How are API calls priced?
- Calls are metered per request across four tiers — lookup, consensus, quick and full — billed from prepaid credits, and you are charged for the tier that actually executed rather than the one you requested. See the Tiers & Pricing section above for the current per-tier rates.
- How can an agent confirm a result has not changed?
- When a response carries a _manifest, its signed landscape hash can be re-checked at any time by calling GET /verify/{check_id}, a public endpoint that recomputes the hash from the stored data and reports whether it still matches.
- How long does a check take?
- Typically 15–90 seconds depending on the tier, because Tru8 retrieves and classifies evidence across the open web and specialist APIs rather than returning passages and a score. Cached and consensus routes return instantly.
Documentation
Both references are generated from the running API, so they cannot fall behind it.
Interactive API Docs
Swagger UI with all endpoints, request/response schemas, and try-it-out.
ReDoc Reference
Clean reference documentation with detailed type definitions.
New to the API? Read: why structured evidence research matters for AI agents →