Transfers
To move funds between accounts within the system or to external banks customers must have an account/card opened in advance. Transfers API may have different requirements depending on the type of transfer (internal/wire). Amount, currency, debtor, and creditor are required for all requests.
Debtor is the customer from which the funds will be deducted.
Creditor is the customer/external account that will receive the funds.
Queue overview
Based on instance-level configuration, the Internal Wire Transfer (IWT) will be placed in a queue where an external system can decide what should happen with the transfer.
The system will automatically return the transfer in cases where the destination account is:
- not found,
- closed, or
- blocked.
Once the transfer has been added to the queue, a webhook is sent to the external system carrying the token (identifier) of the queue record.
If the webhook is not acknowledged on the first attempt, the system will retry up to 3 more times.
An example of this webhook can be found on the TRANSACTION.SUSPENDED entry in our webhooks page.
List
Paginated list of queue records waiting for an external decision.
queue_listPath parameters
| Name | Example | Description |
|---|---|---|
page |
1 |
Starting from page 1 |
limit |
20 |
Maximum per page 1000 |
Query parameters
| Name | Example | Description |
|---|---|---|
merchant |
62513902-9ace-42e9-8cf4-7b16161bdae8 |
Identifier of merchant in Paynetics system |
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0,
"data": {
"items": [
{
"amount": 1.23,
"currency": "EUR",
"token": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"reference": "Transfer",
"merchant": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"user": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"account": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"balance": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"is_instant": false,
"wires": {
"sender_name": "Company 123",
"sender_iban": "AT483200000012345864",
"sender_bank_name": "Bank 123",
"sender_bank_country": "AT",
"sender_bank_code": "RLNWATWWXXX",
"sender_sort_code": "123456",
"sender_account_number": "1234578",
"receiver_iban": "BG75PATC40022171680259",
"receiver_name": "John Doe",
"receiver_bank_name": "Paynetics AD",
"receiver_bank_country": "BG",
"receiver_bank_code": "PATCBGSFXXX",
"receiver_sort_code": "123456",
"receiver_account_number": "1234578",
"network": "string"
}
}
],
"total_items": "integer"
}
}
Detail
Fetch a single queue record by its token.
queue_detailsPath parameters
| Name | Example | Description |
|---|---|---|
token |
20 |
Token of the queue entry |
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0,
"data": {
"amount": 1.23,
"currency": "EUR",
"token": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"reference": "Transfer",
"merchant": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"user": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"account": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"balance": "d39ed40b-078c-494f-86de-1a86d4ab5f26",
"is_instant": false,
"wires": {
"sender_name": "Company 123",
"sender_iban": "AT483200000012345864",
"sender_bank_name": "Bank 123",
"sender_bank_country": "AT",
"sender_bank_code": "RLNWATWWXXX",
"sender_sort_code": "123456",
"sender_account_number": "1234578",
"receiver_iban": "BG75PATC40022171680259",
"receiver_name": "John Doe",
"receiver_bank_name": "Paynetics AD",
"receiver_bank_country": "BG",
"receiver_bank_code": "PATCBGSFXXX",
"receiver_sort_code": "123456",
"receiver_account_number": "1234578",
"network": "string"
}
}
}
Process
Decision endpoint — instructs the system to release the queued transfer to the destination account.
queue_processPath parameters
| Name | Example | Description |
|---|---|---|
token |
20 |
Token of the queue entry |
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0
}
Return
Decision endpoint — returns the funds to the originating account and removes the record from the queue.
queue_returnPath parameters
| Name | Example | Description |
|---|---|---|
token |
20 |
Token of the queue entry |
Request body
| Field | Type | Description |
|---|---|---|
return_
|
string (0,any) |
Example request
{
"return_reason": "beneficiary-account-closed"
}
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0
}
Internal Transfers
Internal transfers can be initiated between accounts/cards in the system using several identifiers like balance identifier, IBAN, Sort Code and Account Number.
As a response from the API call, a transaction identifier will be received when transfer is successful. The transfer is a real-time operation, meaning that in case a transaction identifier is received the transfer has been completed.
Wire Transfers
For wire transfer account must have IBAN or account number generated for a specific payment network. The network is routed depending on the currency and/or program configurations.
For most wire transfers there are additional requirements for creditor name, address, and country (depending on the network).
Debtor name, address, and country will also be required in case they are missing in the customer profile.
A response from the API call, a transaction identifier will be received when the transfer is successfully initiated. Wire transfers are not processed in real-time the way internal transfers are. There might be a delay between several seconds to several days depending on the payment network. When the transfer has been processed a webhook (link to webhook) with the status of the transfer will be sent.
transferRequest body
| Field | Type | Description |
|---|---|---|
amount
|
number (0,any) | Amount to be deducted from customer account |
currency
|
string (0,any) | |
code
|
string (0,any) | |
link
|
string (0,any) | Link to another transaction |
reference
|
string (0,any) | |
reference2
|
string (0,any) | |
reference3
|
string (0,any) | |
reference4
|
string (0,any) | |
origin_
|
string (0,any) | |
description
|
string (0,any) | |
is_
|
boolean | Only for SEPA transfers (EUR) |
cop
|
string (0,any) | Confirmatino of Payee token |
vop
|
string (0,any) | Verification of Payee token |
Example request
{
"amount": 1.23,
"currency": "EUR",
"code": "string",
"link": "520bec3b-8051-4a2b-928c-81d32b6bfa41",
"reference": "Payment for goods",
"reference2": "Items 1,2,3",
"reference3": "Additional Info",
"reference4": "Additional Info",
"origin_of_funds": "string",
"description": "Merchant 123",
"is_instant": false,
"debtor": {
"balance": "444f4f2c-6a05-43bb-93ab-7ab76ce5658c",
"external_identifier": "123456789",
"iban": "BG85PATC40021918158842",
"sort_code": "123456",
"account_number": "12345678",
"address": "BG, Sofia, James Bouchier 76 A",
"name": "John Doe",
"country": "BG"
},
"creditor": {
"balance": "444f4f2c-6a05-43bb-93ab-7ab76ce5658c",
"external_identifier": "123456789",
"iban": "BG85PATC40021918158842",
"sort_code": "123456",
"account_number": "12345678",
"address": "BG, Sofia, James Bouchier 76 A",
"name": "John Doe",
"country": "BG"
},
"cop": "a5b968e4-ec62-4072-a37f-6b59e35a4e36",
"vop": "a5b968e4-ec62-4072-a37f-6b59e35a4e36"
}
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0,
"data": {
"transaction": "8b06d551-5453-48e5-842c-c1e2d969da84"
}
}
Errors
| Code | Description |
|---|---|
11000 | services.general.error |
11001 | services.general.validation_error |
16013 | services.balances.balance_not_updated |
16014 | services.balances.insufficient_funds |
16015 | services.balances.debtor_balance_not_found |
16016 | services.balances.creditor_balance_not_found |
16017 | services.balances.conversion_rate_not_available |
16018 | services.balances.blocked_amount |
16019 | services.balances.transfer_to_same_balance |
16020 | services.balances.transfer_to_same_main_account |
20001 | services.balances.sepa_instant_not_supported_by_creditor_bank |
Confirmation of Payee
Confirmation of Payee (CoP) — verify that an account name and identifier match before initiating a transfer.
copRequest body
| Field | Type | Description |
|---|---|---|
account_
|
string (0,any) | |
sort_
|
string (0,any) | |
account_
|
string (0,any) | |
account_
|
string (0,any) | |
secondary_
|
string (0,any) | |
user
|
string (0,any) | |
merchant
|
string (0,any) |
Example request
{
"account_number": "Account Number",
"sort_code": "Sort Code",
"account_type": "Business|Personal",
"account_name": "Account Owner Name",
"secondary_reference": "Secondary Reference",
"user": "User Token",
"merchant": "Merchant Token"
}
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0,
"data": {
"token": "0ba5e81d-c43b-4008-b2d6-0d390f6f8c08",
"report": {
"match": "true",
"reason": "Reason Code",
"name": "Account Owner Name"
}
}
}
Verification of Payee
Verification of Payee (VoP) — verify the legal name and account identifier of an EU SEPA payee before initiating a transfer.
vopRequest body
| Field | Type | Description |
|---|---|---|
iban
|
string (0,any) | |
account.holder.name
|
string (0,any) | Individual account holder name. Mutually exclusive with organisation_id. |
organisation.id
|
string (0,any) | Legal Entity Identifier or equivalent organisation identifier. Mutually exclusive with account_holder_name. |
secondary.reference
|
string (0,any) | |
user.token
|
string (0,any) | |
merchant.token
|
string (0,any) |
Example request
{
"iban": "GB82WEST12345698765432",
"account.holder.name": "John Doe",
"organisation.id": "549300DTUYXVMJXZNY75",
"secondary.reference": "Secondary Reference",
"user.token": "user_token",
"merchant.token": "merchant_token"
}
Response
| Field | Type | Description |
|---|---|---|
code
|
integer (0,any) |
Example response
{
"code": 0,
"data": {
"vop.token": "0ba5e81d-c43b-4008-b2d6-0d390f6f8c08",
"result": "MTCH",
"matched.name": "Account Owner Name",
"timestamp": "2026-03-12T10:22:11.123Z"
}
}
Errors
| Code | Description |
|---|---|
11000 | services.general.error |
11001 | services.general.validation_error |