Blockchain operations

An endpoint to handle operations between a virtual account and the blockchain, e.g. to create blockchain transactions from virtual accounts, create custom fungible tokens and custom assets, and register them as a regular currency into the virtual account.

Send BTC from a virtual account to the blockchain

2 credits per API call.


Send BTC (Bitcoin) from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Bitcoin server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
There are two possibilites how the transaction on the blockchain can be created:
  • Using mnemonic - all of the addresses, that are generated from the mnemonic are scanned for the incoming deposits which are used as a source of the transaction. Assets, which are not used in a transaction are moved to the system address wih the derivation index 0. Address with index 0 cannot be assigned automatically to any account and is used for custodial wallet use cases. For non-custodial wallets, field attr should be present and it should be address with the index 1 of the connected wallet.
  • Using keyPair - addresses which are used as a source of the transaction are entered manually
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This method is a helper method, which internally wraps these steps:
  1. Store withdrawal - create a ledger transaction, which debits the assets on the sender account.
  2. Perform blockchain transaction
  3. Complete withdrawal - move the withdrawal to the completed state, when all of the previous steps were successful.
When some of the steps fails, Cancel withdrawal operation is used, which cancels withdrawal and creates refund transaction to the sender account. This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

address
required
string [ 1 .. 10000 ] characters

Blockchain address to send assets to. For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain addresses as a comma separated string.

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be withdrawn to blockchain.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

fee
string^[+]?((\d+(\.\d*)?)|(\.\d+))$

Fee to be submitted as a transaction fee to blockchain. If none is set, default value of 0.0005 BTC is used. Minimum fee is 0.00001 BTC.

multipleAmounts
Array of strings

For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain amounts. List of recipient addresses must be present in the address field and total sum of amounts must be equal to the amount field.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic seed - usually 12-24 words with access to whole wallet. Either mnemonic, keyPair or signature Id must be present - depends on the type of account and xpub. Tatum KMS does not support keyPair type of off-chain transaction, only mnemonic based.

xpub
required
string [ 1 .. 150 ] characters

