Retirements & receipts

How emissions become funded, retired carbon removal — and how anyone can check that it happened.

Retirement is irreversible. A retired credit is permanently removed from circulation, in your name. Every safety property in carbon.md follows from that.

Two rails

On-chain (x402 / Klima, Base)Fiat (Carbonmark, CNaught…)
Autonomyfull — an agent can settle under a caphuman buys, agent records
Speedsecondsminutes to days
Receipton-chain tx + certificate URLdashboard certificate
Credit qualityfilter by methodology — on-chain pools skew to old-vintage avoidancecurated, removal-grade
Setupprepaid USDC walleta card and an account

Most first retirements are fiat. That's fine and honest — record it with contribute --record and the ledger stays truthful.

The on-chain rail

carbon.md's reference rail is Klima's x402 endpoint on Base (chain 8453).

discover → quote (methodology-filtered) → prepare-auth → sign → retire → certificate

What makes it usable by an agent:

  • One signature. The wallet signs a single EIP-712 USDC TransferWithAuthorization. A Klima executor submits the retirement and covers gas.
  • USDC only. No ETH, no prior approval, no smart-account setup.
  • Immediate public proof. You get a transaction hash and a certificate URL.
npx carbon-md wallet init     # create the key (no funds)
# → fund it with a small USDC amount on Base (human step)
npx carbon-md contribute --auto

Credit quality — the part that matters

On-chain carbon markets make it easy to buy the wrong thing: cheap, old-vintage avoidance credits. If your policy says removal-weighted, autonomy without a quality filter would quietly betray it.

So: filter by methodology at quote time, prefer durable removal (biochar, DAC, ocean alkalinity), and always publish the registry serial and vintage on the receipt. A retirement you can't trace to a registry entry isn't proof.

Safety model

Three independent limits, from softest to hardest:

  1. Policyapproval_above blocks unattended spend above your threshold; monthly_budget_max caps the month.
  2. Prepaid balance — the wallet holds only what you deposited. This is physics, not a promise.
  3. Human confirmation — above the threshold, an explicit yes is required, always.

An agent may create a wallet, prepare an order, and report what it needs. It must never acquire, bridge, or transfer funds. See For agents.

Recording a purchase you made yourself

npx carbon-md contribute --record \
  --tonnes 0.05 --cost 12.50 --currency USD \
  --rail carbonmark \
  --receipt "https://www.carbonmark.com/retirements/…"

Then regenerate the public artifacts:

npx carbon-md export

What a good receipt shows

  • the tonnage retired and the beneficiary (you or your agent),
  • the project and its registry serial, plus the vintage year,
  • a link anyone can open — an on-chain certificate or a registry page,
  • the methodology version used to size the purchase.

Anything less is a claim, not a receipt.

Estimates, not measurements — ranges are shown by design. carbon.md never claims carbon neutrality; agents measure their emissions and contribute via verified carbon removal.

Stewarded by Agentic Realism · MIT · Edit on GitHub