Crypto 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.

This section provides endpoints to withdraw cryptocurrency from a customer asset account to an external blockchain wallet address. Users can either withdraw to a new wallet address or to a previously saved wallet.

Retrieving Your Wallet's Deposit Address

  1. Get Deposit Address for a Crypto Asset Account - Enables users to retrieve the deposit address of a cryptocurrency wallet associated with a customer's asset account. By retrieving a deposit address, users can make an external deposit and see the transaction reflected in their account once it's been confirmed.

Internal Transfers - Making Transfers between your Accounts

  1. 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.

Asset Wallet Aliases - Create and Manage Saved Wallet Aliases

External Transfers

  1. Withdraw Crypto to a New Wallet: This endpoint initiates a withdrawal of cryptocurrency from a customer asset account to a new external wallet address.

  2. Withdraw Crypto to a Saved Wallet: This endpoint initiates a withdrawal of cryptocurrency from a customer asset account to an existing/saved external wallet address.

  3. (DEPRECATED) Withdraw Crypto from Customer Account to External Wallet - This operation allows users to initiate withdrawals from a customer's cryptocurrency account to an external wallet, effectively moving assets out of the customer's account.


Get Deposit Address for a Crypto Asset Account

Enables users to retrieve the deposit address of a cryptocurrency wallet associated with a customer's asset account. By retrieving a deposit address, users can make an external deposit and see the transaction reflected in their account once it's been confirmed.

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

  • Method: GET

  • Request Body Parameters:

    • accountsId (Integer): The ID of the customer account to retrieve a deposit address for.

Get Deposit address for a crypto account

get

Request query:

  • AccountsId: Account Id filter Response:
    • address: blockchain wallet address
Authorizations
Query parameters
AccountsIdinteger · int32Optional
Header parameters
otpstringRequired

One time pass for the request

