Org balance + recent transactions
Returns the org's ledger and available balances, accrued and current-month usage, monthly spend limit, minimum deposit, and up to 25 of its newest transactions. Provider payouts are left out of the transactions.
Required permission
Requires the usage.read permission. See Permissions for the roles and API key permissions that include it.
Command line
The orl CLI wraps this endpoint:
Guided workflow: orl balance
orl balanceorl billing balance getapiKeyAuthorizationBearer <token>OpenRelay API key. Send it as Authorization: Bearer or_… (legacy vl_… keys still work).
orgId*stringBalance
application/json- response
balanceCents*integerRaw ledger balance (deposits + credits − settled debits).
availableCents*integerSpendable balance = balanceCents − accruedUsageCents. This is what every control-plane billing gate checks. It includes pending compute and inference usage, can be below balanceCents while usage is running, and can be slightly negative between auto-recharge ticks.
accruedUsageCents*integerUsage cost not yet settled into a transaction: current-month compute, pending inference, plus any recently ended compute month whose settlement debit has not been written yet. This is the amount netted from balanceCents to produce availableCents.
currentMonthUsageCents*integerTotal compute plus inference usage in the current UTC calendar month, including inference already drained into the ledger and the live pending inference accrual. Use this for "spend this month" displays; use accruedUsageCents for balance math.
currentMonthComputeCents*integerCompute usage accrued in the current UTC calendar month.
currentMonthInferenceCents*integerInference usage in the current UTC calendar month: settled whole-cent inference debits plus whole pending inference cents. A fractional pending cent is intentionally omitted instead of inflating displayed spend.
pendingInferenceCents*integerWhole inference cents not yet drained into the ledger. Fractional cents remain in nanoUSD in the accrual and are omitted from this integer display value.
pendingInferenceReservedCents*integerPending inference reserved by balance enforcement, rounded up to the next cent. This can be one cent higher than pendingInferenceCents.
priorUnsettledComputeCents*integerCompute usage from recently ended months that is marked billable but whose settlement transaction has not been written yet.
monthlySpendLimitCents?integerThe org's monthly spend cap, or null if no limit is set. Drives the "used of limit" budget gauge in the dashboard.
minDepositCents?integerSmallest deposit the org can make right now, in cents: the flat $25 floor, raised to one hour of usage at the current burn while the org has open usage running, clamped to the org's per-deposit cap. This is the exact minimum the deposit endpoint enforces (INSUFFICIENT_RUNWAY on a lower amount), so clients should render it rather than re-derive it.
transactions*array<>curl -X GET 'https://api.openrelay.inc/v1/orgs/string/billing/balance'{ "balanceCents": 12550, "availableCents": 10430, "accruedUsageCents": 2120, "currentMonthUsageCents": 2120, "currentMonthComputeCents": 2000, "currentMonthInferenceCents": 120, "pendingInferenceCents": 20, "pendingInferenceReservedCents": 20, "priorUnsettledComputeCents": 0, "monthlySpendLimitCents": null, "transactions": [ { "id": "txn_01hzy3", "type": "stripe_deposit", "source": "stripe", "amountCents": 10000, "description": "Card deposit", "createdAt": "2026-06-28T14:03:22Z" } ]}Overview
Prepaid balance, saved cards, deposits, and auto-recharge: read the balance and recent transactions, save or remove cards, and top up from a saved card.
Start saving a card (Stripe SetupIntent) POST
Creates a Stripe SetupIntent to save a card and returns its client secret, the publishable key, and bankCheck, true when the bank must confirm the card. The inline Elements form confirms the client secret. The dashboard's card form sends its device identification and a Turnstile token as optional query parameters, and the card save is judged on them: a device that puts the account on a verification hold gets 403 ACCOUNT_PENDING_VERIFICATION, or 403 VERIFICATION_UNAVAILABLE when the hold could not be recorded. Anything else that looks wrong about the request or the account (no verified device, a missing or failed Turnstile token, a new account, a recent failed card, and more) asks the card's bank to confirm the card with 3D Secure, and bankCheck says so. The operation takes no request body, so a bare POST (the CLI, the MCP tool) still works and its card always needs the bank's confirmation. After stripe.confirmSetup succeeds, call the complete operation to learn whether the card was kept.