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.

Costumer
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.

Retry policy

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.

GET /v2/queue/{page}/{limit}
Operation queue_list

Path parameters

NameExampleDescription
page 1 Starting from page 1
limit 20 Maximum per page 1000

Query parameters

NameExampleDescription
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.

GET /v2/queue/{token}
Operation queue_details

Path parameters

NameExampleDescription
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.

POST /v2/queue/{token}/process
Operation queue_process

Path parameters

NameExampleDescription
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.

DELETE /v2/queue/{token}/return
Operation queue_return

Path parameters

NameExampleDescription
token 20 Token of the queue entry

Request body

Field Type Description
return_reason string (0,any)
incorrect-account-numberclosed-account-numberblocked-accountbeneficiary-deceasedaccount-cannot-be-identifiedbeneficiary-account-name-does-not-match-beneficiary-account-numberreturn-requested-by-sender-of-original-paymentaccount-is-not-in-currency-quotedbeneficiary-not-expecting-funds-or-instructed-returnterms-and-conditions-of-account-do-not-permit-crediting-of-fundssending-fps-institution-action-requiredaccount-transferredpayment-cannot-be-applied-because-of-beneficiary-sensitivitiesothertransaction-forbiddeninvalid-bank-operation-codeduplicationmissing-creditor-addresscreditor-bank-is-not-registerederi-option-not-supportedend-customer-deceasednot-specified-reason-customer-generatednot-specified-reason-agent-generatedbank-identifier-incorrectmissing-debtor-account-or-identificationmissing-debtor-name-or-addressmissing-creditor-name-or-addressregulatory-reasonfollowing-cancellation-request

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.

POST /v2/transfers
Operation transfer

Request body

Field Type Description
amount number (0,any) Amount to be deducted from customer account
currency string (0,any)
EURBGNGBP
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_of_funds string (0,any)
description string (0,any)
is_instant 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

CodeDescription
11000services.general.error
11001services.general.validation_error
16013services.balances.balance_not_updated
16014services.balances.insufficient_funds
16015services.balances.debtor_balance_not_found
16016services.balances.creditor_balance_not_found
16017services.balances.conversion_rate_not_available
16018services.balances.blocked_amount
16019services.balances.transfer_to_same_balance
16020services.balances.transfer_to_same_main_account
20001services.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.

POST /v2/cop
Operation cop

Request body

Field Type Description
account_number string (0,any)
sort_code string (0,any)
account_type string (0,any)
account_name string (0,any)
secondary_reference 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.

POST /v2/vop
Operation vop

Request 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

CodeDescription
11000services.general.error
11001services.general.validation_error
esc
navigate open esc close
Copied