RU: TPay - Payments
"paymentMethodName": "TPAY"
Payment Method Features
| Feature | Value |
|---|---|
| Country | Russia |
| Processing Currencies | RUB |
| Payments | Yes |
| -- Min per transaction amount | Vary, depends on your contract |
| -- Max per transaction amount | Vary, depends on your contract |
| Refunds | Full & Partial |
| -- Full Refund | Yes |
| -- Partial Refund | Yes |
| -- Multiple Partial Refunds | Yes |
| Chargebacks | No |
Workflow: Payments

Download in high resolution
List of used API Requests:
| Request | Endpoint | Description |
|---|---|---|
| Intent Creation | POST /processing/api/v1/intents | • Creates a new Intent with one or more Payment transactions. • The platform validates the request, creates internal payment records, and creates the payment link. |
| Refund Creation | POST /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
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 toTPAYincomingDetailsshould include:sessionTimeoutMin,redirectUrl,failureUrl,device,webView,os,browser, andaccount
Intent Request: Example
{
"clientReferenceId": "123456789",
"useCheckoutForm": false,
"payments": [
{
"paymentInstrument": {
"paymentMethodName": "TPAY",
"incomingDetails": {
"sessionTimeoutMin": 20,
"redirectUrl": "https://merchant.example.com/payment/success",
"failureUrl": "https://merchant.example.com/payment/failure",
"device": "Desktop",
"webView": true,
"os": "Windows",
"browser": "Chrome",
"account": "R410011234567890"
}
},
"submittedAmount": {
"value": 1005.25,
"currency": "RUB"
},
"authCurrencyCode": "RUB",
"description": "Vertex - INTENT 1234",
"webhookUrl": "webhookUrl"
}
]
}Intent Request: Fields Description
Top-Level Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
clientReferenceId | String | Required | Order number in the merchant system. |
useCheckoutForm | Boolean | Optional | Used for requesting the payment via Checkout form. If not provide, then considered as false |
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. |
extensionAttributes | Object | Optional | Additional key-value attributes forwarded to the payment partner as is. Send only if agreed with our integration team — see the extensionAttributes section below. |
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 TPay. |
incomingDetails | Object | Required | Payment method-specific data required to initiate the payment. |
incomingDetails
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionTimeoutMin | Integer | Optional | Specifies how long the payment link remains valid, in minutes. If not provided, the link expires after 20 minutes. |
redirectUrl | String | Required | URL to which the payer may be redirected after a successful/unsuccessful (if failureUrl is empty) payment flow, if applicable. |
failureUrl | String | Required | URL to which the payer may be redirected after a failed payment flow, if applicable. |
device | String | Conditional | This field is required to generate the most appropriate link for your payer. If not provided, the default value |
webView | Boolean | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: true / false. If not provided, the default value true will be used, and your payer might not have the best user experience. |
os | String | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: iOS / Android /Windows / Linux. If not provided, the default value Windows will be used, and your payer might not have the best user experience. |
browser | String | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: Chrome / Firefox / JivoMobile / Microsoft Edge / Miui / Opera / Safari / Samsung / WebKit / WeChat / Yandex. If not provided, the default value Chrome will be used, and your payer might not have the best user experience. |
account | String | Conditional | Electronic wallet account number. Maximum 30 characters. Required for merchants with MCC 6050 or 6051. |
submittedAmount
| 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 |
extensionAttributes
A free-form set of key-value attributes that our platform forwards to the payment partner as is — the content is not validated, transformed, or mapped on our side.
- The payment partner may require additional payment or payer attributes (for example, for anti-fraud screening) to improve the payment acceptance rate.
- The exact set of attribute names and values is agreed individually for your account and will be provided by our integration team.
- Send this object only if its usage has been explicitly agreed for your account. If the object is omitted, payment processing is not affected.
- The object is not returned in API responses (Intent or Payment details) or in webhooks.
| Parameter | Type | Required | Description |
|---|---|---|---|
{attributeName} | String | Optional | Attribute name and value as advised by our integration team. |
Response specifics
- The Intent creation response is generally consistent across all supported payment methods.
- Common fields describe the
Intent, thePayment, and the current transaction status.- If required, method-specific data is returned in
payments[].additionalData.details.- For this payment method, the
urlfield contains the URL that would lead your payer to the TPay payment via T-Bank.
Intent Response: Example
{
"intentId": "232510340021612544",
"payments": [
{
"id": "232510340646563840",
"payer": {
"phone": "+XXXXXXXXXXX"
},
"submittedAmount": {
"value": 1005.25,
"currency": "RUB"
},
"authAmount": {
"value": 1005.25,
"currency": "RUB"
},
"paymentInstrument": {
"id": "PI204264628196626432",
"paymentMethodId": "PM199507277233246209",
"paymentMethodName": "TPAY",
"storedDetails": {
"sessionTimeoutMin": 20,
"redirectUrl": "https://merchant.example.com/payment/success",
"failureUrl": "https://merchant.example.com/payment/failure",
"device": "Desktop",
"webView": true,
"os": "Windows",
"browser": "Chrome",
"account": "string"
}
},
"statusMessage": "string",
"status": "AUTHORIZATION_REQUESTED",
"additionalData": {
"details": {
"url": "payment url"
}
}
}
],
"disbursements": [],
"clientReferenceIntentId": "123456789",
"paymentCreationErrors": [],
"disbursementCreationErrors": [],
"intentStatus": "IN_PROGRESS"
}Response Description
Top-Level Response Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
intentId | String | Required | Unique identifier of the Intent in our platform. |
payments | Array of Objects | Required | List of Payment objects created within the Intent. |
disbursements | Array | Optional | List of disbursement objects created within the Intent.Empty if no disbursements were created. |
clientReferenceIntentId | String | Required | Order number in the merchant system. Returned from the request. |
paymentCreationErrors | Array | Required | List of payment creation errors, if any. Empty if no errors occurred. |
disbursementCreationErrors | Array | Required | List of disbursement creation errors, if any. Empty if no errors occurred. |
intentStatus | String | Required | Current Intent status.See the dedicated section of this API guide for possible values and the status model. |
payment
| Parameter | Type | Required | Description |
|---|---|---|---|
id | String | Required | Unique identifier of the Payment in our platform. |
payer | Object | Optional | Payer details. Returned when provided in the request. |
submittedAmount | Object | Required | Submitted payment amount and currency. Returned from the request. |
authAmount | Object | Required | Authorised amount and currency used for the payment. |
paymentInstrument | Object | Required | Payment method information associated with the payment. |
processingStatusCode | String | Required | Processing status code. May indicate success or an error. |
statusMessage | String | Optional | Status message. Returned when an error occurs. |
status | String | Required | Current payment status. See the dedicated section of this API guide for possible values and the status model. |
additionalData | Object | Optional | Method-specific data required to continue or complete the payment flow. |
payer
| Parameter | Type | Required | Description |
|---|---|---|---|
firstname | String | Optional | Payer's first name. Returned from the request. |
lastname | String | Optional | Payer's last name. Returned from the request. |
phone | String | Optional | Payer's phone number. Returned from the request. |
email | String | Optional | Payer's email address. Returned from the request. |
countryIsoCode | String | Optional | Payer's country of residence in ISO 3166-1 alpha-2 format. Returned from the request. |
locale | String | Optional | Payer's preferred language locale. Returned from the request. |
taxIdentification | String | Optional | Consumer tax identification number. Returned from the request. |
merchantPayerReference | String | Optional | Merchant-provided payer reference. Returned from the request. |
submittedAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Required | Submitted order amount. Returned from the request. May differ from the authorised amount if FX conversion is applied. |
currency | String | Required | Submitted order currency. Returned from the request. May differ from the authorised amount if FX conversion is applied. |
authAmount
| Parameter | Type | Required | Description |
|---|---|---|---|
value | Number | Required | Authorised amount used for the payment. May differ from the submitted amount if FX conversion is applied. |
currency | String | Required | Authorisation currency used for the payment. May differ from the submitted amount if FX conversion is applied |
paymentInstrument
| Parameter | Type | Required | Description |
|---|---|---|---|
id | String | Optional | Unique identifier of the payment instrument in our platform. |
paymentMethodId | String | Optional | Unique identifier of the payment method in our platform. |
paymentMethodName | String | Optional | Payment method name. Returned from the request. |
storedDetails | Object | Optional | Stored payment instrument details. Returned when applicable. |
storedDetails
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionTimeoutMin | Integer | Optional | Specifies how long the payment link remains valid, in minutes. If not provided, the link expires after 20 minutes. |
redirectUrl | String | Optional | URL to which the payer may be redirected after a successful/unsuccessful (if failureUrl is empty) payment flow, if applicable. |
failureUrl | String | Optional | URL to which the payer may be redirected after a failed payment flow, if applicable. |
device | String | Conditional | This field is required to generate the most appropriate link for your payer. If not provided, the default value |
webView | Boolean | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: true / false. If not provided, the default value true will be used, and your payer might not have the best user experience. |
os | String | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: iOS / Android /Windows / Linux. If not provided, the default value Windows will be used, and your payer might not have the best user experience. |
browser | String | Conditional | This field is required to generate the most appropriate link for your payer. Possible values: Chrome / Firefox / JivoMobile / Microsoft Edge / Miui / Opera / Safari / Samsung / WebKit / WeChat / Yandex. If not provided, the default value Chrome will be used, and your payer might not have the best user experience. |
account | String | Conditional | Electronic wallet account number. Maximum 30 characters. Required for merchants with MCC 6050 or 6051.Returned from the request. |
additionalData
| Parameter | Type | Required | Description |
|---|---|---|---|
details | Object | Required | Method-specific details required to continue or complete the payment flow. |
details
| Parameter | Type | Required | Description |
|---|---|---|---|
url | String | Required | URL to which the payer must be redirected complete the payment. |
Refunds
Download in high resolution
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. USD -> 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": "USD"
// },
// 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
Our system allows emulating different test cases in the sandbox environment.
To simulate specific scenarios and receive different results, use the intent.description parameter.
TPay Payment Test flow
High-resolution image is available on the link
List of Supported Cases
| Case | Scenario Keyword (intent.description) | Final Payment Status |
|---|---|---|
| -- | CAPTURED |
| -- | CANCELLED |
| DeclinedPayment | DECLINED |
| LinkCreationError | ERROR |
Case "Successful payment"
Steps:
- The client creates an intent via
POST /processing/api/v1/intents. - A synchronous response is returned with
paymentStatus = AUTHORIZATION_REQUESTED. - Open the link from
payments.additionalData.details.url. - A callback is received with
paymentStatus = CAPTURED.
Case "Expired Link"
Steps:
- The client creates an intent via
POST /processing/api/v1/intents. (you can usesessionTimeoutMinparameter to adjust the expiration time) - A synchronous response is returned with
paymentStatus = AUTHORIZATION_REQUESTED. - Wait for the expiration time
- A callback is received with
paymentStatus = CANCELLED.
Case "Payment Declined"
Steps:
- The client creates an intent via
POST /processing/api/v1/intentsusing theintent.descriptionparameter with the value"DeclinedPayment". - A synchronous response is returned with
paymentStatus = AUTHORIZATION_REQUESTED. - Open the link from
payments.additionalData.details.url. - A callback is received with
paymentStatus = DECLINED.
Case "Failure"
Steps:
- The client creates an intent via
POST /processing/api/v1/intentsusing theintent.descriptionparameter with the value"LinkCreationError". - A synchronous response is returned with
paymentStatus = ERROR.
Updated about 2 hours ago
