Integration GuideAPI Reference
Integration Guide

UZ: Bank Cards - Payments

📘

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 paymentMethodName value when creating the Intent and when completing the payment object.

"paymentMethodName": "BankCardUZ"

About the Method

BankCardUZ accepts cards of HUMO and UZCARD — the two national payment schemes of Uzbekistan. Virtually every card issued by Uzbek banks belongs to one of these schemes, which makes this method the primary way to accept card payments from customers in Uzbekistan.

Key characteristics of the local schemes to keep in mind:

  • All payments are processed in Uzbek soum (UZS).
  • Instead of the classic 3-D Secure flow, the payer confirms the payment with an SMS code sent by their bank. The confirmation step is requested for virtually every payment — do not design your flow around a "no confirmation" scenario.
  • A security code (CVV/CVC) may be absent on HUMO/UZCARD cards — it is optional for this method.
  • Payments are processed in a single step: authorisation and funds withdrawal happen together. There is no authorisation hold stage.

The payment follows the standard card flow of our platform: after the Intent is created, you redirect the payer to the URL returned in the response. The payer briefly lands on our hosted page where the required payer metadata is collected, and is then routed automatically — either straight back to your store (frictionless) or to the SMS confirmation form first (challenge).

⚠️

Single-step processing only

This method has no AUTHORIZED status and no Capture / Cancellation operations. After creation the payment is in AUTHORIZATION_REQUESTED and moves directly to the final status: CAPTURED or DECLINED.

A payment cannot be cancelled before the funds are withdrawn. To return funds to the payer, create a Refund after the payment reaches CAPTURED.

Payment Method Features

Payment MethodBankCardUZ
CountryUzbekistan
Card SchemesHUMO, UZCARD
Processing CurrenciesUZS
Processing ModelSingle-step (no Capture/Cancel)
PaymentsYes
-- Min per transaction amount500 UZS
-- Max per transaction amount999,999,999 UZS
RefundsFull & Partial
-- Full RefundYes
-- Partial RefundYes
-- Multiple Partial RefundsYes
ChargebacksNo

Possible Payment Scenarios:

NameSteps
Payment with SMS confirmation (Challenge)1. You send an Intent creation request via the API, including a Payment transaction.
2. Our platform validates the incoming data, initiates the payment and returns the redirect URL in payments[].additionalData.details.url.
3. You redirect the payer to this URL. Our hosted page collects the required payer metadata.
4. [Confirmation is required] The payer is presented with the confirmation form and enters the SMS code sent by their bank.
5. Our platform receives the confirmation result and completes the payment: the funds are withdrawn in a single step.
6. The payer is redirected back to your redirectUrl.
7. Our platform sends a webhook with the final payment status: CAPTURED or DECLINED.
Payment without confirmation (Frictionless)For this method the confirmation step (challenge) is requested for virtually every payment — frictionless scenario can be applied only for cobranded cards (with Visa or Mastercard) where the network considers the transaction safe.

1. You send an Intent creation request via the API, including a Payment transaction.
2. Our platform validates the incoming data, initiates the payment and returns the redirect URL in payments[].additionalData.details.url.
3. You redirect the payer to this URL. Our hosted page collects the required payer metadata.
4. [Confirmation is not required] The payer is redirected back to your redirectUrl without any additional steps.
5. Our platform completes the payment and sends a webhook with the final status: CAPTURED or DECLINED.

List of used API Requests:

RequestEndpointDescription
Intent CreationPOST /processing/api/v1/intents• Creates a new Intent with one or more Payment transactions.
• The platform validates the request, creates internal payment records, and initiates the payment with the processor.
Refund CreationPOST /api/v1/refunds• Creates a refund request (full or partial) for a previously captured payment.
• A separate refund transaction is created and processed independently from the original payment.

Intent Creation Request/Response

📓

Request specifics

  • Endpoint: POST /processing/api/v1/intents
  • Purpose: Creates an Intent and a Payment for 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:
    • paymentMethodName must be set to BankCardUZ
    • incomingDetails must include: number, holderName, expiryMonth, expiryYear, and redirectUrl
    • cvv is optional — the security code may be absent on HUMO/UZCARD cards
    • authCurrencyCode must be set to UZS

Intent Request: Example

{
  "clientReferenceId": "1234",
  "payments": [
    {
      "paymentInstrument": {
        "paymentMethodName": "BankCardUZ",
        "incomingDetails": {
          "number": "9860XXXXXXXXXXXX",
          "expiryMonth": "10",
          "expiryYear": "2028",
          "holderName": "JOHN DOE",
          "redirectUrl": "https://merchant.example.com/payment/return"
        }
      },
      "submittedAmount": {
        "value": 100000.00,
        "currency": "UZS"
      },
      "authCurrencyCode": "UZS",
      "description": "Vertex - INTENT 1234",
      "webhookUrl": "https://merchant.example.com/webhooks"
    }
  ],
  "description": "Vertex - INTENT 1234"
}

Intent Request: Fields Description

Top-Level Request Parameters
ParameterTypeRequiredDescription
clientReferenceIdStringRequiredOrder number in the merchant system.
paymentsArray of ObjectsRequiredList of payment objects to be created within the Intent.
descriptionStringOptionalIntent description.
merchantObjectOptionalMerchant information to be associated with the request.
payment
ParameterTypeRequiredDescription
payerObjectOptionalPayer details.
paymentInstrumentObjectRequiredPayment method and payment instrument details used to process the payment.
submittedAmountObjectRequiredAmount and currency submitted for the payment.
authCurrencyCodeStringRequiredAuthorisation currency code to be used for the payment.
For this method, must be set to UZS.
It may differ from the submitted currency if FX conversion is applied.
descriptionStringOptionalPayment description.
webhookUrlStringRequiredURL to which payment status change webhooks will be sent.
payer
ParameterTypeRequiredDescription
firstnameStringOptionalPayer's first name.
lastnameStringOptionalPayer's last name.
phoneStringOptionalPayer's phone number in international format: +998XXXXXXXXX.
emailStringOptionalPayer's email address.
countryIsoCodeStringOptionalPayer's country of residence in ISO 3166-1 alpha-2 format.
localeStringOptionalPayer's preferred language locale.
merchantPayerReferenceStringOptionalMerchant-provided payer reference.
Recommended: a stable customer identifier in your system improves processing on the local scheme side.
paymentInstrument
ParameterTypeRequiredDescription
paymentMethodNameStringRequiredPayment method name.
For this scenario, use BankCardUZ.
incomingDetailsObjectRequiredPayment method-specific data required to initiate the payment.
incomingDetails
ParameterTypeRequiredDescription
numberStringRequiredCard number (HUMO or UZCARD).
expiryMonthStringRequiredCard expiry month in MM format.
expiryYearStringRequiredCard expiry year in YYYY format.
cvvStringOptionalCard security code (CVV/CVC).
May be absent on HUMO/UZCARD cards — omit the field if the payer's card has no security code.
holderNameStringRequiredCardholder name as printed on the card.
redirectUrlStringRequiredURL to which the payer is redirected after completing (or abandoning) the confirmation step.
The redirect may include technical query parameters appended by the processor.
submittedAmount
ParameterTypeRequiredDescription
valueNumberRequiredSubmitted order amount.
May differ from the authorised amount if FX conversion is applied.
currencyStringRequiredSubmitted order currency.
May differ from the authorised currency if FX conversion is applied.
merchant
ParameterTypeRequiredDescription
nameStringOptionalThe name of the store that may be displayed on the payment page, if configured
websiteStringOptionalThe website of the store


Payment Confirmation

  • Always redirect the payer to the URL returned in payments[].additionalData.details.url. Our hosted page collects the required payer metadata and routes the payer automatically: back to your store (frictionless) or to the confirmation form first (challenge).
  • On the confirmation form the payer enters the SMS code sent to the phone number linked to their card.
  • After the payer completes (or abandons) the flow, they are redirected back to your redirectUrl.
  • The redirect to redirectUrl does not carry the payment result. The final status (CAPTURED or DECLINED) is delivered via webhook — always rely on the webhook, not on the payer's return.


