Double-entry accounting your agents can rent.
A headless ledger over HTTP. Immutable entries, trigger-enforced invariants, instant reports. Pay per request with USDC on Base — no signup, no API key, no subscription.
$0.01/write · $0.002/read · USDC on Base
Why rent a ledger?
Real accounting, not a spreadsheet
Every transaction sums to zero across its entries. Every entry is immutable. SQLite triggers enforce these invariants — your agent can't accidentally break the books.
Pay with a header, not a signup
x402 micropayments mean your agent includes a X-PAYMENT header with a signed USDC transfer. No account creation, no API key, no monthly invoice. Pay for what you use.
Instant reports
Trial balance and general ledger on demand. Filter by date range or account. Your agent gets real-time visibility into its financial state without building reporting from scratch.
Capability tokens
Ed25519-signed JWTs with Reader, Writer, and Owner scopes. Give a sub-agent read-only access. Give a payment agent write access. Keep admin operations locked to the owner.
Reversals, not deletions
Made a mistake? Reverse a transaction. The original stays in the ledger with a full audit trail. No data is ever deleted — that's how real accounting works.
Machine-native
JSON in, JSON out. No web dashboard, no UI, no human-facing chrome. Built for agents that need accounting primitives — expense tracking, settlement, revenue recognition.
Pricing
Pay per request. No signup. No minimum. USDC on Base.
| Operation | Price | Endpoints |
|---|---|---|
| Write | $0.01 | POST accounts, POST transactions, POST reverse |
| Read | $0.002 | GET accounts, GET transactions, GET reports |
| Capability token auth | Included | All endpoints (bypasses x402) |
Capability token holders skip x402 — useful for agents with standing access.
x402 is for pay-as-you-go agents that don't want credentials.
API surface
# Accounts
POST /ledger/accounts Create account
GET /ledger/accounts List accounts
GET /ledger/accounts/{id} Get account + balance
PATCH /ledger/accounts/{id} Update account
# Transactions
POST /ledger/transactions Post balanced transaction
GET /ledger/transactions List transactions
GET /ledger/transactions/{id} Get transaction + entries
POST /ledger/transactions/{id}/reverse Reverse a transaction
# Reports
GET /ledger/reports/trial-balance Trial balance
GET /ledger/reports/general-ledger General ledger
# Auth
POST /capabilities Mint capability token
GET /capabilities List tokens
DELETE /capabilities/{jti} Revoke token
# Discovery
GET /health Service health
GET /.well-known/x402 x402 payment info
x402 payment flow
# 1. Agent calls the API without payment
GET /ledger/accounts
# 2. Server returns 402 with payment requirements
HTTP 402 Payment Required
X-Payment: {"x402Version":1,"accepts":[{
"scheme":"exact","network":"base",
"maxAmountRequired":"2000",
"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo":"0xeBe2B021a91758d52Cb5fC6BE9D651357Cb30664"
}]}
# 3. Agent signs a USDC payment and retries
GET /ledger/accounts
X-PAYMENT: <signed payment payload>
# 4. Server verifies, serves response, settles
HTTP 200 OK
[{"id":1,"name":"Operating","type":"asset","balance":5000}]
Accounting for autonomous agents.
No software to install. No dashboard to learn. Just HTTP and USDC.