Payments via T-Pay
Starting September 1, 2026, T-Bank will disable T-Pay payments via QR code in the desktop browser (as required by Federal Law No. 248-FZ dated July 23, 2025, on the universal payment code).
Until that date, the current QR code scenario remains in effect. Starting September 1, 2026, instead of the payer's QR code, you need to redirect users via a link to the T-Bank web interface for payment.
You can switch to the new scenario right now—there is no need to notify T-Bank or coordinate the transition.
During payments via T-Pay the payer authentication is performed through logging into the T-Bank app. Payers do not have to enter card details to make payments.
You can accept T-Pay payments in two ways:
- with a QR code, which works for payments made from a desktop browser (generate and display the QR code on your own)
- with a URL to the T-Bank application, which works for payments made from a mobile device
T-Pay payments are only carried out with funds being held (pre-authorized).
Payment scenario
The payment scenario depends on the payer's payment channel: mobile device (mobile) or desktop browser (desktop). The payer device properties in the request define the format of the payment link in the action_required webhook.
- Mobile device (mobile)
- Desktop browser (desktop)
-
Create a session separately using the
session/createmethod and then start the payment (session/start/payment), or create a session along with the payment using thesession/init/paymentmethod. Pass all the required parameters:- Pass the
tpayvalue in thetypeparameter of theinternet_bankingobject. - Pass the
mobilevalue in thetypeparameter of theplatform_detailsobject. Specify one of the acceptable values in theosandbrowserparameters.
Request example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"platform_details": {"type": "mobile","os": "ios","browser": "chrome"}}}'Response example
{"status": "ok","session": {"id": "ps_3813062","status": "in_progress","created_at": "2025-09-05T07:14:28.236854Z","updated_at": "2025-09-05T07:14:28.298522Z","acquiring_payments": [{"id": "pm_2769418","status": "in_progress","created_at": "2025-09-05T07:14:28.310910Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"amounts": {}}]}} - Pass the
-
Wait for a
ready_to_confirmwebhook from Bank 131 when Bank 131 is ready to process the payment and is waiting for your confirmation. -
Confirm your payment by sending a
session/confirmrequest, or cancel the payment sending asession/cancelrequest. -
Bank 131 will send you an
action_requiredwebhook containing a URL withinredirect.urlto forward the payer to the T-Bank mobile application.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_3813062","status": "in_progress","created_at": "2025-09-05T07:49:12.513214Z","updated_at": "2025-09-05T07:49:24.628403Z","acquiring_payments": [{"id": "pm_2769418","status": "pending","created_at": "2025-09-05T07:49:12.605322Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"amounts": {},"customer_interaction": {"type": "redirect","redirect": {"url": "https://o.tbank.ru/tpay/3000000000000021275","base_url": "https://o.tbank.ru/tpay/3000000000000021275","method": "GET","params": {}}}}],"actions": {"confirm": "2025-09-05T07:49:24.148058Z"}}}' -
Forward the payer by the link passed within the
redirect.urlparameter to the T-Bank mobile application. Wait until the payer approves or cancels the payment.After being redirected by the URL, the payer will have 20 minutes to complete the payment. Otherwise, the session terminates within 20 minutes with the
canceledstatus. -
Wait for a
ready_to_capturewebhook and capture the amount that is on hold in full or partially (session/capture), or decline the payment (session/cancel). -
Wait for a
payment_finishedwebhook containing the payment result from Bank 131. Thesucceededstatus indicates a successful payment.
-
Create a session separately using the
session/createmethod and then start the payment (session/start/payment), or create a session along with the payment using thesession/init/paymentmethod. Pass all the required parameters:- Pass the
tpayvalue in thetypeparameter of theinternet_bankingobject. - Pass the
desktopvalue in thetypeparameter of theplatform_detailsobject. Specify one of the acceptable values in theosandbrowserparameters.
Request example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"platform_details": {"type": "desktop","os": "windows","browser": "chrome"}}}'Response example
{"status": "ok","session": {"id": "ps_3813062","status": "in_progress","created_at": "2025-09-05T07:14:28.236854Z","updated_at": "2025-09-05T07:14:28.298522Z","acquiring_payments": [{"id": "pm_2769418","status": "in_progress","created_at": "2025-09-05T07:14:28.310910Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"amounts": {}}]}} - Pass the
-
Wait for a
ready_to_confirmwebhook from Bank 131 when Bank 131 is ready to process the payment and is waiting for your confirmation. -
Confirm your payment by sending a
session/confirmrequest, or cancel the payment sending asession/cancelrequest. -
Bank 131 will send you an
action_requiredwebhook containing a URL for QR code withinredirect.url. Generate and display the QR code to the payer on your own.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_3813062","status": "in_progress","created_at": "2025-09-05T07:49:12.513214Z","updated_at": "2025-09-05T07:49:24.628403Z","acquiring_payments": [{"id": "pm_2769418","status": "pending","created_at": "2025-09-05T07:49:12.605322Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"amounts": {},"customer_interaction": {"type": "redirect","redirect": {"url": "https://www.tinkoff.ru/tpay/3000000000000021275","base_url": "https://www.tinkoff.ru/tpay/3000000000000021275","method": "GET","params": {}}}}],"actions": {"confirm": "2025-09-05T07:49:24.148058Z"}}}' -
Display the link passed within the
redirect.urlparameter as a QR code. Wait until the payer approves or cancels the payment.After being redirected by the URL, the payer will have 20 minutes to complete the payment. Otherwise, the session terminates within 20 minutes with the
canceledstatus. -
Wait for a
ready_to_capturewebhook and capture the amount that is on hold in full or partially (session/capture), or decline the payment (session/cancel). -
Wait for a
payment_finishedwebhook containing the payment result from Bank 131. Thesucceededstatus indicates a successful payment.
Payment via T-Bank's web interface
Starting September 1, 2026, the payment scenario in the desktop browser is as follows:
-
Create a session separately using the
session/createmethod and then start the payment (session/start/payment), or create a session along with the payment using thesession/init/paymentmethod. Pass all the required parameters:- Pass the
tpayvalue in thetypeparameter of theinternet_bankingobject. - Pass the
desktopvalue in thetypeparameter of theplatform_detailsobject. Specify one of the acceptable values in theosandbrowserparameters.
Request example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 67000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"platform_details": {"type": "desktop","os": "windows","browser": "chrome"}}}' - Pass the
-
Wait for a
ready_to_confirmwebhook from Bank 131 when Bank 131 is ready to process the payment and is waiting for your confirmation. -
Confirm your payment by sending a
session/confirmrequest, or cancel the payment sending asession/cancelrequest. -
Bank 131 will send you an
action_requiredwebhook containing a payment link in theredirect.urlparameter.
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_3813062",
"status": "in_progress",
"created_at": "2025-09-05T07:49:12.513214Z",
"updated_at": "2025-09-05T07:49:24.628403Z",
"acquiring_payments": [{
"id": "pm_2769418",
"status": "pending",
"created_at": "2025-09-05T07:49:12.605322Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "tpay"
}
},
"amount_details": {
"amount": 67000,
"currency": "RUB"
},
"amounts": {},
"customer_interaction": {
"type": "redirect",
"redirect": {
"url": "https://www.tinkoff.ru/tpay/3000000000000021275",
"base_url": "https://www.tinkoff.ru/tpay/3000000000000021275",
"method": "GET",
"params": {}
}
}
}],
"actions": {
"confirm": "2025-09-05T07:49:24.148058Z"
}
}
}'
-
Forward the payer by the link from the
redirect.urlparameter to T-Bank's web interface. Wait until the payer approves or cancels the payment.The link cannot be opened in an
iframe. Forward the payer directly by the link to T-Bank's web interface.After being redirected, the payer will have 20 minutes to complete the payment. Otherwise, the session terminates within 20 minutes with the
canceledstatus. -
Wait for a
ready_to_capturewebhook and capture the amount that is on hold in full or partially (session/capture), or decline the payment (session/cancel). -
Wait for a
payment_finishedwebhook containing the payment result from Bank 131. Thesucceededstatus indicates a successful payment.
Sequence diagram
Show diagrams
- Mobile device (mobile)
- Desktop browser (desktop)
- Desktop browser (desktop): payment via the web interface



Recurring payments
To perform MIT recurring payments or CIT recurring payments via T-Pay:
-
Get a token by sending
recurrent=true(in thepayment_optionsobject) in the request. If the payment is successful, you will get the token in thepayment_finishedwebhook in therecurrent.tokenparameter.Request example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 670000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"recurrent": true,"platform_details": {"type": "mobile","os": "ios","browser": "chrome"}}}'Response example
{"status": "ok","session": {"id": "ps_3813071","status": "in_progress","created_at": "2025-09-05T07:24:45.996726Z","updated_at": "2025-09-05T07:24:46.081328Z","acquiring_payments": [{"id": "pm_2769427","status": "in_progress","created_at": "2025-09-05T07:24:46.108909Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 670000,"currency": "RUB"},"amounts": {},"payment_options": {"recurrent": true}}]}} -
Use the token to make recurring payments.
Examples
- MIT recurring payment
- CIT recurring payment
- Request example
- Response example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "recurrent","recurrent": {"token": "e9876f32bcd947f79c324cf2da5726304a894f6ae2037de7705fdb3e0a134d39","initiator":"merchant"}},"amount_details": {"amount": 670000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"platform_details": {"type": "mobile","os": "android","browser": "chrome"}}}'{"status": "ok","session": {"id": "ps_3812845","status": "in_progress","created_at": "2025-09-03T11:04:27.322539Z","updated_at": "2025-09-03T11:04:27.381848Z","acquiring_payments": [{"id": "pm_2769418","status": "in_progress","created_at": "2025-09-03T11:04:27.394705Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 670000,"currency": "RUB"},"amounts": {}}]}}- Request example
- Response example
curl -X POST \https://proxy.bank131.ru/api/v1/session/init/payment \-H 'Content-Type: application/json' \-H 'X-PARTNER-PROJECT: your_project_name' \-H 'X-PARTNER-SIGN: signature' \-d '{"payment_details": {"type": "recurrent","recurrent": {"token": "e9876f32bcd947f79c324cf2da5726304a894f6ae2037de7705fdb3e0a134d39","initiator":"client"}},"amount_details": {"amount": 670000,"currency": "RUB"},"customer": {"reference": "lucky"},"payment_options": {"platform_details": {"type": "mobile","os": "ios","browser": "chrome"}}}'{"status": "ok","session": {"id": "ps_3813062","status": "in_progress","created_at": "2025-09-03T11:04:27.322539Z","updated_at": "2025-09-03T11:04:27.381848Z","acquiring_payments": [{"id": "pm_2769254","status": "in_progress","created_at": "2025-09-03T11:04:27.394705Z","customer": {"reference": "lucky"},"payment_details": {"type": "internet_banking","internet_banking": {"type": "tpay"}},"amount_details": {"amount": 670000,"currency": "RUB"},"amounts": {}}]}}
How to make a refund
To make refunds using T-Pay, follow the standard procedure.