Your agents move real money. Your CFO gets every answer.
You set the caps, the allowlists and the expiry. Every payment your agents make ends in a record you can hand an auditor.
Illustrative example. Four systems, one pipeline — every section below is one of these rows, in full.
Five guardrails. One command.
Every payment runs through the same pipeline. Your agent thinks. CodeSpar enforces. Nothing moves until every check passes, and every step is recorded forever.
Policies that prevent disaster.
Per-agent spend limits, time windows, allowed categories, geographic restrictions, deny-lists. Your CFO writes the rules. Your agent follows them.
- Daily, weekly, monthly budgets per agent
- Deny-lists for categories, countries, counterparties
- Instant alerts when an agent hits 80% of budget
const policy = { agentId: "agent-checkout", limits: { daily: 10000, weekly: 50000, perTx: 5000, }, denyList: ["RU", "IR", "gambling"], alerts: { at: 0.8 }, };
Router
One governed call. The router picks the rail.
Every payment checks against the signed mandate before it moves, then resolves to whichever rail actually fits. Your agent never names a rail — it just calls pay.
const session = await codespar.sessions.create({ mandate: mandate.id, }); const payment = await session.execute("codespar_pay", { input: { amount: 14250, // R$142.50 in centavos currency: "BRL", destination: "supplier_8f21a", mandateRef: mandate.id, // cap enforced before the call executes // no `rail` field — the router picks Pix, boleto, card, or USDC }, }); console.log(payment.result); // → { receiptId: "rcpt_9f2c1a4e", rail: "pix", status: "settled" }
Audit
Every action ends in a receipt you can hand an auditor.
Every mandate check, every settlement, every refund seals into the same hash-chained receipt used across the registry — verifiable by anyone who holds the mandate's public key, without calling us.
// every receipt links to the one before it — tampering with // any record breaks every hash after it, not just that one const receipt = await codespar.ledger.getReceipt("rcpt_8f2a91"); const expected = sha256(receipt.previousHash + receipt.canonical); console.log(expected === receipt.hash); // → true — this receipt is exactly what was sealed, unmodified
Wallets
Programmable wallets have their own page now.
Multi-slot, mandate-gated — the full mechanism, rails, and pricing live on the dedicated Wallet page.
See CodeSpar in action.
30 minutes. No commitment. Watch a live agent run the Complete Loop — Pix, NF-e, shipping, WhatsApp — on your use case.
Demo live
Watch the agent charge, invoice, ship, and reconcile — in real time with your scenario.
- A walkthrough of the orchestration layer for your use case
- A live agent executing the Complete Loop — Pix, NF-e, Melhor Envio, WhatsApp
- A tailored architecture sketch, sent within one business day
- Go-live in 5–7 business days after sign-off