Integration

API & endpoints

Every way to consume Apeiris in one place — 605 controls across 12 domains and 300 normative sources, as machine-readable data, an agent interface, and a live verifier.

The API is the data. There is no hosted REST service to authenticate against or rate-limit around. Every artifact is a static JSON file served read-only over HTTPS with 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:

1 · Controls — what to proveOne matrix per domain. Each control states its pass/fail claim (validation_objective), the evidence_required[], its blocking posture, and its framework crosswalks (each with fit + basis). → domain matrices
2 · Proof Map — whether an obligation is met, and with what evidencePer framework obligation (EU AI Act, ISO 42001, NIST AI RMF, DORA, SR 26-2): the addressing controls, each one's required evidence, the verdict, and the partial-coverage gap. → Evidence Proof Map · proofmap.json
3 · Graph & ATLAS — how it all relates, for agentsThe knowledge graph (typed nodes + provenance edges) and the pinned MITRE ATLAS model, both queryable read-only over MCP. → Graph Explorer · MCP servers
4 · Manifest & verifier — how you know it's authenticOne signed index over everything; recompute the hashes and check the Ed25519 signature yourself. → Verify integrity · conformance.json

Start 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.

GET /integration/manifest.jsonGET

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:

Ship the vocabularyRender the controls, framework crosswalks (with 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.
Answer "are we covered?"Join your customer's declared stack to gapmap.json, and map their framework obligations through proofmap.json — obligation → controls → required evidence → verdict + gap. Turn it into their in-product roadmap.
Give your agent the corpusPoint your MCP client at the two read-only servers (graph + ATLAS). 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 servers (from the apeiris-control-core repo):

{
  "mcpServers": {
    "apeiris-graph": { "command": "node", "args": ["adapters/graph-mcp/server.js"] },
    "apeiris-atlas": { "command": "node", "args": ["adapters/atlas-mcp/server.js"] }
  }
}
Attribution & conformance. Building on the corpus asks two things: attribute to Apeiris — apeiris.ai (also stamped in 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 basisanchored (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
GET /integration/domains/security-controls-full.jsonSecurity · 53 controls
GET /integration/domains/model-controls-full.jsonModel Assurance · 57 controls
GET /integration/domains/privacy-controls-full.jsonPrivacy · 49 controls
GET /integration/domains/compliance-controls-full.jsonCompliance · 48 controls
GET /integration/domains/identity-controls-full.jsonIdentity · 52 controls
GET /integration/domains/agentic-controls-full.jsonAgentic · 50 controls
GET /integration/domains/ethics-controls-full.jsonEthics · 50 controls
GET /integration/domains/resilience-controls-full.jsonResilience · 48 controls
GET /integration/domains/finance-controls-full.jsonFinance · 48 controls
GET /integration/domains/authority-controls-full.jsonAuthority · 53 controls
GET /integration/domains/knowledge-controls-full.jsonKnowledge · 49 controls
GET /integration/domains/data-controls-full.jsonData Governance · 48 controls
# 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.

GET /integration/source_registry.json300 normative sources — publisher, version, jurisdiction, canonical_url
GET /integration/aisvs_coverage_matrix.jsonAll 191 OWASP AISVS requirements mapped (93 direct / 98 partial)
GET /integration/coverage/<framework>_coverage.jsonPer-framework coverage: eu_ai_act, iso_42001, nist_ai_rmf, sr_26_2, dora
GET /integration/anchors/<framework>.jsonCaptured real taxonomy (ids/titles/edition) per framework — the citation-fidelity backbone
GET /integration/references/Human-readable source reference index

MITRE ATLAS & the knowledge graph

GET /integration/atlas/atlas-model.jsonNormalized, pinned MITRE ATLAS (tactics/techniques/mitigations/case-studies + links)
GET /integration/graph/graph.jsonTyped nodes + provenance-carrying edges — explore at /graph/

Analytics

Generated, checksum-pinned views over the corpus. Regenerated deterministically; consumed by the analysis hub and the advisor.

advisor.json · gapmap.json · threatcov.jsonAdvisor data · capability→control gap index · threat/ATLAS→control coverage
proofmap.jsonEvidence proof chains: every framework obligation → addressing controls → each control's validation_objective + evidence_required + fit/basis → verdict + gap. Rendered at /integration/proof/
evidence_map.jsonMachine-checkable evidence-artifact map: each control's evidence_required[] typed as {evidence_type, verification} — automated / third-party / human / attested. 2637 items; ~25% machine-collectable.
coverage_matrix.json · leverage.json · value.json · depth.jsonSource × domain coverage, value tiers, and per-domain depth
federation_dag.json · dependency.json · regposture.json · fwcombo.jsonAttestation DAG, blast-radius, regulatory posture, framework combinations

Agent interface — MCP 2 servers

Two read-only MCP servers (stdio JSON-RPC) let agents query the corpus through one governed, checksum-verified interface — every response carries provenance. From the apeiris-control-core repo: · Full MCP reference →

npm run atlas:mcp     # MITRE ATLAS knowledge base
npm run graph:mcp     # the knowledge graph

atlas-mcp — MITRE ATLAS Q&A + how it maps to Apeiris controls:

get_technique / get_mitigation / get_tactic / get_case_studyFetch one ATLAS object by id (full detail + provenance).
searchSearch names, descriptions, ids; results carry description snippets.
techniques_for_mitigation / mitigations_for_techniqueThe ATLAS-asserted links, resolved with detail.
version_diffStructured diff between two ATLAS release tags.
map_to_apeirisWhich Apeiris controls reference an ATLAS id, and how.

graph-mcp — traverse the same graph the explorer loads:

get_nodeOne node, hydrated with full corpus detail + url.
neighborsAdjacent nodes, filterable by edge type / direction.
shortest_pathBFS path between two nodes.
query_graphTyped multi-hop traversal following given edge types.

Full per-tool request/response examples in the adapter READMEs (adapters/atlas-mcp, adapters/graph-mcp).

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.

GET /integration/conformance.jsonVocabularies (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.

/integration/verify/Live in-browser: recomputes every checksum + verifies the signature
GET /integration/keys/manifest-signing-ed25519.pub.jsonThe Ed25519 public key (trust anchor)
# 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'