Paying via SBP (Faster Payments System): step by step
SBP is the fastest way to top up a balance without entering card details. Here is the full path from the dashboard to bank app confirmation, and the usual places a payment can stall.
5 min · · Updated · payments
SBP (Russia's Faster Payments System) is the quickest of the four top-up methods on zukko.pro: no card number to type, the payment goes straight from a banking app. Here is the full path, step by step, and the places it usually gets stuck.
What you need beforehand
A Russian bank account enrolled in SBP (enabled by default at most major banks) and that bank's app installed on a phone you can use to confirm the payment. The laptop and the phone do not need to be the same device — you can start the payment in a browser on a computer and confirm it in the bank app on your phone.
Steps
- Open your dashboard and go to /app/payments.
- Select "SBP" as the payment method.
- Enter the top-up amount in dollars (minimum $1) — the SBP charge goes through in rubles at the market rate at the time of payment.
- The system generates an SBP link or QR code. On a computer, scan the QR code with any banking app's camera (it does not have to be the bank where your account is — SBP works across banks). On a phone, the link opens a list of banks; pick yours.
- Your bank's app opens a confirmation screen showing the amount and recipient. Check the amount before tapping "Confirm" — if it does not match what you entered in the dashboard, cancel and start over rather than confirming blindly.
- After confirming in the bank app, you are usually returned to the dashboard automatically; if not, simply refresh the dashboard tab.
Where SBP typically stalls
The link opens but your bank is not in the list. Not every bank supports the link-based flow equally well — if yours is missing when opening the link on a phone, use the QR code instead and scan it through the "Pay by QR" section inside the bank app directly, bypassing the automatic bank list.
The session expired. Payment links and QR codes have a limited lifetime. If more than a few minutes pass between opening the link in the dashboard and confirming it in the bank app, it is safer to go back to /app/payments and generate a fresh payment than to try confirming a stale session.
The bank app will not open from the link on a computer. That is expected — a deep link into a banking app only works on the device where that app is installed. On a computer, use the QR code instead of the link itself.
The payment went through but the dashboard balance did not change. The dashboard can lag the actual credit by a few seconds. Check the balance directly through the API instead of trusting the page's visual state:
curl https://api.zukko.pro/v1/balance \
-H "Authorization: Bearer fetch_your_key"If the balance is still unchanged a couple of minutes after a successful charge in the banking app, do not send the payment again — contact support at https://t.me/zukkopro?direct with the amount, the transaction time, and the SBP transfer number from your bank history if you have it.
Checking via response headers instead of the dashboard
If you are already using the API and want to see the remaining balance without a separate trip to /app/payments, note that a regular (non-streaming) API response carries an X-Fetch-Balance-Cents header with the account balance after that specific request was charged — a way to track balance in passing, without extra calls to GET /v1/balance. Despite the name, the value is in microdollars (1,000,000 = $1), not cents; responses with stream: true don't carry the header. The exact balance in cents comes from GET /v1/balance (the balance_cents field).
Automating repeat top-ups
If you want a script to watch the balance, have it notify you when the balance drops below a threshold, and confirm the SBP payment itself in your bank app. Idempotency-Key doesn't apply to top-ups — it only works for model requests (POST /v1/chat/completions, /v1/messages, /v1/responses). So protection against paying twice is the same as with a manual payment: if the credit is delayed, don't send the payment again — check the balance via GET /v1/balance and contact support if needed. Top-ups also don't show up in GET /v1/usage — that endpoint only lists spend on model requests.
What SBP cannot do
SBP only accepts transfers from accounts at Russian banks. If you do not have a Russian bank account — say, you are paying from Kazakhstan or another CIS country without an RF account — this method simply will not work, regardless of which card you normally use: you would need either a foreign Mastercard EU card through Fride, or crypto.
Quick check after paying
If you are unsure whether a payment went through, the most reliable move is not to stare at the dashboard interface but to ask the API directly for the balance, using the same key you use for model requests. If the balance increased by the top-up amount, the money arrived and you can keep working.
Why it can be worth topping up slightly more than needed for the day
SBP is convenient precisely because a top-up takes seconds, but if you calculate the exact amount for one specific task — say, precisely enough for a single heavy batch of requests — a small overpayment still pays off: the leftover does not disappear, it simply stays on the balance for the next request, and you skip going through the whole QR-code-and-bank-confirmation path again until the balance runs out a second time. For a one-off small test this hardly matters, but for regular API work it saves time on the payment process itself, not on the amount paid.
When the bank asks for a phone call instead of a push
Occasionally a bank does not send a push to confirm an SBP transfer and instead blocks the operation until you call its support line — that is the bank's own decision, not zukko.pro's, and comes down to that specific bank's anti-fraud rules for a given amount or recipient. In that case it is faster to call the number on the back of the card than to retry the same payment again with the same amount — a retry is likely to hit the same block.
zukko
Pay 25×
less
for Claude Code & ChatGPT
One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.
Related articles
- Buying AI tokens: how a dollar balance works and what $5 gets youTokens at a gateway are not a package but a dollar balance. We look at what is charged to it and calculate how many requests $5 covers.
- Paying for AI without a fee: is it possible and how to calculate the overpaymentThere is almost always a fee when you top up. We show what it consists of, calculate it for SBP and card, and give a formula for how many rubles you need for N dollars.
- Paying for AI in rubles: SBP, a dollar balance and the exchange rateRubles paid via SBP turn into a dollar balance at the rate on the payment date plus the payment page fee. The formula, a top-up table and the price of requests in rubles.
- "Your card was declined" in OpenRouter: why a card gets rejectedWhy a card payment can be rejected on a foreign service, what you can check yourself and how to connect models when payment does not go through.