Transfers

Overview

The Transfers API allows you to send funds from your accounts to beneficiaries both domestically and internationally. It provides a flexible set of endpoints to create, track, and manage outgoing payments to individuals, businesses, and other financial institutions.

Key features of the Transfers API:

  • Create domestic and international transfers
  • Support for multiple payment methods (SWIFT, ACH, FedWire, NUBAN, SEPA, Faster Payments)
  • Check transfer status and track progress
  • Support for currency conversion within transfers
  • Add supporting documentation to transfers
  • Retrieve transfer history with detailed filtering options

The Transfer Object

PropertyTypeRequiredDescription
idstring (UUID)Unique identifier of the transfer.
stateenumCurrent state of the transfer (PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, PENDING_APPROVAL, AWAITING_FUNDS).
status_descriptionstringHuman-readable description of the transfer's current state.
created_datestring (datetime)Date and time when the transfer was created.
updated_datestring (datetime)Date and time when the transfer was last updated.
completion_datestring (datetime)Date and time when the transfer was completed (only for COMPLETED transfers).
internal_referencestringInternal reference for the transfer (system-generated).
client_referencestringClient-provided reference for the transfer.
client_metadataobjectClient-provided metadata for the transfer.
account_idstring (UUID)ID of the source account for the transfer.
source_amountobjectOriginal instructed amount for the transfer.
source_amount.valuenumberAmount in minor units (cents, pence, etc).
source_amount.currencystringCurrency code (ISO 4217).
billing_amountobjectTotal amount debited from the source account.
billing_amount.valuenumberAmount in minor units (cents, pence, etc).
billing_amount.currencystringCurrency code (ISO 4217).
total_feesobjectTotal fees charged for the transfer.
total_fees.valuenumberFee amount in minor units (cents, pence, etc).
total_fees.currencystringCurrency code (ISO 4217).
destination_amountobjectAmount that the beneficiary will receive.
destination_amount.valuenumberAmount in minor units (cents, pence, etc).
destination_amount.currencystringCurrency code (ISO 4217).
typestringinternal or eternal
destination_accountobjectDestination Account details if type is internal
destination_account.idstringDestination account id
destination_account.namestringDestination account name
destination_account.classificationstringinstitution_main_account, institution_sub_account or customer_sub_account
beneficiaryobjectBeneficiary details if type is external.
beneficiary.idstring (UUID)ID of the saved beneficiary.
beneficiary.namestringName of the beneficiary.
beneficiary.country_codestringCountry code of the beneficiary.
beneficiary.typeenumType of the beneficiary (e.g., SWIFT, ACH, NUBAN).
beneficiary.kindenumKind of the beneficiary (INDIVIDUAL, BUSINESS).
beneficiary.bank_accountobjectBank account details of the beneficiary (see Beneficiary Bank Account table).
payment_referencestringReference displayed to the beneficiary on their bank statement.
memostringAdditional information about the transfer (not shared with the beneficiary).
reasonenumPurpose or reason for the transfer (e.g., bill_payment, salary_wages, business_expenses).
on_behalf_ofobjectIf the transfer is made on behalf of a customer or sub-account.
on_behalf_of.customer_idstring (UUID)ID of the customer if POBO is specified
on_behalf_of.account_idstring (UUID)ID of the sub-account if POBO is specified.
quote_idstring (UUID)ID of the quote used for this transfer (if applicable).
fxobjectExchange rate details if currency conversion was involved.
fx.pairstringCurrency pair (e.g., "USD/EUR").
fx.base_currencystringBase currency of the exchange rate.
fx.quote_currencystringQuote currency of the exchange rate.
fx.ratenumberExchange rate applied.
failure_reasonstringReason for failure if the transfer failed.
provider_referencesarrayList of references from the payment provider.
provider_references[].typeenumType of reference (e.g., SWIFT_UETR, END_TO_END_ID).
provider_references[].valuestringValue of the reference.
balance_beforeobjectAccount balance before the transfer.
balance_before.valuenumberBalance before in minor units (cents, pence, etc).
balance_before.currencystringCurrency code (ISO 4217).
balance_afterobjectAccount balance after the transfer.
balance_after.valuenumberBalance after in minor units (cents, pence, etc).
balance_after.currencystringCurrency code (ISO 4217).

