Skip to main content

Create transfer

POST https://wallet.paysera.com/transfer/rest/v1/transfers

Create transfer in the system. Created transfer is invisible and will be deleted if no more actions are performed.

Authorization

This endpoint requires MAC (Message Authentication Code) authentication.

Authorization Header Format:

Authorization: MAC id="CLIENT_ID", ts="TIMESTAMP", nonce="RANDOM_STRING", mac="MAC_HASH", ext="body_hash=BODY_HASH"

Example:

Authorization: MAC id="a9b8c7d6e5f4g3h2", ts="1234567890", nonce="xyz123abc456def", mac="dGhpcyBpcyBhIHJhbmRvbSBtYWMgaGFzaCB2YWx1ZQ==", ext="body_hash=cmFuZG9tQm9keUhhc2hWYWx1ZQ%3D%3D"

For more details, see the Authentication section.

Request Body

FieldTypeRequiredDescription
bank_keystringAn optional parameter that specifies the bank key to be used for routing the transfer. If provided, the transfer will only be created if the specified bank key matches an available routing option. This acts as a safeguard to ensure that transfers are executed through the correct banking route. If an incorrect or non-matching bank key is specified, the transfer request will be rejected. If the parameter is not provided, routing will proceed as normal without this additional validation.
amountobjectAmount to transfer
beneficiaryobjectRecipient details
payerobjectSender details
final_beneficiaryobjectThis is used where available (for example in SEPA transfers) to provide information about final beneficiary of transfered funds. Just ignore if it's not required in your case
perform_atintegerTimestamp when Transfer should be perfomed. Leave empty to perform as soon as possible
charge_typestringIt's used only for some bank transfers. It's used when banks could charge additional commissions in between payer and beneficiary bank or when beneficiary bank could charge additional commissions. SHA is shared, OUR is payer side. For OUR commission is greater but beneficiary should not be charged - whole specified amount should reach beneficiary. Unfortunatelly, this is still not the case for some rare conditions
urgencystringFor SEPA transfers, standard means that transfer is made from your IBAN, it's processed only in work days. urgent means that transfer is made from our IBAN and is faster to reach the beneficiary
notificationsobject
purposeobjectTransfer purpose and details
passwordobjectIt's used only for internal Paysera transfers. Ignore if not explicitly needed
cancelablebooleanIndicates if the transfer can be canceled. Defaults to true. When you set it to false always wait for the statuses ready, processing or done, as it's transfer statuses from which this parameter starts working.
auto_currency_convertbooleanIndicates if currency convert could be used. Defaults to false.
auto_charge_related_cardbooleanIndicates if related card can be charged. Defaults to false.
auto_process_to_donebooleanIndicates if the transfer should be processed automatically if possible. Defaults to true.
reserve_untilintegerOnly for internal Paysera transfers. Designates the time when, if not confirmed, transfer funds will return to sender. UNIX timestamp
callbackobjectWebhook configuration for receiving real-time transfer status updates.
validation_groupsarrayWhen simulating the transfer, you can specify validation groups to skip all other validations. Defaults to null.

amount

FieldTypeRequiredDescription
amountstringTransfer amount
currencystringCurrency code (ISO 4217), 3 characters

beneficiary

FieldTypeRequiredDescription
typestringBeneficiary type: paysera, payza, webmoney, tax, bank, privatbank, single_window. The matching *_account object must be provided for the given type — for example bank_account when the type is bank. No other *_account can be provided in this case
namestringBeneficiary name (required when transfer is made to other bank)
person_typestringnatural or legal. This is optional and designates whether beneficiary is legal entity or a person
addressobjectBeneficiary address. Accepts address_line and country_code only
additional_informationobjectBeneficiary city and country. Required on transfers that are not SEPA
identifiersobjectIt's optional and should be provided if you know identifier (like company code, personal code etc.) of beneficiary. KPP and TAX code could be required in Russia
client_identifierobjectBeneficiary identification type - legal document that verifies the identity of the account. Only one identification type is allowed
bank_accountobjectProvide when type is bank
paysera_account, payza_account, webmoney_account, tax_account, privatbank_account, single_window_accountobjectProvide the one matching type

beneficiary.address

FieldTypeRequiredDescription
address_linestringAddress line. This is the street address only — the city and the country belong in additional_information and are ignored if placed here
country_codestringCountry code. This is not used when creating a transfer — the beneficiary's country must be supplied in additional_information.country

beneficiary.additional_information

FieldTypeRequiredDescription
typestringnatural or legal. Designates whether beneficiary is legal entity or a person
citystringBeneficiary city, for example London
countrystringUse upper case ISO 3166-1 alpha-2 codes, for example US
statestringBeneficiary state
postal_codestringBeneficiary postcode
bank_branch_codestringBank branch code

