Open sourceThe verifier and the wire spec are public

Every agent. Accounted for.

Hard spend limits for AI agents, checked before any payment moves. And a record of every decision your auditor can verify on their own.

DecisionsSimulation
A shape drawn from this record’s SHA-256 hash.

research_agentOpenAI

$420.00

Per-request limit $500.00Approved
  • Agent is active
  • OpenAI is on the allowlist
  • Within the per-request limit
Hash
acd69e5e…9f950a14
Prev
d077c9f2…e7e821d6

Simulated agents. Real SHA-256, computed in your browser. No money moves.

Your agents can already spend money. Before they’re allowed to, your security review will ask two questions.

“What stops it from overspending?”

Cap

A hard limit, checked before the request reaches your payment rail. A persuasive prompt can’t change it.

“Can you prove what it did?”

Seal

Every decision, approved or blocked, sealed into a chain your auditor can re-verify offline.

Three things happen to every request.

Before your agent spends a cent, and long after the money has moved.

  1. Cap. Give every agent a budget it can’t talk its way around.

    Per-request, daily and monthly limits, vendor allowlists and an instant freeze, evaluated before the request reaches your payment rail. A clever prompt doesn’t change the policy.

    • Integer cents, no float drift
    • Fails closed
    • Freeze any agent instantly
  2. Seal. Every decision becomes a record. Including every no.

    Approved and blocked requests are appended to a hash chain. Each record carries the hash of the one before it, so a later edit, deletion or reordering breaks the chain at an exact, locatable record.

    • SHA-256 over RFC 8785 canonical JSON
    • Append-only
    • Blocks are recorded too
  3. Verify. Your auditor checks the math, not our word.

    Export a signed Agent Spend Audit Report. Ed25519 checkpoints and RFC 9162 Merkle proofs let anyone re-verify it offline, with independent verifiers in TypeScript and Python.

    Read the wire spec

Set the limit. Then try to get past it.

A working policy engine and SHA-256 chain, running in your browser. Nothing is sent anywhere and no money moves.

Policy playgroundbrowser sandbox · USD
Try
Your rules research_agent
$100$1,000

Allowed vendors: OpenAI, Anthropic

Decision ledger 4 records
Simulated spending requests with recorded decisions and integrity status
RecordVendorAmountDecisionIntegrity
0001OpenAI$420.00ApprovedRecorded
0002Anthropic$88.00ApprovedRecorded
0003OpenAI$640.00BlockedRecorded
0004Anthropic$120.00ApprovedRecorded

Every decision leaves a record.

Run an integrity check, then alter a record and check again.

This sandbox uses a local SHA-256 chain. The console runs the full engine with signed checkpoints.

Agent Spend Audit Reportv1

agent_42 · signed sample

Nine decisions.
One root hash.

9Decisions
7Sealed
2Blocked
Record chain
SHA-256
Signed checkpoint
Ed25519
Merkle proofs
RFC 9162
Verifiers
TypeScript, Python
Rootd45f95d8e7340ca4…f8e21954

From the downloadable signed sample. Example data.

The audit report

Proof that leaves with you.

One file holds the decisions, the chain, the signed checkpoint and the witness cosignatures. Your auditor doesn’t need an account, our servers or our word.

What a verified report shows

  • No recorded decision changed since its checkpoint
  • Blocked requests were recorded too
  • Checkpoints carry the witness quorum’s cosignatures

What it doesn’t claim

  • That a payment settled
  • That an approved purchase was a good idea
  • Any certification or compliance status

Split-view protection assumes at least one honest, reachable witness. Keep your own copies of trusted checkpoints.

A few lines between your agent and the payment.

Your payment provider still moves the money. Comptra decides first and records the outcome. A block is a normal response, not an exception.

Your agentComptraYour rail
Simulated rail
Default, no credentials
Stripe Issuing
Test-mode adapter
x402
Preview adapter
Your rail
One interface to implement
Explore the engine
import { Comptra } from 'comptra';

const comptra = new Comptra({
  apiKey: process.env.COMPTRA_KEY,
  baseUrl: 'http://localhost:8787'
});

const decision = await comptra.gate({
  agentId: 'research_agent',
  vendor: { name: 'openai' },
  amountMinor: 42000, // $420.00
  currency: 'USD'
});

if (!decision.allowed) {
  throw new Error(decision.reason);
}

// Only then, call your payment adapter.
Policy first. Payment second.SDK source

Questions before you build.

Does Comptra move or hold money?

No. Comptra evaluates spending policies and records decisions. Your payment provider handles execution and settlement. Comptra is not a bank and not a payment rail.

Which payment rails does it work with?

Comptra sits above the rail. The engine ships a simulated rail, a Stripe Issuing test-mode adapter and an x402 preview. A new rail is one adapter interface. Tell us which one you use.

Can I try it with my agent workflow?

Yes. Start with the playground above or run the open-source engine locally. Get in touch to scope your workflow, spending policies and deployment.

Where does it run?

The engine runs on Node today and includes a Cloudflare Workers entry point. Production key custody, such as a KMS or HSM, is scoped with each design partner.

Design partners, Vienna

What is your agent buying?

API credits, research data, a few hours of compute. Tell me what you’re building and where the spending needs a boundary.

Fabio JuranekFounder, Comptra

Used only to reply to your enquiry. Privacy policy