Blame a resource and replay an event
List who touched a resource, most recent first, then rebuild one event with its Merkle proof.
ledger.blame
List who touched a resource, most recent first, then rebuild one event with its Merkle proof.
ledger.blamePut admission in front of your MCP servers, repositories, SaaS tools and cloud accounts. Every agent gets a lease or a reason – and you keep the lever to stop any of them.
Something changed on a shared resource and you want to know who touched it last. Blame walks the append-only ledger for it, and replay rebuilds one event.
The code reads the key from INTRAMEDIAL_KEY. Keep it in your shell or your secret store, never in a file you commit. Calls that need a signed-in person cannot use a key: the console makes them.
Send the exact resource. The match is equality on the event's resource or subject, never a text search, and the touches come back most recent first.
standing is graded from what was rebuilt.ledger.blameledger-blame
curl -sS -X POST https://api.intramedial.com/api/v1/acp/ledger/blame \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"resource": "repo:payments/main"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/ledger/blame", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
resource: "repo:payments/main",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/ledger/blame",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"resource": "repo:payments/main",
},
timeout=30,
)
print(res.status_code, res.json()){
"projection": "blame",
"resource": "repo:payments/main",
"events": [
{
"id": "evt_90c1",
"kind": "coordination.admission",
"actor": "did:web:acme.example:agent:release",
"at": "2026-10-31T22:04:11.000Z"
}
],
"lastTouch": {
"actor": "did:web:acme.example:agent:release",
"at": "2026-10-31T22:04:11.000Z"
},
"unknown": [],
"why": "resource or subject equals the given resource"
}Send the event id. It is rebuilt with a Merkle proof; a root that disagrees with the stored one strips the witness claims.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/ledger/replay \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "evt_90c1"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/ledger/replay", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
id: "evt_90c1",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/ledger/replay",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"id": "evt_90c1",
},
timeout=30,
)
print(res.status_code, res.json())Copied from: /docs/ledger-blame
The ledger is append-only and sealed under Merkle roots. The time on an entry is Intramedial's own clock, and a signed bundle can be checked offline with the published key.
Seal the audit log into a Merkle-rooted, signed bundle and check it offline with the published key.
ledger.bundles-snapshotInvoke the EU AI Act Article 12 export, then read the coverage report that maps the evidence you hold to controls and names the gaps.
compliance.packRead the callers the MCP gateway has seen, then sanction one as an identity or keep it tracked as a shadow.
mcp.shadowidentity.enrollOne short email when we add recipes to the cookbook. No other mail, and you can unsubscribe from any message.
No key or account: Try it on the coordination.admit module page runs the real kernel in your browser. Use a workspace key for your own workspace.