Portal
Documentation: all sections

Compliance mapping

A compliance audit pack is a signed, tamper-evident, content-free export of one agent run: every chained receipt, the head hash, the model lineage, the span, the anchor. This page covers the optional framework parameter, which adds a section mapping that pack's contents to the clauses an auditor actually asks about.

What this is, and firmly is not

It is a mapping of the evidence in one pack. Each mapped item cites the artifact in the pack that evidences it — a JSON path, a count, a hash — so a reviewer can check the claim against the same document rather than taking it on faith. Where an obligation is organizational rather than technical, or where Sable holds only part of the evidence, the item says so instead of claiming coverage.

It is not a certification, an attestation of compliance, or a legal opinion, and Sable is not an auditor or a notified body. No output of this endpoint means you comply with anything. The same disclaimer is embedded verbatim in every mapping, so it travels with the document rather than living only on this page.

Requesting one

curl -X POST "https://api.buildsable.com/v1/runs/$RUN_ID/audit?framework=eu_ai_act" \
  -H "Authorization: Bearer $SABLE_SESSION_TOKEN"

framework accepts eu_ai_act, soc2, or none (the default). With none, no mapping section is produced and the pack — including its signed manifest — is byte-identical to what it was before this parameter existed.

EU AI Act

ClauseCoverageEvidence cited from the pack
Article 12 — record-keepingevidencedreceipts[] (one signed, timestamped record per metered request), chain.head_hash and chain.manifest_sha256 for ordering and tamper evidence, and the public anchor when the run has one.
Article 13 — transparency to deployerspartially evidencedsummary.models and each receipt's model / engine: which system actually served each request. What the deployer was told about the system is outside Sable and is not evidenced.
Article 14 — human oversightpartially evidencedreceipts[].policy (the rule set and its hash that governed the call) and receipts[].guardrails (the detectors, their hash, and their content-free findings).
Article 15 — accuracy, robustness, cybersecuritypartially evidencedreceipts[].attestation where a call ran on the TEE-attested route, receipts[].content_fingerprint, and receipts[].context where retrieved context was declared.

Two of those deserve their plain-language version, because they are the ones easiest to overclaim:

Article 14. Sable records the constraints an agent operated under and proves they were applied. It does not implement human oversight. There is no human-in-the-loop step here, no review queue, and no approval gate. The oversight process is yours; the pack evidences the bounds you configured.

Article 15. A receipt does not evidence the accuracy of model output. What it evidences is integrity and provenance: what was submitted (by fingerprint), what served it, under which rules, and that none of it was altered afterwards. If you need output quality tracked over time, that is eval drift monitoring, and it is not part of a pack.

SOC 2

CriterionCoverageEvidence cited from the pack
CC6 — logical accesspartially evidencedEvery receipt was minted for a request authenticated by a scoped API key (spend caps, model allowlists, expiry, delegation depth), plus receipts[].policy and receipts[].guardrails where present. Organizational access control — who could mint the key, onboarding and offboarding, physical access — is outside Sable.
CC7 — system operationspartially evidencedPer-request outcome and timing, the tamper-evident chain, the anchor where present, and manifest_proof, one signature over the whole pack.
CC7.2 / model lineageevidencedsummary.models, and each receipt's signed model + engine — the "prove which model served this request" question, answered per request.

Absent evidence is reported as absent

If no call in the run ran on the attested route, the Article 15 item says receipts[].attestation: absent — these calls ran on the standard (non-attested) route. If the run has not been anchored yet, the anchor line says so. This is deliberate: a mapping that quietly omitted the gaps would be worse than no mapping, because it would read as coverage.

The mapping is signed

The pack's signed manifest gains two fields when a framework is requested:

Both are covered by the same signature as the rest of the manifest, so the mapping is exactly as tamper-evident as the receipts it cites. Verify it the way you verify anything else Sable signs:

curl https://api.buildsable.com/v1/receipts/verify \
  -H "Content-Type: application/json" \
  -d '{"receipt":"<manifest_proof.proof>","signature":"<manifest_proof.signature>"}'

Then recompute sha256 over the returned compliance_mapping section and check it against compliance_mapping_sha256 in the payload. A different evidence set produces a different digest, so a mapping cannot be swapped for a friendlier one without breaking the signature.