Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Top up

How to add credit to a workspace, from the dashboard or with the top_up tool, and what the rate limits and error reasons mean.

Top-ups are paid on Stripe’s hosted Checkout page. looot never sees your card, and an agent never enters card details.

From the dashboard

Open looot.ai/usage?top_up=1, pick an amount, pay. This is the one path a person uses directly; it is also the only way to start a session with a dashboard owner or admin login.

From an agent

An agent token cannot open a Stripe session directly. It gets a link instead:

top_up { "amountUsd": 25 }
looot balance
# read topUpLink.checkoutUrl or topUpLink.dashboardUrl from the output

The top_up tool returns a Checkout link for the customer to open and pay on. amountUsd is optional; without it, looot suggests an amount: at least the minimum, at least the shortfall rounded up to the next $10, and at least five times what the run you are about to make would cost, capped at the maximum. GET /v1/balance (and the balance tool’s topUpLink) also carries a checkoutUrl once a session is open, so you do not always need to call top_up first.

Reuse and rate limits

Asking again for the same amount within 10 minutes returns the same pending session. No new one opens. A workspace can open at most 3 new sessions per hour. The minimum and maximum are shown on the dashboard’s form and in the top_up tool’s answer.

Errors

Code Meaning
top_up_amount_out_of_range Below the minimum, or above the maximum. Call top_up with at least minimumUsd, or without an amount.
top_up_unavailable No payment link for this workspace right now. Give the person the dashboardUrl from the answer. The reason can be billing_disabled, operator_workspace, read_only_token, rate_limited, checkout_failed, stripe_timeout or balance_sufficient.

After you top up

Credits land on your balance once Stripe confirms the payment, not the moment Checkout opens. After paying, run the call again with a new idempotency key; the run refused for insufficient_balance keeps its old key and is not automatically retried.

Was this page helpful?