Initiate Fiat Payout

Send fiat currency from your wallet to an external bank account.

POST /v1/payouts/fiat

Headers

Header Required Description
X-Api-Key Yes Your API key
X-Idempotency-Key Yes Unique key to prevent duplicate payouts
Content-Type Yes application/json

Request Body

Common Fields

Field Type Required Description
amount number Yes Amount to send. Must meet the per-currency minimum (see below).
currency string Yes Fiat currency: USD, EUR, or GBP
countryCode string Yes Destination country (ISO 3166-1 alpha-2, e.g. US, GB)
bankName string Yes Name of the destination bank
accountNumber string Yes Bank account IBAN or account number
bankCode string Yes SWIFT/BIC code or routing number
beneficiaryType string Yes BUSINESS or INDIVIDUAL
streetAddress string Yes Beneficiary street address
city string Yes Beneficiary city
postalCode string Yes Beneficiary postal code
reference string No Payment reference (max 30 chars, alphanumeric with spaces, commas, periods, and hyphens)
paymentPurpose string No Purpose of payment
paymentPurposeAttachmentId string No Id of a file previously uploaded via POST /v1/files. Use the data.id returned by that endpoint verbatim (e.g. file_3f1e0a7c-5b2d-4f9c-8a31-90c8b1f4e2a7). The file must belong to your account.
industryId number No Industry ID

Individual Beneficiary Fields

Required when beneficiaryType is INDIVIDUAL:

Field Type Required Description
firstName string Conditional Beneficiary first name
lastName string Conditional Beneficiary last name

Business Beneficiary Fields

Required when beneficiaryType is BUSINESS:

Field Type Required Description
businessName string Conditional Business legal name

Minimum Amounts

Currency Minimum
USD 100
GBP 30
EUR 30

Requests below the minimum for the selected currency are rejected with 400 Bad Request and a message of the form Minimum payout amount for <CURRENCY> is <amount>.

Routing by Destination

The API automatically routes the payout based on the currency and destination country:

Currency Destination Method bankCode used as
USD US ACH Routing number
USD Non-US SWIFT SWIFT/BIC code
EUR Any SEPA/SWIFT SWIFT/BIC code
GBP Any FPS/SWIFT SWIFT/BIC code

Example Request (Individual, USD to US)

curl -X POST "https://api.esca.finance/v1/payouts/fiat" \
  -H "X-Api-Key: your_api_key_here" \
  -H "X-Idempotency-Key: payout-660e8400-e29b-41d4-a716-446655440001" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 500,
    "currency": "USD",
    "countryCode": "US",
    "bankName": "Chase Bank",
    "accountNumber": "0123456789",
    "bankCode": "021000021",
    "beneficiaryType": "INDIVIDUAL",
    "firstName": "John",
    "lastName": "Doe",
    "streetAddress": "123 Main St",
    "city": "New York",
    "postalCode": "10001",
    "reference": "INV-2026-001",
    "paymentPurpose": "Supplier payment"
  }'

Attaching a Payment Purpose Document

To accompany a payout with supporting documentation (e.g. an invoice or contract), upload the file first via POST /v1/files, then reference the returned id on the payout:

# 1. Upload the file
curl -X POST "https://api.esca.finance/v1/files" \
  -H "X-Api-Key: your_api_key_here" \
  -F "file=@invoice.pdf"
# → { "data": { "id": "file_3f1e0a7c-5b2d-4f9c-8a31-90c8b1f4e2a7" } }

# 2. Initiate the payout, referencing the file
curl -X POST "https://api.esca.finance/v1/payouts/fiat" \
  -H "X-Api-Key: your_api_key_here" \
  -H "X-Idempotency-Key: payout-880e8400-e29b-41d4-a716-446655440003" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 500,
    "currency": "USD",
    "countryCode": "US",
    "bankName": "Chase Bank",
    "accountNumber": "0123456789",
    "bankCode": "021000021",
    "beneficiaryType": "BUSINESS",
    "businessName": "Acme Corp",
    "streetAddress": "123 Main St",
    "city": "New York",
    "postalCode": "10001",
    "paymentPurpose": "Supplier payment for invoice 2026-001",
    "paymentPurposeAttachmentId": "file_3f1e0a7c-5b2d-4f9c-8a31-90c8b1f4e2a7"
  }'

The id may only be referenced by the same account that uploaded the file — using a file id that belongs to a different account returns 400 Bad Request.

Example Request (Business, GBP to UK)

curl -X POST "https://api.esca.finance/v1/payouts/fiat" \
  -H "X-Api-Key: your_api_key_here" \
  -H "X-Idempotency-Key: payout-770e8400-e29b-41d4-a716-446655440002" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1000,
    "currency": "GBP",
    "countryCode": "GB",
    "bankName": "Barclays",
    "accountNumber": "GB33BUKB20201555555555",
    "bankCode": "NWBKGB2L",
    "beneficiaryType": "BUSINESS",
    "businessName": "Acme Corp",
    "streetAddress": "456 High St",
    "city": "London",
    "postalCode": "EC1A 1BB"
  }'

Example Response

{
  "status": true,
  "message": "Payout initiated successfully",
  "data": {
    "payoutId": "f7a8b9c0-d1e2-3456-abcd-ef7890123456",
    "type": "fiat",
    "currency": "USD",
    "amount": 500,
    "fee": 5.00,
    "status": "PROCESSING",
    "bankName": "Chase Bank",
    "bankAccountNumber": "0123456789"
  }
}

Error Responses

Status Description
400 Invalid request or unsupported country
401 Invalid or expired API key
409 Duplicate request (idempotency conflict)
429 Rate limit exceeded
500 Payout failed