Transfer between bank accounts IBAN to IBAN
Transfer between bank accounts IBAN to IBAN (further down A2A) are direct electronic transfers of funds from the buyer's bank account to the recipient's account.
Currently, this method is only available with direct integration.
Direct integration
Interaction format:
Please note that with direct integration, the entire interaction interface must be implemented on your side.
List of improvements:
display the a2a payment method button on your site (1 in the diagram)
redirect the client to the page with the list of banks (6 in the diagram)
Recommendations for interacting with the payer when redirecting from desktop via QR:
Behaviour after receiving the callback:
- Callback "success" → automatically show confirmation on the intermediate page and offer a "Return to site" button
- Callback "failure" → show status: "Payment failed. Try again", and a button for retry
- Ensure the QR page closes or redirects the user after receiving the callback (e.g. automatically after 5 minutes)
display the final payment status (10 in the diagram)
When creating a payment, send a request with the following parameters:
| Parameter | Type | Required | Description |
pos_id | UUID | ✅ | Merchant's identifier (POS_ID) |
mode | MODE | ✅ | direct |
method | METHOD | ✅ | Payment method ( purchase) |
amount | Number | ✅ | Transaction amount. Must be a positive number. The number of decimal digits must be less than or equal to 2 (e.g., 100.00, 250, 50.50) |
currency | CURRENCY | ✅ | Transaction currency (ISO_4217) |
description | String | ✅ | Payment description |
order_id | String | ✅ | Unique identifier of order |
order_3ds_bypass | String | ✅ | 3-D Secure flow option |
payway | String | ✅ | Optional payway. Use "bank_pay" for processing a2a payments |
products | Array[Product] | Array of products to be paid | |
customer_id | String | ✅ | Customer identifier in merchant's system. Is not mandatory in case of using customer_tax_id |
customer_tax_id | String | ✅ | Customer’s tax identification number. The parameter is mandatory for a2a payments |
customer_fname | String | ✅ | Customer first name |
customer_lname | String | ✅ | Customer last name |
customer_email | String | Customer email | |
customer_phone | String | Customer phone | |
customer_ip | String | Customer IP address | |
customer_country | String | Customer country (ISO 3166-1 (alpha-2)). For instance, UA for Ukraine | |
server_url | URL | Webhook notification will be sent to this URL | |
result_url | URL | Customer will be redirected to this URL after payment. | |
merchant_mcc | MCC | MCC for this transaction | |
payload | String | Field for merchant custom data. Max 4000 symbols. | |
validation_url | String | Preflight request will be sent to this URL |
Request example:
curl --location 'https://cpay.tranzzo.com/api/v1/payment' \
--header 'Content-Type: application/json' \
--header 'X-API-AUTH: CPAY-HMAC-SHA1 $API_KEY:$SIGNATURE' \
--header 'X-API-KEY: $ENDPOINTS_KEY' \
--data '{
"pos_id": "${POS_ID}",
"mode": "direct",
"method": "purchase",
"amount": 1,
"currency": "UAH",
"description": "Order description",
"order_id": "123",
"order_3ds_bypass": "always",
"payway": "bank_pay",
"server_url": "http://callback-stub:9000/consume",
"result_url": "https://example.com/result",
"payload": "sale=true"
}'
The amount may be changed by the payer and differ from the original request.
Be sure to account for and process the actual amount that will be credited to your account.
You will receive the changed amount in the processed_amount parameter in the callback.
Example response after payment initialization (returns user_action_url):
{
"amount": 1,
"cc_mask": "411111******1111",
"cc_token": "ODJkZjBhNmY2OTMyNDJlN2wjMjFjfTQzOXU3ZDFhYzI6cWJmWHFmMHlzM3hYaXJMWEZv",
"created_at": "2026-02-09T16:06:34.456",
"currency": "UAH",
"customer_country": "UA",
"customer_email": "[email protected]",
"customer_fname": "Tom",
"customer_lname": "Hanks",
"customer_phone": "+380999999999",
"description": "Order description",
"gateway_order_id": "2bf5044c-1daa-47b8-a6c0-b9173675ca5c",
"method": "purchase",
"mode": "direct",
"options_3ds": "always",
"order_id": "2769312212",
"payload": "sale=true",
"payment_id": "bee8e3b9-46ee-4db8-8275-95d8be202aeb",
"payway": "bank_pay",
"pos_id": "ab4c4e99-0154-449a-abae-e42cafdfce54",
"processed_at": "2026-02-09T16:06:35.456",
"receipt_url": "https://cpay.tranzzo.com/public/receipt/12491284012940129402424124124124124ffef3re3rf32f2vf",
"result_url": "https://example.com/result",
"status": "pending",
"status_code": "2124",
"status_description": "Waiting for redirect to continue payment",
"user_action_required": true,
"user_action_url": "https://int.secure3d.net/BNzZkf/action/bee8e3b9-46ee-4db8-8275-95d8be202aeb/start"
}
Additional Webhook parameters provided by a2a payments:
| Parameter | Type | Required | Description |
bank_pay.sender_mfo | String | ✅ | Sender's Bank Identifier Code (BIC) |
bank_pay.sender_iban | String | ✅ | Sender's IBAN |
bank_pay.sender_bank | String | ✅ | Sender's bank name |
bank_pay.sender_name | String | ✅ | Sender's full name |
bank_pay.sender_tax_id | String | ✅ | Sender's tax ID |
bank_pay.receiver_iban | String | ✅ | Receiver's IBAN |
bank_pay.description | String | ✅ | Description of a2a payment |
Example:
"bank_pay": {
"sender_mfo": "test_mfo_456",
"sender_bank": "Pumb",
"sender_iban": "UA558771690896444199621297483",
"sender_name": "John Doe",
"sender_tax_id": "1234567890",
"receiver_iban": "UA573220000000026007233566001",
"description": "Test operation"
}
Full callback example after payment:
{
"pos_id": "ab4c4e99-0154-449a-abae-e42cafdfce54",
"mode": "direct",
"method": "purchase",
"status_code": "1000",
"description": "Order description",
"created_at": "2026-01-26T09:24:33.659",
"cc_token": "ODJkZjBhNmY2OTMyNDJlN2wjMjFjfTQzOXU3ZDFhYzI6cWJmWHFmMHlzM3hYaXJMWEZv",
"cc_mask": "411111******1111",
"bank_pay": {
"sender_mfo": "test_mfo_456",
"sender_bank": "Pumb",
"sender_iban": "UA558771690896444199621297483",
"sender_name": "John Doe",
"sender_tax_id": "1234567890",
"receiver_iban": "UA573220000000026007233566001",
"description": "Test operation"
},
"payment_id": "cb89305e-e013-4f89-ad40-cb9ee2e28ade",
"processed_at": "2026-01-26T09:25:46.850",
"currency": "UAH",
"_version": "2.0",
"transaction_id": "cb89305e-e013-4f89-ad40-cb9ee2e28ade",
"status_description": "Transaction is successful",
"result_url": "https://example.com/result",
"amount": 1,
"processed_amount": 1,
"customer_phone": "+380999999999",
"payway": "bank_pay",
"gateway_order_id": "afb61923-d558-4b0e-85fb-3146d209653c",
"processed_currency": "UAH",
"customer_lname": "Hanks",
"customer_fname": "Tom",
"customer_email": "[email protected]",
"order_id": "2482421155",
"status": "success",
"options_3ds": "always",
"payload": "sale=true",
"user_action_required": false
}