Check that every claim in an evidence bundle has enough independent, fresh, quote-verified support
Checks a bundle an agent assembled before answering: each claim must be backed by at least N evidence items from distinct source groups, each item's quote must actually appear in the supplied text (with offsets), publication dates must be within the caller's maximum age relative to a caller-supplied asOf, and duplicates are collapsed. Does not fetch URLs or judge whether a source is reliable or whether the quote supports the claim; source groups come from the caller or an approximate host reduction.
What you get
Catches unsupported or single-source claims before they are asserted. 100 claims and 300 evidence items per $0.005 call.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/evidence-bundle-check. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/evidence-bundle-check \
-H 'content-type: application/json' \
-d '{"claims":[{"id":"c1","text":"Revenue grew 12%.","minEvidence":2}],"evidence":[{"id":"e1","claimIds":["c1"],"url":"https://www.example.com/q3","publishedAt":"2026-10-01","text":"Q3 revenue grew 12% year over year.","quote":"revenue grew 12%"},{"id":"e2","claimIds":["c1"],"url":"https://news.example.org/a","publishedAt":"2026-10-02","text":"Analysts noted that revenue grew 12% in the quarter.","quote":"revenue grew 12%"}],"asOf":"2026-11-04","maxAgeDays":90}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
claims | array<object>; max 100 items | yes | Claims to support. |
evidence | array<object>; max 300 items | yes | Up to 300 items; 300000 characters of text in total. |
asOf | string; length 0..40 | no | Reference instant (ISO 8601) for age checks; required with maxAgeDays. The check never reads the clock. |
maxAgeDays | integer; 0..36500 | no | Evidence published longer ago than this (relative to asOf) is stale. |
requireQuotes | boolean | no | Evidence without a verifiable quote does not count as support. Default true. |
Example request body
{
"claims": [
{
"id": "c1",
"text": "Revenue grew 12%.",
"minEvidence": 2
}
],
"evidence": [
{
"id": "e1",
"claimIds": [
"c1"
],
"url": "https://www.example.com/q3",
"publishedAt": "2026-10-01",
"text": "Q3 revenue grew 12% year over year.",
"quote": "revenue grew 12%"
},
{
"id": "e2",
"claimIds": [
"c1"
],
"url": "https://news.example.org/a",
"publishedAt": "2026-10-02",
"text": "Analysts noted that revenue grew 12% in the quarter.",
"quote": "revenue grew 12%"
}
],
"asOf": "2026-11-04",
"maxAgeDays": 90
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
status | string; one of "pass", "fail", "unknown", "unsupported" | no | pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass. |
claims | array<object>; max 100 items | no | |
evidence | array<object>; max 300 items | no | |
witnesses | array<object> | no | |
versions | object | no | Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile). |
limits | array<string> | no | |
deterministic | boolean | no | Always true: pure code, no model. |
Pay and connect
Available through: x402 (USDC on Base), MCP. MCP clients reach it through the context-evidence-kit package.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent