Ibanera Customer API
Customer Portal
  • Overview
  • Terminology
    • Exchanges of Assets
    • Payees
    • Personal Customers
    • Business Customers
      • Managees
    • Enumerations, Codes and Definitions
      • Source of Funds Types
      • Transfer Purpose Codes Reference
  • Getting Started
    • Access the API
    • API Principal Account
    • Common Response Format
    • First API Call
    • Authentication & Authorization
      • Generating a Time-Based One-Time Password (TOTP) with a Shared Secret
  • API Endpoints
    • Accounts
    • Business Onboarding
    • Cards
    • Crypto Exchanges
    • Foreign Currency Exchange
    • Payees (Beneficiaries)
    • Transfers
    • Transaction Cancellation
    • Managees
    • Information Requests (RFIs)
    • Quick Buy
    • Simulated Testing
  • Callbacks
    • Managee Jumio Completed
    • Cryptocurrency Transfers
    • Exchange Status Updated
    • Fiat Deposit Received
    • Managee Card Approval Updated
    • Managee KYC Updated
    • Transaction Status Updated
    • Information Requests
  • QuickBuy
    • QuickBuy Callback
    • QuickBuy Front End Implementation
    • Validating the Webhook Signature
    • QuickBuy Pro
      • Visual Customization
      • Getting Started / Authentication
      • API Endpoints
        • Create Payment
        • Retrieve Payments
        • Delete Payment
      • Callbacks
        • Payment Captured
        • Cryptocurrency Transferred
Powered by GitBook
On this page
  1. API Endpoints

Transfers

PreviousPayees (Beneficiaries)NextTransaction Cancellation

Last updated 25 days ago

Overview

The Transfers module of the Customer API facilitates the movement of funds and manages transfer-related operations with a suite of endpoints tailored to cover various functionalities:

  1. : This endpoint allows customers to conduct internal fund transfers between two customer asset accounts within the system. The users need to specify the source and destination account IDs, the amount to be transferred, and a reference note for the transaction.

  2. : Customers can perform external transfers from their asset account using this endpoint. It supports both domestic and international transfers, requiring information about the source account, transfer type, payee details, saved payee preferences, amount, reference note, and the purpose code for the transaction.

  3. : Customers can perform external transfers from their asset account using this endpoint. User's have the ability to set the transaction's originator, and thus affect how the sender's details appear in the receiver's account. It supports both domestic and international transfers, requiring information about the source account, transfer type, payee details, saved payee preferences, amount, reference note, and the purpose code for the transaction.

  4. : This endpoint provides a list of available purpose codes that are to be used for external fiat transfers. It helps in categorizing the transfer types for internal use, such as "Transfer to own account" or "Family Maintenance".

  5. : This endpoint allows customers to conduct internal cryptocurrency transfers between two customer asset accounts within the system. The users need to specify the source and destination account IDs, the amount to be transferred.

  6. - This operation gives a user necessary details to call the POST endpoint. This includes a list of reasons for transaction reversal.

  7. - This operation allows the user to reverse an inbound external transfer.

  8. : This endpoint allows customers to look up additional bank details given a SWIFT code (more lookup options coming soon).

  9. : Request quote for foreign transfers

  10. Exe : Execute a given foreign transfer quote


Create Internal Fiat Transfer

Make an internal fiat transfer between two customer asset accounts.

Example Request Body

{
   "SourceAccountId":2141,
   "DestinationAccountId":2143,
   "Amount": 1000,
   "Reference": "Internal Fiat Transfer Test"
}

Example Success Response

{
    "id": 1008,
    "status": "1",
    "errors": []
}

Create External Fiat Transfer

  • Endpoint: /api/v3/customer/transfers/fiat/createexternaltransfer

  • Method: POST

Transfer Types

Create External Fiat Transfer currently supports four different TransferTypes. Depending on your account type, you can access the following:

  1. Wire - FedWire, available to US accounts.

  2. ACH - Available to US accounts.

  3. RTP - Realtime Domestic US Payments, also known as FedNow. Available to US accounts.

  4. SWIFT - For international accounts.

  5. P2C - Use only with PayeesId set to a card-type payee.

Request Body Parameters

Parameter Name
Type
Description

transmitter

Object, Required for Financial Institutions

Information relating to the transmittere of payment

transmitter.firstPartyTransfer

Boolean

True if the payment is a first party transfer. If true, other transmitter fields are not required.

transmitter.type

String

'Company' or 'Individual'

transmitter.dateOfBirth

datetime

If Transmitter type is 'Individual', date of birth is required

transmitter.name

String

Name of Transmitter

transmitter.accountNumber

String, Optional

Account Number for the Transmitter

transmitter.addressLine1

String

Address Line 1 for transmitter

transmitter.addressLine2

String, Optional

Address Line 2 for transmitter

transmitter.townCity

String

Town / City for transmitter

transmitter.state

String

State / Province for transmitter

transmitter.postcode

String

Post Code for transmitter

transmitter.countryCode

String

3 Letter Country Code for transmitter (ex. USA)

payee

Object, Required

Payee / Beneficary information

payee.payeesId

Number

Optional Payees ID of an existing payee, for sending payments to an existing payee. If provided, the other payee fields are not required.

payee.name

String

Name of Payee

payee.type

String

'Personal' or 'Company'

payee.countryCode

String

3 Letter Country Code for recieving bank (ex. USA)

payee.bankName

String

Name of Receiving Bank

payee.routingNumber

String

ABA Routing Number, not required if swiftCode is provided

payee.swiftCode

String

SWIFT Bic, not required if routingNumber is provided

payee.intermediarySwiftCode

String, Optional

Optional Intermediary Bank SWIFT Bic. Only available for SWIFT transfers.

payee.accountNumber

String

Account Number of payee

payee.accountName

String

Name of the payee's account. If unknown, use the payee name

payee.addressLine1

String

Address Line 1 for payee

payee.addressLine2

String, Optional

Address Line 2 for payee

payee.townCity

String

Town / City for payee

payee.state

String

State / Province for payee

payee.postcode

String

Post Code for payee

payee.addressCountryCode

String

3 Letter Country Code for payee (ex. USA)

bSavePayee

Boolean

True if you would like to save the payee details for future use

sourceAccountId

Number

Account ID corresponding to the account to be debited

transferType

String

Transfer rail (ex. 'SWIFT', 'Wire', etc)

amount

Number

Amount to be sent. The currency is implied by the currency of the sourceAccountId

bankFeeSplitType

String

For SWIFT transfers only, specify 'Full Bank Fee', 'Half Bank Fee', or 'No Bank Fee'. If none is provided, default is 'Half Bank Fee'

reference

String

Reference message to be sent to the receiving bank. (Limit 140 characters)

purposeCode

String, Enum

purpose

String

If a purposeCode is not provided, you may use purpose, which is a string to specify the purpose of the payment (max 100 chars). You must provide either purpose or purposeCode, however purposeCode is required for Wire transfers sent to payees outside the USA

Transfer Purpose

Param Name
Type
Description

PurposeCode

String

Purpose

String

Provide a string for purpose reason. Limit 100 chars. [a-z], [A-Z], [0-9]

Payee Request Parameters

{
  ...
  "payee": {
    // Option 1: Use payeesId to reference a Payee
    "payeesId": 0,
    
    // Option 2: Use the following fields to detail a payee
    
    //Either Routing Number or Swift Code is available
    "routingNumber": "string",
    "swiftCode": "string",
    "bankName": "string",
    "countryCode": "string", // country code for the receiving bank
    "intermediarySwiftCode":"string",
    "accountNumber": "string",
    "accountName": "string",
    
    "type": "string",
    "name": "string",
    "addressLine1": "string",
    "addressLine2": "string",
    "addressCountryCode": "string",
    "townCity": "string",
    "state": "string",
    "postcode": "string",
    "addressCountryCode": "string" //country code for the payee's address
  },
  ...
}

Transmitter Information

Financial Institutions are required to submit information regarding the transmitter of a payment. You can submit this information in the transmitter object. For transactions that are first party transfer, you can specify firstPartyTransfer: true

Third Party Payment Example

{
    ...
    "transmitter": {
        "firstPartyTransfer": false,
        
        "name": "John Doe",
        "type": "Company",
        "dateOfBirth": "1990-10-08T00:00:00.000Z"
        "accountNumber": "1234567890",
        "addressLine1": "123 Main St",
        "addressLine2": "Unit 1A",
        "townCity": "Cityville",
        "state": "WY",
        "postcode": "12345",
        "countryCode": "USA"
        
  },
  ...
}

First Party Payment Example

{
    ...
    "transmitter": {
        "firstPartyTransfer": true
  },
  ...
}

Example Request Body

The format of the request body is different between Domestic USA transfers and international transfers. Refer to the following examples for reference:

Domestic Wire Transfer Request Body

{
        "sourceAccountId":2141,
        "transferType": "Wire",
        "payee":{
                "countryCode":"USA",
                "bankName": "ABC Bank",
                "routingNumber":"125000105",
                "accountNumber":"2140632999",
                "accountName":"Test account",
                "type":"Personal",
                "name":"Test Account",
                "addressLine1":"123 Main St",
                "townCity":"New York",
                "state":"NY",
                "postcode":"10001",
                "addressCountryCode": "USA"
        },
        "bSavePayee":true, 
        "amount": 100,
        "reference": "Test Transfer", 
        "purposeCode" : "PUC002"
}

International Swift Transfer Request Body

