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.
stateenum✅Current state of the transfer (PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, PENDING_APPROVAL, AWAITING_FUNDS).
status_descriptionstring✅Human-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_referencestring✅Internal reference for the transfer (system-generated).
client_referencestring❌Client-provided reference for the transfer.
client_metadataobject❌Client-provided metadata for the transfer.
account_idstring (UUID)✅ID of the source account for the transfer.
source_amountobject✅Original instructed amount for the transfer.
source_amount.valuenumber✅Amount in minor units (cents, pence, etc).
source_amount.currencystring✅Currency code (ISO 4217).
billing_amountobject✅Total amount debited from the source account.
billing_amount.valuenumber✅Amount in minor units (cents, pence, etc).
billing_amount.currencystring✅Currency code (ISO 4217).
total_feesobject✅Total fees charged for the transfer.
total_fees.valuenumber✅Fee amount in minor units (cents, pence, etc).
total_fees.currencystring✅Currency code (ISO 4217).
destination_amountobject✅Amount that the beneficiary will receive.
destination_amount.valuenumber✅Amount in minor units (cents, pence, etc).
destination_amount.currencystring✅Currency code (ISO 4217).
typestring✅internal or eternal
destination_accountobject❌Destination Account details if type is internal
destination_account.idstring✅Destination account id
destination_account.namestring✅Destination account name
destination_account.classificationstring✅institution_main_account, institution_sub_account or customer_sub_account
beneficiaryobject❌Beneficiary details if type is external.
beneficiary.idstring (UUID)✅ID of the saved beneficiary.
beneficiary.namestring✅Name of the beneficiary.
beneficiary.country_codestring❌Country code of the beneficiary.
beneficiary.typeenum❌Type of the beneficiary (e.g., SWIFT, ACH, NUBAN).
beneficiary.kindenum❌Kind of the beneficiary (INDIVIDUAL, BUSINESS).
beneficiary.bank_accountobject✅Bank account details of the beneficiary (see Beneficiary Bank Account table).
payment_referencestring❌Reference displayed to the beneficiary on their bank statement.
memostring❌Additional information about the transfer (not shared with the beneficiary).
reasonenum✅Purpose or reason for the transfer (e.g., bill_payment, salary_wages, business_expenses).
on_behalf_ofobject❌If 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).
fxobject❌Exchange rate details if currency conversion was involved.
fx.pairstring✅Currency pair (e.g., "USD/EUR").
fx.base_currencystring✅Base currency of the exchange rate.
fx.quote_currencystring✅Quote currency of the exchange rate.
fx.ratenumber✅Exchange rate applied.
failure_reasonstring❌Reason for failure if the transfer failed.
provider_referencesarray✅List of references from the payment provider.
provider_references[].typeenum✅Type of reference (e.g., SWIFT_UETR, END_TO_END_ID).
provider_references[].valuestring✅Value of the reference.
balance_beforeobject✅Account balance before the transfer.
balance_before.valuenumber✅Balance before in minor units (cents, pence, etc).
balance_before.currencystring✅Currency code (ISO 4217).
balance_afterobject✅Account balance after the transfer.
balance_after.valuenumber✅Balance after in minor units (cents, pence, etc).
balance_after.currencystring✅Currency 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_namestring❌Name of the beneficiary bank.
account_numberstring❌Account number at the beneficiary bank.
routing_numberstring❌Routing number for US banks.
swift_codestring❌SWIFT/BIC code of the beneficiary bank.
sort_codestring❌Sort code for UK banks.
ibanstring❌IBAN for European accounts.
local_bank_codestring❌Bank 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

Did this page help you?