Intramedial is in restricted beta. At sign up or sign in, you have to provide the beta tester password you received or request one at preview@intramedial.com. Thank you.
Loading…
ledger-bundles.snapshotModule 49
Plane module
Signed evidence bundles
Seal your workspace's audit chain into a signed bundle an auditor can check offline, against a key published for anyone to read.
ledger-bundles.snapshot signs a range of the audit log with a per-jurisdiction key and returns the bundle. The matching public key sits at a well-known JWK endpoint, and the same code verifies it on the public route and offline, so a check never depends on asking Intramedial.
Agents act when the plane says yes, and the record says why.
Put 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.
StatusBitcoin anchoring is checked against the block header
The public /ots/verify route re-executes the proof's op tree from the anchored digest and compares the derived Merkle root with the named block's header. A tampered op tree naming a real block is rejected. It proves the digest existed by that block, not what the digest stands for. The block's Merkle root comes from one public Bitcoin API; the header's proof-of-work and a minimum confirmation depth are not checked, and notVerified says so.
Record
The record
What gets recorded
bundleId
The bundle's own id.
jurisdiction
The region whose signing key sealed this bundle.
rangeStart
The start of the sealed range, or unset when the snapshot started from genesis.
Which published key signed the bundle, matched against the well-known JWK set.
ed25519Signature
The signature over the bundle's canonical form.
otsProof
null until the daily anchor cron confirms a Bitcoin block for this bundle's super-root.
Mechanism
Step by step
How it works
A snapshot is requested
POST /api/v1/ledger-bundles/snapshot with an optional scope, rangeStart and rangeEnd; omitting the range captures the whole audit history to date, not an incremental one.
The chain is sealed and signed
Audit-log rows in range are hashed into a Merkle root and signed with the Ed25519 key for the request's jurisdiction; with no key provisioned for that region, the request answers 503 rather than signing with the wrong key.
The public key is already out there
GET /.well-known/ledger-bundles-keys.json serves the JWK set with no authentication, so a bundle's signature can be checked without contacting Intramedial again.
A super-root anchors to Bitcoin later
A daily cron batches pending bundles' roots into one super-root, submits it once to OpenTimestamps, and later records the Bitcoin block once the proof confirms.
Try it
Live demo
Run it from this page
POST/api/v1/ledger-bundles/snapshot
{}
This module's calls change real state or reach outside services, so the shared demo does not run them. Sign in to run it in your own workspace. ledger-bundles.snapshot docs
Responses
This module's calls change real state or reach outside services, so the shared demo does not run them. Sign in to run it in your own workspace.
Code
Live example
A real request
A request in the shape the API accepts, and an example response in the shape the module returns.
An auditor downloads a bundle and the published key, and verifies the signature and the record count themselves, with no call back to Intramedial.
Sealing a quarter's worth of audit history
A workspace snapshots its audit log at quarter end, naming the range explicitly rather than letting a default snapshot recapture everything from genesis again.
Signature now, Bitcoin proof later
The signature is checkable the moment the bundle is issued; the Bitcoin anchor confirming its timestamp lands later, once the daily cron's proof clears.
Knowing what the online check covers
A security reviewer reads the /ots/verify response's verified: "merkle_path_to_block_header" field and knows the op tree was re-executed from the digest and matched the block header's Merkle root. A bare calendar timestamp needs digestSha256 sent with it.
When to use something else
Snapshotting the coordination ledger ledger.blame reads. Bundles seal the region's separate audit_log table, a different trail entirely.
An incremental, since-last-time snapshot. Omitting a range captures the full history to date, every time.
Free-tier use. Per-snapshot creation needs a paid plan; the free tier is pointed at the Tops chain instead.
Evidence
Guarantees
What it does, and what it does not
A module is a strong claim about a narrow thing. Rely on it for exactly what it is.
It does
A bundle's signature verifies against the published JWK set using only the bundle and that key, with no further call to Intramedial.
The same verification code runs in the public /verify route and the offline verifier package, so the two cannot silently drift apart.
A snapshot request with no key provisioned for its jurisdiction is refused with 503, never signed with a key from the wrong region.
It does not
That a pending bundle's timestamp is anchored to Bitcoin yet; otsProof stays null and the response never fabricates a confirmation.
That the anchored digest belongs to any particular Intramedial artifact; /ots/verify proves the digest existed by the attested block, nothing about what it stands for.
That the Bitcoin block itself is genuine: /ots/verify takes the block's Merkle root from one public API (Blockstream) without checking proof-of-work or confirmation depth.
That an agent calling the MCP action can set rangeStart, rangeEnd or . Its schema only exposes ; those fields reach the REST worker only from the dashboard's own client.
Details
Build notes
Before you build
Two Merkle systems, not one
This module's domain-separated binary tree over audit-log rows is a separate implementation from the coordination ledger's batching in ledger.blame; the two should never be described as the same mechanism.
Tier gates creation, not verification
Free workspaces cannot create a snapshot; Starter and above can buy one per snapshot, Pro adds a daily auto-anchor subscription, and Enterprise includes it. Verifying a bundle anyone holds is free on every tier.
No coordination.* action id
This module's MCP actions live in their own contract file outside contracts/src/actions/coordination.ts, so none of them are listed as coordination.* actions here.
Limits and metering
With no rangeStart, a snapshot captures the entire audit history from genesis, which can be large on an old workspace.
A snapshot needs a signing key provisioned for the request's jurisdiction; without one, it answers 503 rather than borrowing another region's key.
Creating a snapshot needs a paid plan; the free tier cannot call this route.
Access
API & MCP
REST and MCP
Authenticate with a workspace API key as a Bearer token. The base URL is https://api.intramedial.com.
REST endpoints
POST/api/v1/ledger-bundles/snapshotSeal and sign a range of the audit chain.
GET/api/v1/ledger-bundles/anchorsList the Bitcoin anchor proofs recorded for this workspace's bundles.
GET/api/v1/ledger-bundles/verify-chainCheck the audit chain's own hash-link integrity, free and unmetered.
MCP actions
This module has no MCP action. Call it over REST from any agent or program.