International transfers utilize the SWIFT TransferType. Customers can specify the BankFeeSplitType, which enables a customer to decide the bearer of bank charges. You can choose between the following values for BankFeeSplitType:

  • "Full Bank Fee" - This option is known as 'OURS'

  • "Half Bank Fee" - This option is known as 'SHA'

  • "No Bank Fee" - This option is known as 'BEN'

{
        "sourceAccountId": 2141,
        "transferType": "SWIFT",
        "bankFeeSplitType": "Full Bank Fee",
        "transmitter": {
                "firstPartyTransfer": false,
                "name": "John Doe",
                "accountNumber": "1234567890",
                "addressLine1": "123 Main St",
                "addressLine2": "Unit 1A",
                "townCity": "Cityville",
                "state": "WY",
                "postcode": "12345",
                "countryCode": "USA",
                "type": "Individual",
                "dateOfBirth": "1990-10-08T00:00:00.000Z"
        },
        "payee": {
                "countryCode": "SGP",
                "bankName": "ABC Bank",
                "swiftCode": "DBSSSGSG",
                "intermediaryBic":"XXXX",
                "accountNumber": "12342346545123",
                "accountName": "Checking Account",
                "type":"Company",
                "name": "Sample Company LLC",
                "addressLine1": "62 UBI road 1",
                "townCity": "Oxley Bizhub 2",
                "postcode": "408734",
                "addressCountryCode": "SGP"
        },
        "bSavePayee": true,
        "amount": 50,
        "reference": "Transaction reference to be sent to beneficiary (140 chars)", 
        "purpose": "Purpose of the transfer (100 chars)"
}

Example Success Response

{
    "id": 22026,
    "details": {
        "id": 30939,
        "accountsId": 2141,
        "fromTransactionsId": null,
        "fromAccountsId": null,
        "toTransactionsId": null,
        "toAccountsId": null,
        "amount": -10,
        "description": "External transfer - Family Maintenance",
        "dateTime": "2024-02-15T17:05:09.97+00:00",
        "bPending": true
    },
    "status": "1",
    "errors": []
}

Create External Fiat Transfer With Originator

Transfer Types

Create External Fiat Transfer currently supports four different TransferTypes. Depending on your account type, you can access the following:

  1. Wire - FedWire, available to US accounts.

  2. ACH - Available to US accounts.

  3. RTP - Realtime Domestic US Payments, also known as FedNow. Available to US accounts.

  4. SWIFT - For international accounts.

  5. P2C - Use only with PayeesId set to a card-type payee.

Request Body Parameters

Parameter Name
Type
Description

transmitter

Object, Required for Financial Institutions

Information relating to the transmittere of payment

transmitter.firstPartyTransfer

Boolean

True if the payment is a first party transfer. If true, other transmitter fields are not required.

transmitter.name

String

Name of Transmitter

transmitter.accountNumber

String, Optional

Account Number for the Transmitter

transmitter.addressLine1

String

Address Line 1 for transmitter

transmitter.addressLine2

String, Optional

Address Line 2 for transmitter

transmitter.townCity

String

Town / City for transmitter

transmitter.state

String

State / Province for transmitter

transmitter.postcode

String

Post Code for transmitter

transmitter.countryCode

String

3 Letter Country Code for transmitter (ex. USA)

payee

Object, Required

Payee / Beneficary information

payee.payeesId

Number

Optional Payees ID of an existing payee, for sending payments to an existing payee. If provided, the other payee fields are not required.

payee.name

String

Name of Payee

payee.type

String

'Personal' or 'Company'

payee.countryCode

String

3 Letter Country Code for recieving bank (ex. USA)

payee.bankName

String

Name of Receiving Bank

payee.routingNumber

String

ABA Routing Number, not required if swiftCode is provided

payee.swiftCode

String

SWIFT Bic, not required if routingNumber is provided

payee.intermediarySwiftCode

String, Optional

Optional Intermediary Bank SWIFT Bic. Only available for SWIFT transfers.

payee.accountNumber

String

Account Number of payee

payee.accountName

String

Name of the payee's account. If unknown, use the payee name

payee.addressLine1

String

Address Line 1 for payee

payee.addressLine2

String, Optional

Address Line 2 for payee

payee.townCity

String

Town / City for payee

payee.state

String

State / Province for payee

payee.postcode

String

Post Code for payee

payee.addressCountryCode

String

3 Letter Country Code for payee (ex. USA)

bSavePayee

Boolean

True if you would like to save the payee details for future use

originator

Object

Information relating to the originator

originator.companyId

String

Company ID of the originator

originator.name

String

Name of Orignator

originator.AddressLine1

String

Address line 1 for originator

originator.AddressLine2

String

Address line 2 for originator

originator.AddressLine3

String

Address line 3 for originator

originator.Data

String

Additional data to be sent with Originator Information

sourceAccountId

Number

Account ID corresponding to the account to be debited

transferType

