// AGENT PROVENANCE PLATFORM
Your agents report what they did. Every entry is SHA-256 hashed against the previous. If you record the chain head, you can verify later whether anything changed. Any edit to a past entry produces a different head — detectable by anyone who checks.
const BASE = "https://api.chainproof.ai/v1"; const h = { "Authorization": "Bearer cp_live_…", "Content-Type": "application/json" }; // 1. start a run const { run_id } = await fetch(`${BASE}/runs`, { method: "POST", headers: h, body: JSON.stringify({ agent_id: "agt_summarizer", trust_level: "high" }), }).then(r => r.json()); // 2. log an action await fetch(`${BASE}/runs/${run_id}/entries`, { method: "POST", headers: h, body: JSON.stringify({ entry_type: "action", action: { tool: "read_file", status: "completed" } }), }); // 3. verify chain integrity const proof = await fetch(`${BASE}/runs/${run_id}/verify`, { headers: h }).then(r => r.json()); // → { valid: true, entry_count: 1 }
// HOW IT WORKS
ChainProof wraps around your agent's existing workflow. No SDK required — plain HTTP and a Bearer token.
// FEATURES
Not a monitoring tool. Not an observability platform. ChainProof doesn't watch your agents — it notarizes what they report. The difference matters when someone asks you to prove it later.
// WHAT CHAINPROOF PROVES
ChainProof only knows what your agent tells it. That's not a limitation — it's the design. An external system that claims to independently verify agent behavior is guessing. ChainProof makes a narrower, harder guarantee.
Chain validity and run status are independent signals.
status: failed with a valid chain means the agent reported failure and nothing in the log changed since.
status: success with a broken chain means an entry was edited after it was written — by someone, somewhere.
ChainProof can tell you the second happened. It can't tell you who did it or why.
// QUICKSTART
Bootstrap a tenant, register an agent, run the full provenance cycle. No SDK needed — works with fetch, curl, or any HTTP client.
const BASE = "https://api.chainproof.ai/v1"; const headers = { "Authorization": `Bearer ${process.env.CHAINPROOF_API_KEY}`, "Content-Type": "application/json", }; // 1 ── register an agent const agent = await fetch(`${BASE}/agents`, { method: "POST", headers, body: JSON.stringify({ name: "summarizer", trust_level: "high" }), }).then(r => r.json()); // 2 ── start a run const run = await fetch(`${BASE}/runs`, { method: "POST", headers, body: JSON.stringify({ agent_id: agent.agent_id, trust_level: "high" }), }).then(r => r.json()); // → { run_id: "ba7d...", chain_head: "0000...genesis" } // 3 ── append a ledger entry const entry = await fetch(`${BASE}/runs/${run.run_id}/entries`, { method: "POST", headers, body: JSON.stringify({ entry_type: "action", previous_entry_hash: run.chain_head, action: { tool: "read_file", status: "completed" }, }), }).then(r => r.json()); // → { sequence: 0, entry_hash: "c1f9..." } // 4 ── complete the run await fetch(`${BASE}/runs/${run.run_id}/complete`, { method: "POST", headers, body: JSON.stringify({ status: "completed" }), }); // 5 ── verify the chain const proof = await fetch(`${BASE}/runs/${run.run_id}/verify`, { headers }) .then(r => r.json()); // → { valid: true, entry_count: 1, chain_head: "c1f9..." }
// PRICING
No seats. No per-user pricing. You pay for what your agents actually do.
// ROADMAP
ChainProof is API-first today — plain HTTP, no SDK required. Here's what's on deck.
cp.runs.create(), cp.entries.append(), cp.runs.verify() — the ergonomic API you'd expect. npm package in progress.httpx. Designed for LangChain, AutoGen, and custom agent frameworks.run.completed, run.failed, chain.broken, and scope.violation. HMAC-signed payloads, configurable per workspace.