WATA Payment Form
Creating a Payment Link
The most popular option, which is easier for merchants to integrate. The payment form is hosted by WATA and opens in a separate window or within an iframe on the merchant’s website or app. The WATA payment form may offer several payment methods, such as card payment and payment via a payment gateway, depending on the terminal provided. The payment link may be single-use, becoming invalid after the first successful payment, or multi-use, becoming invalid after a specified period of time.
It is not recommended that payment processing logic be implemented based on the payment link identifier. A payment link is a temporary object that is deleted after its expiry date and time (expirationDateTime). To process a payment, use the orderId — unique order identifier in your system.
A payment link is generated for the terminal whose access token was specified in the request header.
Contact your manager to learn how to enable subscription functionality.
Request parameters
| Parameter | Type | Comment |
|---|---|---|
| amount | Number | Payment amount. A maximum of 2 decimal places is allowed (for kopecks or cents). Example: 1188.00. Minimum value: 10 RUB, 1 USD, 1 EUR. Maximum allowed value: 999999.99. The actual payment amount limit is set by the gateway; ask your manager for details |
| currency | String | Payment currency (RUB, EUR, USD) |
| description | String | Free-form order description |
| orderId | String | Unique order identifier or number in the merchant system. This is the most important parameter for finding a transaction or refund operation |
| successRedirectUrl | String | The URL to which the payer is redirected after successful order payment |
| failRedirectUrl | String | The URL to which the payer is redirected after unsuccessful order payment |
| expirationDateTime | Date | Payment link lifetime. By default, it is valid for 3 days. Minimum lifetime: 10 minutes. Maximum lifetime: 30 days |
| isArbitraryAmountAllowed | Boolean | Allows an arbitrary payment amount: true or false. The value from amount pre-fills the amount input field |
| arbitraryAmountPrompts | Object | Suggested payment amounts displayed on the payment form. Can be used only when isArbitraryAmountAllowed=true. Values are shown as hints under the input field. Example array: [100, 300, 500]. Values cannot be less than amount. Recommended number of hints: 3-4, maximum: 6. Horizontal scrolling is enabled if the hints exceed the row width |
| type | String | Payment link type. One-time link: OneTime; reusable link: ManyTime. If omitted, a one-time link is created |
| subscription | Object | Used only for subscription functionality, which must be enabled on the terminal |
| subscription.period | Number | Billing frequency: For example, '2 weeks' means once every two weeks, and '3 months' means once every three months |
| subscription.interval | String | Interval between charges. Week means weekly, month means monthly |
| subscription.maxPeriods | Number | Number of recurring billing cycles, excluding the first one. For example, if you sold an annual subscription with monthly billing, specify 11 periods because the first one is covered by the current payment |
| subscription.amount | Number | Charge amount. If omitted, the amount from the request is used. Fill this field when using a promo period. For example, the first month is 39 RUB and subsequent months are 99 RUB |
| subscription.startDate | Date | The date of the first subscription charge (must be in the future). It must be in the future. For example, if the customer first paid on January 9 and your regular charges always occur on the 1st day of the month, specify February 1. Another example: a short promo period, such as 3 days for 1 RUB, followed by 1000 RUB per month |
Response parameters
| Parameter | Type | Comment |
|---|---|---|
| id | UUID | Payment link identifier in the WATA system. This is not the transaction UUID |
| amount | String | Payment amount. Payment amount. A maximum of 2 decimal places is allowed (for kopecks or cents). Example: 1188.00 |
| currency | String | Payment currency (RUB, EUR, USD) |
| status | String | Payment link status. Opened means open and valid; Closed means payment by the link is closed |
| url | String | Payment link address |
| terminalName | String | Name of the merchant terminal where the payment link was created |
| terminalPublicId | UUID | Unique merchant terminal identifier |
| creationTime | Date | Date and time when the payment link was created, in UTC |
| type | String | Payment link type. One-time link: OneTime; reusable link: ManyTime |
| orderId | String | Unique order identifier or number in the merchant system |
| description | String | Free-form order description |
| expirationDateTime | Date | Payment link lifetime. By default, it is valid for 3 days. Minimum lifetime: 10 minutes. Maximum lifetime: 30 days |
| isArbitraryAmountAllowed | Boolean | Allows an arbitrary payment amount: true or false. The value from amount pre-fills the amount input field |
| arbitraryAmountPrompts | Object | Suggested payment amounts displayed on the payment form. Example: [100, 300, 500] |
| successRedirectUrl | String | The URL to which the payer is redirected after successful order payment |
| failRedirectUrl | String | The URL to which the payer is redirected after unsuccessful order payment |
Request and response example for creating a payment link
Subscriptions
You can only create a subscription through the API. Currently, getting subscription information is only available in the "Subscriptions" section of the merchant account.
Use subscription functionality responsibly, especially for promotional periods. Ensure that the post-promo price is stated explicitly. Changing the subscription price can lead to chargebacks. If the terms are hidden deep within the Terms and conditions, or if other dark patterns are used, the customer may have grounds to dispute the transaction.
Merchants are not refunded the commission for chargebacks, and penalties may also be imposed. If there are a high number of disputed transactions, the terminal may be disconnected and the merchant's funds frozen for up to 180 days.
Getting a Payment Link by UUID
Request parameters
| Parameter | Type | Comment |
|---|---|---|
| id | UUID | Payment link identifier. This is not a transaction identifier |
Response parameters
| Parameter | Type | Comment |
|---|---|---|
| id | UUID | Payment link identifier in the WATA system. This is not the transaction UUID |
| amount | String | Payment amount. A maximum of 2 decimal places is allowed (for kopecks or cents). Example: 1188.00 |
| currency | String | Payment currency (RUB, EUR, USD) |
| status | String | Payment link status (Opened, Closed) |
| url | String | Payment link address |
| terminalName | String | Name of the merchant terminal where the payment link was created |
| terminalPublicId | UUID | Unique merchant terminal identifier |
| creationTime | Date | Date and time when the payment link was created, in UTC |
| type | String | Payment link type. One-time link: OneTime; reusable link: ManyTime |
| orderId | String | Unique order identifier or number in the merchant system |
| expirationDateTime | Date | Payment link lifetime |
| isArbitraryAmountAllowed | Boolean | Allows an arbitrary payment amount: true or false |
| arbitraryAmountPrompts | Object | Suggested payment amounts displayed on the payment form. Example: [100, 300, 500] |
| description | String | Free-form order description |
| successRedirectUrl | String | The URL to which the payer is redirected after successful order payment |
| failRedirectUrl | String | The URL to which the payer is redirected after unsuccessful order payment |
Request and response example for getting a link by UUID
Searching Payment Links
GET /api/h2h/links/?{conditions}
The request searches for payment links that match specified conditions. For example: payment amount from 1000.01 to 2999.99 RUB and creation date from February 1, 2027 to March 2, 2027.
Important: a payment link is stored in WATA only until its lifetime expires (
expirationDateTime). If you did not change the value, it is valid for 3 days and then deleted.
Request parameters
| Parameter | Type | Comment |
|---|---|---|
| orderId | String | Unique order identifier in the merchant system |
| creationTimeFrom | Date | Creation date from |
| creationTimeTo | Date | Creation date to |
| amountFrom | Number | Payment amount from |
| amountTo | Number | Payment amount to |
| currencies | String | Payment currency |
| statuses | String | Payment link status: Opened (valid), Closed (not valid) |
| sorting | String | Field used to sort the list of links in the response. Available values: orderId, creationTime, amount. Add the desc suffix to the field name for descending order |
| skipCount | Number | Number of records to skip. Used for pagination, for example when you need to receive more than 1000 links. If skipCount=2000, the first 2000 links are skipped and the response will start with the 2001st link |
| maxResultCount | Number | Number of records to return. Default: 10, maximum: 1000 |
Response parameters
| Parameter | Type | Comment |
|---|---|---|
| items | Object | List of found payment links |
| items.id | UUID | Payment link identifier in the WATA system. This is not the transaction UUID |
| items.amount | String | Payment amount. A maximum of 2 decimal places is allowed (for kopecks or cents). Example: 1188.00 |
| items.currency | String | Payment currency (RUB, EUR, USD) |
| items.status | String | Payment link status (Opened, Closed) |
| items.url | String | Payment link address |
| items.terminalName | String | Name of the merchant terminal where the payment link was created |
| items.terminalPublicId | UUID | Unique merchant terminal identifier |
| items.creationTime | Date | Date and time when the payment link was created, in UTC |
| items.type | String | Payment link type. One-time link: OneTime; reusable link: ManyTime |
| items.orderId | String | Unique order identifier or number in the merchant system |
| items.expirationDateTime | Date | Payment link lifetime |
| items.isArbitraryAmountAllowed | Boolean | Allows an arbitrary payment amount: true or false |
| items.arbitraryAmountPrompts | Object | Recommended amount hints on the payment form. Example: [100, 300, 500] |
| totalCount | Number | Total number of records |
Request and response example for searching payment links