API & endpoints
Every way to consume Apeiris in one place — 654 controls across 12 domains and 308 cited normative sources, as machine-readable data, an agent interface, and a live verifier.
Access-Control-Allow-Origin: *, content-addressed by SHA-256 and pinned in a single signed manifest. Fetch it, verify it, cache it, build on it — no key, no gate. Base: https://apeiris.ai/integration/The mental model
Four kinds of thing, one consumption pattern (fetch → verify → use). Pick your entry point:
validation_objective), the evidence_required[], its blocking posture, and its framework crosswalks (each with fit + basis). → domain matricesproofmap.jsonStart here 1 call
The manifest is the index: counts, per-domain metadata + SHA-256, the artifact checksum map, the signature, and a usage block describing everything below.
Domain index · counts · per-artifact SHA-256 · Ed25519 integrity.signature · usage consumption guide.
curl -s https://apeiris.ai/integration/manifest.json | jq '{controls: .total_controls, domains: .total_domains, signed: (.integrity.signature != null)}'
Build on Apeiris for vendors
If you're building a GRC platform, an AI gateway, a scanner, or an agent framework, Apeiris is designed to be the knowledge layer you embed — vendor-neutral, versioned, and verifiable — so you don't maintain your own control taxonomy or crosswalks. Three patterns, all no-auth:
fit/basis), and evidence requirements inside your product. Pull them from the domain matrices; attribute to apeiris.ai. Your users get a maintained, citable control set you didn't have to author.gapmap.json, and map their framework obligations through proofmap.json — obligation → controls → required evidence → verdict + gap. Turn it into their in-product roadmap.apeiris-mcp server (42 tools, 6 groups). Your agent can traverse relationships, map a threat to controls, and cite provenance — without you shipping the data.A minimal, dependency-free client — fetch, verify the checksum, and read a proof chain:
// browser or Node 18+ — no SDK, no key
const BASE = "https://apeiris.ai/integration/";
const manifest = await (await fetch(BASE + "manifest.json")).json();
// 1) fetch a domain's controls, verifying the pinned SHA-256 first
const slug = "model";
const buf = await (await fetch(`${BASE}domains/${slug}-controls-full.json`)).arrayBuffer();
const hex = [...new Uint8Array(await crypto.subtle.digest("SHA-256", buf))]
.map(b => b.toString(16).padStart(2, "0")).join("");
const pinned = manifest.domains.find(d => d.slug === slug).sha256;
if (hex !== pinned) throw new Error("integrity mismatch — fail closed");
const controls = JSON.parse(new TextDecoder().decode(buf)).dataset.controls;
// 2) read a framework obligation's proof chain (evidence + verdict + gap)
const proof = await (await fetch(BASE + "proofmap.json")).json();
const iso = proof.frameworks.find(f => f.framework === "iso_42001");
const ob = iso.obligations[0];
console.log(ob.requirement_id, ob.verdict,
ob.proof_chain.map(c => `${c.id}: ${(c.evidence_required||[]).length} evidence`));
Point an MCP client at the read-only server (from the apeiris-control-core repo):
{
"mcpServers": {
"apeiris": { "command": "node", "args": ["adapters/apeiris-mcp/server.js"] }
}
}
manifest.usage.license), and validate against conformance.json so you handle the closed vocabularies and honor mapped ≠ satisfied. Agents can orient from /llms.txt.Controls 12
One matrix per domain. Each control carries validation_objective, evidence_required[], machine_tests[], frameworks[] crosswalks, threat.atlas (MITRE ATLAS provenance), blocking_effect, layer_code, and a stable canonical_id. Each frameworks[] mapping carries fit (direct/supporting/partial/adjacent), mapping_confidence, and basis — anchored (the cited id is validated against the framework's captured primary text in CI) or asserted (cited but not yet ingested as an anchor). Mapped ≠ satisfied: the crosswalk states a relationship; the evidence is what you produce.
domains/<slug>-controls-full.json 12 endpoints
# one control, fully curl -s https://apeiris.ai/integration/domains/security-controls-full.json \ | jq '.dataset.controls[] | select(.id=="IA-04")'
Sources & crosswalks
The normative sources behind the mappings, the framework crosswalks, and the captured anchors that make every citation verifiable.
MITRE ATLAS & the knowledge graph
Analytics
Generated, checksum-pinned views over the corpus. Regenerated deterministically; consumed by the analysis hub and the advisor.
Agent interface — MCP 1 server · 42 tools
One read-only MCP server, apeiris-mcp (stdio JSON-RPC), lets agents query the whole corpus through a single governed interface — 42 tools in six groups, two fail-closed integrity gates (manifest Ed25519 signature + per-artifact SHA-256), provenance on every reply. From the apeiris-control-core repo: · Full MCP reference →
npm run mcp # the whole corpus — ATLAS · graph · evidence · knowledge objects
ATLAS — MITRE ATLAS Q&A + how it maps to Apeiris controls:
| get_technique / get_mitigation / get_tactic / get_case_study | Fetch one ATLAS object by id (full detail + provenance). |
| search | Search names, descriptions, ids; results carry description snippets. |
| techniques_for_mitigation / mitigations_for_technique | The ATLAS-asserted links, resolved with detail. |
| version_diff / map_to_apeiris | Diff two ATLAS releases · which Apeiris controls reference an ATLAS id, and how. |
Graph — traverse the same graph the explorer loads:
| get_node | One node, hydrated with full corpus detail + url. |
| neighbors / shortest_path / query_graph | Adjacency (by edge type/direction), BFS path, typed multi-hop traversal — mapping edges carry framework+relation. |
Corpus — evidence + obligations:
| evidence_for_control | What evidence a control needs + how each item is verified, its objective and blocking effect. |
| proof_for_obligation / obligations_for_framework | The proof chain + gap for an obligation · every obligation of a framework with its verdict. |
| search_controls | Full-text search across all controls. |
Knowledge — neighborhoods, incidents, vendors, provenance:
| neighborhood_for_control | The full knowledge-object view: related controls, threats, real-world incidents, vendors, framework + evidence summary. |
| incidents_for_control / controls_for_incident | Map controls ↔ AI Assurance Incident Briefs (stage, why, evidence). |
| vendors_for_control / vendors_for_capability / controls_for_vendor | Curated vendors/products that address a control or capability — and the reverse (controls a vendor addresses). |
| source_info / describe_corpus / validate_corpus | Source provenance + currency · corpus self-description · a live integrity self-check (re-verify manifest signature + artifact SHAs). |
Reasoning — the decision layer (deterministic composition of the rehash analytics; states coverage, not compliance — mapped ≠ satisfied):
| explain_control | The full why chain: threats (ATLAS) → control → evidence → obligations → incidents → vendors → sources. |
| find_gaps | Ranked opportunities + unsupported / single-source / asserted-only obligations + thin threat coverage. |
| minimal_control_set | Set-cover plan for a framework (whatif.json) or the controls that defend a threat (threatcov.json). |
| simulate_failure | Remove a control / vendor / source → obligations that lose coverage, incidents uncovered, vendors that become sole path. |
| what_changed | Corpus release history (optionally since a version). |
Research — the AP-77 Research Extension Layer (corpus-generated, signed, reproducible research that references canonical objects by URI + hash — never copies operational data):
| list_research_claims | The published research claims — each a statement supported_by reviewed evidence. |
| get_research_statistic | A single statistic: its value + provenance (query, corpus version, manifest sha). |
| explain_statistic | The reproducibility trace for a statistic — how it re-derives byte-for-byte. |
| get_research_query | A research query definition — the exact question a statistic answers. |
| get_research_review | A claim's review: Cohen's κ / percent agreement + adjudication history. |
| list_research_papers | The synthesized research papers (sections, figures, bibliography projection). |
| get_research_finding | A synthesized finding — an interpretation supported_by a claim. |
| get_research_paper | A full paper + reproducibility package (pinned corpus / manifest sha + figure query hashes). |
Full per-tool request/response examples in adapters/apeiris-mcp/README.md.
Conformance & controlled vocabularies
One machine-readable contract for building on the corpus: the identifier grammar, every closed vocabulary you'll encounter (derived live from the data, so it's always accurate), what each value means, the integrity model, the evidence ontology, and the invariants a correct consumer must respect. Validate against it; treat a value outside a listed set as an error, not a default.
fit, basis, coverage, blocking_effect, normative_force, …), meanings, integrity model, evidence ontology, and consumer invariants — pinned + signed like every artifact.curl -s https://apeiris.ai/integration/conformance.json | jq '.controlled_vocabularies | keys'
Two invariants worth repeating. Mapped ≠ satisfied: a crosswalk states a relationship (its fit), not that the obligation is met — the evidence is what you produce. And basis tells you whether a citation is anchored (validated against the framework's captured primary text in CI) or asserted (cited, not yet machine-validated).
Verify integrity
Don't trust — recompute. Every artifact's SHA-256 is pinned; the manifest is Ed25519-signed.
# recompute a domain artifact's hash vs the manifest curl -s https://apeiris.ai/integration/domains/security-controls-full.json | sha256sum curl -s https://apeiris.ai/integration/manifest.json \ | jq -r '.domains[] | select(.slug=="security") | .sha256'