Skip to main content

Bank Transfers

Learn how to create transfers to bank accounts using IBAN/SWIFT codes.

Overview

Bank transfers allow you to send money from your Paysera account to external bank accounts. This guide covers:

  • Creating transfers to IBAN accounts
  • International transfers with SWIFT/BIC codes
  • Currency conversion
  • Bank-specific requirements

Prerequisites

  • MAC authentication credentials (client_id, mac_key, mac_algorithm) - see Authentication
  • Sufficient account balance (including fees)
  • Valid beneficiary bank details (IBAN/SWIFT)

Creating Bank Transfers

For transfers within the SEPA (Single Euro Payments Area):

Request:

POST /transfer/rest/v1/transfers HTTP/1.1
Host: wallet.paysera.com
Authorization: MAC id="wkVd93h2uS", ts="1343811600", nonce="nQnNaSNyubfPErjRO55yaaEYo9YZfKHN", mac="Bp22nWw9qFsz7ux5xOYkCIYJjXAz8mhxTSfJsoOKV3A="
Content-Type: application/json

{
"amount": {
"amount": "250.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "Jane Smith",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP9876543210"
},
"purpose": {
"details": "Invoice payment #INV-2024-001"
}
}

Response:

{
"id": "789012",
"status": "new",
"type": "bank",
"amount": {
"amount": "250.00",
"currency": "EUR"
},
"payer": {
"account_number": "EVP9876543210",
"owner_display_name": "My Company Ltd"
},
"beneficiary": {
"type": "bank",
"name": "Jane Smith",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"purpose": {
"details": "Invoice payment #INV-2024-001"
},
"created_at": 1729425600,
"out_commission": {
"amount": "0.50",
"currency": "EUR"
}
}

Processing the Bank Transfer

After creating the transfer, follow the standard workflow:

const crypto = require('crypto');

const CLIENT_ID = 'wkVd93h2uS';
const MAC_KEY = 'your_mac_key';

function generateMacAuth(method, uri, host) {
const timestamp = Math.floor(Date.now() / 1000);
const nonce = crypto.randomBytes(16).toString('hex');
const normalizedString = [timestamp, nonce, method, uri, host, '443', ''].join('\n') + '\n';
const mac = crypto.createHmac('sha256', MAC_KEY).update(normalizedString).digest('base64');
return `MAC id="${CLIENT_ID}", ts="${timestamp}", nonce="${nonce}", mac="${mac}"`;
}

const transferId = '789012';

// 1. Reserve the transfer
await axios.put(
`https://wallet.paysera.com/transfer/rest/v1/transfers/${transferId}/reserve`,
{},
{ headers: { 'Authorization': generateMacAuth('PUT', `/transfer/rest/v1/transfers/${transferId}/reserve`, 'wallet.paysera.com') } }
);

// 2. Provide password (if required)
await axios.put(
`https://wallet.paysera.com/transfer/rest/v1/transfers/${transferId}/provide-password`,
{ password: 'your_password' },
{ headers: { 'Authorization': generateMacAuth('PUT', `/transfer/rest/v1/transfers/${transferId}/provide-password`, 'wallet.paysera.com') } }
);

// 3. Register the transfer
await axios.put(
`https://wallet.paysera.com/transfer/rest/v1/transfers/${transferId}/register`,
{},
{ headers: { 'Authorization': generateMacAuth('PUT', `/transfer/rest/v1/transfers/${transferId}/register`, 'wallet.paysera.com') } }
);

Bank Transfer Fees

Different fees apply based on transfer type:

Transfer TypeFee RangeProcessing Time
SEPA (EUR)€0.00 - €1.001-2 business days
EU Non-SEPA€2.00 - €5.002-3 business days
International€10.00 - €25.003-5 business days
Express (if available)Additional €15.00Same day

Note: Intermediary/correspondent banks may charge additional fees.

Validating Bank Account Numbers

Before creating a transfer, validate the IBAN format:

function validateIBAN(iban) {
// Remove spaces and convert to uppercase
iban = iban.replace(/\s/g, '').toUpperCase();

// Check length (varies by country)
if (iban.length < 15 || iban.length > 34) {
return false;
}

// Check format (2 letters, 2 digits, alphanumeric)
const regex = /^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/;
return regex.test(iban);
}

// Example
console.log(validateIBAN('LT123456789012345678')); // true

Common Errors

{
"error": "invalid_iban",
"error_description": "The provided IBAN is not valid",
"field": "beneficiary.account_number"
}

Required Fields by Transfer Type

SEPA Transfers (EUR within EU)

  • ✅ IBAN (beneficiary account number)
  • ✅ Beneficiary name
  • ✅ Amount
  • ✅ Currency (EUR)
  • ✅ Purpose/Reference

International Transfers

  • ✅ IBAN or Account Number
  • ✅ SWIFT/BIC code
  • ✅ Beneficiary name and address
  • ✅ Bank name and address
  • ✅ Amount and currency
  • ✅ Purpose/Reference
  • ⚠️ Correspondent bank details (sometimes)

Next Steps