Accounts
Manage multi-currency accounts for receiving funds, holding balances, and supporting local and international transfers.
Get All Accounts
This API allows you to retrieve all accounts associated with a user in the system.
{{baseUrl}}/hashdt/banking/api/v1/accounts
Description
Returns a list of all virtual accounts for the authenticated user, including account details, institution information, and supported payment features.
📩 Request Headers
x-api-key string required
x-product-id string required
x-request-id string required
x-user-id string required
Content-Type string required
application/jsonAuthorization string required
🔍 Query Parameters
companyCode string required
currency string
pageNumber integer
pageSize integer
- 🧩 Examples
Request Example
- cURL
- Python
- Java
- NodeJs
curl --location --request GET \
--url '{{baseUrl}}/hashdt/banking/api/v1/accounts?companyCode={{Shared Company Code}}' \
--header 'x-api-key: {{Shared X-API key}}' \
--header 'x-product-id: {{Shared ProductID}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'
import requests
import json
url = "{{baseUrl}}/hashdt/banking/api/v1/accounts?companyCode={{Shared Company Code}}"
payload = {}
headers = {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{baseUrl}}/hashdt/banking/api/v1/accounts?companyCode={{Shared Company Code}}")
.method("GET", body)
.addHeader("x-api-key", "{{Shared X-API key}}")
.addHeader("x-product-id", "{{Shared ProductID}}")
.addHeader("x-request-id", "{{IdempotencyKey}}")
.addHeader("x-user-id", "{{UserID}}")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{AccessToken}}")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: '{{baseUrl}}/hashdt/banking/api/v1/accounts?companyCode={{Shared Company Code}}',
headers: {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response Example
- 200
- 400
{
"code": 200,
"status": "SUCCESS",
"message": "Success",
"data": {
"items": [
{
"accountId": "ACC_12345",
"externalReference": "48ca73bc-4cd3-47e5-bf03-13f27c7f06a0",
"currency": "USD",
"paymentMethod": "SWIFT",
"status": "ACTIVE",
"rails": [
"swift"
],
"accountNumberMasked": null,
"accountNumber": "1234567890",
"iban": null,
"swiftCode": "BOFAUS3NXXY",
"routingNumber": null,
"sortCode": null,
"bankName": "USB Bank",
"bankAddress": null,
"accountOwnerName": null
}
],
"pageSize": 100,
"pageNumber": 1,
"total": 1
}
}
{
"code": 400,
"status": "error",
"message": "Error Message"
}
Account Details
Retrieves the account details and banking coordinates required to receive money.
{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID
Description
This API is used to retrieve the account's current status, banking details, and receiving coordinates. Check bankDetailsAvailable before using the banking details. When it is false, the account is still being set up and the banking coordinates may be unavailable. Poll this endpoint until bankDetailsAvailable is true and the details are available.
The accountOwnerName represents the legal name under which the account is held and should be used as the beneficiary name when sending money to the account.
🔗 Path Parameters
accountID string required
📩 Request Headers
x-api-key string required
x-product-id string required
x-request-id string required
x-user-id string required
Content-Type string required
application/jsonAuthorization string required
🔍 Query Parameters
companyCode string required
- 🧩 Examples
Request Example
- cURL
- Python
- Java
- NodeJs
curl --location --request GET \
--url '{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID?companyCode={{Shared Company Code}}' \
--header 'x-api-key: {{Shared X-API key}}' \
--header 'x-product-id: {{Shared ProductID}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'
import requests
import json
url = "{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID?companyCode={{Shared Company Code}}"
payload = {}
headers = {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID?companyCode={{Shared Company Code}}")
.method("GET", body)
.addHeader("x-api-key", "{{Shared X-API key}}")
.addHeader("x-product-id", "{{Shared ProductID}}")
.addHeader("x-request-id", "{{IdempotencyKey}}")
.addHeader("x-user-id", "{{UserID}}")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{AccessToken}}")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: '{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID?companyCode={{Shared Company Code}}',
headers: {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response Example
- 200
- 400
{
"code": 200,
"status": "SUCCESS",
"message": "Success",
"data": {
"accountId": "ACC_12345",
"companyCode": "company-code",
"programCode": "program-code",
"currency": "USD",
"jurisdiction": "SG",
"paymentMethod": "SWIFT",
"issuanceReference": "demo-account-01",
"externalReference": "39cd4dfb-790e-4f02-b362-34da55ec1611",
"status": "ACTIVE",
"bankDetailsAvailable": true,
"accountNumber": "1234567890",
"accountNumberMasked": null,
"iban": null,
"swiftCode": "BOFAUS3NXXY",
"routingNumber": null,
"sortCode": null,
"bankName": "USB Bank",
"bankAddress": null,
"accountOwnerName": null,
"rails": [],
"balanceAvailable": true,
"balance": {
"status": "ACTIVE",
"availableBalance": 99999.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
"balanceUnavailableReason": null,
"createdAt": "2026-08-19T09:12:54Z",
"updatedAt": "2026-08-19T09:12:54Z"
}
}
{
"code": 400,
"status": "error",
"message": "Error Message"
}
All Account Balances
Retrieves all fiat balances held by the user, grouped by currency.
{{baseUrl}}/hashdt/banking/api/v1/accounts/balances
Description
This API is used to retrieve the user's available fiat balances and the account IDs associated with each currency. The response contains one entry per currency, allowing balances to be aggregated by currency across the customer's receiving accounts. The currency list is sourced from the bank, so it may include currencies for which no local account ID is available. In such cases, accountIds may be empty.
📩 Request Headers
x-api-key string required
x-product-id string required
x-request-id string required
x-user-id string required
Content-Type string required
application/jsonAuthorization string required
🔍 Query Parameters
companyCode string required
- 🧩 Examples
Request Example
- cURL
- Python
- Java
- NodeJs
curl --location --request GET \
--url '{{baseUrl}}/hashdt/banking/api/v1/accounts/balances?companyCode={{Shared Company Code}}' \
--header 'x-api-key: {{Shared X-API key}}' \
--header 'x-product-id: {{Shared ProductID}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'
import requests
import json
url = "{{baseUrl}}/hashdt/banking/api/v1/accounts/balances?companyCode={{Shared Company Code}}"
payload = {}
headers = {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{baseUrl}}/hashdt/banking/api/v1/accounts/balances?companyCode={{Shared Company Code}}")
.method("GET", body)
.addHeader("x-api-key", "{{Shared X-API key}}")
.addHeader("x-product-id", "{{Shared ProductID}}")
.addHeader("x-request-id", "{{IdempotencyKey}}")
.addHeader("x-user-id", "{{UserID}}")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{AccessToken}}")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: '{{baseUrl}}/hashdt/banking/api/v1/accounts/balances?companyCode={{Shared Company Code}}',
headers: {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response Example
- 200
- 400
{
"code": 200,
"status": "SUCCESS",
"message": "Success",
"data": {
"userId": "user-id",
"balances": [
{
"currency": "AED",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "AUD",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "CNH",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "EUR",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "GBP",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "HKD",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "JPY",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "SGD",
"accountIds": [],
"status": "ACTIVE",
"availableBalance": 0.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
},
{
"currency": "USD",
"accountIds": [
"ACC_12345"
],
"status": "ACTIVE",
"availableBalance": 99999.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
}
],
"errors": []
}
}
{
"code": 400,
"status": "error",
"message": "Error Message"
}
Account Balance By ID
Retrieves the balance of a specific account using its account identifier.
{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID/balance
Description
This API is used to retrieve the balance associated with a specific account. The returned balance represents the currency that the account collects into.
Do not add balances across accounts. Multiple accounts for the same currency may report the same underlying balance. Use Account Balances API to retrieve the total balance by currency.
📩 Request Headers
x-api-key string required
x-product-id string required
x-request-id string required
x-user-id string required
Content-Type string required
application/jsonAuthorization string required
🔍 Query Parameters
companyCode string required
- 🧩 Examples
Request Example
- cURL
- Python
- Java
- NodeJs
curl --location --request GET \
--url '{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID/balance?companyCode={{Shared Company Code}}' \
--header 'x-api-key: {{Shared X-API key}}' \
--header 'x-product-id: {{Shared ProductID}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'
import requests
import json
url = "{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID/balance?companyCode={{Shared Company Code}}"
payload = {}
headers = {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID/balance?companyCode={{Shared Company Code}}")
.method("GET", body)
.addHeader("x-api-key", "{{Shared X-API key}}")
.addHeader("x-product-id", "{{Shared ProductID}}")
.addHeader("x-request-id", "{{IdempotencyKey}}")
.addHeader("x-user-id", "{{UserID}}")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{AccessToken}}")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: '{{baseUrl}}/hashdt/banking/api/v1/accounts/:accountID/balance?companyCode={{Shared Company Code}}',
headers: {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response Example
- 200
- 400
{
"code": 200,
"status": "SUCCESS",
"message": "Success",
"data": {
"accountId": "ACC_12345",
"externalReference": "c670810c-8a81-40a2-936f-b5f7478e4ead",
"currency": "USD",
"status": "ACTIVE",
"availableBalance": 99999.00,
"prepaidBalance": 0.00,
"marginBalance": 0.00,
"frozenBalance": 0.00,
"asOf": null
}
}
{
"code": 400,
"status": "error",
"message": "Error Message"
}
Account Statements
Retrieves the user's account statement entries, ordered from newest to oldest.
{{baseUrl}}/hashdt/banking/api/v1/accounts/statement
Description
This API is used to retrieve movements across the user's balances, with optional filters such as currency and date range. Statement entries are recorded per currency rather than per account, as accounts act as receiving routes into the same currency balance. Use the currency filter to retrieve entries for a specific currency.
Multiple entries may share the same reference, such as the debit and credit sides of a currency conversion or a payout and its associated fee. Use reference to group related entries, and direction to identify the debit or credit side.
If from and to are omitted, the bank applies its default date range. Timestamps must be provided in ISO 8601 format with an offset.
📩 Request Headers
x-api-key string required
x-product-id string required
x-request-id string required
x-user-id string required
Content-Type string required
application/jsonAuthorization string required
🔍 Query Parameters
companyCode string required
currency string
type string
status string
pageNumber integer
pageSize integer
from string conditional
Start date and time for filtering statement entries.
Use ISO 8601 date format (YYYY-MM-DD) or ISO 8601 date-time format with a timezone offset.
Must be provided together with to.
to string conditional
End date and time for filtering statement entries.
Use ISO 8601 date format (YYYY-MM-DD) or ISO 8601 date-time format with a timezone offset.
Must be provided together with from.
- 🧩 Examples
Request Example
- cURL
- Python
- Java
- NodeJs
curl --location --request GET \
--url '{{baseUrl}}/hashdt/banking/api/v1/accounts/statement?companyCode={{Shared Company Code}}' \
--header 'x-api-key: {{Shared X-API key}}' \
--header 'x-product-id: {{Shared ProductID}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'
import requests
import json
url = "{{baseUrl}}/hashdt/banking/api/v1/accounts/statement?companyCode={{Shared Company Code}}"
payload = {}
headers = {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{baseUrl}}/hashdt/banking/api/v1/accounts/statement?companyCode={{Shared Company Code}}")
.method("GET", body)
.addHeader("x-api-key", "{{Shared X-API key}}")
.addHeader("x-product-id", "{{Shared ProductID}}")
.addHeader("x-request-id", "{{IdempotencyKey}}")
.addHeader("x-user-id", "{{UserID}}")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{AccessToken}}")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: '{{baseUrl}}/hashdt/banking/api/v1/accounts/statement?companyCode={{Shared Company Code}}',
headers: {
'x-api-key': '{{Shared X-API key}}',
'x-product-id': '{{Shared ProductID}}',
'x-request-id': '{{IdempotencyKey}}',
'x-user-id': '{{UserID}}',
'Content-Type': 'application/json',
'Authorization': 'Bearer {{AccessToken}}'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response Example
- 200
- 400
{
"code": 200,
"status": "SUCCESS",
"message": "Success",
"data": {
"companyCode": "company-code",
"programCode": "program-code",
"currency": null,
"entries": [
{
"externalReference": "1ffdae7b-4194-4af3-8632-727ed11bf860",
"currency": "EUR",
"amount": 8.42,
"direction": "CREDIT",
"type": "CONVERSION",
"status": "COMPLETED",
"reference": "5a90a145-bfe6-4f2f-849b-2139b9e82074",
"createdAt": "2026-08-25T15:49:12+08:00",
"completedAt": "2026-08-25T15:49:12+08:00"
},
{
"externalReference": "ab4b6653-7dba-487a-9055-560a9824ad6a",
"currency": "USD",
"amount": 10.00,
"direction": "DEBIT",
"type": "CONVERSION",
"status": "COMPLETED",
"reference": "5a90a145-bfe6-4f2f-849b-2139b9e82074",
"createdAt": "2026-08-25T15:49:11+08:00",
"completedAt": "2026-08-25T15:49:11+08:00"
},
{
"externalReference": "d0bffd49-f7c9-4c40-b96e-9306a07b3dc0",
"currency": "EUR",
"amount": 0.84,
"direction": "CREDIT",
"type": "CONVERSION",
"status": "COMPLETED",
"reference": "5e1ef964-8242-4d2c-9381-f1fa13e36ac2",
"createdAt": "2026-08-25T14:54:08+08:00",
"completedAt": "2026-08-25T14:54:08+08:00"
},
{
"externalReference": "6fe80082-32d9-4528-9120-d5bcc400115f",
"currency": "USD",
"amount": 1.00,
"direction": "DEBIT",
"type": "CONVERSION",
"status": "COMPLETED",
"reference": "5e1ef964-8242-4d2c-9381-f1fa13e36ac2",
"createdAt": "2026-08-25T14:54:07+08:00",
"completedAt": "2026-08-25T14:54:07+08:00"
},
{
"externalReference": "eda5f014-97e6-44bf-9052-b1ec7513294c",
"currency": "USD",
"amount": 36.00,
"direction": "DEBIT",
"type": "TRANSFER",
"status": "COMPLETED",
"reference": "885a06e5-b69d-4d89-a772-3f1b09391f8e",
"createdAt": "2026-08-21T18:05:23+08:00",
"completedAt": "2026-08-21T18:05:23+08:00"
},
{
"externalReference": "167fa22f-cf3e-4da2-88c8-3d9a0960febc",
"currency": "USD",
"amount": 35.00,
"direction": "DEBIT",
"type": "FEE",
"status": "COMPLETED",
"reference": "a1f1bd88-6b85-4354-9efe-c7e9f45c8c04",
"createdAt": "2026-08-21T18:05:23+08:00",
"completedAt": "2026-08-21T18:05:22+08:00"
},
{
"externalReference": "f3c4169d-75d9-4323-96aa-96fd3a752602",
"currency": "USD",
"amount": 1000.00,
"direction": "DEBIT",
"type": "PAYOUT",
"status": "COMPLETED",
"reference": "a1f1bd88-6b85-4354-9efe-c7e9f45c8c04",
"createdAt": "2026-08-21T18:05:22+08:00",
"completedAt": "2026-08-21T18:05:22+08:00"
}
]
}
}
{
"code": 400,
"status": "error",
"message": "Error Message"
}