๐ฐ๐ฟ KZ: Bank Cards - Payments (NEW)
This payment method is supported in two integration scenarios: Host-to-Host and Hosted Checkout.
- For Hosted Checkout, please refer to the dedicated page.
- For Host-to-Host integration, please follow the guide below.
Please use the following
paymentMethodNamevalue when creating theIntentand when completing thepaymentobject.
"paymentMethodName": "BankCardKZ"
Payment Method Features
| Payment Method | Visa |
|---|---|
| Country | Kazakhstan |
| Processing Currencies | KZT |
| Supported Brands | Visa, Mastercard |
| Payments | Yes |
| -- Min per transaction amount | 100 KZT |
| -- Max per transaction amount | 500,000 KZT |
| -- Authentication | 3D Secure |
| Disbursements | No |
| Refunds | Full & Partial |
| -- Full Refund | Yes |
| -- Partial Refund | Yes |
| -- Multiple Partial Refunds | Yes |
| Chargebacks | No |
Workflow: Payment & Refund
Download in high resolution
Possible Payment Scenarios:
Auto-Capture or Cancellation
To enable automatic capture or cancellation, you must inform our integration team in advance so they can configure the auto-trigger and define the required timer on their side
Name | Steps |
|---|---|
Funds Authorisation without 3DS |
|
Funds Authorisation with 3DS |
|
List of used API Requests:
Request | Endpoint | Description |
|---|---|---|
Intent Creation |
| |
Manual Payment Capture |
| |
Manual Payment Cancellation |
| |
Refund Creation |
|
Intent Creation Request/Response
Request specifics
- Endpoint:
POST /processing/api/v1/intents- Purpose: Creates an
Intentand aPaymentfor 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 toBankCardKZincomingDetailsmust include:Card Number,Holder Name,Security Code,Expiry Month, andExpiry Year
Intent Request: Example
{
"clientReferenceId": "1234",
"payments": [
{
"payer": {
"phone": "+XXXXXXXXXXX"
},
"paymentInstrument": {
"paymentMethodName": "BankCardKZ",
"incomingDetails": {
"number": "4111111111111111",
"expiryMonth": "12",
"expiryYear": "2028",
"cvv": "123",
"holderName": "JOHN DOE",
"redirectUrl": "https://merchant.example.com/payment/success",
"failureUrl": "https://merchant.example.com/payment/failure",
"account": "string"
}
},
"submittedAmount": {
"value": 100.05,
"currency": "USD"
},
"authCurrencyCode": "RUB",
"description": "Vertex - INTENT 1234",
"webhookUrl": "webhookUrl"
}
],
"description": "Vertex - INTENT 1234",
"merchant": {
"name": "Mustermann",
"website": "website.io"
}
}Intent Request: Fields Description
Top-Level Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
clientReferenceId | String | Required | Order number in the merchant system. |
payments | Array of Objects | Required | List of payment objects to be created within the Intent. |
description | String | Optional | Intent description. |
merchant | Object | Optional | Merchant information to be associated with the request. |
payment
| Parameter | Type | Required | Description |
|---|---|---|---|
payer | Object | Conditional | Payer details. Optional in general, but may be required for specific merchant MCC codes. |
paymentInstrument | Object | Required | Payment method and payment instrument details used to process the payment. |
submittedAmount | Object | Required | Amount and currency submitted for the payment. |
authCurrencyCode | String | Required | Authorisation currency code to be used for the payment. It may differ from the submitted currency if FX conversion is applied. If FX conversion is not required, it should match submittedAmount.currency. |
description | String | Optional | Payment description. |
webhookUrl | String | Required | URL to which payment status change webhooks will be sent. |
payer
| Parameter | Type | Required | Description |
|---|---|---|---|
firstname | String | Optional | Payer's first name. |
lastname | String | Optional | Payer's last name. |
phone | String | Conditional | Payer's phone number. Required for merchants with MCC 4814.Must be provided in international format: +XXXXXXXXXXX. |
email | String | Optional | Payer's email address. |
countryIsoCode | String | Optional | Payer's country of residence in ISO 3166-1 alpha-2 format. |
locale | String | Optional | Payer's preferred language locale. |
taxIdentification | String | Optional | Consumer tax identification number. |
merchantPayerReference | String | Optional | Merchant-provided payer reference. |
paymentInstrument
| Parameter | Type | Required | Description |
|---|---|---|---|
paymentMethodName | String | Required | Payment method name. For this scenario, use BankCardRU. |
incomingDetails | Object | Required | Payment method-specific data required to initiate the payment. |
incomingDetails
| Parameter | Type | Required | Description |
|---|---|---|---|
number | String | Required | Card number. |
expiryMonth | String | Required | Card expiry month in MM format. |
expiryYear | String | Required | Card expiry year in YYYY format. |
cvv | String | Required | Card security code (CVV/CVC). |
holderName | String | Optional | Cardholder name as printed on the card. |
redirectUrl | String | Required | URL to which the payer may be redirected after a successful/unsuccessful (if failureUrl is emply) payment flow. |
failureUrl | String | Optional | URL to which the payer may be redirected after a failed payment flow, if applicable. |
account | String | Conditional | Additional account-related value. Required for merchants with MCC 6050 or 6051. |
submittedAmount
| Parameter | Type | Required | Description |
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Required | Submitted order amount. May differ from the authorised amount if FX conversion is applied. |
currency | String | Required | Submitted order currency. May differ from the authorised amount if FX conversion is applied. |
merchant
| Parameter | Type | Required | Description |
|---|---|---|---|
name | String | Optional | The name of store, that might be displayed on the checkout form if configured |
website | String | Optional | The website of the store |
Capture / Cancel Payment
IMPROTANT
The timeframe between the authorization and capture / cancellation must not exceed 5 days
- To capture or cancel the payment transaction and release funds on the payerโs account, you must send a Payment Update request.
- Use the following endpoint: Update Payment status and specify the action you wish to perform:
status = CAPTURED- to capture the authorised amount.status = CANCELLED- to cancel the authorisation and release the reserved funds
- After receiving your request, we will initiate the capture process and send you a standard webhook with the updated transaction status.
Refunds
Refunds cannot exceed the total value of confirmed transactions for the current day.
To initiate the refund (full or partial) to the payer's original payment instrument, you must send a separate Refund request.
Use the following endpoint: Create Refund and specify the following parameters:
{
"paymentId": 204264682781298700,
"partial": false,
"reason": "Customer requested a refund",
"webhookUrl": "webhookUrl"
}{
"paymentId": 204264682781298700,
"partial": true,
// For a partial refund, specify ONLY ONE of the following:
// - paymentSubmittedAmount (original/submitted currency)
// - paymentAuthAmount (authorised/settlement currency)
// This is required when FX conversion was involved in the payment
// (e.g. KZT -> RUB). The refund will be calculated using the SAME
// exchange rate as the original payment.
//
// Choose the object based on the currency in which you want to
// define the refund amount, and populate only that object.
// Option 1: Submitted currency (inactive example)
// "paymentSubmittedAmount": {
// "value": 100.05,
// "currency": "KZT"
// },
// Option 2: Authorised currency (active example)
"paymentAuthAmount": {
"value": 100.05,
"currency": "RUB"
},
"reason": "Customer requested a refund",
"webhookUrl": "webhookUrl"
}Refund amount rules
| Rule | Description |
|---|---|
| Full refund | Send paymentId and set partial to false, or omit partial entirely. The full refundable amount will be refunded. |
| Partial refund | Set partial to true and provide exactly one of the following objects: paymentSubmittedAmount or paymentAuthAmount. |
| Mutually exclusive amount objects | Do not send paymentSubmittedAmount and paymentAuthAmount in the same request. |
| FX payments | If the original payment involved FX conversion, the refund is calculated using the same exchange rate as the original payment. |
| Currency choice | Use paymentSubmittedAmount if you want to define the refund in the original submitted currency.Use paymentAuthAmount if you want to define the refund in the authorised or settlement currency. |
Top-Level Refund Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
paymentId | int64 | Required | Identifier of the original payment transaction to which this refund applies. Use the paymentId returned in the original payment or Intent creation response. |
partial | Boolean | Optional | Indicates whether the refund is partial or full.true - partial refund.false - full refund.If omitted, the platform treats the request as a full refund. |
paymentSubmittedAmount | Object | Conditional | Refund amount in the original submitted currency. Required when partial = true and the refund amount is defined in the submitted currency.Do not send together with paymentAuthAmount. |
paymentAuthAmount | Object | Conditional | Refund amount in the authorised or settlement currency. Required when partial = true and the refund amount is defined in the authorised currency.Do not send together with paymentSubmittedAmount. |
reason | String | Optional | Free-form refund reason. Used for informational and audit purposes. |
webhookUrl | String | Optional | URL to which refund status change webhooks will be sent. |
paymentSubmittedAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Required | Refund amount value in the original submitted currency. |
currency | String | Required | Refund currency in ISO 4217 alpha-3 format. Must match the original submitted currency. |
paymentAuthAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Required | Refund amount value in the authorised or settlement currency. |
currency | String | Required | Refund currency in ISO 4217 alpha-3 format. Must match the original authorised or settlement currency. |
After the creation of the refund request you must wait for the callback, that will provide you with the latest transaction status
Webhooks
More about Payment Webhooks on the dedicated page
You will receive the webhooks on each status change of any transaction you created.
Testing in Sandbox
The bank card emulator simulates the full H2H payment lifecycle in the sandbox environment. Use the test cards below to reproduce specific authorisation and completion outcomes.
Use the listed test cards only. Any card not on this list will be accepted at the Intent creation step, but authorisation will fail. Cards from the list are the only ones guaranteed to drive the emulator through a complete flow.
What the H2H emulator covers
- Available in the sandbox environment only.
- The flow (Frictionless or Challenge) and the outcome at each stage are determined by the PAN only. Expiry date, CVV, and cardholder name do not affect emulator logic โ any values that pass validation are accepted.
- Amount and currency do not affect emulator behaviour.
- Completion behaviour (capture or cancellation, automatic or manual) depends on the Settlement Account + payment method configuration. See Completion below.
Authorisation flows
Regardless of the flow, the payer must briefly land on a Carusell-hosted page so we can collect device metadata for fraud checks. The client redirects the payer to the URL returned in the Intent creation response. After metadata collection, the payer is routed according to the flow determined by the PAN:
- Frictionless โ the payer is redirected back to the merchant storefront via
redirectUrl, and the authorisation result is delivered via webhook. - Challenge โ the payer is presented with a 3DS OTP form before being redirected back to the merchant.
Completion: capture or cancellation
After a successful authorisation, the payment must be completed โ either captured (funds taken) or cancelled (authorisation released). Whether this happens automatically or requires a client request is configured per Settlement Account and payment method.
| Mode | Behaviour |
|---|---|
| Automatic completion enabled | The platform performs the configured action (capture or cancellation) after a delay. The delay is configurable from 0 (immediate) up to a maximum defined by the acquirer. No client action is required. |
| Automatic completion disabled | The client must send an explicit request: โข Capture: POST /processing/api/v1/payments/{id} with status=CAPTUREDโข Cancellation: POST /processing/api/v1/payments/{id} with status=CANCELLED |
Emulator behaviour
The completion outcome is determined by the same PAN used for authorisation. The emulator returns the same outcome regardless of action (capture or cancellation) or trigger (automatic or manual).
| Name | Outcome |
|---|---|
| FF_Card_1 / CF_Card_1 | Success |
| FF_Card_2 / CF_Card_2 | Failure |
| FF_Card_3 | Not applicable โ authorisation fails, completion never runs |
Updated 2 days ago

