Skip to main content

General Information

How It Works

  • The API follows REST principles and is based on the JSON API specification.
  • Requests must include the HTTP header Content-Type: application/json.
  • API response timeout: 1 minute.

For requests with a body, pass the following header:

Content-Type: application/json

Environments

Production

https://api.wata.pro/api/h2h/

Sandbox

https://api-sandbox.wata.pro/api/h2h/

Authentication

Access to the API uses Bearer authentication based on a JWT token, referred to below as the access token. The token must be passed in every request that requires authentication in the Authorization HTTP header.

Pass the token in every protected request:

Authorization: Bearer <access_token>

An access token can be obtained in the merchant account:

  1. Receive an invitation by email from your account manager.
  2. Follow the link in the email to set a password.
  3. After creating the password, sign in to the merchant account at https://merchant.wata.pro/login.
  4. In the 'Terminals' section, click on the terminal tile.
  5. A settings panel will open on the right. Create tokens there. You can create from 1 to 5 tokens and delete any you no longer need.
  6. Enter a name and select the token lifetime. Access token lifetimes can range from 1 to 12 months.
  7. After this period expires, the system returns HTTP status 401 to API requests. Create a reminder so you can reissue the access token in advance and replace it in your system.

Merchant account

Important

  • Store the access token in a secure place.
  • WATA does not store access tokens in plain text.
  • An existing token cannot be restored.
  • Generate a new token when needed.
  • Choose the access token lifetime deliberately: from 1 to 12 months.
  • After the token expires, the API returns HTTP 401.

Testing

  • Use the sandbox environment for testing:
https://api-sandbox.wata.pro/api/h2h/
  • Sandbox merchant account:
https://merchant-sandbox.wata.pro/
  • The sandbox environment is separate from the production environment. To gain access to the sandbox merchant account and terminal, please contact your account manager. They will request the sandbox settings on your behalf and provide you with separate credentials. Production credentials cannot be used in the sandbox.
  • The process for getting a test access token is the same as in production environment.

Test Cards

TypeCard numberPayment result
MIR card without 3DS2200 0000 2222 2222Success
MIR card without 3DS2203 0000 0000 0043Declined
MIR card with 3DS2200 0000 0000 0004Success
MIR card with 3DS2202 2022 0220 2200Declined
VISA card without 3DS4000 0000 0000 3055Success
VISA card without 3DS4111 1111 1111 1111Declined
VISA card with 3DS4242 4242 4242 4242Success
VISA card with 3DS4012 8888 8888 1881Declined

Rate Limits

To help maintain a stable service and protect the API from excessive polling, the rate of GET requests to the API is limited. To receive status updates, rely on guaranteed webhook notifications, which can be delivered within up to 32 hours.

Only the following requests are limited

GET /api/h2h/links
GET /api/h2h/links/{id}
GET /api/h2h/v2/transactions
GET /api/h2h/transactions/{id}
GET /api/h2h/finance/balance

All other methods, such as POST and PUT, and all other endpoints are not limited.

Limit size

  • 1 GET request every 30 seconds.
  • The limit is counted separately for each client and each object.

How the object is determined

Links
- /links/{id} -> limit for a specific id
- /links -> general limit

Transactions
- /transactions/{id} -> limit for a specific transaction
- /v2/transactions?orderId=... -> limit for the specified orderId
- /v2/transactions -> general limit

What happens when the limit is exceeded

  • HTTP 429 (Too Many Requests) is returned.
  • The response indicates how many seconds to wait before repeating the request.

Recommendation

Use webhooks to receive updates. Polling requests are intended only for rare status checks or fallback scenarios.


HTTP Statuses

CodeMeaningDescription
200OKThe request was processed successfully
400Bad RequestRequest data is invalid. Check the request, correct the data, and send it again
401UnauthorizedThe access token was not provided or has expired. Update the access token
403ForbiddenYou do not have access to the requested endpoint
429Too Many RequestsTry sending the request again after the interval specified in the response
500Server ErrorContact support with a description of the issue and the request body

When a 400 status code is returned, the response body contains error details.

Example error details response

Response 400

{
"error":{
"code":null,
"message":"Your request is not valid!",
"details":"The following errors were detected during validation - 'Amount' must be filled in.",
"data":{

},
"validationErrors":[
{
"message":"'Amount' must be filled in.",
"members":[
"amount"
]
}
]
}
}

Error Codes

CodeDescription
Payment:PL_1001Invalid payment link amount. The amount is too small or too large
Payment:PL_1002Invalid payment link currency. Creating links in this currency is not allowed
Payment:PL_1003The payment link is unavailable or has already been paid
Payment:CRY_1001Card data encryption error
Payment:TRA_1001Invalid card data format when creating a transaction
Payment:TRA_1002Invalid card number when creating a transaction
Payment:TRA_1003Invalid card expiration date when creating a transaction
Payment:TRA_1004Invalid CVV value when creating a transaction
Payment:TRA_1005Invalid amount when creating a transaction
Payment:TRA_1006Invalid currency {currency}
Payment:TRA_1010Cardholder name is required
Payment:TRA_1011Payer email is required
Payment:TRA_1012The card payment system type is not supported
Payment:TRA_1013This payment method is not supported. For example, SBP payment was attempted when this method is not enabled for the terminal
Payment:TRA_1016Processing with negative balance is not configured for the terminal
Payment:TRA_1019Expected response for the pre-payment webhook was not received
Payment:TRA_1101Invalid refund amount
Payment:TRA_1102Insufficient funds on the terminal balance for refund
Payment:TRA_1103Another refund cannot be created while there are unfinished refunds for this transaction
Payment:TRA_2001This card type is not supported by the gateway
Payment:TRA_2002Insufficient funds
Payment:TRA_2004Suspected fraud
Payment:TRA_2006Issuer refused to process the online operation
Payment:TRA_2007Card is lost
Payment:TRA_2009Network refused to process the operation or the CVV code is incorrect
Payment:TRA_2010Card is not intended for online payments
Payment:TRA_2011Issuer not found
Payment:TRA_2012Refusal at the cardholder's request
Payment:TRA_2013Acquirer-side error: transaction was formed incorrectly
Payment:TRA_2014Unknown card issuer
Payment:TRA_2015Card is not intended for payments
Payment:TRA_2017Card is stolen
Payment:TRA_2018Card has expired or the expiration date is incorrect
Payment:TRA_2019Invalid PIN code
Payment:TRA_2020Card restriction
Payment:TRA_2021Transaction is not allowed for the card
Payment:TRA_2022Card amount limit exceeded
Payment:TRA_2023Card blocked due to security violations
Payment:TRA_2024Card operation limit exceeded
Payment:TRA_2999Payment cannot be processed

Technical Documentation