Transfer Initiation

Integration guides for endpoints used for processing and managing different types of payments

These APIs perform the following actions:

  1. Check Transfer Eligibility – Verify if a transfer can be processed.
  2. Estimate transfer costs – Determine the total fees, exchange rates etc to perform a transfer.
  3. Create an Outbound Transfer – Send money to a beneficiary.

Check Transfer Eligibility

This endpoint checks whether a transfer is eligible based on the source account and counterparty details. It validates whether a payment transfer can be processed between a specified source account and a saved beneficiary/counterparty.

This pre-validation endpoint helps prevent failed transfers by identifying potential issues before initiating a payment. It can also return additional requirements that must be included in payments to this beneficiary, e.g., purpose codes for certain jurisdictions.

❗️

Notes

  • This endpoint does not initiate any actual funds transfer
  • All validations are performed without affecting account balances
  • The eligibility check reflects the current system status and may change

Request Parameters

ParameterTypeRequiredDescription
source_account_iduuid✅ YesThe ID of the source account for the transfer.
counterparty_idstring✅ YesThe ID of the counterparty/beneficiary.
amountinteger❌ NoEstimated transfer amount in smallest currency unit (e.g., cents, kobo)
currencystring❌ NoCurrency code for the transfer (defaults to source account currency)

Example Request

{
    "source_account_id": "0191db23-369e-73c6-aa53-9f5f9a1c534e",
    "counterparty_id": "01922d50-b3d0-7e3e-af73-1a8d460cd2fa"
}

Example Response

{
  "data": {
    "supported": true,
    "reason": null
  }
}
{
  "data": {
    "supported": false,
    "reason": "Unsupported currency"
  }
}

Estimate Transfer Costs

Estimations can be generated using the Quote API


Create Transfer

This endpoint allows users to initiate a new outbound transfer to a specified beneficiary. If a supporting document is provided in the request, it should use form-data; otherwise, it should use regular JSON.

Types of Transfer

There are two ways to transfer funds: Simple transfers move money directly by specifying the amount and recipient in one step, while Transfers from Quoteare transfers based on a previously generated quote

Transfer Request Schema

The transfer API supports two instruction types within a single schema structure:

Common Fields

FieldTypeDescription
reasonstringPurpose or reason for the transfer
payment_referencestringReference number for the payment
memostringOptional memo or note for the transfer
client_referencestringClient-provided reference for tracking
additional_infoarrayList of additional key-value pairs for the transfer
client_metadataobjectClient-provided metadata for the transfer
on_behalf_of_customer_idstringOptional Unique Identifier of the customer on whose behalf the transfer is being made
instructionstringThe execution details of the transfer, see section below

Instruction Object:

FieldTypeDescription
typeStringRequired. Determines the transfer method. Must be either "simple" or "quote".
amountNumberRequired for Simple Transfer only. Amount to transfer in minor units (cents/pence).
source_account_idUUIDRequired for Simple Transfer only. ID of the account sending the funds.
beneficiary_idUUIDRequired for Simple Transfer only. ID of the beneficiary receiving the funds.
destination_currencyStringOptional for Simple Transfer only. Currency code for FX transfers via SWIFT.
quote_idUUIDRequired for Transfer from Quote only. ID of a previously created quote that defines amount, source, destination, and rate information.

Transfer Request Example

{
    "reason": "business_expenses",
    "client_metadata": {
        "hello": "world"
    },
    "payment_reference": "293389483-009",
    "instruction": {
        "type": "simple",
        "source_account_id": "01961ef1-b21d-718f-8f06-9da328e8361e",
        "amount": 1000,
        "beneficiary_id": "019638b9-c63d-76c6-91f6-a7ccec3707ed"
    }
}
{
    "reason": "business_expenses",
    "client_metadata": {
        "hello": "world"
    },
    "payment_reference": "293389483-009",
    "instruction": {
        "type": "quote",
        "quote_id": "01961ef1-b21d-718f-8f06-9da328e8361e"
    }
}
curl -X POST https://your-api-endpoint.com/transfers \
  -H "Authorization: Bearer your_token_here" \
  --form "reason=business_expenses" \
  --form "client_metadata[hello]=world" \
  --form "payment_reference=293389483-009" \
  --form "instruction[type]=simple" \
  --form "instruction[source_account_id]=01961ef1-b21d-718f-8f06-9da328e8361e" \
  --form "instruction[amount]=1000" \
  --form "instruction[beneficiary_id]=019638b9-c63d-76c6-91f6-a7ccec3707ed"