String

Transfer rail (ex. 'SWIFT', 'Wire', etc)

amount

Number

Amount to be sent. The currency is implied by the currency of the sourceAccountId

bankFeeSplitType

String

For SWIFT transfers only, specify 'Full Bank Fee', 'Half Bank Fee', or 'No Bank Fee'. If none is provided, default is 'Half Bank Fee'

reference

String

Reference message to be sent to the receiving bank. (Limit 140 characters)

purposeCode

String, Enum

purpose

String

If a purpose code is not required, you should specify the purpose of the payment here (max 100 chars). If the purpose code corresponding to 'Other' is used, then the custom purpose must be provided here.

Payee Request Parameters

{
  ...
  "payee": {
    // Option 1: Use payeesId to reference a Payee
    "payeesId": 0,
    
    // Option 2: Use the following fields to detail a payee
    
    //Either Routing Number or Swift Code is available
    "routingNumber": "string",
    "swiftCode": "string",
    "bankName": "string",
    "countryCode": "string",
    "intermediarySwiftCode":"string",
    "accountNumber": "string",
    "accountName": "string",
    
    "type": "string",
    "name": "string",
    "addressLine1": "string",
    "addressLine2": "string",
    "addressCountryCode": "string",
    "townCity": "string",
    "state": "string",
    "postcode": "string"
  },
  ...
}

Transmitter Information

Financial Institutions are required to submit information regarding the transmitter of a payment. You can submit this information in the transmitter object.

Third Party Payment Example

{
    ...
    "transmitter": {
        "firstPartyTransfer": false,
        
        "name": "John Doe",
        "accountNumber": "1234567890",
        "addressLine1": "123 Main St",
        "addressLine2": "Unit 1A",
        "townCity": "Cityville",
        "state": "WY",
        "postcode": "12345",
        "countryCode": "USA"
  },
  ...
}

First Party Payment Example

{
    ...
    "transmitter": {
        "firstPartyTransfer": true
  },
  ...
}

Originator Request Parameters

The settable parameters for the originator depend on whether the transfer is a Wire or an ACH transfer.

{
  ...
  "Originator":{
        //Required for ACH transfers
        "CompanyId":"string",
        
        //Required
        "Name":"string",
        
        //Optional for Wire transfers. Must be null for ACH transfers
        "AddressLine1":"string",
        
        //Optional for Wire transfers. Must be null for ACH transfers
        "AddressLine2":"string",
        
        //Optional for Wire transfers. Must be null for ACH transfers
        "AddressLine3":"string",
        
        //Optional for ACH transfers. Must be null for Wire transfers
        "Data":"string"
    },
  ...
}

Example Request Body

The format of the request body is different between Domestic USA transfers and international transfers. Refer to the following examples for reference:

Domestic Wire Transfer Request Body

{
   "SourceAccountId":2141,
   "TransferType":"Wire",
    "Payee":{
        "CountryCode":"USA",
        "RoutingNumber":"125000105",
        "AccountNumber":"2140632999",
        "AccountName":"Test account",
        "Type":"Personal",
        "Name":"Test Account",
        "AddressLine1":"1 TestAddress",
        "TownCity":"TestTown",
        "State":"TestCounty",
        "Postcode":"N19AA",
        "addressCountryCode": "GBR"
    },
    "Originator":{
        "CompanyId":null,
        "Name":"Test name",
        "AddressLine1":"street address",
        "AddressLine2":"town",
        "AddressLine3":"country",
        "Data":null
    },
    "bSavePayee":true,
   "Amount": 10,
   "Reference": "Test Transfer",
   "PurposeCode" : "PUC002"
}

International Wire Transfer Request Body

{
    "SourceAccountId": 2141,
    "TransferType": "Wire",
    "Payee": {
        "CountryCode": "SGP",
        "SwiftCode": "DBSSSGSG",
        "IntermediaryBic":"XXXX",
        "AccountNumber": "12342346545123",
        "AccountName": "Sebi Scaria",
        "Type":"Company",
        "Name": "Sebi Scaria",
        "AddressLine1": "62 UBI road 1",
        "TownCity": "Oxley Bizhub 2",
        "Postcode": "408734",
        "addressCountryCode": "SGP"
    },
    "Originator":{
        "CompanyId":null,
        "Name":"Test name",
        "AddressLine1":"street address",
        "AddressLine2":"town",
        "AddressLine3":"country",
        "Data":null
    },
    "bSavePayee":true,
    "Amount": 50,
    "Reference": "Test Transfer",
    "PurposeCode": "PUC002"
}

Example Success Response

{
    "id": 22026,
    "details": {
        "id": 30939,
        "accountsId": 2141,
        "fromTransactionsId": null,
        "fromAccountsId": null,
        "toTransactionsId": null,
        "toAccountsId": null,
        "amount": -10,
        "description": "External transfer - Family Maintenance",
        "dateTime": "2024-02-15T17:05:09.97+00:00",
        "bPending": true
    },
    "status": "1",
    "errors": []
}