Responses
200
Success
application/json
get
GET /api/v1/customer/accounts/crypto/depositaddress HTTP/1.1
Host: public-api.ibanera.com
Authorization: YOUR_API_KEY
otp: text
Accept: */*
{
  "status": "text",
  "errors": [
    {
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1,
  "details": {
    "address": "text"
  }
}

Internal Transfers

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

Optional Request Headers:

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

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

Asset Wallet Aliases

Create Asset Wallet Alias

  • Endpoint: /api/v1/customer/assetwalletaliases/create

  • Method: POST

Request Body Example

{
  "CustomersId": 1234,
  "WalletAddress": "0x.....1234", 
  "AssetCode": "ETH",
  "Alias": "John's External Wallet"
}

Response Body Example

{
  "id": 0,
  "details": {
    "id": 0,
    "customersId": 0,
    "alias": "string",
    "walletAddress": "string",
    "assetCode": "string"
  },
  "status": "1",
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

Edit an Asset Wallet Alias

  • Endpoint: /api/v1/customer/assetwalletaliases/edit

  • Method: PATCH

Request Body Example

{
  "id": 1234,
  "alias": "John's External Wallet #2"
}

Response Body Example

{
  "id": 0,
  "details": {
    "id": 0,
    "customersId": 0,
    "alias": "string",
    "walletAddress": "string",
    "assetCode": "string"
  },
  "status": "1",
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

Get an Asset Wallet Alias by ID

  • Endpoint: /api/v1/customer/assetwalletaliases/get

  • Method: GET

Request Query Parameter

Parameter
Type
Description

Id

int

ID of the previously generated Asset Wallet Alias

Response Body Example

{
  "id": 0,
  "details": {
    "id": 0,
    "customersId": 0,
    "alias": "string",
    "walletAddress": "string",
    "assetCode": "string"
  },
  "status": "1",
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

List Asset Wallet Aliases

  • Endpoint: /api/v1/customer/assetwalletaliases/list

  • Method: GET

Request Query Parameter

Parameter
Type
Description

CustomersID

int

Filter asset wallet aliases by customer ID

WalletAddress

string

Filter asset wallet aliases by wallet address

AssetCode

string

Filter asset wallet aliases by asset code

Response Body Example

{
  "id": 0,
  "details": {
    "id": 0,
    "details": [
      {
        "id": 0,
        "customersId": 0,
        "assetCode": "string",
        "alias": "string",
        "walletAddress": "string"
      }
    ],
    "pageSize": 0,
    "pageNumber": 0,
    "numberOfPages": 0,
    "status": "string",
    "errors": [
      {
        "fieldName": "string",
        "messageCode": "string"
      }
    ]
  },
  "status": "1",
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

Delete Asset Wallet Aliases

  • Endpoint: /api/v1/customer/assetwalletaliases/delete

  • Method: DELETE

Request Query Parameter

Parameter
Type
Description

Id

int

ID of the previously generated Asset Wallet Alias

Response Body Example

{
  "id": 0,
  "status": "1", // 1 when successful, 0 when error
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

External Transfers

Withdraw to a New Wallet

This endpoint initiates a withdrawal of cryptocurrency from a customer asset account to a new external wallet address. Users must specify the customer asset account ID, the amount to withdraw, the destination wallet address, nickname for the wallet address. Optionally, users can: Provide a tag if required for certain assets (e.g., XRP) Set the Deduct Gas Fee property for native tokens such as BTC and ETH, which defaults to true.

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

  • Method: POST

Optional Request Headers:

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

Request Body Example

Name
Type
Required
Description

customerAssetAccountsId

int

Yes

Customer asset account to withdraw crypto from

amount

decimal

Yes

Amount to withdraw (must be >0)

destinationAddress

string

Yes

on-chain address to withdraw

destinationWalletNickname

string

Yes

nickname that can be saved and re-used in the future to alias the crypto wallet address

deductGasFee

boolean

Yes

true value indicates that the gas fee will be deducted from the amount

tag

string

No (Required only for XRP)

Associated with destination Address

Response

{
  "id": 0,
  "details": {
    "id": 0,
    "accountsId": 0,
    "amount": 0,
    "description": "string",
    "dateTime": "2025-04-29T01:53:25.919Z",
    "bPending": true,
    "assetWalletAliasesId": 0
  },
  "status": "string",
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

Request Body Example

{
  "customerAssetAccountsId": 6112,
  "amount": 10,
  "destinationAddress": "0x221ca5B61153e3Cc684EB76FEe817b54B63d501A",
  "destinationWalletNickname": "Test wallet",
  "deductGasFee": true, // Applicable for native assets, set to false to send exact amount
  "Tag": "12345"
}

Response Body Example

{
        "id": 123543,
        "details": {
                "Id": 1234,
                "AccountsId": 1234,
                "Amount": 10,
                "Description":"ETH withdrawal",
                "DateTime":"2025-01-29T00:00:00.0000000Z",
                "bPending":true,
                "AssetWalletAliasesId": 1234
        },
        "status": "1", // 1 if success, 0 if failure
        "errors": [{
                "fieldName": "string",
                "messageCode": "string"
        }]
}

Withdraw Crypto to a Saved Wallet

This endpoint initiates a withdrawal of cryptocurrency from a customer asset account to an existing/saved external wallet address. Users must specify the customer asset account ID, the amount to withdraw, asset wallet address alias id.

Optionally, users can set the Deduct Gas Fee property for native tokens such as BTC and ETH, which defaults to true.

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

  • Method: POST

Optional Request Headers:

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

Request Body Parameters

Name
Type
Required
Description

customerAssetAccountsId

int

Yes

Customer asset account to withdraw crypto from

amount

decimal

Yes

Amount to withdraw (must be >0)

assetWalletAddressAliasId

string

Yes

Id of the crpyto wallet address-nickname pairing

deductGasFee

boolean

Yes

true value indicates that the gas fee will be deducted from the amount

Response

{
  "id": 0,
  "details": {
    "id": 0,
    "accountsId": 0,
    "amount": 0,
    "description": "string",
    "dateTime": "2025-04-29T03:21:50.484Z",
    "bPending": true,
    "assetWalletAliasesId": 0
    "destinationWalletAddress": "string"
  },
  "status": "1", // 1 if success, 0 if failure
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

Request Body Example

{
  "customerAssetAccountsId": 6112,
  "amount": 10,
  "assetWalletAddressAliasId": 1049,
  "deductGasFee": true
}

Response Body Example

{
  "id": 123543,
  "details": {
    "Id": 123456,
    "AccountsId": 6112,
    "Amount": 10,
    "Description":"ETH withdrawal",
    "DateTime":"2025-04-29T03:23:09.1466667Z",
    "bPending":true,
    "AssetWalletAliasesId":1050,
    "DestinationWalletAddress":"0x221ca5B61153e3Cc684EB76FEe817b54B63d501A"
  },
  "status": "1", // 1 if success, 0 if failure
  "errors": [
    {
      "fieldName": "string",
      "messageCode": "string"
    }
  ]
}

(DEPRECATED) Withdraw Crypto from Customer Account to External Wallet

NOTE: This endpoint is deprecated. We suggest using the newly updated enpoints above.

Allows a user to withdraw cryptocurrency from a customer account to an external blockchain wallet. Users have the capability to send cryptocurrency from an customer's account to another digital wallet that they specify. To do this, they provide the account ID from which the money will come, how much they want to send, and the address of the digital wallet to receive the funds. Once the request is made, the system processes it and either confirms the transaction has taken place or gives an error if something went wrong during the process.

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

  • Method: POST

Optional Request Headers:

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

Request Body Parameters:

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

  • amount (Decimal): The amount of cryptocurrency to be withdrawn.

  • destinationAddress (String): The blockchain wallet address to which the funds will be withdrawn.

Withdraw crypto asset from account to external wallet address

post

Request query:

  • accountsId: Account Id filter
  • amount: Amount to withdraw (must be >0)
  • destinationAddress : on-chain address to withdraw to (max length 100)

Response:

  • Id: new transaction Id
  • AccountsId: Id of account debited
  • Amount: amount to transfer
  • Description: description for the transfer
  • DateTime: initiation timestamp
  • bPending: pending status of the transfer
Authorizations
Header parameters
otpstringRequired

One time pass for the request

Body
accountsIdinteger · int32Optional
amountnumber · doubleOptional
destinationAddressstringRequired
Responses
200
Success
application/json
post
POST /api/v1/customer/accounts/crypto/withdraw HTTP/1.1
Host: public-api.ibanera.com
Authorization: YOUR_API_KEY
otp: text
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 55

{
  "accountsId": 1,
  "amount": 1,
  "destinationAddress": "text"
}
{
  "status": "text",
  "errors": [
    {
      "fieldName": "text",
      "messageCode": "text"
    }
  ],
  "id": 1,
  "details": {
    "id": 1,
    "accountsId": 1,
    "amount": 1,
    "description": "text",
    "dateTime": "2025-06-27T08:34:30.221Z",
    "bPending": true
  }
}

Request Example:

{
  "accountsId": 1004,
  "amount": 0.005,
  "destinationAddress": "mxcMwdmLsyQGRNhvHSBuxomxhL1"
}

Response Body Parameters:

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

  • details.id (Integer): The ID of the withdrawal transaction.

  • details.accountsId (Integer): The ID of the customer account.

  • details.amount (Decimal): The amount withdrawn.

  • details.description (String): A description of the transaction.

  • details.dateTime (String): Timestamp of when the transaction took place.

  • details.bPending (Boolean): Indicates whether the transaction is pending.

Success Response Example:

{
  "id": 1025,
  "details": {
    "id": 1864,
    "accountsId": 1056,
    "amount": 0.0001,
    "description": "BTC withdrawal",
    "dateTime": "2022-07-08T16:57:12.127+00:00",
    "bPending": false
  },
  "status": "1",
  "errors": []
}

Error Codes:

  • If the withdrawal request fails due to screening, a BadRequest error with a Transaction_Blocked messageCode can be returned in the response.

  • errorType: The type of error encountered during the request processing.

  • fieldName: The field that caused the error.

  • messageCode: A code that designates the specific error, for example, "Transaction_Blocked."

Error Response Example:

{
  "id": 0,
  "details": null,
  "status": "0",
  "errors": [
    {
      "errorType": "BadRequest",
      "fieldName": "Screening",
      "messageCode": "Transaction_Blocked"
    }
  ]
}

Last updated