beneficiary.bank_account

FieldTypeRequiredDescription
ibanstringIBAN number
account_numberstringAccount number
country_codestringWe use ISO 3166-1 alpha-2 for country codes. This is not required if IBAN is specified. This is the country of the beneficiary bank, not of the beneficiary
bicstringThis should be SWIFT bank code, if available for that transfer
bank_codestringThis is local bank code and depends on Country. It's not required if IBAN is provided
sort_codestringSort code
bank_titlestringBank title
bank_addressobjectBank address. Accepts address_line and country_code
correspondent_bankobjectAccepts account_number, bank_code and bank_title

payer

FieldTypeRequiredDescription
account_numberstringThis is your account number in Paysera system
referencestringOnly used for tax transfers
client_identifierobjectIdentifier of the payer. Required for Lithuanian budget payments to VMI from a private client: send the payer's personal code as {"type": "personal_number", "value": "..."}. Allowed type values: personal_number, company_code, customer_code, passport_number, tax_payer_code
first_namestring
last_namestring
mobile_phone_numberstring
birth_datestringFor example 1999-07-05
country_codestringFor example LT
regionstring
citystring
streetstring
housestring
apartmentstring
birth_country_codestringFor example UA
documentobjectAccepts type (passport, identity_card, residence_permit), series, number, issued_date and issuer

purpose

FieldTypeRequiredDescription
detailsstringTransfer purpose details. Always required, unless it's SEPA transfer and reference is specified
referencestringPayment reference. For Lithuanian budget payments to VMI or SODRA, send the payment code (įmokos kodas) in this field, for example 5660. On SEPA transfers send either details or reference, not both
vo_codestringVO code is used only for transfers to Russia
ocr_codestringOCR code is used for transfers to Norway, Sweden, Finland and Denmark
codestringcash_in, cash_out, payment or app_transfer. Leave this one empty unless explicitly required to fill
purpose_codestringPurpose code is to classify the nature of the transfer. See /public/transfer/rest/v1/purpose-codes for a list of codes. Optional unless required for specific destinations
details_optionsobjectAccepts preserve (boolean). For some countries, like Great Britain, details can be really short. In such cases we usually put a link to our page where beneficiary could find all the details of the transfer. In some cases it's important that beneficiary would receive original details, as it could include reference number etc. This field controls this behaviour

Example

Request

Endpoint: POST https://wallet.paysera.com/transfer/rest/v1/transfers
Content-Type: application/json
Authorization: MAC id="CLIENT_ID", ts="TIMESTAMP", nonce="RANDOM_STRING", mac="MAC_HASH", ext="body_hash=BODY_HASH"
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP7654321"
},
"purpose": {
"details": "Payment for services"
}
}

Response

{
"id": "12345678",
"hash": "abc123def456",
"status": "done",
"created_at": 1729425600,
"performed_at": 1729425660,
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP7654321"
},
"cancelable": true,
"allowed_to_cancel": true,
"initiator": {
"user_id": 321
},
"out_commission": {
"amount": "0.50",
"currency": "EUR"
}
}

Example: Lithuanian budget payment to VMI

A budget payment to the Lithuanian tax authority (VMI) or to SODRA is a transfer to the institution's bank account. Send the payment code (įmokos kodas) in purpose.reference and do not send purpose.details. Send the payer's personal code in payer.client_identifier (use company_code instead of personal_number when the payer is a company). The payment code tells VMI which tax is paid. The identification code tells VMI who is paying.

Request

Endpoint: POST https://wallet.paysera.com/transfer/rest/v1/transfers
Content-Type: application/json
Authorization: MAC id="CLIENT_ID", ts="TIMESTAMP", nonce="RANDOM_STRING", mac="MAC_HASH", ext="body_hash=BODY_HASH"
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "Valstybinė mokesčių inspekcija",
"bank_account": {
"iban": "LT247300010112394300",
"bic": "HABALT22"
}
},
"payer": {
"account_number": "EVP7654321",
"client_identifier": {
"type": "personal_number",
"value": "12345678901"
}
},
"purpose": {
"reference": "5660"
}
}

AUTHORIZATION: HTTP

REQUEST

Base URL
https://wallet.paysera.com
Body REQUIRED
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP7654321"
},
"purpose": {
"details": "Payment for services"
}
}

RESPONSE

Transfer created successfully
{
"id": "12345678",
"hash": "abc123def456",
"status": "done",
"created_at": 1729425600,
"performed_at": 1729425660,
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP7654321"
},
"cancelable": true,
"allowed_to_cancel": true,
"initiator": {
"user_id": 321
},
"out_commission": {
"amount": "0.50",
"currency": "EUR"
}
}