Skip to content

Your agent gets a key.
You keep the signature

Connect a Claude or ChatGPT client to the MCP server, or call the same endpoints from your own code with a revocable key.

Base URL: https://app.orla.finance/api · Selling to machines? The integration API is the other door.

The one rule the API cannot be talked out of

An agent asks to pay.
A person releases it

  1. The agent writesPOST /agent/spaces/{id}/transactions

    # $API = https://app.orla.finance/api
    curl -X POST $API/agent/spaces/$SPACE/transactions \
      -H "Authorization: Bearer $ORLA_KEY" \
      -H "Idempotency-Key: 2026-03-28-hetzner" \
      -H "Content-Type: application/json" \
      -d '{
        "occurred_on": "2026-03-28",
        "amount": "-58.00",
        "currency": "EUR",
        "payee": "Hetzner",
        "category": "Hosting"
      }'
  2. Inside the budgetA write inside the budget lands as a transaction.

    Transactions
    • HetznerHosting · 28 Mar · by research-bot−€58.00Booked
  3. Outside it, or any paymentA write outside it, or any payment, comes back as a proposal id and waits on the Agents screen.

    Agents · waiting for you
    • Pay HetznerProposed by research-bot€58.00Proposal
    ApproveDecline

Four ways in

A connector,
the CLI, your own code, or a skill file

  • An MCP connector

    Add app.orla.finance/api/mcp in Claude, Cursor, VS Code, Zed or Windsurf and approve the space once; no key to paste.

  • The CLI

    For a script, a cron job, or a laptop that does the books on Sundays. Open source under MIT: npx orla-cli.

  • Your own code

    A bearer key over HTTPS, shown once and revocable on its own.

  • A skill file

    npx skills add cheetah-trade/orla-cli, or orla.finance/skill.md. One file teaches an agent both doors and where paying stops.

  • The other directionWebhooks: six signed events from the book to an address of yours, documented at orla.finance/en/webhooks.
  • What a grant carriesSpaces, a role in each, the accounts it may see, a daily payment cap and a write budget; yours to set.
  • The contract, for a machineorla.finance/openapi.json is the OpenAPI description of the agent endpoints below and of the integration API, cut to those two doors.

The tools

Agents can read and record.
Payments wait for a person

The MCP tool names and the HTTP endpoints are the same calls, computed against the grant at the moment of the call, never cached.

ToolEndpointWhat it doesNeeds a person
orla_whoamiGET /agent/meWhich spaces this key reaches, what it may do in each, and whether it is still observingno
orla_list_accountsGET /agent/spaces/{id}/accountsThe accounts the grant exposes, with balancesno
orla_list_categoriesGET /agent/spaces/{id}/categoriesThe categories of the space, for sorting rowsno
orla_list_transactionsGET /agent/spaces/{id}/transactionsTransactions, newest first, with the usual filtersno
orla_list_paymentsGET /agent/spaces/{id}/paymentsThe approval queue: every payment that is waiting for a person to sign itno
orla_book_transactionPOST /agent/spaces/{id}/transactionsRecord an income or an expense inside the daily write budget; a proposal while observingno
orla_amend_transactionPATCH /agent/spaces/{id}/transactions/{tx}Correct the category, payee or note, never the amount, date or account; while observing, a proposalno
orla_propose_paymentPOST /agent/spaces/{id}/paymentsPropose a payment the way the payee is already paid, and receive a pending payment idyes, always
orla_propose_onchain_paymentPOST /agent/spaces/{id}/chain-paymentsPrepare a crypto send to a trusted address, screened before it is built at allyes, always
orla_walletGET /agent/spaces/{id}/walletIts own float: addresses and what they holdno
orla_allowanceGET /agent/spaces/{id}/allowanceHow much it may still spend today: the daily ceiling, what is spent and left, the per-request ceiling, the hosts it may payno
orla_wallet_transferPOST /agent/spaces/{id}/wallet/transfersUSDT or USDC from its wallet to a trusted addressonly past its limits
orla_pay_for_resourcePOST /agent/spaces/{id}/x402Fetch a URL that answers 402, pay the quoted price from the wallet, return the contentno inside the ceilings
orla_cardGET /agent/spaces/{id}/cardThe agent's card: balance, last four digits, and the merchant rules and ceilings where the card carries any. A new card carries none, and its balance is the whole limitno
orla_card_detailsPOST /agent/spaces/{id}/card/detailsThe number, expiry, CVV and 3-D Secure password, handed over once. A second ask is refused until the owner saves the card's form again, and what was taken cannot be taken backthe owner arms it, per card
orla_card_codePOST /agent/spaces/{id}/card/codeThe latest one-time code for a payment that asks for 3-D Secure. Armed by the same switch and not rationed; when no code exists yet, the answer says so in wordsthe owner arms it, per card
orla_card_reveal_linkPOST /agent/spaces/{id}/card/revealA short-lived link to the issuer's own page with the number, expiry and CVV, for a card whose issuer has such a page. A new card has none, so the call is refused and orla_card_details is the wayno
HTTP onlyPOST /agent/spaces/{id}/grant-changeAsk for wider access; the fence is the owner's to move, so this waits in the queueyes, always
Rresearch-botAgent · Delivery
Today$18 of $40
Paid $6 to a data API, inside its limit

Over MCP only

The same grant behind them, and no HTTP twin yet.

orla_list_budgets, orla_set_budget
Each budget with what was spent against it; change one budget's amount, with the budgets permission.
orla_find_service
Search three catalogues for a service the agent could pay, with host, price, networks and source. It opens nothing: a host is paid only once the owner lists it.
orla_net_worth
What the space is worth right now in its base currency, naming whatever was left out of the sum.
orla_list_reports, orla_read_report
The assistant's reports, the list first, then one by name. Addresses come masked unless the grant says otherwise, and an agent limited to some accounts sees only their figures.
orla_split_balances, orla_list_shared_expenses, orla_add_shared_expense
Who owes whom in a shared space, the expenses behind it, and a new one divided between the people.
Five risk reads
orla_risk_alerts, orla_risk_counterparties, orla_risk_check, orla_risk_trace and orla_risk_case: open findings over a business space's payouts, what is known about a counterparty before paying it, and the hops the money took.
orla_risk_resolve
A person's verdict on a finding; a bot connection gets it with its own consent, a personal one never does.

What the key cannot buy

What the API refuses to do

Each of these is a rule in the code, not a default someone can change.

Refused

  • Releasing an approved paymentNever, by any agent.
  • Widening its own grantOnly as a proposal a person accepts.
  • Paying an address it read in a documentRefused: a send goes only to an address the space trusts.
  • Reaching a space you did not nameRefused, and nothing about that space is confirmed.
  • Seeing card numbers or IBANsMasked unless the grant says unmasked.
  • Its own card numberNot handed over unless the owner armed that card for it, and then once per arming.
  • A host that is not a hostnameA request to open a service is refused before it reaches the owner's queue unless it is a plain hostname; an IP, a wildcard, another port or a login in the address never gets there.
  • A fresh keyStarts observing: every write it tries becomes a proposal.

Practical

  • Rate limits120 calls a minute per agent, reads included.
  • IdempotencyAn Idempotency-Key header on every write, so a retry is safe.
  • ErrorsA code you can branch on, not prose.
  • ExpiryA grant can carry a date.
  • RevocationTakes effect on the next call.
  • The trailEvery call is in the audit log with the agent's name on it.

Write your first mandate
on a thirty minute call

On your own books: one position, one rule, and the first bill waiting for your button.