VERDICT Public Research API
Structured, cryptographic, and epistemic programmatic access for investigative journalists, computational social scientists, legal scholars, and accountability audits.
1. Architecture & Base URLs
VERDICT provides a dual-surface API architecture designed with strict separation between public read-only verification data and the protected mutation pipeline.
http://127.0.0.1:8787
Default binding for the node research daemon. Serves local query resolution, adaptive web scraping, and research token-authenticated operations.
https://www.verdict.is-an.org/api
Public projection serving static immutable JSON snapshots, verified evidence manifests, and audited case bundles.
2. Authentication & Rate Limits
All standard retrieval routes (GET) and public community challenge submissions (POST /api/challenge) are unauthenticated.
| Tier | Header / Credential | Rate Limit | Allowed Actions |
|---|---|---|---|
| Public / Academic | None required | 60 requests / min / IP | Read cases, entities, evidence packets, archives, and submit challenges |
| Desk Researcher | x-research-token: <OSINT_RESEARCH_TOKEN> |
Governed by task budget (100 req/burst) | Execute automated research sweeps, ingest claims, record leads |
3. Epistemic Schemas & Classifications
Every claim and evidence packet returned by the API embeds strict epistemic state tags:
Supported directly by official statutory filings, gazettes, corporate registries, or signed charters.
Attributable public reporting from established news organizations with editorial oversight.
Public allegation or pledge with zero statutory bank records or official corroboration found in searched corpus.
4. Public Read Routes
GET /api/health
System heartbeat, node timestamp, and mutation lockdown state.
curl -s "http://127.0.0.1:8787/api/health"
// Response (200 OK)
{
"ok": true,
"service": "research-api",
"time": "2026-10-03T16:40:00.000Z",
"readOnlyMutationsDisabled": false
}
GET /api/search?q={query}&type={type}&state={state}
Full-text multi-kind search across investigations, entities, claims, relationships, funding, and events.
| Parameter | Type | Default | Description |
|---|---|---|---|
q |
string | "" |
Search keywords (matches titles, summaries, names, notes) |
type |
string | "all" |
Filter by record kind: case, entity, claim, relationship, event, funding |
state |
string | "all" |
Filter by epistemic state: documented, reported, alleged, refuted |
curl -s "http://127.0.0.1:8787/api/search?q=Cockroach&type=case"
// Response (200 OK)
{
"query": "cockroach",
"count": 1,
"records": [
{
"kind": "case",
"id": "case_abhijeet-dipke",
"slug": "abhijeet-dipke",
"title": "The Architecture of the Cockroach Janta Party: Political Past, Legal Funding, and Public Demands",
"status": "RESEARCHING"
}
]
}
GET /api/cases
Lists all active public accountability investigations with layer metrics.
curl -s "http://127.0.0.1:8787/api/cases"
// Response (200 OK)
{
"count": 1,
"cases": [
{
"id": "case_abhijeet-dipke",
"slug": "abhijeet-dipke",
"title": "The Architecture of the Cockroach Janta Party: Political Past, Legal Funding, and Public Demands",
"status": "RESEARCHING",
"claimCount": 6,
"sourceCount": 6,
"relationshipCount": 5,
"eventCount": 4,
"openQuestionsCount": 4,
"versionCount": 3
}
]
}
GET /api/cases/:idOrSlug
Fetches the complete investigative case bundle including connected claims, entity network, timeline events, funding ledgers, and open questions.
curl -s "http://127.0.0.1:8787/api/cases/abhijeet-dipke"
GET /api/evidence/:claimId
Fetches a First-Class Evidence Packet for a specific claim. Returns supporting evidence, primary sources, secondary corroboration, retrieval timestamps, cryptographic hash, and verification status.
curl -s "http://127.0.0.1:8787/api/evidence/claim_dipke_cjp_founding"
// Response (200 OK)
{
"claimId": "claim_dipke_cjp_founding",
"code": "CLM-001",
"claim": "Abhijeet Dipke is the publicly declared founder and convenor of the Cockroach Janta Party.",
"state": "documented",
"attribution": "Official Charter & Public Declaration (May 2026)",
"evidencePacket": {
"primarySourceId": "src_cjp_official",
"verificationStatus": "VERIFIED_PRIMARY",
"archiveUrl": "https://web.archive.org/web/20260915120000/https://www.cockroachjantaparty.org/",
"contentHash": "sha256-a1b2c3d4e5f60718293a4b5c6d7e8f90123456789abcdef0123456789abcdef0",
"lastChecked": "2026-10-03T04:40:00Z"
}
}
GET /api/sources/archive
Returns the Source Preservation Archive: immutable cold-storage snapshot URLs, original publication sources, and SHA-256 verification digests.
curl -s "http://127.0.0.1:8787/api/sources/archive"
GET /api/coverage
Dynamic research coverage index: sources swept, documents examined, claims verified, and explicitly declared investigative limitations.
curl -s "http://127.0.0.1:8787/api/coverage"
// Response (200 OK)
{
"summary": {
"sourcesSearched": 38,
"sourcesYieldingData": 24,
"documentsReviewed": 183,
"claimsExtracted": 6,
"claimsVerified": 5,
"openQuestionsCount": 4,
"contradictionsCount": 2
},
"epistemicRule": "No evidence found in searched corpus ≠ evidence does not exist.",
"totalEntitiesResolved": 10,
"totalSourcesPreserved": 6,
"activeCasesCount": 1
}
GET /api/entities/:id
Full entity dossier projection with associated claims, corporate relationships, financial interactions, and resolved aliases.
curl -s "http://127.0.0.1:8787/api/entities/person_abhijeet-dipke"
GET /api/research/contradictions
Real-time contradiction detection engine identifying statements, public pledges, and official records that cannot simultaneously be accurate.
curl -s "http://127.0.0.1:8787/api/research/contradictions"
5. Factual Challenge Submission
POST /api/challenge
VERDICT invites external researchers, subjects, and institutional representatives to challenge any published claim. Submissions enter a non-mutating analyst verification queue and log a cryptographic audit event.
| Field | Type | Required | Description |
|---|---|---|---|
claimId |
string | Yes | ID of the claim or case being challenged (e.g. claim_dipke_sibal_legal_fund) |
reason |
string | Yes | Specific explanation of factual error, date omission, or counter-evidence (min 5 chars) |
evidenceUrl |
string | Optional | Primary gazette link, court docket number, or archived order supporting the correction |
name |
string | Optional | Challenger's name or institutional affiliation |
contact |
string | Optional | Contact email for follow-up by the VERDICT ombudsman desk |
curl -X POST "http://127.0.0.1:8787/api/challenge" \
-H "Content-Type: application/json" \
-d '{
"claimId": "claim_dipke_sibal_legal_fund",
"name": "Bar Council Observer",
"reason": "Clarify that the fund was announced as pro-bono counsel commitments rather than a direct bank wire.",
"evidenceUrl": "https://delhihighcourt.nic.in/case-order/2026/...",
"contact": "observer@legalresearch.org"
}'
// Response (202 Accepted)
{
"ok": true,
"challengeId": "challenge_4fa2e1c9-7681-4235-862a-e6a6428c9462",
"status": "queued_for_review",
"message": "Challenge submitted to editorial review queue. Canonical data is protected and not directly mutated."
}
6. Autonomous Research Execution
POST /api/research/run
REQUIRES x-research-token
Autonomous micro-agent sweep running across official gazettes, corporate registries (MCA), Wayback archives, and social platforms under strict verification budgets.
curl -X POST "http://127.0.0.1:8787/api/research/run" \
-H "Content-Type: application/json" \
-H "x-research-token: $OSINT_RESEARCH_TOKEN" \
-d '{
"target": {
"canonicalName": "Sharjeel Imam",
"usernames": ["@sharjeel_imam"],
"organizations": ["Jawaharlal Nehru University"]
},
"question": "What public court filings and judicial statements are documented regarding bail hearings?",
"maxRounds": 3,
"taskBudget": 25
}'
7. Cryptographic Manifest & Tamper Protection
VERDICT uses cryptographic SHA-256 content addressing for every archived document. Before any web page or PDF is cited in an Evidence Packet, its body bytes are digested:
// Integrity Digest Verification Example
const crypto = require('node:crypto');
const fs = require('node:fs');
const rawDocument = fs.readFileSync('archive/2026-cjp-charter.html');
const hash = 'sha256-' + crypto.createHash('sha256').update(rawDocument).digest('hex');
console.log('Document Verified:', hash === packet.contentHash);
8. Terms of Use & Attribution
VERDICT data is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
"Source: VERDICT Public Accountability Desk (verdict.is-an.org), Investigation ID #[ID]."
VERDICT