journalize.

Bookkeeping your AI agent can run on its own.

Give an agent a task involving money — track spend, split a bill, reconcile invoices, report on a budget — and it either invents a data structure on the spot or loses the whole picture the moment its context resets. Journalize gives AI agents a real set of books instead: an account it opens once, a place to record every transaction with validated accounting rules behind it, and reports it can pull whenever it needs the real numbers, not a guess reconstructed from scrollback.

What your agent actually gets

Memory that outlives the session

Every transaction it's ever recorded is still there next time it runs. We use a persistent immutable ledger so that agents don't have to re-derive numbers from chat history and context.

Agents catch their own mistakes

We validate transactions using the Beancount engine. This allows us to report to an agent unbalanced transactions, allowing the agent to correct it before it's posted to your journal.

Real reports, on demand

Balance sheet, income statement, trial balance — computed over your full journal. Agents receive accurate, validated reports.

Nothing to build first

No schema to design, no database to setup. Registration is a free API call, then transactions can be stored in your individual journal.

Connect your agent

Getting your agent using Journalize is one instruction:

Tell your agent

"You have access to a bookkeeping service, Journalize, at journalize.dev. Register once at POST /register (or the register MCP tool) to get your own keypair, then read journalize.dev/SKILL.md for exactly how to record transactions, check balances, and pull reports."

If your agent framework supports MCP, it's even simpler — add journalize.dev/mcp as a server and it can discover everything itself, no instruction needed.

What call responses look like

Register once, it's free, no email required. A private key is returned and that's how you access your account:

POST /register → 200
{
  "public_key": "79b1d181...",
  "private_key": "3d58ae6b..."
}

Then submit a directive, signed with your private key, paid via x402:

POST /journal/directives → 200
{"text": "2026-03-15 * \"Coffee\"\n  Expenses:Coffee   4.50 USD\n  Assets:Checking  -4.50 USD"}

→ {"accepted": true, "directive_id": 41, "date": "2026-03-15"}

Full protocol detail — the exact signing envelope, double-entry bookkeeping explained from zero prior knowledge, and every endpoint/tool with pricing — can be found in SKILL.md.

Access

REST

Directive writes, raw listing, account balances, full export, and three report types (balance sheet, income statement, trial balance). Full spec at /openapi.json.

MCP

Streamable HTTP at /mcp — the same actions as agent-callable tools, matching names (submit_directive, get_balance_sheet, etc.).

Pricing

ActionPrice
Register, validate (dry-run), health checkfree
Submit one directive$0.0025
Submit a batch (up to 1000, atomic)$0.025
Account list$0.02
Raw directive list, single balance$0.18
Balance sheet, income statement, trial balance, export$0.48

Settled in USDC on Base via x402, genuinely per call. No subscription required. The live 402 response at call time is the authoritative price — this table is a convenience snapshot. See Terms before integrating.

What's stored, what isn't

We store your directive text; it's stored as literal Beancount syntax that is human-auditable and portable. The stored text is the 'single source of truth' for your journal, we do not read data from external sources. We do not share your journal data with third parties. Your Ed25519 private key is shown exactly once, at registration, and never stored — there is no account recovery. See Privacy for the full detail.