Beneficiary Bank Account

The beneficiary.bank_account object provides details about the beneficiary's bank account. The structure varies depending on the payment method type:

FieldTypeIs Always AvailableDescription
bank_namestringName of the beneficiary bank.
account_numberstringAccount number at the beneficiary bank.
routing_numberstringRouting number for US banks.
swift_codestringSWIFT/BIC code of the beneficiary bank.
sort_codestringSort code for UK banks.
ibanstringIBAN for European accounts.
local_bank_codestringBank code if a local scheme was used. example NUBAN will have the Nigerian bank's bank_code here


Transfer State Lifecycle

Transfers move through various states during their lifecycle. Understanding these states and their transitions is crucial for properly monitoring and managing transfers.

Transfer States

StateDescription
PENDINGThe transfer has been initiated but not yet processed. Initial validation checks have passed, but the transfer hasn't been submitted to the payment network.
PENDING_APPROVALThe transfer is awaiting approval from an authorized user or system before it can be processed. This only occurs for transfers created from the dashboard where the Institution configured approvals.
AWAITING_FUNDSThe transfer is valid, but it must have sufficient funds in the source account before it can be processed. This only happens for transfers created via OTC
PROCESSINGThe transfer is currently being processed and sent to the payment network. This is an intermediate state where the funds are in transit.
COMPLETEDThe transfer has been successfully processed, and the funds sent to the beneficiary. This is a terminal successful state.
FAILEDThe transfer could not be completed due to an error. This could be due to invalid beneficiary details, compliance issues, or other processing problems. This is a terminal failure state.
CANCELLEDThe Institution or an administrator manually canceled the transfer before it was fully processed. This is a terminal state.

State Transition Flow


stateDiagram-v2
    [*] --> PENDING: Create Transfer
    [*] --> PENDING_APPROVAL: Create Transfer (requires approval)
    [*] --> AWAITING_FUNDS: Create Transfer (insufficient funds)
    
    PENDING --> PROCESSING: Automatic processing
    PENDING_APPROVAL --> PROCESSING: After approval
    AWAITING_FUNDS --> PROCESSING: Funds received
    
    PROCESSING --> COMPLETED: Success
    PROCESSING --> FAILED: Error
    
    COMPLETED --> [*]
    FAILED --> [*]
    
    PENDING --> CANCELLED: Manual cancellation
    PENDING_APPROVAL --> CANCELLED: Manual cancellation
    AWAITING_FUNDS --> CANCELLED: Manual cancellation
    
    CANCELLED --> [*]

Important Notes About Transfer States

  1. Initial State: All transfers begin in the PENDING state after creation.

  2. Terminal States: There are three terminal states:

    • COMPLETED: The transfer was successful
    • FAILED: The transfer failed due to an error
    • CANCELLED: The transfer was deliberately cancelled
  3. Intermediate States:

    • PENDING_APPROVAL: May require manual action from an authorized user
    • AWAITING_FUNDS: Will proceed automatically once funds are available
    • PROCESSING: No further action required; awaiting network processing
  4. Cancellation:

    • Transfers can only be cancelled in the PENDING, PENDING_APPROVAL, or AWAITING_FUNDS states
    • Once a transfer reaches the PROCESSING state, cancellation is generally not possible
  5. Finality:

    • Once a transfer reaches a terminal state (COMPLETED, FAILED, or CANCELLED), it cannot transition to any other state
    • If a transfer fails, a new transfer must be created rather than retrying the failed one

Monitoring Transfer States

It's recommended to implement the following monitoring strategies:

  1. Webhooks: Set up webhooks to receive real-time notifications of state changes
  2. Reporting: Implement daily reconciliation processes to ensure all transfers have reached appropriate terminal states