Kazakhstan¶
In Kazakhstan the payer sends tenge to the recipient's card number from their bank app. It is a
card payment with two differences: country KZ and currency KZT. Statuses,
callbacks and retry rules are the same as for SBP.
| Russia | Kazakhstan | |
|---|---|---|
geo_code |
RU (default) |
KZ — must be set |
currency |
RUB (default) |
KZT — must be set |
payment_method |
any method | card_transfer |
amount |
roubles | tenge |
bank_code |
a Russian bank | a Kazakh bank |
SBP, NSPK QR, account transfer and cross-border transfer are Russian methods; they are not
available for KZ.
Create a payment¶
POST /api/v1/payments, signed the same way as for SBP.
{
"merchant_payment_id": "order-kz-1001",
"amount": "50000",
"payment_method": "card_transfer",
"currency": "KZT",
"geo_code": "KZ",
"bank_code": "Kaspi"
}
- Always send
currencyandgeo_code: without them the payment is created as a Russian one in roubles, and50000is taken as roubles. bank_codeis the optional payer bank: a Kazakh bank name from the directory, for exampleKaspi,Halyk,Freedom Bank.GET /api/v1/banks?geo_code=KZreturns the list. Empty means any bank.is_intrabank: truewithbank_codemeans the recipient card is in the same bank as the payer's (for example, Kaspi → Kaspi).
Other fields and their rules: SBP payments → Request fields.
Limits in tenge¶
GET /api/v1/project/limits shows whether your project's contract
accepts payments in Kazakhstan: look for a record with "geo_code": "KZ",
"currency": "KZT", "payment_method": "card_transfer". Its min_amount and max_amount are
in tenge.
Response¶
201 Created:
{
"id": "5b8e1c2d-3f4a-4b5c-9d6e-7f8091a2b3c4",
"merchant_payment_id": "order-kz-1001",
"flow": "runtime_live",
"status": "processing",
"amount": 50000,
"initial_amount": 50000,
"currency": "KZT",
"geo_code": "KZ",
"payment_method": "card_transfer",
"bank_code": "Kaspi",
"is_intrabank": false,
"callback_url": null,
"is_test": false,
"merchant_information": {
"course": 520.00,
"rate": 9.00,
"amount_usdt": "96.1538",
"amount_rate": "4500.0000",
"amount_usdt_rate": "87.5000"
},
"requisite": "4400430212345678",
"requisite_bank": "Kaspi",
"holder_name": "Айгерим С.",
"created_at": "2026-10-14T09:30:00Z",
"updated_at": "2026-10-14T09:30:01Z"
}
requisiteis the recipient's card number;amountandinitial_amountare in tenge;merchant_information.courseis tenge per 1 USDT;amount_usdt=amount / course. The rest is as inmerchant_informationcalculation.
What to show the payer¶
- Card number from
requisitein groups of four (4400 4302 1234 5678) with a "Copy" button that copies it without spaces. - Recipient —
holder_name; card bank —requisite_bank. - Amount — exactly
amountin tenge (50 000 ₸), in one transfer. - Deadline — a countdown from
created_atfor your project's payment lifetime (15 minutes by default).
Statuses and result¶
As for cards: Card payments → Statuses and result.
Common mistakes¶
- No
geo_codeorcurrency. The payment goes through as a Russian one in roubles: a Kazakh bank inbank_codereturns422 cross_border_invalidor422 bank_not_found, and withoutbank_codethe amount is taken as roubles. Always send"geo_code": "KZ"and"currency": "KZT". - A method other than
card_transfer. It is not in the contract for Kazakhstan —422 payment_not_covered. - Bank not found. The name must come from the Kazakh directory
(
GET /api/v1/banks?geo_code=KZ), otherwise422 bank_not_found. - No cards of the requested bank.
bank_codeandis_intrabanknarrow the choice; if nothing matches —422 payment_not_routable. Try without them.
Everything else: Card payments → Edge cases.
See also¶
- Payment methods — all methods, countries and currencies.
- Banks — Kazakh banks in the directory.