Transfers

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. Create Internal Fiat Transfer: 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. Create External Fiat Transfer: 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. Create External Fiat Transfer With Originator: 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. Get Purpose Codes: 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. Create Internal Crypto Transfer: 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.


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

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

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.

Payee Request Parameters

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

{
  ...
  "payee": {
  
    // Option 1: Use payeesId to reference a Payee
    "payeesId": 0,
    
      
    // Option 2: Use the following fields to detail a payee
    "countryCode": "string",
    
    //Either Routing Number or Swift Code is available
    "routingNumber": "string",
    "swiftCode": "string",
  
    "accountNumber": "string",
    "accountName": "string",
    
    
    "type": "string",
    "name": "string",
    "addressLine1": "string",
    "addressLine2": "string",
    "townCity": "string",
    "state": "string",
    "postcode": "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"
        },
        "bSavePayee":true, 
        "Amount": 100,
        "Reference": "Test Transfer", 
        "PurposeCode" : "PUC002"
}

International Swift Transfer Request Body

{
        "SourceAccountId": 2141,
        "TransferType": "Wire",
        "Payee": {
                "CountryCode": "SGP",
                "SwiftCode": "DBSSSGSG",
                "AccountNumber": "12342346545123",
                "AccountName": "Sebi Scaria",
                "Type":"Company",
                "Name": "Sebi Scaria",
                "AddressLine1": "62 UBI road 1",
                "TownCity": "Oxley Bizhub 2",
                "Postcode": "408734"
        },
        "bSavePayee":true,
        "Amount": 50,
        "Reference": "Test Transfer", "PurposeCode": "PUC002"
}

Example Success Response

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

Create External Fiat Transfer With Originator

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

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.

Payee Request Parameters

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

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

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"
    },
    "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",
        "AccountNumber": "12342346545123",
        "AccountName": "Sebi Scaria",
        "Type":"Company",
        "Name": "Sebi Scaria",
        "AddressLine1": "62 UBI road 1",
        "TownCity": "Oxley Bizhub 2",
        "Postcode": "408734"
    },
    "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": [
        {
            "code": "PUC001",
            "description": "Transfer to own account"
        },
        {
            "code": "PUC002",
            "description": "Family Maintenance"
        }
    ],
    "pageSize": 10,
    "pageNumber": 1,
    "status": "1",
    "errors": []
}

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": []
}

Last updated