Skip to main content

Transfers without the card tokenization widget

This scenario describes initiating a money transfer if you decided to obtain and store bank card details on your side (you must comply with the additional PCI DSS requirements).

Sequence diagram of a money transfer

Sequence diagram of a money transfer

Step 1. Preliminary rate calculation (optional)

Before initiating the transfer, you can request the currency exchange rate using the calculate method.

The conversion may use either a direct or inverse rate, depending on the transfer direction and currencies involved.

The response will include the current exchange rate, total debit amount, and payout amount. The rate is provided for reference only and may change. The rate is reserved only after a multisession is started.

Request examples
curl -X POST \
https://demo.bank131.ru/api/v1/calculate \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"amounts": {
"source": {
"amount": 357912,
"currency": "RUB"
},
"destination": {
"amount": null,
"currency": "TRY"
}
}
}
Response examples
{
"amounts": {
"source": {
"amount": 357913,
"currency": "RUB"
},
"destination": {
"amount": 131426,
"currency": "TRY"
},
"transfer_fee": {
"amount": 0,
"currency": "RUB"
},
"sms_fee": {
"amount": 0,
"currency": "RUB"
},
"payment": {
"amount": 5400,
"currency": "RUB"
}
},
"exchanges": {
"source": {
"amount": 357912,
"currency": "RUB"
},
"destination": {
"amount": null,
"currency": "TRY"
},
"rate": {
"fx_rate": 2.7233,
"quantity": 1
}
}
}

Step 2. Starting the transfer

Start the transfer using the session/multi/init method. Once the multisession is created, the system will perform verifications on the sender, validate the recipient's payout eligibility, calculate and reserve the final exchange rate with the exact debit and payout amounts.

The exchange rate is reserved for a maximum of 5 minutes. If you attempt to complete the transaction after this period, the session will terminate with the rate_has_changed error code.

Request examples
curl -X POST \
https://demo.bank131.ru/api/v2/session/multi/init \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_list": [
{
"amount_details": { // The same as in the payout_list, the amount and currency should be the same
"amount": 37700,
"currency": "TJS"
},
"customer": {
"reference": "lucky"
},
"participant_details": {
"sender": {
"citizenship_country_iso3": "TRY",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"state": "Московская область",
"city": "Уренгой",
"postal_code": "119900",
"street": "Конаковская",
"building": "99",
"flat": "1",
"date_of_birth": "1998-03-15",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/"
},
"payment_details": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "4111111111111111"
}
}
}
}
],
"payout_list": [ // The same as in the payment_list, the amount and currency should be the same
{
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"date_of_birth": "2000-11-08",
"country_iso3": "TJK",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
},
"payout_details": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "2204320396205389"
}
}
}
}
]
}'
Response examples
{
"status": "ok",
"session": {
"id": "ps_3808365",
"status": "in_progress",
"created_at": "2025-08-08T12:39:15.668563Z",
"updated_at": "2025-08-08T12:39:16.388348Z",
"payout_list": [
{
"id": "po_955259",
"status": "in_progress",
"created_at": "2025-08-08T12:39:16.439833Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"payment_metadata": {},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"payment_list": [
{
"id": "pm_2765898",
"status": "in_progress",
"created_at": "2025-08-08T12:39:16.439730Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
]
}
}

Wait for a ready_to_confirm webhook confirming the transfer is ready to process at the specified exchange rate with the final debit and payout amounts.

In the webhook, the confirm_information.exchanges object will contain the current exchange rate and the debit and payout amounts.

For cash pick-up transfers to Turkey, the details object will contain a BASE64-encoded cash pickup code tcn_code_encoded. The sender must personally provide this code to the recipient. The code serves as authorization for cash pick-up at the service point. The code is valid only after receiving a payment_finished webhook with the accepted status.

Webhook example
{
"status": "ok",
"session": {
"id": "ps_3808364",
"status": "in_progress",
"created_at": "2025-08-08T12:30:02.616632Z",
"updated_at": "2025-08-08T12:30:04.489651Z",
"payout_list": [
{
"id": "po_955258",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401467Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"payment_list": [
{
"id": "pm_2765897",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401320Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
],
"next_action": "confirm"
},
"confirm_information": {
"exchanges": [
{
"id": "pm_2765897",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 306237,
"currency": "RUB"
}
},
{
"id": "po_955258",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
}
]
}
}

Step 3. Confirming the transfer

Check the transfer details and confirm the transfer using the session/confirm method. You need to confirm the session within 5 minutes. You can cancel the transfer using the session/cancel method.

Request example
curl -X POST \
https://demo.bank131.ru/api/v2/session/confirm \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3808364",
"confirm_information": {
"exchanges": [
{
"id": "pm_2765897",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
},
{
"id": "po_955258",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
}
]
}
}'
Response example
{
"status": "ok",
"session": {
"id": "ps_3808364",
"status": "in_progress",
"created_at": "2025-08-08T12:30:02.616632Z",
"updated_at": "2025-08-08T12:32:05.891206Z",
"payments": [
{
"id": "po_955258",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401467Z",
"payment_method": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"payment_metadata": {},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"acquiring_payments": [
{
"id": "pm_2765897",
"status": "in_progress",
"created_at": "2025-08-08T12:30:03.401320Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
],
"actions": {
"confirm": "2025-08-08T12:32:05.949621Z"
}
}
}

After the session is confirmed, the sender's funds will be frozen for debit, and the debit must be confirmed via 3D Secure:

  • Wait for an action_required webhook with a 3D Secure link and redirect the user to complete 3D Secure.
  • After successful 3D Secure completion, the funds will be frozen on the sender's card.
Webhook example
curl -X POST \
https://partner.ru \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "action_required",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"payment_list": [
{
"id": "pm_131",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user@131.ru"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "8801",
"bin": "220220",
"card_id": "05ee8cf7ee103444b384731d74b1b5c87fbb8f751fc3c452c9092fe1245bdc"
}
},
"amount_details": {
"amount": 15000,
"currency": "rub"
},
"amounts": {
"fee": {
"merchant_fee": {
"amount": 10,
"currency": "RUB"
}
}
},
"customer_interaction": {
"type": "redirect",
"redirect": {
"url": "https://bank131.ru?foo=bar",
"base_url": "https://bank131.ru",
"method": "POST",
"qs": {
"foo": "bar"
},
"params": {
"PaReq": "sdfew^//asdhbv",
"MD": "abc75daefnn"
}
}
},
"transaction_info": {
"rrn": "425307614918",
"auth_code": "057441"
}
}
]
}
}'

Step 4. Canceling the transfer (optional)

If required, you can cancel the transfer using the session/cancel method.

Request example
curl -X POST \
https://demo.bank131.ru/api/v2/session/cancel \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3808365"
}'
Response example
{
"status": "ok",
"session": {
"id": "ps_3809232",
"status": "in_progress",
"created_at": "2025-08-11T10:14:54.779728Z",
"updated_at": "2025-08-11T10:14:58.370629Z",
"payout_list": [
{
"id": "po_955280",
"status": "pending",
"created_at": "2025-08-11T10:14:55.586736Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"citizenship_country_iso3": "TJK"
}
}
}
],
"payment_list": [
{
"id": "pm_2766741",
"status": "pending",
"created_at": "2025-08-11T10:14:55.586645Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
]
}
}

Wait for a payment_finished webhook with status = cancelled. The session is canceled. Create a new session if you need to restart the transfer.

Step 5. Payout to the recipient

Wait for a payment_finished webhook with status = accepted. Upon successful payout, the frozen amount will be debited from the sender.

If an error occurs during the transfer process, the payment_finished webhook will contain an error code. List of possible errors

Webhook example
curl -X POST \
https://partner.ru \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "payment_finished",
"session": {
"id": "ps_3230",
"status": "accepted",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"payout_list": [
{
"id": "po_2018",
"status": "succeeded",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payout_details": {
"type": "bank_account",
"bank_account": {
"system_type": "ru",
"ru": {
"bic": "*******02",
"account": "****************5734",
"full_name": "***",
"description": "*****",
"is_fast": false
}
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"amounts": {
"fee": {
"merchant_fee": {
"amount": 10,
"currency": "RUB"
}
}
},
"fiscalization_details": {
"professional_income_taxpayer": {
"services": [
{
"name": "****",
"amount_details": {
"amount": "10000",
"currency": "rub"
},
"quantity": 1
}
],
"tax_reference": "*********628",
"receipt": {
"id": "**********",
"link": "https://lknpd.nalog.ru/api/v1/receipt/*****/print"
},
"payer_type": "foreign",
"payer_name": "******"
}
},
"transaction_info": {
"rrn": "425307614918",
"auth_code": "057441"
}
}
]
}
}'
Ask AI