Get Purpose Codes

Get list of available purpose codes to be used for external fiat transfer.

Example Success Response

{
    "id": 0,
    "details": {
    "purposeCodes": [
        {
            "code": "PUC001",
            "description": "Transfer to own account"
        },
        {
            "code": "PUC002",
            "description": "Family Maintenance"
        }]
    },
    "pageSize": 10,
    "pageNumber": 1,
    "status": "1",
    "errors": []
}

Query Parameters

  • customerAssetAccountsId (Integer) - The ID of the source account making the external fiat transfer (REQUIRED),

  • payeesId (Integer) - The ID of the payee in the external fiat transfer. Required if countryCode is not specified, optional otherwise.

  • countryCode (String) - The country code of the payee in ISO/ISO2 format. Required if payeesId is not specified, optional otherwise.


Create Internal Crypto Transfer

This endpoint initiates a transfer of crypto currency between two asset accounts that are accessible by a manager. The endpoint requires parameters for the source account ID, the destination account ID, and the amount for the transfer. The asset to be transferred is inferred by the asset account ID.

  • Endpoint: /api/v1/customer/accounts/crypto/move

  • Method: POST

Request Body Example

{
    "fromAccountsId": 1001, // Integer - Required
    "toAccountsId" : 1002, // Integer - Required
    "amount": 0.01 // Decimal - Required
}

Response Body Example

{
    "id": 0,
    "details": {
        "customersId": 1001,
        "customerReference": "your-customer-reference",
        "fromTransaction": {
            "id": 10001,
            "accountsId": 1001,
            "fromTransactionsId": null,
            "fromAccountsId": null,
            "toTransactionsId": 10002,
            "toAccountsId": 1002,
            "amount": -0.010000000000000000,
            "description": "Transfer of crypto to managing account 1001",
            "dateTime": "2024-01-01T18:21:39.7633333+00:00",
            "bPending": true
        },
        "toTransaction": {
            "id": 10002,
            "accountsId": 1002,
            "fromTransactionsId": 10001,
            "fromAccountsId": 1001,
            "toTransactionsId": null,
            "toAccountsId": null,
            "amount": 0.010000000000000000,
            "description": "Receipt of crypto from managee account 1002",
            "dateTime": "2024-01-01T18:21:39.77+00:00",
            "bPending": true
        }
    },
    "status": "1",
    "errors": []
}

Get Reverse Inbound Transfer Details

This operation gives the user necessary details to call the POST endpoint to reverse an inbound transfer.

  • Endpoint: /api/v1/customer/accounts/reverse-inbound-transfer

  • Method: GET

  • Query Parameters:

    • customersId (Integer): The ID of the customer account from which the withdrawal is to be made.

Response Body Parameters:

  • id (Integer): A reference ID for the transaction; not used in the example.

  • details.purposes (JSON Array): List of possible purposes for reversal.

  • details.purposes.id (Integer): The ID of the purpose.

  • details.purposes.name (String): Description of the purpose.

Success Response Example:

{
    "id": 0,
    "details": {
        "purposes": [
            {
                "id": 1000,
                "name": "Unable to Identify Beneficiary"
            },
            {
                "id": 1001,
                "name": "Unexpected Transaction"
            },
            {
                "id": 1002,
                "name": "Transaction Not Allowed"
            },
            {
                "id": 1003,
                "name": "Other"
            }
        ]
    },
    "status": "1",
    "errors": []
}

Reverse Inbound Transfer

This operation allows the user to reverse an inbound transfer.

  • Endpoint: /api/v1/customer/accounts/reverse-inbound-transfer

  • Method: POST

  • Request Body Parameters:

    • customersId (Integer): The ID of the customer account from which the withdrawal is to be made.

Request Example:

{
    "customersId":2036,
    "transactionId":18410,
    "purposeId":1001,
    "purposeOther":null
}

Response Body Parameters:

  • id (Integer): A reference ID for the transaction; not used in the example.

  • details.transactionId (JSON Array): Id of the transaction being reversed.

Success Response Example:

{
    "id": 0,
    "details": {
        "transactionId": 18410
    },
    "status": "1",
    "errors": []
}

Lookup Bank Details

This endpoint allows customers to look up additional bank details given a SWIFT code (more lookup options coming soon).

Request FX Transfer Quote

This operation request a quote for a foreign transfer with either source amount or destination amount and returns the estimated source and destination amounts with the quote id.

  • Endpoint: /api/v1/customer/transfers/fx-request-quote

  • Method: POST

Request Example:

{
    "SourceAmount": "10",
    "PayeesId": 4451,
    "PurposeCode": "PUC002",
    "Reference": "REF16149",
    "CustomerAssetAccountsId": 14259,
    "TransferType": "Wire"
}

Success Response Example:

{
    "id": 1,
    "details": {
        "commandSourceAmount": 10.0,
        "commandDestinationAmount": null,
        "estimateSourceAmount": 10.0,
        "estimateDestinationAmount": 9.48,
        "fxFeePercentage": 0.200,
        "exchangeFeeAmount": 0.24,
        "estimateTotalSourceAmount": 10.0,
        "estimateTotalDestinationAmount": 9.24,
        "quotedFXRate": "0.947601",
        "quotedFXRateID": 1247,
        "quotedFxRateExpiry": "2024-12-11T10:39:51.154Z"
    },
    "status": "1",
    "errors": []
}

Execute FX Transfer

This operation execute a given FX transfer quote .

  • Endpoint: /api/v1/customer/transfers/executefxtransfer

  • Method: POST

Request Example:

{    
    "CustomerAssetAccountsId": 14259,
    "TransferType": "Wire",
    "PayeesId": 4451,
    "FxRateId":1247,    
    "Reference": "REF16149",    
    "BeneficiaryReference": "REF16149",    
    "PurposeCode": "PUC002"
}

Success Response Example:

{
    "id": 61825,
    "details": {
        "id": 61825,
        "accountsId": 14259,
        "fromTransactionsId": null,
        "fromAccountsId": null,
        "toTransactionsId": null,
        "toAccountsId": null,
        "amount": -10.000000000000000000,
        "description": "USD International Transfer",
        "dateTime": "2024-12-10T10:40:10.06+00:00",
        "bPending": true,
        "transmitterId": "CST10024-4451"
    },
    "status": "1",
    "errors": []
}

Make an external transfer from a customer asset account, using either a Wire or ACH. Refer to to categorize a transfer.

Required for Wire transfers sent to an international payee.

External fiat transfers may require a payment purpose to be submitted in the request body. A list of applicable payment purpose codes for a particular transfer is returned from the endpoint. If the purposeCode is omitted or specified as 'Other', then you should submit a customer purpose in the purpose field.

Note: When a purpose code is required, it will be listed in the endpoint. If no purpose codes are returned from this endpoint, then purposeCode is not required and you should specify the purpose of the payment in purpose.

When configuring a , you can either use payeesId to use an existing payee, or provide payee information directly. Additionally, you can refer to the to access various functionality such as creating, retrieving, modifying, and deleting payees.

Make an external transfer with a user defined originator from a customer asset account, using either a Wire or ACH. Refer to to categorize a transfer.

The list of applicable purpose codes for a transfer can vary, depending on the sending bank and the receiving country. Before making a transfer, a call should be made to the to get a list of acceptable purpose codes. If no purpose codes are returned by this endpoint, then a purpose code need not be provided for this transfer, but a purpose should be provided in the purpose field, in such a case.

When configuring a , you can either use payeesId to use an existing payee, or provide payee information directly. Additionally, you can refer to the to access various functionality such as creating, retrieving, modifying, and deleting payees.

payee
Payees API Endpoints
payee
Payees API Endpoints
Create Internal Fiat Transfer
Create External Fiat Transfer
Create External Fiat Transfer With Originator
Get Purpose Codes
Create Internal Crypto Transfer
Get Reverse Inbound Transfer Details
Reverse Inbound Transfer
Lookup Bank Details
Request FX Quote
cute FX Quote
Purpose Codes
Purpose Codes
Purpose Codes
Purpose Codes
Refer to our list of Purpose Codes.
Refer to our list of purpose codes here.
Purpose Codes Endpoint

List of transfer purpose codes

get

Response: Array of

  • Code: Purpose Code
  • Description: Purpose Description
Authorizations
Query parameters
customerAssetAccountsIdinteger · int32Optional
countryCodestringOptional
payeesIdinteger · int32Optional
Header parameters
otpstringRequired

One time pass for the request

Responses
200
OK
application/json
400
Bad Request
application/json
401
Unauthorized
application/json
get
GET /api/v2/customer/transfers/purpose-codes HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Accept: */*
{
  "id": 1,
  "details": {
    "purposeCodes": [
      {
        "code": "text",
        "description": "text"
      }
    ]
  },
  "status": "text",
  "errors": [
    {
      "fieldName": "text",
      "messageCode": "text"
    }
  ]
}
get
Authorizations
Query parameters
CustomersIdinteger · int32Optional
Header parameters
otpstringRequired

One time pass for the request

Responses
200
OK
application/json
400
Bad Request
application/json
get
GET /api/v1/customer/accounts/reverse-inbound-transfer HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Accept: */*
{
  "status": "text",
  "errors": [
    {
      "errorType": "text",
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1,
  "details": {
    "purposes": [
      {
        "id": 1,
        "name": "text"
      }
    ]
  }
}
post
Authorizations
Header parameters
otpstringRequired

One time pass for the request

Body
customersIdinteger · int32Optional
transactionIdinteger · int32Optional
purposeIdinteger · int32Optional
purposeOtherstring | nullableOptional
Responses
200
OK
application/json
400
Bad Request
application/json
post
POST /api/v1/customer/accounts/reverse-inbound-transfer HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 71

{
  "customersId": 1,
  "transactionId": 1,
  "purposeId": 1,
  "purposeOther": "text"
}
{
  "status": "text",
  "errors": [
    {
      "errorType": "text",
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1
}

Request Fx Transfer Quote

post

Request body parameters:

  • CustomerAssetAccountsId: Source asset account id
  • PayeesId : Payee id
  • SourceAmount : Source amount
  • DestinationAmount : Destination amount
  • TransferType: Wire Or ACH

Response:

  • commandSourceAmount : Given source amount
  • commandDestinationAmount : Given destination amount
  • estimateSourceAmount : Estimated source amount
  • estimateDestinationAmount : Estimated destination amount
  • fxFeePercentage : FX Fee percentage
  • exchangeFeeAmount : Exchange fee amount
  • estimateTotalSourceAmount : Estimated total source amount
  • estimateTotalDestinationAmount : Estimated total destination amount
  • quotedFXRate : Quoted FX rate
  • quotedFXRateID : Quoted FX rate ID
  • quotedFxRateExpiry : Quoted FX rate expiry

Possible validation errors:

  • Required
  • User_Not_Found
  • Invalid_TransferType
  • Invalid_PayeesId
  • Both source amount and destination amount should not be specified.
  • Either source amount and destination amount should be required
Authorizations
Header parameters
otpstringRequired

One time pass for the request

Body
customerAssetAccountsIdinteger · int32Optional
payeesIdinteger · int32Optional
sourceAmountnumber · double | nullableOptional
destinationAmountnumber · double | nullableOptional
transferTypestring · enumOptionalPossible values:
Responses
200
OK
application/json
400
Bad Request
application/json
post
POST /api/v1/customer/transfers/fx-request-quote HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 103

{
  "customerAssetAccountsId": 1,
  "payeesId": 1,
  "sourceAmount": 1,
  "destinationAmount": 1,
  "transferType": "Wire"
}
{
  "id": 1,
  "details": {
    "commandSourceAmount": 1,
    "commandDestinationAmount": 1,
    "estimateSourceAmount": 1,
    "estimateDestinationAmount": 1,
    "fxFeePercentage": 1,
    "exchangeFeeAmount": 1,
    "estimateTotalSourceAmount": 1,
    "estimateTotalDestinationAmount": 1,
    "quotedFXRate": "text",
    "quotedFXRateID": 1,
    "quotedFxRateExpiry": "2025-06-08T01:54:35.457Z"
  },
  "status": "text",
  "errors": [
    {
      "fieldName": "text",
      "messageCode": "text"
    }
  ]
}

Execute FX Quote

post

Request Headers:

  • IdempotencyKey: Unique GUID value generated by user to identify subsequent retries of a request

Request body parameters: ///

  • CustomerAssetAccountsId: Source asset account id
  • PayeesId : Payee id
  • FxRateId : Quoted FX rate ID
  • TransferType: Wire Or ACH
  • PurposeCode : Purpose code for Fx transfer
  • Purpose: Other Purpose of transaction
  • Reference: Reference ( FBO accounts, this should be reference to identify the account)
  • BeneficiaryReference : Beneficiary reference

Response:

  • Id : Transfer Id
  • accountsId: Account Id
  • fromTransactionsId : From transaction Id
  • fromAccountsId : From account Id
  • toTransactionsId : To transaction Id
  • toAccountsId : To account Id
  • amount : Transfer amount
  • description : Transfer description
  • dateTime : Transfer date time
  • bPending : Pending status
  • transmitterId : Transmitter Id

Possible validation errors:

  • Required
  • User_Not_Found
  • Invalid_TransferType
  • International_Transfer_Not_Allowed
  • Invalid_PayeesId
  • Invalid_Country
  • Invalid_Currency
  • Invalid_Source_Account
  • Insufficient_Funds
Authorizations
Header parameters
otpstringRequired

One time pass for the request

Body
customerAssetAccountsIdinteger · int32Optional
transferTypestring · enumOptionalPossible values:
payeesIdinteger · int32Optional
fxRateIdinteger · int32Optional
referencestring | nullableOptionalPattern: ^[A-Za-z0-9^ !_\-@'`()#""*\]+{}|~$%&,:.-\\]+$
beneficiaryReferencestring | nullableOptionalPattern: ^[A-Za-z0-9^ !_\-@'`()#""*\]+{}|~$%&,:.-\\]+$
purposeCodestring | nullableOptional
purposestring | nullableOptional
bankFeeSplitTypestring | nullableOptional
Responses
200
OK
application/json
400
Bad Request
application/json
post
POST /api/v1/customer/transfers/executefxtransfer HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 440

{
  "customerAssetAccountsId": 1,
  "transferType": "Wire",
  "payeesId": 1,
  "fxRateId": 1,
  "reference": "text",
  "beneficiaryReference": "text",
  "purposeCode": "text",
  "purpose": "text",
  "bankFeeSplitType": "text",
  "transmitter": {
    "firstPartyTransfer": true,
    "name": "text",
    "accountNumber": "text",
    "addressLine1": "text",
    "addressLine2": "text",
    "townCity": "text",
    "state": "text",
    "postcode": "text",
    "countryCode": "text",
    "type": "text",
    "dateOfBirth": "2025-06-08T01:54:35.457Z"
  }
}
{
  "id": 1,
  "details": {
    "id": 1,
    "accountsId": 1,
    "fromTransactionsId": 1,
    "fromAccountsId": 1,
    "toTransactionsId": 1,
    "toAccountsId": 1,
    "amount": 1,
    "description": "text",
    "dateTime": "2025-06-08T01:54:35.457Z",
    "bPending": true,
    "transmitterId": "text"
  },
  "status": "text",
  "errors": [
    {
      "fieldName": "text",
      "messageCode": "text"
    }
  ]
}

Create Fiat internal transfer

post

Request Headers:

  • IdempotencyKey: Unique GUID value generated by user to identify subsequent retries of a request (optional)

Request body parameters:

  • SourceAccountId: Source asset account id
  • DestinationAccountId: Destination asset account id
  • Amount: Fiat transfer amount
  • Reference: Purpose of transaction

Response:

  • Id : Transfer Id

Possible validation errors:

  • Required
  • User_Not_Found
  • Invalid_Source_Account
  • Invalid_Destination_Account
  • Invalid_Asset : If both account's asset are different
  • Insufficient_Funds
Authorizations
Header parameters
otpstringRequired

One time pass for the request

Body
sourceAccountIdinteger · int32Required
destinationAccountIdinteger · int32Required
amountnumber · doubleRequired
referencestring · min: 1Required
Responses
200
OK
application/json
400
Bad Request
application/json
post
POST /api/v1/customer/transfers/fiat/createinternaltransfer HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 76

{
  "sourceAccountId": 1,
  "destinationAccountId": 1,
  "amount": 1,
  "reference": "text"
}
{
  "status": "text",
  "errors": [
    {
      "errorType": "text",
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1,
  "details": {
    "id": 1,
    "accountsId": 1,
    "fromTransactionsId": 1,
    "fromAccountsId": 1,
    "toTransactionsId": 1,
    "toAccountsId": 1,
    "amount": 1,
    "description": "text",
    "dateTime": "2025-06-08T01:54:35.457Z",
    "bPending": true
  }
}
  • Overview
  • Create Internal Fiat Transfer
  • POSTCreate Fiat internal transfer
  • Create External Fiat Transfer
  • Transfer Types
  • Request Body Parameters
  • Transfer Purpose
  • Payee Request Parameters
  • Transmitter Information
  • Example Request Body
  • Create External Fiat Transfer With Originator
  • Transfer Types
  • Request Body Parameters
  • Payee Request Parameters
  • Transmitter Information
  • Originator Request Parameters
  • Example Request Body
  • Get Purpose Codes
  • GETList of transfer purpose codes
  • Create Internal Crypto Transfer
  • Get Reverse Inbound Transfer Details
  • GET/api/v1/customer/accounts/reverse-inbound-transfer
  • Reverse Inbound Transfer
  • POST/api/v1/customer/accounts/reverse-inbound-transfer
  • Lookup Bank Details
  • GETLookup bank details
  • Request FX Transfer Quote
  • POSTRequest Fx Transfer Quote
  • Execute FX Transfer
  • POSTExecute FX Quote

Lookup bank details

get

Request body parameters:

  • SWIFTCode: Bank SWIFT Code

Response:

  • BankName: Banking Institution Name

Possible validation errors:

  • Required
  • Not_Found: no banking institution could be found for the input data
Authorizations
Query parameters
SwiftCodestringOptional
Header parameters
otpstringRequired

One time pass for the request

Responses
200
OK
application/json
400
Bad Request
application/json
get
GET /api/v1/customer/transfers/lookupbankdetails HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
otp: text
Accept: */*
{
  "status": "text",
  "errors": [
    {
      "errorType": "text",
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1,
  "details": {
    "bankName": "text",
    "swiftCode": "text",
    "iban": "text",
    "bankAddress": "text",
    "bankPostCode": "text",
    "bankBranchName": "text",
    "bankCountryISO3": "text",
    "bankCountryName": "text",
    "bankCity": "text"
  }
}