Extended public key (xpub) of the wallet associated with the accounts and used mnemonic. Should be present, when mnemonic is used.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/bitcoin/transfer
Request samples
application/json
{
  • "senderAccountId": "5e68c66581f2ee32bc354087",
  • "address": "mpTwPdF8up9kidgcAStriUPwRdnE9MRAg7",
  • "amount": "0.001",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send BCH from a virtual account to the blockchain

10 credits per API call.


Send BCH (Bitcoin Cash) from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Bitcoin Cash server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
There are two possibilites how the transaction on the blockchain can be created:
  • Using mnemonic - all of the addresses, that are generated from the mnemonic are scanned for the incoming deposits which are used as a source of the transaction. Assets, which are not used in a transaction are moved to the system address wih the derivation index 0. Address with index 0 cannot be assigned automatically to any account and is used for custodial wallet use cases. For non-custodial wallets, field attr should be present and it should be address with the index 1 of the connected wallet.
  • Using keyPair - addresses which are used as a source of the transaction are entered manually
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This method is a helper method, which internally wraps these steps:
  1. Store withdrawal - create a ledger transaction, which debits the assets on the sender account.
  2. Perform blockchain transaction
  3. Complete withdrawal - move the withdrawal to the completed state, when all of the previous steps were successful.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

address
required
string [ 1 .. 10000 ] characters

Blockchain address to send assets to. For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain addresses as a comma separated string.

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be withdrawn to blockchain.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

multipleAmounts
Array of strings

For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain amounts. List of recipient addresses must be present in the address field and total sum of amounts must be equal to the amount field.

fee
string^[+]?((\d+(\.\d*)?)|(\.\d+))$

Fee to be submitted as a transaction fee to blockchain. If none is set, default value of 0.00005 BCH is used.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic seed - usually 12-24 words with access to whole wallet. Either mnemonic, keyPair or signature Id must be present - depends on the type of account and xpub. Tatum KMS does not support keyPair type of off-chain transaction, only mnemonic based.

xpub
required
string [ 1 .. 150 ] characters

Extended public key (xpub) of the wallet associated with the accounts. Should be present, when mnemonic is used.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/bcash/transfer
Request samples
application/json
{
  • "senderAccountId": "5e68c66581f2ee32bc354087",
  • "address": "bitcoincash:qrd9khmeg4nqag3h5gzu8vjt537pm7le85lcauzez",
  • "amount": "0.001",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send LTC from a virtual account to the blockchain

10 credits per API call.


Send LTC (Litecoin) from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Litecoin server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
There are two possibilites how the transaction on the blockchain can be created:
  • Using mnemonic - all of the addresses, that are generated from the mnemonic are scanned for the incoming deposits which are used as a source of the transaction. Assets, which are not used in a transaction are moved to the system address wih the derivation index 0. Address with index 0 cannot be assigned automatically to any account and is used for custodial wallet use cases. For non-custodial wallets, field attr should be present and it should be address with the index 1 of the connected wallet.
  • Using keyPair - addresses which are used as a source of the transaction are entered manually
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This method is a helper method, which internally wraps these steps:
  1. Store withdrawal - create a ledger transaction, which debits the assets on the sender account.
  2. Perform blockchain transaction
  3. Complete withdrawal - move the withdrawal to the completed state, when all of the previous steps were successful.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

address
required
string [ 1 .. 10000 ] characters

Blockchain address to send assets to. For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain addresses as a comma separated string.

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be withdrawn to blockchain.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

fee
string^[+]?((\d+(\.\d*)?)|(\.\d+))$

Fee to be submitted as a transaction fee to blockchain. If none is set, default value of 0.0005 LTC is used. Minimum fee is 0.00001 LTC.

multipleAmounts
Array of strings

For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain amounts. List of recipient addresses must be present in the address field and total sum of amounts must be equal to the amount field.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic seed - usually 12-24 words with access to whole wallet. Either mnemonic, keyPair or signature Id must be present - depends on the type of account and xpub. Tatum KMS does not support keyPair type of off-chain transaction, only mnemonic based.

xpub
required
string [ 1 .. 150 ] characters

Extended public key (xpub) of the wallet associated with the accounts. Should be present, when mnemonic is used.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/litecoin/transfer
Request samples
application/json
{
  • "senderAccountId": "5e68c66581f2ee32bc354087",
  • "address": "mpTwPdF8up9kidgcAStriUPwRdnE9MRAg7",
  • "amount": "0.001",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send FLOW from a virtual account to the blockchain

100 credits per API call. Tatum covers the fee connected to the transaction costs in subscription credits. This operation can be done on mainnet only for paid plans.


Send FLOW (Flow) or FUSD from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Flow server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
There are two possibilites how the transaction on the blockchain can be created:
  • Using mnemonic and index - private key is generated based on the index in the mnemonic.
  • Using secret - private keys is entered manually.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This method is a helper method, which internally wraps these steps:
  1. Store withdrawal - create a ledger transaction, which debits the assets on the sender account.
  2. Perform blockchain transaction
  3. Complete withdrawal - move the withdrawal to the completed state, when all of the previous steps were successful.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

account
required
string = 18 characters

Blockchain account to send from

address
required
string = 18 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent, in Flow.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key.

index
required
number >= 0

Index to the specific address from mnemonic.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/flow/transfer
Request samples
application/json
{
  • "senderAccountId": "61b3bffddfb389cde19c73be",
  • "account": "0x955cd3f17b2fd8ad",
  • "address": "0x955cd3f17b2fd8ae",
  • "amount": "10000",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send DOGE from a virtual account to the blockchain

4 credits per API call.


Send DOGE (Dogecoin) from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Dogecoin server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
There are two possibilites how the transaction on the blockchain can be created:
  • Using mnemonic - all of the addresses, that are generated from the mnemonic are scanned for the incoming deposits which are used as a source of the transaction. Assets, which are not used in a transaction are moved to the system address wih the derivation index 0. Address with index 0 cannot be assigned automatically to any account and is used for custodial wallet use cases. For non-custodial wallets, field attr should be present and it should be address with the index 1 of the connected wallet.
  • Using keyPair - addresses which are used as a source of the transaction are entered manually
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This method is a helper method, which internally wraps these steps:
  1. Store withdrawal - create a ledger transaction, which debits the assets on the sender account.
  2. Perform blockchain transaction
  3. Complete withdrawal - move the withdrawal to the completed state, when all of the previous steps were successful.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

address
required
string [ 1 .. 10000 ] characters

Blockchain address to send assets to. For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain addresses as a comma separated string.

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be withdrawn to blockchain.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

fee
string^[+]?((\d+(\.\d*)?)|(\.\d+))$

Fee to be submitted as a transaction fee to blockchain. If none is set, default value of 1 DOGE is used.

multipleAmounts
Array of strings

For BTC, LTC, DOGE and BCH, it is possible to enter list of multiple recipient blockchain amounts. List of recipient addresses must be present in the address field and total sum of amounts must be equal to the amount field.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic seed - usually 12-24 words with access to whole wallet. Either mnemonic, keyPair or signature Id must be present - depends on the type of account and xpub. Tatum KMS does not support keyPair type of off-chain transaction, only mnemonic based.

xpub
required
string [ 1 .. 150 ] characters

Extended public key (xpub) of the wallet associated with the accounts. Should be present, when mnemonic is used.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/dogecoin/transfer
Request samples
application/json
{
  • "senderAccountId": "5e68c66581f2ee32bc354087",
  • "address": "mpTwPdF8up9kidgcAStriUPwRdnE9MRAg7",
  • "amount": "0.001",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send ETH from a virtual account to the blockchain

4 credits per API call.


Send ETH (Ethereum) from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Ethereum server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

address
required
string = 42 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent in Ether | MATIC | XDC | KCS.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

privateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderAccountId
required
string = 24 characters

Sender account ID

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/ethereum/transfer
Request samples
application/json
{
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "privateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "senderAccountId": "5e68c66581f2ee32bc354087"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send MATIC from a virtual account to the blockchain

4 credits per API call.


Send MATIC (Polygon) or ERC-20-equivalent Polygon tokens from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Polygon server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

address
required
string = 42 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent in Ether | MATIC | XDC | KCS.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

privateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderAccountId
required
string = 24 characters

Sender account ID

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/polygon/transfer
Request samples
application/json
{
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "privateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "senderAccountId": "5e68c66581f2ee32bc354087"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send KCS from a virtual account to the blockchain

4 credits per API call.


Send KCS (KuCoin Community Chain (KCC)) or ERC-20-equivalent KCC tokens from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If KCS server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

address
required
string = 42 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent in KCS.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

fromPrivateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderAccountId
required
string = 24 characters

Sender account ID

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/kcs/transfer
Request samples
application/json
{
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "fromPrivateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "senderAccountId": "5e68c66581f2ee32bc354087"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Send Ethereum ERC-20 tokens from a virtual account to the blockchain

4 credits per API call.


Send Ethereum ERC-20 tokens from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If Ethereum server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
senderAccountId
required
string = 24 characters

Sender account ID

address
required
string = 42 characters

Blockchain address to send ERC20 token to

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

privateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/ethereum/erc20/transfer
Request samples
application/json
{
  • "senderAccountId": "5e68c66581f2ee32bc354087",
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "privateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Register a new Ethereum ERC-20 token in the virtual accountDeprecated

This method is deprecated.
Use this method instead.


2 credits per API call.

First step to create new ERC20 token with given supply on Ethereum blockchain with support of Tatum's private ledger.
This method only creates Tatum Private ledger virtual currency with predefined parameters. It will not generate any blockchain smart contract.
The whole supply of ERC20 token is stored in the customer's newly created account. Then it is possible to create new Tatum accounts with ERC20 token name as account's currency.
Newly created account is frozen until the specific ERC20 smart contract address is linked with the Tatum virtual currency, representing the token.
Order of the steps to create ERC20 smart contract with Tatum private ledger support:

  1. Create ERC20 token - creates a virtual currency within Tatum
  2. Deploy ERC20 smart contract - create new ERC20 smart contract on the blockchain
  3. Store ERC20 smart contract address - link newly created ERC20 smart contract address with Tatum virtual currency - this operation enables frozen account and enables ledger synchronization for ERC20 Tatum accounts
There is a helper method Deploy Ethereum ERC20 Smart Contract to Blockchain and Ledger, which wraps first 2 steps into 1 method.
Address on the blockchain, where all initial supply will be transferred, can be defined via the address or xpub and derivationIndex. When xpub is present, the account connected to this virtualCurrency will be set as the account's xpub.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
symbol
required
string [ 1 .. 30 ] characters ^[a-zA-Z0-9_]+$

The name of the token; used as an identifier within the Tatum platform and as a currency symbol on the blockchain
The token name that you specify here must be the same as the token name in the symbol parameter of the smart contract that you are going to deploy or have already deployed for this token.

supply
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

The supply of the token

decimals
required
number >= 0

The number of decimal places that the token has

description
required
string [ 1 .. 100 ] characters

The description of the token; used as a description within the Tatum platform and as a currency name on the blockchain

xpub
required
string [ 1 .. 150 ] characters

The extended public key of the wallet from which a deposit address for the virtual account will be generated
NOTE: On Solana, you only can assign an existing address to the virtual account; use the Erc20Address schema of this API.

derivationIndex
required
integer <int32> <= 2147483647

The derivation index to use together with the extended public key to generate the deposit address

basePair
required
string (FiatOrCryptoCurrency)

The base pair for the virtual currency that represents the token; used to calculate the value of a transaction

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "ALGO" "ADA" "BAM" "BAT" "BBD" "BCH" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTC" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "FREE" "GMC" "GMC_BSC" "RMD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LEO" "LINK" "LKR" "LRD" "LSL" "LTC" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MKR" "MMK" "MMY" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PAX" "PAXG" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TRON" "TUSD" "BUSD" "TWD" "TZS" "UAH" "UGX" "UNI" "USD" "USDC" "USDT" "USDT_TRON" "USDT_MATIC" "UYU" "UZS" "VEF" "VND" "VUV" "WBTC" "WST" "XAF" "XAG" "XAU" "XCD" "XCON" "XDR" "XOF" "XPF" "XRP" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
baseRate
number >= 0
Default: 1

The exchange rate for the base pair; one unit of the created virtual currency equals 1 unit of basePair*baseRate

object (CustomerRegistration)

If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

externalId
required
string [ 1 .. 100 ] characters

The external ID of the customer; use only anonymized identification that you have in your system
If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

accountingCurrency
string (FiatCurrency)
Default: "EUR"

The ISO 4217 code of the currency in which all transactions for all virtual accounts of the customer will be billed; to overwrite the currency for this specific virtual account, set the accountingCurrency parameter at the account level.

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
customerCountry
string = 2 characters

The ISO 3166-1 code of the country that the customer has to be compliant with

providerCountry
string = 2 characters

The ISO 3166-1 code of the country that the service provider has to be compliant with

accountingCurrency
string (FiatCurrency)
Default: "USD"

The ISO 4217 code of the currency in which all transactions for the created virtual account will be billed

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/ethereum/erc20
Request samples
application/json
{
  • "symbol": "MY_TOKEN",
  • "supply": "1000000.0",
  • "decimals": 8,
  • "description": "My Public Token",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid",
  • "derivationIndex": 0,
  • "basePair": "AED"
}
Response samples
application/json
{
  • "accountId": "5e68c66581f2ee32bc354087",
  • "address": "0xa7673161CbfE0116A4De9E341f8465940c2211d4"
}

Deploy an Ethereum ERC-20 smart contract to the blockchain and a virtual account

4 credits per API call

Deploy an Ethereum ERC-20 smart contract. This is a helper method, which is combination of Register new ERC20 token in the ledger and Deploy blockchain ERC20.

After deploying a contract to blockchain, the contract address will become available and must be stored within Tatum. Otherwise, it will not be possible to interact with it and starts automatic blockchain synchronization.

Signing a transaction
When deploying an Ethereum ERC-20 smart contract to the blockchain and a virtual account, you are charged a fee for the transaction, and you must sign the transaction with the private key of the blockchain address from which the fee will be deducted.

Providing the private key in the API is not a secure way of signing transactions, because the private key can be stolen or exposed. Your private keys should never leave your security perimeter. You should use the private keys only for testing a solution you are building on the testnet of a blockchain.

For signing transactions on the mainnet, we strongly recommend that you use the Tatum Key Management System (KMS) and provide the signature ID instead of the private key in the API. Alternatively, you can use the Tatum JavaScript client.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
symbol
required
string [ 1 .. 30 ] characters ^[a-zA-Z0-9_]+$

The name of the token; used as an identifier within the Tatum platform and as a currency symbol on the blockchain

supply
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

The supply of the token

description
required
string [ 1 .. 100 ] characters

The description of the token; used as a description within the Tatum platform and as a currency name on the blockchain

address
required
string = 42 characters

The blockchain address to be assigned to the virtual account as a deposit address

mnemonic
required
string [ 1 .. 500 ] characters

The mnemonic to generate the private key for the blockchain address from which the fee for deploying the smart contract will be deducted; is used together with the derivation index of this address

index
required
integer <= 2147483647

The derivation index of the blockchain address from which the fee for deploying the smart contract will be deducted; is used together with the mnemonic to generate the private key for this address

basePair
required
string (FiatOrCryptoCurrency)

The base pair for the virtual currency that represents the token; used to calculate the value of a transaction

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "ALGO" "ADA" "BAM" "BAT" "BBD" "BCH" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTC" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "FREE" "GMC" "GMC_BSC" "RMD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LEO" "LINK" "LKR" "LRD" "LSL" "LTC" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MKR" "MMK" "MMY" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PAX" "PAXG" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TRON" "TUSD" "BUSD" "TWD" "TZS" "UAH" "UGX" "UNI" "USD" "USDC" "USDT" "USDT_TRON" "USDT_MATIC" "UYU" "UZS" "VEF" "VND" "VUV" "WBTC" "WST" "XAF" "XAG" "XAU" "XCD" "XCON" "XDR" "XOF" "XPF" "XRP" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
baseRate
number >= 0
Default: 1

The exchange rate for the base pair; one unit of the created virtual currency equals 1 unit of basePair*baseRate

nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

object (CustomerRegistration)

If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

externalId
required
string [ 1 .. 100 ] characters

The external ID of the customer; use only anonymized identification that you have in your system
If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

accountingCurrency
string (FiatCurrency)
Default: "EUR"

The ISO 4217 code of the currency in which all transactions for all virtual accounts of the customer will be billed; to overwrite the currency for this specific virtual account, set the accountingCurrency parameter at the account level.

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
customerCountry
string = 2 characters

The ISO 3166-1 code of the country that the customer has to be compliant with

providerCountry
string = 2 characters

The ISO 3166-1 code of the country that the service provider has to be compliant with

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/ethereum/erc20/deploy
Request samples
application/json
{
  • "symbol": "MY_TOKEN",
  • "supply": "10000000",
  • "description": "My Public Token",
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0,
  • "basePair": "AED"
}
Response samples
application/json
{
  • "accountId": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Send BSC from a virtual account to the blockchain

4 credits per API call.


Send BSC (BNB Smart Chain) or BEP-20 tokens from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If BSC server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

address
required
string = 42 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

privateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderAccountId
required
string = 24 characters

Sender account ID

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/bsc/transfer
Request samples
application/json
{
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "privateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "senderAccountId": "5e68c66581f2ee32bc354087"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Register a new BNB Smart Chain BEP-20 token in the virtual accountDeprecated

This method is deprecated.
Use this method instead.


2 credits per API call.

First step to create new BEP20 token with given supply on BSC blockchain with support of Tatum's private ledger.


This method only creates Tatum Private ledger virtual currency with predefined parameters. It will not generate any blockchain smart contract.
The whole supply of BEP20 token is stored in the customer's newly created account. Then it is possible to create new Tatum accounts with BEP20 token name as account's currency.
Newly created account is frozen until the specific BEP20 smart contract address is linked with the Tatum virtual currency, representing the token.
Order of the steps to create BEP20 smart contract with Tatum private ledger support:

  1. Register BEP20 token - creates a virtual currency within Tatum
  2. Deploy BEP20 smart contract - create new BEP20 smart contract on the blockchain
  3. Store BEP20 smart contract address - link newly created BEP20 smart contract address with Tatum virtual currency - this operation enables frozen account and enables ledger synchronization for BEP20 Tatum accounts
There is a helper method Deploy BSC BEP20 Smart Contract to Blockchain and Ledger, which wraps first 2 steps into 1 method.
Address on the blockchain, where all initial supply will be transferred, can be defined via the address or xpub and derivationIndex. When xpub is present, the account connected to this virtualCurrency will be set as the account's xpub.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
symbol
required
string [ 1 .. 30 ] characters ^[a-zA-Z0-9_]+$

The name of the token; used as an identifier within the Tatum platform and as a currency symbol on the blockchain
The token name that you specify here must be the same as the token name in the symbol parameter of the smart contract that you are going to deploy or have already deployed for this token.

supply
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

The supply of the token

decimals
required
number >= 0

The number of decimal places that the token has

description
required
string [ 1 .. 100 ] characters

The description of the token; used as a description within the Tatum platform and as a currency name on the blockchain

xpub
required
string [ 1 .. 150 ] characters

The extended public key of the wallet from which a deposit address for the virtual account will be generated
NOTE: On Solana, you only can assign an existing address to the virtual account; use the Erc20Address schema of this API.

derivationIndex
required
integer <int32> <= 2147483647

The derivation index to use together with the extended public key to generate the deposit address

basePair
required
string (FiatOrCryptoCurrency)

The base pair for the virtual currency that represents the token; used to calculate the value of a transaction

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "ALGO" "ADA" "BAM" "BAT" "BBD" "BCH" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTC" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "FREE" "GMC" "GMC_BSC" "RMD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LEO" "LINK" "LKR" "LRD" "LSL" "LTC" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MKR" "MMK" "MMY" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PAX" "PAXG" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TRON" "TUSD" "BUSD" "TWD" "TZS" "UAH" "UGX" "UNI" "USD" "USDC" "USDT" "USDT_TRON" "USDT_MATIC" "UYU" "UZS" "VEF" "VND" "VUV" "WBTC" "WST" "XAF" "XAG" "XAU" "XCD" "XCON" "XDR" "XOF" "XPF" "XRP" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
baseRate
number >= 0
Default: 1

The exchange rate for the base pair; one unit of the created virtual currency equals 1 unit of basePair*baseRate

object (CustomerRegistration)

If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

externalId
required
string [ 1 .. 100 ] characters

The external ID of the customer; use only anonymized identification that you have in your system
If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

accountingCurrency
string (FiatCurrency)
Default: "EUR"

The ISO 4217 code of the currency in which all transactions for all virtual accounts of the customer will be billed; to overwrite the currency for this specific virtual account, set the accountingCurrency parameter at the account level.

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
customerCountry
string = 2 characters

The ISO 3166-1 code of the country that the customer has to be compliant with

providerCountry
string = 2 characters

The ISO 3166-1 code of the country that the service provider has to be compliant with

accountingCurrency
string (FiatCurrency)
Default: "USD"

The ISO 4217 code of the currency in which all transactions for the created virtual account will be billed

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/bsc/bep20
Request samples
application/json
{
  • "symbol": "MY_TOKEN",
  • "supply": "1000000.0",
  • "decimals": 8,
  • "description": "My Public Token",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid",
  • "derivationIndex": 0,
  • "basePair": "AED"
}
Response samples
application/json
{
  • "accountId": "5e68c66581f2ee32bc354087",
  • "address": "0xa7673161CbfE0116A4De9E341f8465940c2211d4"
}

Deploy a BNB Smart Chain BEP-20 smart contract to the blockchain and a virtual account

4 credits per API call

Deploy a BNB Smart Chain BEP-20 smart contract. This is a helper method, which is combination of Register new BEP20 token in the ledger and Deploy blockchain ERC20.

After deploying a contract to blockchain, the contract address will become available and must be stored within Tatum. Otherwise, it will not be possible to interact with it and starts automatic blockchain synchronization.

Signing a transaction
When deploying a BNB Smart Chain BEP-20 smart contract to the blockchain and a virtual account, you are charged a fee for the transaction, and you must sign the transaction with the private key of the blockchain address from which the fee will be deducted.

Providing the private key in the API is not a secure way of signing transactions, because the private key can be stolen or exposed. Your private keys should never leave your security perimeter. You should use the private keys only for testing a solution you are building on the testnet of a blockchain.

For signing transactions on the mainnet, we strongly recommend that you use the Tatum Key Management System (KMS) and provide the signature ID instead of the private key in the API. Alternatively, you can use the Tatum JavaScript client.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
symbol
required
string [ 1 .. 30 ] characters ^[a-zA-Z0-9_]+$

The name of the token; used as an identifier within the Tatum platform and as a currency symbol on the blockchain

supply
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

The supply of the token

description
required
string [ 1 .. 100 ] characters

The description of the token; used as a description within the Tatum platform and as a currency name on the blockchain

address
required
string = 42 characters

The blockchain address to be assigned to the virtual account as a deposit address

mnemonic
required
string [ 1 .. 500 ] characters

The mnemonic to generate the private key for the blockchain address from which the fee for deploying the smart contract will be deducted; is used together with the derivation index of this address

index
required
integer <= 2147483647

The derivation index of the blockchain address from which the fee for deploying the smart contract will be deducted; is used together with the mnemonic to generate the private key for this address

basePair
required
string (FiatOrCryptoCurrency)

The base pair for the virtual currency that represents the token; used to calculate the value of a transaction

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "ALGO" "ADA" "BAM" "BAT" "BBD" "BCH" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTC" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "FREE" "GMC" "GMC_BSC" "RMD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LEO" "LINK" "LKR" "LRD" "LSL" "LTC" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MKR" "MMK" "MMY" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PAX" "PAXG" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TRON" "TUSD" "BUSD" "TWD" "TZS" "UAH" "UGX" "UNI" "USD" "USDC" "USDT" "USDT_TRON" "USDT_MATIC" "UYU" "UZS" "VEF" "VND" "VUV" "WBTC" "WST" "XAF" "XAG" "XAU" "XCD" "XCON" "XDR" "XOF" "XPF" "XRP" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
baseRate
number >= 0
Default: 1

The exchange rate for the base pair; one unit of the created virtual currency equals 1 unit of basePair*baseRate

nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

object (CustomerRegistration)

If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

externalId
required
string [ 1 .. 100 ] characters

The external ID of the customer; use only anonymized identification that you have in your system
If a customer with the specified external ID does not exist, a new customer is created. If a customer with the specified external ID exists, it is updated with the provided information.

accountingCurrency
string (FiatCurrency)
Default: "EUR"

The ISO 4217 code of the currency in which all transactions for all virtual accounts of the customer will be billed; to overwrite the currency for this specific virtual account, set the accountingCurrency parameter at the account level.

Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BRL" "BSD" "BTN" "BWP" "BYN" "BYR" "BZD" "CAD" "CDF" "CHF" "CLF" "CLP" "CNY" "COP" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DOGE" "DZD" "EGP" "ERN" "ETB" "ETH" "EUR" "FJD" "FKP" "FLOW" "FUSD" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MUR" "MVR" "MWK" "MXN" "MYR" "MZN" "NAD" "NGN" "NIO" "NOK" "NPR" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PYG" "QAR" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SOS" "SRD" "STD" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TWD" "TZS" "UAH" "UGX" "USD" "UYU" "UZS" "VEF" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XCD" "XDR" "XOF" "XPF" "YER" "ZAR" "ZMK" "ZMW" "ZWL"
customerCountry
string = 2 characters

The ISO 3166-1 code of the country that the customer has to be compliant with

providerCountry
string = 2 characters

The ISO 3166-1 code of the country that the service provider has to be compliant with

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/bsc/bep20/deploy
Request samples
application/json
{
  • "symbol": "MY_TOKEN",
  • "supply": "10000000",
  • "description": "My Public Token",
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0,
  • "basePair": "AED"
}
Response samples
application/json
{
  • "accountId": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Send KLAY from a virtual account to the blockchain

4 credits per API call.


Send KLAY or ERC-20-equivalent tokens from a virtual account to the blockchain. This will create Tatum internal withdrawal request with ID. If every system works as expected, withdrawal request is marked as complete and transaction id is assigned to it.

  • If KLAY server connection is unavailable, withdrawal request is cancelled.
  • If blockchain transfer is successful, but is it not possible to reach Tatum, transaction id of blockchain transaction is returned and withdrawal request must be completed manually, otherwise all other withdrawals will be pending.
It is possible to perform ledger to blockchain transaction for ledger accounts without blockchain address assigned to them.
This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
nonce
number >= 0

The nonce to be set to the transaction; if not present, the last known nonce will be used

address
required
string = 42 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent in Ether | MATIC | XDC | KCS.

compliant
boolean

Compliance check, if withdrawal is not compliant, it will not be processed.

privateKey
required
string = 66 characters

Private key of sender address. Either mnemonic and index, privateKey or signature Id must be present - depends on the type of account and xpub.

paymentId
string [ 1 .. 100 ] characters

Identifier of the payment, shown for created Transaction within Tatum sender account.

senderAccountId
required
string = 24 characters

Sender account ID

senderNote
string [ 1 .. 500 ] characters

Note visible to owner of withdrawing account

gasLimit
string^[+]?\d+$

Gas limit for transaction in gas price. If not set, automatic calculation will be used.

gasPrice
string^[+]?\d+$

Gas price in Gwei. If not set, automatic calculation will be used.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/offchain/klaytn/transfer
Request samples
application/json
{
  • "address": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "amount": "100000",
  • "privateKey": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "senderAccountId": "5e68c66581f2ee32bc354087"
}
Response samples
application/json
{
  • "id": "5e68c66581f2ee32bc354087",
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "completed": true
}

Deploy a Klaytn ERC-20-equivalent smart contract to the blockchain and a virtual account

4 credits per API call

Deploy a Klaytn ERC-20-equivalent smart contract. This is a helper method, which is combination of Register new ERC20 token in the ledger and Deploy blockchain ERC20.

After deploying a contract to blockchain, the contract address will become available and must be stored within Tatum. Otherwise, it will not be possible to interact with it and starts automatic blockchain synchronization.

Signing a transaction
When deploying a Klaytn ERC-20-equivalent smart contract to the blockchain and a virtual account, you are charged a fee for the transaction, and you must sign the transaction with the private key of the blockchain address from which the fee will be deducted.

Providing the private key in the API is not a secure way of signing transactions, because the private key can be stolen or exposed. Your private keys should never leave your security perimeter. You should use the private keys only for testing a solution you are building on the testnet of a blockchain.

For signing transactions on the mainnet, we strongly recommend that you use the Tatum Key Management System (KMS) and provide the signature ID instead of the private key in the API. Alternatively, you can use the Tatum JavaScript client.

SecurityX-API-Key
Request
Request Body schema: application/json
One of: