Integration GuideAPI Reference
Integration Guide

RU: Bank Card - Disbursements

RU: Bank Card - Disbursements

📘

"paymentMethodName": "DisbursementBankCardRUS"

Send funds to a recipient's bank card issued in Russia. The recipient is identified by the card number. Depending on your integration, you may also need to provide identification details of the individual sending the funds.

Requirements

The same paymentMethodName is used for both sets of requirements.

RequirementBasic requirementsAdditional sender identification
Recipient's card numberRequiredRequired
Amount and currency objectsRequiredRequired
disbursements[].payerNot requiredRequired
Sender's nameNot requiredOne complete name pair is required
Sender's phone number and date of birthNot requiredRequired
Sender's identity documentNot requiredRequired; see the field table below

Basic requirements apply to integrations enabled for disbursements without sender identification details. The payer object is not required for this scenario.

Additional sender identification applies to integrations that require details of the individual sending the funds, including person-to-person and own-account remittances. Supply the real sender's details in payer for every disbursement.

📘

Your account manager confirms which requirements apply to your integration. The presence or absence of payer does not select a different processing scenario. If sender identification is required, omitting payer does not switch the request to the basic scenario.

Payment method features and limits
FeatureDisbursementBankCardRUS
CountryRussia
paymentMethodNameDisbursementBankCardRUS
Disbursement currencyRUB
PaymentsNo
DisbursementsYes
Minimum and maximum amount per transactionDefined for your integration
Sender limitsPer-transaction and monthly limits may apply when sender identification is required
Merchant-initiated refundsNo
ChargebacksNo

Your account manager confirms the applicable data requirements, supported documents and issuing countries, amount limits, and available source currencies during onboarding. Adding identification details does not automatically change the limits configured for your integration.

Disbursement workflow

The workflow applies to both sets of requirements. The sender is the individual sending the funds when sender identification applies; the merchant integrates with Carusell, and the recipient holds the destination card. The sender and recipient may be the same person.

  1. Save your clientReferenceId and create an intent containing a disbursements array. Provide the recipient's card number, amount and currency objects, a webhook URL, and sender details when required for your integration.
  2. Check the creation response for both created disbursements and disbursementCreationErrors. Store intentId and each created disbursement's ID. ACCEPTED means the disbursement was accepted for processing; it does not confirm credit to the recipient.
  3. Carusell submits created disbursements to the processing partner and sends status updates to each disbursement's webhook URL. Match transactionId to the stored disbursement ID and acknowledge the webhook with HTTP 2xx.
  4. If the creation response or a webhook is missing, retrieve the existing intent by clientReferenceId or intentId. Resolve the original outcome before submitting another payout; see the Recovery tab under Status Updates.

Card processing and status updates are asynchronous, as shown in parallel below. See Status Updates for the meaning of each status and the rules for subsequent returns.

sequenceDiagram
    autonumber
    actor S as Sender (Payer)
    participant M as Merchant
    participant C as Carusell
    participant P as Processing Partner
    actor R as Recipient (Payee)

    opt Transfer requested by an individual
        S->>M: Request a transfer
    end

    Note over M,C: Use DisbursementBankCardRUS.<br/>Provide the recipient's card number and amounts.<br/>Include payer details when required for your integration.

    M->>C: POST /processing/api/v1/intents
    C->>C: Validate request and required sender details<br/>Check route, limits and available balance

    alt Request rejected
        C-->>M: Error response
    else Intent created
        C-->>M: intentId, created disbursements and their IDs<br/>Statuses and any disbursementCreationErrors

        Note over M,C: Check the outcome for each requested disbursement.<br/>ACCEPTED does not confirm credit to the recipient.

        loop For each created disbursement
            C->>P: Submit the disbursement

            par Recipient card processing
                opt Payout approved
                    P->>R: Attempt to credit the recipient's card
                end
            and Status updates
                loop While the outcome is pending
                    C->>P: Request processing status
                    P-->>C: Current status and result
                    opt Status updated
                        C->>M: Status update to disbursements[].webhookUrl<br/>transactionId and status
                        M-->>C: HTTP 2xx acknowledgement
                    end
                end
            end

            Note over M,C: Reconcile updates using the same disbursement ID.<br/>Follow the status and return-handling rules on this page.
        end
    end

    opt Creation response or webhook is missing
        M->>C: GET intent by clientReferenceId or intentId
        C-->>M: Intent details, disbursement statuses<br/>and any creation errors
        Note over M,C: Resolve the original outcome before submitting another payout.
    end

Create an Intent

Use POST /processing/api/v1/intents.

The API Reference describes common request fields, authentication, and response objects. The sections below describe requirements specific to this payment method.

All example identities, card numbers, and transaction identifiers on this page are illustrative.

Recipient card details

Path: disbursements[].payeePaymentInstrument.incomingDetails

FieldBasic requirementsAdditional sender identificationTypeDescriptionExample
numberRequiredRequiredStringFull recipient card number. Send as a string of digits without spaces or separators.4111111111111111

Set disbursements[].payeePaymentInstrument.paymentMethodName to DisbursementBankCardRUS.

Amounts

Paths: disbursements[].submittedAmount and disbursements[].authAmount

FieldBasic requirementsAdditional sender identificationDescription
submittedAmount.currencyRequiredRequiredRequired source currency, enabled for your integration.
submittedAmount.valueConditionalConditionalAmount to send in the source currency. Leave null when specifying the exact amount to be credited in authAmount.value.
authAmount.currencyRequiredRequiredRequired target currency. Use RUB for this method.
authAmount.valueConditionalConditionalAmount to be credited to the recipient in RUB. Leave null when specifying the source amount in submittedAmount.value.

Include both submittedAmount and authAmount, each with a currency.

Choose one option:

  • Set the amount to send: enter submittedAmount.value and leave authAmount.value as null.
  • Set the amount to receive: enter authAmount.value and leave submittedAmount.value as null.

The amount must be greater than zero.

Amounts are expressed in the named currency: 1500.00 with RUB means 1,500 rubles.

For currency conversion scenarios, see Amount Fields: submittedAmount and authAmount.

Sender identification

Path: disbursements[].payer

payer is an object. It is conditional for this payment method and required when additional sender identification applies.

The fields below describe the individual sending the funds, who may be different from the recipient. Do not populate them with the merchant company's details or a shared default person.

For additional sender identification, supply at least one complete name pair: firstNameLocal with lastNameLocal, or firstNameEng with lastNameEng. The Name Pair Selection rules below determine which pair is used. The idSeries field is required for a Russian internal passport.

FieldBasic requirementsAdditional sender identificationTypeDescription
firstNameLocalNot requiredConditionalStringSender's first/given name in a non-Latin script, as shown in the identity document. Supply together with lastNameLocal.
lastNameLocalNot requiredConditionalStringSender's surname/family name in a non-Latin script, as shown in the identity document. Supply together with firstNameLocal.
firstNameEngNot requiredConditionalStringSender's first/given name in Latin script, as shown in the identity document, regardless of the document's language. Supply together with lastNameEng.
lastNameEngNot requiredConditionalStringSender's surname/family name in Latin script, as shown in the identity document, regardless of the document's language. Supply together with firstNameEng.
phoneNot requiredRequiredStringInternational phone number containing digits only, including the country code. Do not include +, spaces, or separators. Example: 77000000000.
dateOfBirthNot requiredRequiredString, dateSender's date of birth in YYYY-MM-DD format. Example: 1990-05-17.
idTypeNot requiredRequiredStringIdentity document type. Use a value from the document type table below.
idNumberNot requiredRequiredStringDocument number. Preserve letters and leading zeros. For a Russian internal passport (idType = PASSPORT, idIssueCountry = RU), send the number without the series and supply the series separately in idSeries.
idIssueDateNot requiredRequiredString, dateDocument issue date in YYYY-MM-DD format. Example: 2020-11-03.
idIssueCountryNot requiredRequiredStringDocument issuing country, using an uppercase ISO 3166-1 alpha-2 code, such as KZ or RU. This is not the sender's country of residence or the recipient's country.
idSeriesNot requiredConditionalStringRequired for a Russian internal passport: idType = PASSPORT and idIssueCountry = RU. For this method, supply this field only for that document type and issuing country. Send the series separately from idNumber and preserve leading zeros.
currentAddressNot requiredNot requiredObjectNot required for the sender identification scenario described on this page.

Dates contain a calendar date only. Do not append a time or timezone.

Document expiry date and issuing authority code are not required for this scenario.

Name Pair Selection

Populate at least one complete pair:

  • firstNameLocal and lastNameLocal for names written in a non-Latin script.
  • firstNameEng and lastNameEng for names written in Latin script, in any language.

The Eng suffix identifies the API fields for Latin-script names. It does not mean that names should be translated into English. Use the spelling printed in the identity document.

The platform selects the name as follows:

  1. If the Local pair is complete, it is used.
  2. Otherwise, the complete Eng pair is used.
  3. If neither pair is complete, the sender details are incomplete.

First and last names from different pairs are not combined. A missing, null, empty, or whitespace-only value does not complete a pair.

⚠️

If all four name fields are populated, the Local pair takes priority. It will be used for sender identification during processing. Incorrect or inconsistent Local values can affect verification and the disbursement result, including a decline, even when the Eng pair is correct. Populate the pair you intend to use with the sender's name exactly as it appears in the document.

Document Types

When additional sender identification applies, use the following payer.idType values:

ValueDocument
ID_CARDNational identity card.
PASSPORTInternal or domestic passport.
INTERNATIONAL_PASSPORTPassport for international travel.
RESIDENCE_PERMITResidence permit.

These values form the platform's public document type vocabulary. Supported combinations of document type and issuing country are confirmed for your integration during onboarding.

For a Russian internal passport, provide both idSeries and idNumber as separate strings.

Status Updates

Set disbursements[].webhookUrl for each disbursement to receive transaction status updates. See Webhooks: Overview.

StatusMeaning
ACCEPTEDThe platform accepted the disbursement for processing.
DISBURSEMENT_REQUESTEDProcessing is in progress.
PAID_OUTThe disbursement is reported as successfully processed. For additional sender-identification integrations, see Processing time and returns below.
DECLINEDThe disbursement was declined.
ERRORA processing error was reported. Do not automatically resubmit the transfer. A later status update may correct the outcome to PAID_OUT; reconcile it against the same disbursement ID.

Status notifications may include intermediate statuses. Wait for the processing outcome rather than treating ACCEPTED as success.

Processing time and returns

For integrations requiring additional sender identification, allow up to three days for processing. A pending status alone is not a reason to submit another disbursement for the same transfer. If the status is still pending after that period, retrieve the latest status and contact support. The elapsed time alone does not establish that the disbursement failed.

For integrations requiring additional sender identification, a transfer reported as PAID_OUT may subsequently be returned if the recipient's card cannot be credited. This status does not guarantee final credit to the recipient. Do not assume that a return will generate an automatic status update. If the recipient reports non-receipt, contact support with the disbursement ID to investigate the transfer and any return.

Sandbox Testing

Use DisbursementBankCardRUS with your sandbox endpoint, credentials, and an account configured for this method's emulator. Your account manager must confirm that the emulator is enabled for your sandbox integration. The payment method name alone does not enable simulation.

Use the same card fields as in a live request: incomingDetails.number. No additional card fields are needed. The example exercises the basic scenario and omits payer.

📘

These scenarios simulate the payout outcome. A successful sandbox test does not verify the sender's identity or confirm that a particular identity document will be accepted during live processing.

For these two scenarios, use RUB for both currencies, leave submittedAmount.value as null, and send the exact numeric authAmount.value shown below.

authAmount.valueSimulated outcome
100.02PAID_OUT
100.03DECLINED

The result is selected by the amount, not by the card number. These examples do not test live issuer decisions or bank-specific decline reasons.

Use authAmount.value: 100.02 for this success example.

{
  "clientReferenceId": "ru-card-sandbox-success-000001",
  "disbursements": [
    {
      "webhookUrl": "https://merchant.example/webhooks/disbursements",
      "payeePaymentInstrument": {
        "paymentMethodName": "DisbursementBankCardRUS",
        "incomingDetails": {
          "number": "4111111111111111"
        }
      },
      "submittedAmount": {
        "value": null,
        "currency": "RUB"
      },
      "authAmount": {
        "value": 100.02,
        "currency": "RUB"
      }
    }
  ]
}
Declined payout: request changes

Repeat the success request with a new clientReferenceId, such as ru-card-sandbox-decline-000001, and set disbursements[0].authAmount.value to 100.03. Keep the same method name, card field, RUB currencies, and webhook location. The creation response has the same structure and contains a new disbursement ID.

Repeating sandbox tests

Repeated requests for the same amount and currency on the same settlement account may be blocked by duplicate protection before they reach the emulator, even when you change clientReferenceId or the card number. Check disbursementCreationErrors before waiting for an outcome webhook. Your account manager confirms the repeat interval configured for your sandbox account. Running the 100.02 scenario followed by the 100.03 scenario uses different amounts; repeating either scenario is subject to this protection.


Did this page help you?