Skip to main content

How to Create a EUR Transfer

EUR transfers require a pre-existing bank account belonging to a beneficiary registered in the system.


Step 1 — Create a Beneficiary with a European Bank Account

Use POST /beneficiary to create the beneficiary and one bank account in a single request. The bankAccount object is embedded in the body.

For European countries, the bank account must include ibanNumber and swiftBic in addition to the base fields.

Request

curl -X POST "/api/v1/beneficiary" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme GmbH",
"type": "juridico",
"taxId": "DE123456789",
"country": "DE",
"address": "Unter den Linden 1, 10117 Berlin",
"email": "finance@acme.de",
"bankAccount": {
"name": "Acme GmbH - Deutsche Bank",
"accountNumber": "1234567890",
"bankCountry": "DE",
"bankName": "Deutsche Bank",
"ibanNumber": "DE89370400440532013000",
"swiftBic": "DEUTDEDB"
}
}'

Bank account required fields for European countries

FieldDescription
nameLabel for this bank account
accountNumberDestination account number
bankCountryISO country code — must be a supported European country
bankNameName of the destination bank
ibanNumberFull IBAN number
swiftBicSWIFT/BIC code for international routing

Response (201)

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Acme GmbH",
"type": "juridico",
"taxId": "DE123456789",
"address": "Unter den Linden 1, 10117 Berlin",
"country": "DE",
"email": "finance@acme.de",
"bankAccounts": [
{
"id": "d6c6c357-343f-4106-8f7d-b678c60ff10a",
"name": "Acme GmbH - Deutsche Bank",
"accountNumber": "1234567890",
"bankCountry": "DE",
"bankName": "Deutsche Bank",
"ibanNumber": "DE89370400440532013000",
"swiftBic": "DEUTDEDB"
}
]
"createdAt": "2026-05-14T12:00:00.000Z",
"updatedAt": "2026-05-14T12:00:00.000Z"
}

Step 2 — Create the EUR Transfer

Use POST /transfer with multipart/form-data. Pass bankAccountId along with the financial fields and attach the required PDF files.

PDF attachments are required for EUR transfers. The request will fail without them.

Constraints for attached files:

  • Format: PDF only
  • Maximum 10 files per transfer
  • Maximum 1 MB per file

Request

curl -X POST "/api/v1/transfer" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: multipart/form-data" \
-F "bankAccountId=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-F "currency=EUR" \
-F "amount=950.00" \
-F "files[0]=@invoice.pdf" \
-F "files[1]=@invoice-2.pdf"

Request Example

curl -X POST /api/v1/transfer \
-H "Authorization: Bearer <token>" \
-F "bankAccountId=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-F "currency=EUR" \
-F "amount=950.00" \
-F "files=@/path/to/invoice.pdf" \
-F "files=@/path/to/transfer_order.pdf"

Response (201)

{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"transferNumber": "002095696342671878",
"status": "pending",
"currency": "EUR",
"amount": "840.71",
"amountInUSD": "950.00",
"quote": "1.13",
"pdfDocuments": [
"https://files.example.com/invoice.pdf",
"https://files.example.com/transfer_order.pdf"
],
"bankAccount": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme GmbH - Deutsche Bank",
"bankCountry": "DE",
"accountNumber": "1234567890",
"bankName": "Deutsche Bank",
"ibanNumber": "DE89370400440532013000",
"swiftBic": "DEUTDEDB"
},
"createdAt": "2026-05-14T12:05:00.000Z",
"updatedAt": "2026-05-14T12:05:00.000Z"
}

Balance Impact

EventEffect on Balance
Transfer createdAmount in usd is immediately deducted from the user's available balance
Transfer rejectedAmount is automatically restored to the user's balance