Transfer Response

A sample transfer response is provided below

FieldTypeDescription
idstringUnique identifier for the transfer transaction
statestringCurrent state of the transfer ("PENDING")
status_descriptionstringHuman-readable description of the transfer status
created_datestringTimestamp when the transfer was initially created
updated_datestringTimestamp when the transfer was last updated
internal_referencestringSystem-generated internal reference for the transfer
client_metadataobjectAdditional metadata provided by the client
account_idstringIdentifier of the account sending the transfer
source_amountobjectAmount to be debited from the source account see amount section
total_feesobjectFees to be charged for the transfer see amount section
destination_amountobjectAmount to be credited to the destination account see amount section
completion_datestringThe actual time the transfer was completed. Only available when the state is "COMPLETED"
reasonstringPurpose or reason for the transfer
payment_referencestringReference number for the payment
sender_referencestringReference provided by the sender
beneficiaryobjectInformation about the recipient of the transfer see beneficiary section
provider_referencesarrayList of external references related to the transfer
balance_beforeobjectAccount balance before the transfer was initiatedsee amount section
balance_afterobjectExpected account balance after the transfer is processedsee amount section

Amount

FieldTypeDescription
valuestringAmount in minor units (e.g., cents for USD)
currencystringCurrency code in ISO 4217 format

Beneficiary

FieldTypeDescription
idstringUnique identifier of the beneficiary
typestringType of banking method used (e.g., "SWIFT")
namestringName of the beneficiary
country_codestringISO country code of the beneficiary
kindstringType of beneficiary (e.g., "BUSINESS", "INDIVIDUAL")
bank_accountobjectBanking details of the beneficiary see bank account section

Bank Account

FieldTypeDescription
bank_namestringName of the beneficiary's bank
swift_codestringSWIFT/BIC code of the beneficiary's bank
account_numberstringAccount number or IBAN of the beneficiary

Note: For transfers in PENDING state, the balance_after reflects the projected balance after successful processing.

Sample Transfer Response Payload

{
    "data": {
        "id": "019648f3-44ae-7e26-8cdd-92fab31c52de",
        "state": "PENDING",
        "status_description": "Transfer waiting to be processed",
        "created_date": "2025-04-18T12:50:24.559Z",
        "updated_date": "2025-04-18T12:50:27.389Z",
        "internal_reference": "wz-payout-HTEb-1744980624557",
        "client_metadata": {},
        "account_id": "01958a45-02ba-7d3e-beeb-3a65d97230ab",
        "source_amount": {
            "value": 20000,
            "currency": "USD"
        },
        "total_fees": {
            "value": 100,
            "currency": "USD"
        },
        "destination_amount": {
            "value": 20000,
            "currency": "USD"
        },
        "reason": "Business Payments – Payments for goods, services, supplier invoices, or business expenses.",
        "payment_reference": "293389483-009",
        "beneficiary": {
            "id": "019638b9-c63d-76c6-91f6-a7ccec3707ed",
            "type": "SWIFT",
            "name": "Emmanuel Igbodudu",
            "country_code": "US",
            "kind": "BUSINESS",
            "bank_account": {
                "bank_name": "Revolut ltd",
                "swift_code": "REVOGB21",
                "account_number": "GB34REVO00997019274916"
            }
        },
        "sender_reference": "293389483-009",
        "provider_references": [],
        "balance_before": {
            "value": 320000,
            "currency": "USD"
        },
        "balance_after": {
            "value": 300000,
            "currency": "USD"
        }
    }
}