🇰🇿 KZ: Bank Card - Disbursements
Please use the following
paymentMethodNamevalue when creating theIntentand when completing thedisbursementobject.
"paymentMethodName": "BankCardKZ" or "BANK_CARD_KZ
Payment Method Features
| Feautre | Description |
|---|---|
| Country | Kazakhstan |
| Processing Currencies | KZT - Kazakhstani Tenge |
| Payments | No |
| Disbursements | Yes |
| -- Min per transaction amount | 1 000 KZT |
| -- Max per transaction amount | 1 200 000 KZT |
| Refunds | No |
| Chargebacks | No |
Workflow: Disbursement
Download in high resolution
Possible Disbursement Scenarios:
Account Verification (Optional)
Before creating a disbursement, you may verify whether disbursement to a specific card is allowed using a dedicated endpoint. This step is optional and can help reduce declined transactions.
Name | Steps |
|---|---|
Standard Disbursement |
|
List of used API Requests:
Request | Endpoint | Description |
|---|---|---|
Disbursement Possibility Check |
| |
Intent Creation |
|
(Optional) Disbursement Possibility Check Request/Response
Request specifics
- Endpoint:
POST /processing/api/v1/disbursements/check- Purpose: Verifies whether a disbursement to the recipient's card is allowed before creating an Intent.
- Required headers:
Authorization,settlement-account-id- For this method:
payeePaymentInstrument.paymentMethodNamemust be set toBank_Card_KZpayeePaymentInstrument.incomingDetailsmust include the recipient's cardnumber(16 digits)
Check Request: Example
submittedAmountandauthAmounttogether have four fields (value+currencyfor each), but only three must be provided - the fourth is derived by our backend based on your business case (with or without FX).
The example below covers the most common case: disbursement without currency conversion (KZT → KZT).
For full guidance, see Amount Fields: submittedAmount and authAmount.
{
"payeePaymentInstrument": {
"paymentMethodName": "Bank_Card_KZ",
"incomingDetails": {
"number": "4111111111111111"
}
},
"submittedAmount": {
"value": 12300.00,
"currency": "KZT"
},
"authAmount": {
"currency": "KZT"
}
}Check Request: Fields Description
Top-Level Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
payeePaymentInstrument | Object | Required | Payment method and instrument details of the disbursement recipient. |
submittedAmount | Object | Required | Amount and currency submitted for verification. |
authAmount | Object | Required | Authorisation amount and currency. May differ from the submitted amount if FX conversion is applied. If FX is not required, currency should match submittedAmount.currency. |
additionalData | Object | Optional | Additional details of the disbursement check. |
payeePaymentInstrument
| Parameter | Type | Required | Description |
|---|---|---|---|
paymentMethodName | String | Required | Payment method name. For this scenario, use Bank_Card_KZ. |
incomingDetails | Object | Required | Payment method-specific data required for verification. |
incomingDetails
| Parameter | Type | Required | Description |
|---|---|---|---|
number | String | Required | The recipient's bank card number. Length: 16 characters. |
submittedAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Conditional | Submitted amount. Provide when the sender defines the amount to be debited. Min: 1 000 / Max: 1 200 000 KZT. Omit when only authAmount.value is provided. |
currency | String | Required | Submitted currency in ISO 4217 alpha-3 format. Must be KZT. |
authAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Conditional | Authorisation amount. Provide when the recipient must receive an exact amount. Omit when submittedAmount.value is provided. |
currency | String | Required | Authorisation currency in ISO 4217 alpha-3 format. Must be KZT. |
Three of the four amount fields must be provided - the fourth is derived by our backend.
See Amount Fields: submittedAmount and authAmount for the full breakdown of cases.
Intent Creation Request/Response
Request specifics
- Endpoint:
POST /processing/api/v1/intents- Purpose: Creates an
Intentand aDisbursementfor the selected payment method.- Structure: A unified request structure is used for all supported payment methods, but some fields are method-specific.
- For this method:
paymentMethodNamemust be set toBank_Card_KZincomingDetailsmust include the recipient's cardnumber(16 digits)
Intent Request: Example
submittedAmountandauthAmounttogether have four fields (value+currencyfor each), but only three must be provided - the fourth is derived by our backend based on your business case (with or without FX).
The example below covers the most common case: disbursement without currency conversion (KZT → KZT).
For full guidance, see Amount Fields: submittedAmount and authAmount.
{
"clientReferenceId": "202510202",
"useCheckoutForm": false,
"disbursements": [
{
"payeePaymentInstrument": {
"paymentMethodName": "Bank_Card_KZ",
"incomingDetails": {
"number": "4111111111111111"
}
},
"submittedAmount": {
"value": 12300.00,
"currency": "KZT"
},
"authAmount": {
"currency": "KZT"
},
"webhookUrl": "https://merchant.example.com/webhooks/disbursements"
}
]
}Intent Request: Fields Description
Top-Level Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
clientReferenceId | String | Required | Order number in the merchant system. |
useCheckoutForm | Boolean | Required | Indicates whether the Intent uses a hosted checkout form. For Host-to-Host disbursements, set false. |
disbursements | Array of Objects | Required | List of disbursement objects to be created within the Intent. |
description | String | Optional | Intent description (arbitrary string). |
disbursement
| Parameter | Type | Required | Description |
|---|---|---|---|
payeePaymentInstrument | Object | Required | Payment method and instrument details used to process the disbursement. |
submittedAmount | Object | Required | Amount and currency submitted for the disbursement. |
authAmount | Object | Required | Authorisation amount and currency used for the disbursement. May differ from the submitted amount if FX conversion is applied. If FX conversion is not required, currency should match submittedAmount.currency. |
description | String | Optional | Disbursement description (arbitrary string). |
webhookUrl | String | Optional | URL to which disbursement status change webhooks will be sent. |
payeePaymentInstrument
| Parameter | Type | Required | Description |
|---|---|---|---|
paymentMethodName | String | Required | Payment method name. For this scenario, use Bank_Card_KZ. |
incomingDetails | Object | Required | Payment method-specific data required to initiate the disbursement. |
incomingDetails
| Parameter | Type | Required | Description |
|---|---|---|---|
number | String | Required | The recipient's bank card number. Length: 16 characters. |
submittedAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Conditional | Submitted disbursement amount. Provide when the sender defines the amount to be debited. Min: 1 000 / Max: 1 200 000 KZT. Omit when only authAmount.value is provided. |
currency | String | Required | Submitted disbursement currency in ISO 4217 alpha-3 format. Must be KZT. |
authAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Conditional | Authorisation amount used for the disbursement. Provide when the recipient must receive an exact amount. Omit when submittedAmount.value is provided. |
currency | String | Required | Authorisation currency in ISO 4217 alpha-3 format. Must be KZT. |
Three of the four amount fields must be provided - the fourth is derived by our backend.
See Amount Fields: submittedAmount and authAmount for the full breakdown of cases.
Webhooks
This section summarises the webhook events triggered for
Bank_Card_KZdisbursements.
For payload structure, examples, retry policy and delivery conditions, see the dedicated pages: Webhooks: Overview and Webhooks: Example.
When Webhooks Are Sent
A webhook is dispatched to your webhookUrl when the disbursement reaches a final status:
| Status | Trigger |
|---|---|
PAID_OUT | The disbursement has been successfully completed and funds have been delivered to the recipient. |
DECLINED | The disbursement was rejected by the issuing bank / processor (e.g. invalid card, blocked recipient, regulatory restriction). |
ERROR | A processing error prevented the disbursement from being completed. |
Delivery & Retries
- Webhooks are delivered as HTTPS POST requests with a JSON payload to the
webhookUrlprovided in the original disbursement request.- A delivery is considered successful if your endpoint responds with HTTP 2xx.
- If the delivery fails (non-2xx, network error, timeout), the platform retries up to 10 times following a fixed schedule (immediate → 1 min → 5 min → 15 min → 1 h → 3 h → 6 h → 12 h → 24 h → 48 h).
- After the 10th attempt, delivery stops permanently.
Full details: Webhooks: Overview.
Payload Example
The webhook payload structure is shared across all transaction types and may evolve over time.
For the up-to-date payload example, see the Webhooks: Example page.
Test Data
Our sandbox environment lets you simulate the full disbursement lifecycle and trigger every possible final status without involving a real issuing bank.
To force a specific outcome, set theintent.descriptionfield to one of the trigger values below.
Sandbox Trigger Reference
Here's the table code only:
| Scenario | intent.description | Final Status |
|---|---|---|
| Successful disbursement | (empty / any value not listed below) | PAID_OUT |
| Disbursement declined | DisbursementDeclined | DECLINED |
| Processing error | DisbursementError | ERROR (returned in the synchronous response) |
Test Card Numbers
In the sandbox, any well-formed 16-digit card number (passing the Luhn check) is accepted as the
payeePaymentInstrument.incomingDetails.number.
The final disbursement status is controlled byintent.description, not by the card number.
End-to-End Test Flow
Download in high resolution
Scenario | Steps |
|---|---|
Successful disbursement |
|
Disbursement declined |
|
Processing error |
|
Tips for Testing
- Combine with the possibility check - run
POST /processing/api/v1/disbursements/checkfirst to validate the integration of both endpoints.- Verify webhook handling - point
webhookUrlat a tool like webhook.site or RequestBin during early integration to inspect raw payloads.- Test FX scenarios - use the 3-of-4 amount field rule (see Amount Fields: submittedAmount and authAmount) to validate both "sender-defined" and "recipient-defined" flows.
- Webhook delivery diagnostics - if you don't receive an expected webhook, check that your endpoint returns HTTP 2xx (see Webhooks: Overview for retry behaviour).
Updated about 12 hours ago