Refunds

📘

Refunds are available only for payments in the CAPTURED status.

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": 232510340646563840,
  "partial": false,
  "reason": "Customer requested a refund",
  "webhookUrl": "https://merchant.example.com/webhooks"
}
{
  "paymentId": 232510340646563840,
  "partial": true,
  "paymentAuthAmount": {
    "value": 30000.00,
    "currency": "UZS"
  },
  "reason": "Customer requested a refund",
  "webhookUrl": "https://merchant.example.com/webhooks"
}
Refund amount rules
RuleDescription
Full refundSend paymentId and set partial to false, or omit partial entirely. The full refundable amount will be refunded.
Partial refundSet partial to true and provide exactly one of the following objects: paymentSubmittedAmount or paymentAuthAmount.
Multiple partial refundsSeveral partial refunds can be created for one payment until the refunded total reaches the original payment amount.
Mutually exclusive amount objectsDo not send paymentSubmittedAmount and paymentAuthAmount in the same request.
FX paymentsIf the original payment involved FX conversion, the refund is calculated using the same exchange rate as the original payment.
Currency choiceUse 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
ParameterTypeRequiredDescription
paymentIdint64RequiredIdentifier of the original payment transaction to which this refund applies.
Use the value of payments[].id returned in the Intent creation response.
partialBooleanOptionalIndicates whether the refund is partial or full.
true - partial refund.
false - full refund.
If omitted, the platform treats the request as a full refund.
paymentSubmittedAmountObjectConditionalRefund 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.
paymentAuthAmountObjectConditionalRefund 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.
reasonStringOptionalFree-form refund reason.
Used for informational and audit purposes.
webhookUrlStringOptionalURL to which refund status change webhooks will be sent.
paymentSubmittedAmount
ParameterTypeRequiredDescription
valueNumberRequiredRefund amount value in the original submitted currency.
currencyStringRequiredRefund currency in ISO 4217 alpha-3 format.
Must match the original submitted currency.
paymentAuthAmount
ParameterTypeRequiredDescription
valueNumberRequiredRefund amount value in the authorised or settlement currency.
currencyStringRequiredRefund currency in ISO 4217 alpha-3 format.
Must match the original authorised or settlement currency — for this method, UZS.

After the creation of the refund request you must wait for the webhook that will provide the latest refund 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 payment outcomes.

📘

Shared bank card emulator
The sandbox emulator is shared across all bank card payment methods on our platform — there is no dedicated emulator per method. The test cards, confirmation codes, and flows described below are common to every BankCard* method.

Keep in mind that the emulator reproduces the platform flow, not the specifics of the live card scheme: method-specific behaviour (supported card ranges, currency, confirmation type) applies in the live environment only. In the sandbox you may also observe a transient AUTHORIZED status between the confirmation and the final status — this is an emulator artifact; in the live environment the payment moves directly to CAPTURED or DECLINED.

⚠️

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.
  • For this method the payment completes automatically after a successful confirmation — no additional client action is required at any stage.

Payment flows

Regardless of the flow, the payer must briefly land on our hosted page so we can collect the required payer metadata. 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 payment result is delivered via webhook.
  • Challenge — the payer is presented with the SMS confirmation form before being redirected back to the merchant. In the live environment, virtually every payment of this method follows the Challenge flow.

Challenge flow (SMS confirmation)

After metadata collection, the payer is presented with the confirmation form. The code value entered by the payer determines the outcome.

H2H Challenge flow
Test cards and confirmation codes
NamePANCodeFinal payment status
CF_Card_151200699961008211000CAPTURED
CF_Card_251200699964918321000DECLINED — confirmation succeeds, but the funds withdrawal fails
Either of the above1001DECLINED — confirmation fails
ℹ️

Any code value other than those listed above is not recognised by the emulator. The payment will not progress and will remain in the AUTHORIZATION_REQUESTED state.


Did this page help you?