A Tatum Account is the primary building block of Tatum-powered applications. It is an envelope that holds essential information about balances, the state of the account or customer, and to whom the account belongs.
Accounts in Tatum are stored within Tatum Private Ledger. Tatum Private Ledger contains information about accounts, the customers that own the accounts, transactions that affect the accounts or virtual currencies present in the ledger.
By default, the private ledger is not connected to any blockchain. It is possible to create an application on it without any blockchain at all. Using Tatum Private Ledger and the building blocks included within it, it is possible to quickly swap the whole application from the ledger to any blockchain supported by Tatum. All of the API calls will remain the same, the only thing that changes is the blockchain the application lives on.
Most blockchains do not have any compliance layer at all. It is not possible to freeze funds at a blockchain address or deactivate an address. The Tatum Account has built-in compliance, and it is possible to block funds in the account, freeze outgoing transactions from the account or even completely deactivate the account.
Creates a new account for the customer. This will create an account on Tatum Private Ledger. It is possible to create an account for every supported cryptocurrency, FIAT, any ERC20 token created within a Tatum instance, and Tatum virtual currencies. When the customer field is already present, the account is added to the customer's list of accounts. If the customer field is not present, a new customer is created along with the account.
Every account has its own balance. Tatum supports 2 types of balances - accountBalance and availableBalance. The account balance represents all assets in the account, both available and blocked. The available balance in the account represents account balance minus the blocked amount in the account. The available balance should be used to determine how much a customer can send or withdraw from the account.
An account is always created with a specific currency. Once the currency is set, it cannot be changed.
When an account's currency is blockchain-based, like BTC or ETH, the account is usually created with xpub. Xpub represents an extended public key of the blockchain wallet, which will be connected to this account. Adding xpub to the account does not connect any specific blockchain address to this account. Xpub is just a generator of addresses, not an address itself.
Every blockchain has different types of xpubs:
currency required | string [ 2 .. 40 ] characters Account currency. Supported values are BTC, BNB, LTC, DOGE, BCH, ETH, XLM, LUNA, LUNA_KRW, LUNA_USD, XRP, TRON, BSC, SOL, MATIC, ALGO, KCS, EGLD, CELO, KLAY, XDC, KCS, Tatum Virtual Currencies started with VC_ prefix (this includes FIAT currencies), USDT, WBTC, LEO, LINK, GMC, UNI, FREE, MKR, USDC, BAT, TUSD, BUSD, PAX, PAXG, MMY, XCON, USDT_TRON, BETH, BUSD, BBTC, BADA, WBNB, BDOT, BXRP, BLTC, BBCH, CAKE, BUSD_BSC, ERC20, BEP20 or TRC-10/20 custom tokens registered in the Tatum Platform, XLM or XRP Assets created via Tatum Platform. ERC20 tokens and BEP20 tokens do not have Testnet blockchains, so it is impossible to use them in a non-production environment. You can emulate behaviour by registering your custom ERC20 token in the platform and receive tokens using https://erc20faucet.com/. |
xpub | string [ 1 .. 192 ] characters Extended public key to generate addresses from. |
object (CustomerRegistration) If customer is filled then is created or updated. | |
compliant | boolean Enable compliant checks. If this is enabled, it is impossible to create account if compliant check fails. |
accountCode | string [ 1 .. 50 ] characters For bookkeeping to distinct account purpose. |
accountingCurrency | string = 3 characters All transaction will be accounted in this currency for all accounts. Currency can be overridden per account level. If not set, customer accountingCurrency is used or EUR by default. ISO-4217 |
accountNumber | string [ 1 .. 50 ] characters Account number from external system. |
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
{- "currency": "BTC",
- "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid",
- "customer": {
- "accountingCurrency": "USD",
- "customerCountry": "US",
- "externalId": "123654",
- "providerCountry": "US"
}, - "compliant": false,
- "accountCode": "AC_1011_B",
- "accountingCurrency": "USD",
- "accountNumber": "123456"
}
{- "id": "5e68c66581f2ee32bc354087",
- "balance": {
- "accountBalance": "1000000",
- "availableBalance": "1000000"
}, - "currency": "BTC",
- "frozen": false,
- "active": true,
- "customerId": "5e68c66581f2ee32bc354087",
- "accountCode": "03_ACC_01",
- "accountingCurrency": "EUR",
- "xpub": "xpub6FB4LJzdKNkkpsjggFAGS2p34G48pqjtmSktmK2Ke3k1LKqm9ULsg8bGfDakYUrdhe2EHw5uGKX9DrMbrgYnVfDwrksT4ZVQ3vmgEruo3Ka"
}
Lists all accounts. Inactive accounts are also visible.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account?pageSize=20&page=0&sort=asc&sortBy=_id&active=true&onlyNonZeroBalance=true&frozen=true¤cy=BTC&accountNumber=AC_1011_B' \ -H 'x-api-key: YOUR_API_KEY_HERE'
[- {
- "id": "5e68c66581f2ee32bc354087",
- "balance": {
- "accountBalance": "1000000",
- "availableBalance": "1000000"
}, - "currency": "BTC",
- "frozen": false,
- "active": true,
- "customerId": "5e68c66581f2ee32bc354087",
- "accountCode": "03_ACC_01",
- "accountingCurrency": "EUR",
- "xpub": "xpub6FB4LJzdKNkkpsjggFAGS2p34G48pqjtmSktmK2Ke3k1LKqm9ULsg8bGfDakYUrdhe2EHw5uGKX9DrMbrgYnVfDwrksT4ZVQ3vmgEruo3Ka"
}
]
Count of accounts that were found from /v3/ledger/account
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/count?pageSize=20&page=0&sort=asc&sortBy=_id&active=true&onlyNonZeroBalance=true&frozen=true¤cy=BTC&accountNumber=AC_1011_B' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "total": 20
}
Creates new accounts for the customer in a batch call.
required | Array of objects (CreateAccount) | ||||||||||||||
Array
|
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
{- "accounts": [
- {
- "currency": "BTC",
- "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid",
- "customer": {
- "accountingCurrency": "USD",
- "customerCountry": "US",
- "externalId": "123654",
- "providerCountry": "US"
}, - "compliant": false,
- "accountCode": "AC_1011_B",
- "accountingCurrency": "USD",
- "accountNumber": "123456"
}
]
}
[- {
- "id": "5e68c66581f2ee32bc354087",
- "balance": {
- "accountBalance": "1000000",
- "availableBalance": "1000000"
}, - "currency": "BTC",
- "frozen": false,
- "active": true,
- "customerId": "5e68c66581f2ee32bc354087",
- "accountCode": "03_ACC_01",
- "accountingCurrency": "EUR",
- "xpub": "xpub6FB4LJzdKNkkpsjggFAGS2p34G48pqjtmSktmK2Ke3k1LKqm9ULsg8bGfDakYUrdhe2EHw5uGKX9DrMbrgYnVfDwrksT4ZVQ3vmgEruo3Ka"
}
]
Lists all accounts associated with a customer. Only active accounts are visible.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/customer/{id}?pageSize=10&offset=0&accountCode=AC_1011_B' \ -H 'x-api-key: YOUR_API_KEY_HERE'
[- {
- "id": "5e68c66581f2ee32bc354087",
- "balance": {
- "accountBalance": "1000000",
- "availableBalance": "1000000"
}, - "currency": "BTC",
- "frozen": false,
- "active": true,
- "customerId": "5e68c66581f2ee32bc354087",
- "accountCode": "03_ACC_01",
- "accountingCurrency": "EUR",
- "xpub": "xpub6FB4LJzdKNkkpsjggFAGS2p34G48pqjtmSktmK2Ke3k1LKqm9ULsg8bGfDakYUrdhe2EHw5uGKX9DrMbrgYnVfDwrksT4ZVQ3vmgEruo3Ka"
}
]
Gets active account by ID. Displays all information regarding the given account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "id": "5e68c66581f2ee32bc354087",
- "balance": {
- "accountBalance": "1000000",
- "availableBalance": "1000000"
}, - "currency": "BTC",
- "frozen": false,
- "active": true,
- "customerId": "5e68c66581f2ee32bc354087",
- "accountCode": "03_ACC_01",
- "accountingCurrency": "EUR",
- "xpub": "xpub6FB4LJzdKNkkpsjggFAGS2p34G48pqjtmSktmK2Ke3k1LKqm9ULsg8bGfDakYUrdhe2EHw5uGKX9DrMbrgYnVfDwrksT4ZVQ3vmgEruo3Ka"
}
Update account by ID. Only a small number of fields can be updated.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
{- "accountCode": "AC_1011_B",
- "accountNumber": "123456"
}
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Get balance for the account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}/balance' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "accountBalance": "1000000",
- "availableBalance": "1000000"
}
Blocks an amount in an account. Any number of distinct amounts can be blocked in one account. Every new blockage has its own distinct ID, which is used as a reference. When the amount is blocked, it is debited from the available balance of the account. The account balance remains the same. The account balance represents the total amount of funds in the account. The available balance represents the total amount of funds that can be used to perform transactions. When an account is frozen, the available balance is set to 0 minus all blockages for the account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
{- "amount": "5",
- "type": "DEBIT_CARD_OP",
- "description": "Card payment in the shop."
}
{- "id": "5e68c66581f2ee32bc354087"
}
Unblocks a previously blocked amount in an account and invokes a ledger transaction from that account to a different recipient. If the request fails, the amount is not unblocked.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
{- "recipientAccountId": "5e6645712b55823de7ea82f2",
- "amount": "5",
- "anonymous": false,
- "compliant": false,
- "transactionCode": "1_01_EXTERNAL_CODE",
- "paymentId": "9625",
- "recipientNote": "Private note",
- "baseRate": 1,
- "senderNote": "Sender note"
}
{- "reference": "0c64cc04-5412-4e57-a51c-ee5727939bcb"
}
Unblocks a previously blocked amount in an account. Increases the available balance in the account where the amount was blocked.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X DELETE \ 'https://api-eu1.tatum.io/v3/ledger/account/block/{id}' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Gets blocked amounts for an account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/block/{id}?pageSize=10&offset=0' \ -H 'x-api-key: YOUR_API_KEY_HERE'
[- {
- "id": "5e68c66581f2ee32bc354087",
- "accountId": "5e68c66581f2ee32bc354087",
- "amount": "5",
- "type": "DEBIT_CARD_OP",
- "description": "Card payment in the shop."
}
]
Gets blocked amount by id.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Internal server error. There was an error on the server while processing the request.
curl -i -X GET \ 'https://api-eu1.tatum.io/v3/ledger/account/block/{id}/detail' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "id": "5e68c66581f2ee32bc354087",
- "accountId": "5e68c66581f2ee32bc354087",
- "amount": "5",
- "type": "DEBIT_CARD_OP",
- "description": "Card payment in the shop."
}
Unblocks previously blocked amounts in an account. Increases the available balance in the account where the amount was blocked.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X DELETE \ 'https://api-eu1.tatum.io/v3/ledger/account/block/account/{id}' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Activates an account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due a to logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X PUT \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}/activate' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Deactivates an account. Only accounts with account and available balances of zero can be deactivated. Deactivated accounts are not visible in the list of accounts, it is not possible to send funds to these accounts or perform transactions. However, they are still present in the ledger and all transaction histories.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X PUT \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}/deactivate' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Disables all outgoing transactions. Incoming transactions to the account are available. When an account is frozen, its available balance is set to 0. This operation will create a new blockage of type ACCOUNT_FROZEN, which is automatically deleted when the account is unfrozen.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X PUT \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}/freeze' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}
Unfreezes a previously frozen account. Unfreezing a non-frozen account not affect the account.
OK
Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.
Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
Forbidden. The request is authenticated, but it is not possible to perform the required operation due to a logical error or invalid permissions.
Internal server error. There was an error on the server while processing the request.
curl -i -X PUT \ 'https://api-eu1.tatum.io/v3/ledger/account/{id}/unfreeze' \ -H 'x-api-key: YOUR_API_KEY_HERE'
{- "errorCode": "validation.failed",
- "message": "Request validation failed. Please see data for additional information.",
- "statusCode": 400,
- "data": [
- {
- "target": {
- "property": 12345
}, - "value": 12345,
- "property": "property1",
- "constraints": {
- "min": "property1 must not be less than 50000"
}
}
]
}