NFT (ERC-721 or compatible)

"NFT" stands for "Non-Fungible Token", which means that each token is unique and irreplaceable. NFTs are described by the ERC-721 standard on the Ethereum blockchain or by an equivalent standard on the other blockchains.

NFTs can be used for nearly any digital asset or good to ensure authenticity and scarcity, for example:

  • In-game assets: NFTs can be used to create unique collectibles in the form of characters, weapons, skins, or other equipment. Players can resell or trade assets directly as they choose, and their authenticity is easily verifiable.
  • Music and other digital media: NFTs can be used to create rare and unique collectible digital releases. Similarly, NFTs can be used to sell videos, art, or any other type of digital media. Collectors can own digital originals of their favorite songs, movies, and so on.
  • Digital sports merchandise: Trading cards, memorabilia, classic moments in sports history, and one-of-a-kind experiences can be sold as NFTs.

Each NFT-related operation supports its own set of the blockchains. The list of the supported blockchains is provided in the description for an NFT-operation operation further in this section.

Deploy an NFT smart contract

100 credits per API call on Flow
2 credits on the other blockchains

To be able to use this API on the mainnet, you must have a paid pricing plan. Tatum covers the transaction fee for you and then deducts the corresponding number of credits from your monthly credit allowance.
If you have the Free pricing plan, you can use this API only on the testnet.

Deploy an NFT smart contract on the blockchain. With a deployed NFT smart contract, you can mint NFTs (one NFT at a time or multiple NFTs at once), burn, and transfer NFTs.
Smart contracts are standardized and audited.

You can deploy an NFT smart contract on the following blockchains:

  • Algorand
  • BNB Smart Chain
  • Celo
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • TRON

By default, an NFT smart contract is deployed as a general ERC-721 smart contract compatible with OpenSea royalties. This is a standard ERC-721 contract with AccessControl and Ownable, enhanced with NFT batch minting. NFTs minted with this smart contract are compatible with OpenSea and its royalty structure.

In addition to the general ERC-721 contract, you can also deploy the following types of NFT smart contracts for the supported blockchains except for Flow and TRON:

  • Cashback ERC-721 smart contract is an ERC-721 smart contract that forces on-chain royalties to be paid every time an NFT is transferred. The royalties are defined as a fixed value and are not OpenSea-compatible.
    To deploy an NFT smart contract as a cashback contract, deploy the contract with the cashback parameter set to true in the request body.
  • Provenance ERC-721 smart contract is an ERC-721 smart contract that forces on-chain royalties to be paid every time an NFT is transferred. The royalties are defined as a percentage of the NFT price and are not OpenSea-compatible.
    To deploy an NFT smart contract as a provenance contract, deploy the contract with the provenance parameter set to true in the request body.

You can enable public minting for cashback and provenance smart contracts. By default, public minting is disabled, which means that only the private key that created the smart contract or other private keys added to the smart contract as NFT minters will be able to mint NFTs from the contract. To enable public minting and allow anyone to mint NFTs on top of the smart contract, deploy the contract with the publicMint parameter set to true in the request body.

You can review the code of a deployed NFT smart contract here (if the contract is deployed on Flow) or here (if the contract is deployed on any other supported blockchain).

Signing a transaction

When deploying an NFT smart contract, 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 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
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "BSC" "ALGO"
name
required
string [ 1 .. 100 ] characters

Name of the NFT token

symbol
required
string [ 1 .. 30 ] characters

Symbol of the NFT token

fromPrivateKey
required
string [ 66 .. 103 ] characters

Private key of Ethereum account address, from which gas for deployment of ERC721 will be paid. Private key, or signature Id must be present.

provenance
boolean

True if the contract is provenance percentage royalty type. False by default. Details and sources avaiable here.

cashback
boolean

True if the contract is fixed price royalty type. False by default. Details and sources avaiable here.

publicMint
boolean

True if the contract is publicMint type. False by default.

nonce
number >= 0

Nonce to be set to Ethereum transaction. If not present, last known nonce will be used.

object

Custom defined fee. If not present, it will be calculated automatically.

gasLimit
required
string^[+]?\d+$

Gas limit for transaction in gas price.

gasPrice
required
string^[+]?\d+$

Gas price in Gwei.

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 during the processing of the request.

post/v3/nft/deploy
Request samples
application/json
{
  • "chain": "ETH",
  • "name": "My ERC721",
  • "symbol": "ERC_SYMBOL",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2",
  • "provenance": false,
  • "cashback": false,
  • "publicMint": true,
  • "nonce": 0,
  • "fee": {
    }
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Mint an NFT

100 credits per API call on Flow
2 credits on the other blockchains

To be able to use this API on the mainnet, you must have a paid pricing plan. Tatum covers the transaction fee for you and then deducts the corresponding number of credits from your monthly credit allowance.
If you have the Free pricing plan, you can use this API only on the testnet.

Create one NFT Token and transfer it to destination account. Create and transfer any NFT token from smart contract defined in contractAddress. It is possible to add URL to the created token with a more detailed information about it.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Celo
  • Klaytn
  • Solana
  • Harmony.ONE
  • Tron
  • Flow
  • Binance Smart Chain
  • Algorand

For Solana, NFTs are not deployed, only minted right away. Newly created NFT creates new address on the blockchain and owner of the NFT owns with it's private key the account of the NFT.
This operation works in three modes.

First mode works just like other NFT endpoints. 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 loss of 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.

Second mode works without private key or signature id - NFT Express. Mint NFT requests use built-in smart contract, private key and token id which are provided by Tatum. You dont need to provide fromPrivateKey (or signatureId), contractAddress and tokenId fields to perform the mint NFT request. In case of Algorand, you can mint Algorand-based NFTs to our internal address. Due to requirement of previously enabling the recipient address to receive the NFT, you must perform receive operation and then transfer the NFT to the final recipient.

Third mode enables you to mint on any custom NFT ERC-721 smart contract, on which specified minter address is approved as a minter. You don't specify private key or signatureId, only minter address, from which the NFT will be minted. You can use addresses specified in the bellow table to be used as a minter.

Performed request without fromPrivateKey or signatureId fields will be populated with following attributes:

  • fromPrivateKey - a built-in private key connected to the address from which will be NFT transaction fees paid.
  • tokenId - a counter which starts from 0 and is increased for each NFT mint request by 1. The tokenId is provided per each chain and mainnet/testnet version of network.
  • contractAddress - represents Tatum built in smart contract address of the minted NFT.

The blockchain fee of the performed transaction is paid from the address connected with built-in private key and is debitted in form of credits. The credits are debitted only if NFT mint requests are performed with paid API key plan. We transform fee to the credits in accordance to the rates provided by the Tatum.

It means if you perform mint NFT request with following body:

{
  "chain": "CELO",
  "to": "0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F",
  "url": "ipfs://QmXJJ6UF5WkF4WTJvsdhiA1etGwBLfpva7Vr9AudGMe3pj"
}

The fields contractAddress, fromPrivateKey and tokenId will be internally filled in following way:

{
  "chain": "CELO",
  "to": "0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F",
  "url": "ipfs://QmXJJ6UF5WkF4WTJvsdhiA1etGwBLfpva7Vr9AudGMe3pj",
  "fromPrivateKey": "{tatumBuiltInPrivateKey}",
  "tokenId": "{tatumBuiltInTokenId + 1}",
  "contractAddress": "0x45871ED5F15203C0ce791eFE5f4B5044833aE10e"
}

Keep in mind that your credit amount will be debitted accordingly to the rate of the selected blockchain and cost of transaction fees.

We have prepared following smart contracts for minting without private key:

Chain Testnet/Mainnet Address Smart contract address
MATIC Testnet 0x542b9ac4945a3836fd12ad98acbc76a0c8b743f5 0xCd2AdA00c48A27FAa5Cc67F9A1ed55B89dDf7F77
BSC Testnet 0xc16ae5e8c985b906935a0cadf4e24f0400531883 0xF73075aa67561791352fbEe8278115487Fd90ab6
ONE Testnet 0x8906f62d40293ddca77fdf6714c3f63265deddf0 0x427ddbe3ad5e1e77e010c02e61e9bdef82dcaeea
ETH Testnet 0x53e8577C4347C365E4e0DA5B57A589cB6f2AB848 0xAe7D8842D0295B1f24a8842cBd5eB83Ae2fd0946
CELO Testnet 0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F 0x45871ED5F15203C0ce791eFE5f4B5044833aE10e
KLAY Testnet 0x80d8bac9a6901698b3749fe336bbd1385c1f98f2 0x45871ED5F15203C0ce791eFE5f4B5044833aE10e
MATIC Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x329F549Cbf3a2b1b95C622A77F701254eC80352d
BSC Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x4f83793245abE92cc8B978a16C898005c69e5e27
ONE Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x559f11123bb892159cd33f652624e40e8b43d4ad
ETH Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x789c00ed7ddd72a806dbac40df926df32fde3c2f
CELO Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x5F35fd593243B059cBf580D0335B1c21881a248b
KLAY Mainnet 0xcf9e127455d28e7362380aec1b92ddee8200b295 0x44bf563b999823b22b0b165020f0e090aad88f11
If there are not enough coins on any testnet address, feel free to send coins there.

SecurityX-API-Key
Request
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Enum: "ETH" "MATIC" "CELO" "ONE" "KLAY" "BSC"
to
required
string = 42 characters

Blockchain address to send NFT token to

url
required
string <= 256 characters

Metadata of the token. See https://eips.ethereum.org/EIPS/eip-721#specification for more details.

tokenId
string <= 30 characters

Asset name for Asset on Algorand chain. Applicable only for ALGO.

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 during the processing of the request.

post/v3/nft/mint
Request samples
application/json
{}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Transfer an NFT

100 credits per API call on Flow
2 credits on the other blockchains

To be able to use this API on the mainnet, you must have a paid pricing plan. Tatum covers the transaction fee for you and then deducts the corresponding number of credits from your monthly credit allowance.
If you have the Free pricing plan, you can use this API only on the testnet.

Transfer NFT Tokens from account to account. Transfer any NFT token from smart contract defined in contractAddress. Only 1 specific token with specified tokenId can be transfered. This method invokes ERC721 method safeTransfer() to transfer the token in case of ETH, Celo and BSC.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Flow
  • Celo
  • Harmony.ONE
  • Tron
  • Binance Smart Chain
  • Algorand
  • Klaytn
  • Solana
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 loss of 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.

Algorand is unique a way that the receiving account should be ready before sending the NFT asset. To perform this, the receiving account should transfer the NFT asset with 0 amount to itself. During the process, it's using the same API as the main transaction: the only difference is that the "fromPrivateKey" should be the privateKey of the receiving account. If you were minting NFTs on Algorand with NFT Express, you can skip the fromPrivateKey field in the request body and NFT will be transferred to you automatically from Tatum - this is tied to the API Key used during the mint.

SecurityX-API-Key
Request
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
value
string

If token to be transferred is Royalty NFT token, this is a value to be paid as a cashback to the authors of the token.

chain
required
string

Chain to work with.

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "BSC"
to
required
string [ 42 .. 58 ] characters

Blockchain address to send NFT token to

tokenId
required
string <= 256 characters

ID of token.

contractAddress
required
string [ 1 .. 42 ] characters

Address of NFT token

provenance
boolean

True if the contract is provenance type

provenanceData
string

data you want to store with transaction, optional and valid only if provenance contract

tokenPrice
string <= 256 characters

current price of the token, valid only for provenance

fromPrivateKey
required
string [ 66 .. 103 ] characters

Private key of sender address. Private key, or signature Id must be present.

nonce
number

Nonce to be set to Ethereum transaction. If not present, last known nonce will be used. Setting nonce is not necessary in Algorand

object

Custom defined fee. If not present, it will be calculated automatically. Setting fee is not necessary in Algorand.

gasLimit
required
string^[+]?\d+$

Gas limit for transaction in gas price.

gasPrice
required
string^[+]?\d+$

Gas price in Gwei.

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 during the processing of the request.

post/v3/nft/transaction
Request samples
application/json
{
  • "value": "1",
  • "chain": "ETH",
  • "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "tokenId": "100000",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "provenance": true,
  • "provenanceData": "test",
  • "tokenPrice": "1",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2",
  • "nonce": 1,
  • "fee": {
    }
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Mint multiple NFTs

100 credits per API call on Flow
2 credits on the other blockchains

To be able to use this API on the mainnet, you must have a paid pricing plan. Tatum covers the transaction fee for you and then deducts the corresponding number of credits from your monthly credit allowance.
If you have the Free pricing plan, you can use this API only on the testnet.

Create multiple NFT Tokens and transfer them to destination account. Create and transfer any NFT tokens from smart contract defined in contractAddress.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Celo
  • Harmony.ONE
  • Tron
  • Flow
  • Klaytn
  • Binance Smart Chain
This operation works in two modes.

First mode works just like other NFT endpoints. 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 loss of 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.

Second mode enables you to mint on any custom NFT ERC-721 smart contract, on which specified minter address is approved as a minter. You don't specify private key or signatureId, only minter address, from which the NFT will be minted.
It means you perform mint multiple NFT request with following body:

{
   "to": ["0x80d8bac9a6901698b3749fe336bbd1385c1f98f2"],
   "url": ["ipfs://QmXJJ6UF5WkF4WTJvsdhiA1etGwBLfpva7Vr9AudGMe3pj"],
   "tokenId": ["9876541124516"],
   "contractAddress":"0xcd2ada00c48a27faa5cc67f9a1ed55b89ddf7f77",
   "minter": "0x542b9ac4945a3836fd12ad98acbc76a0c8b743f5",
   "chain": "MATIC"
}

The blockchain fee of the performed transaction is paid from the address connected with built-in private key and is debitted in form of credits. The credits are debitted only if NFT mint requests are performed with paid API key plan. We transform fee to the credits in accordance to the rates provided by the Tatum. If you want to batch mint on ERC-721 contract which is not deployed via Tatum API, your smart contract must contain this method:

mintMultiple(address[] to, uint256[] tokenId, string[] uri): boolean

You can use addresses specified in the bellow table to be used as a minter.

0x53e8577c4347c365e4e0da5b57a589cb6f2ab848
Chain Testnet address Mainnet Address
MATIC 0x542b9ac4945a3836fd12ad98acbc76a0c8b743f5 0xcf9e127455d28e7362380aec1b92ddee8200b295
BSC 0xc16ae5e8c985b906935a0cadf4e24f0400531883 0xcf9e127455d28e7362380aec1b92ddee8200b295
ONE 0x8906f62d40293ddca77fdf6714c3f63265deddf0 0xcf9e127455d28e7362380aec1b92ddee8200b295
ETH0x53e8577C4347C365E4e0DA5B57A589cB6f2AB848 0xcf9e127455d28e7362380aec1b92ddee8200b295
CELO 0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F 0xcf9e127455d28e7362380aec1b92ddee8200b295
KLAY 0x80d8bac9a6901698b3749fe336bbd1385c1f98f2 0xcf9e127455d28e7362380aec1b92ddee8200b295
If there are not enough coins on any testnet address, feel free to send coins there.

SecurityX-API-Key
Request
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Enum: "ETH" "MATIC" "CELO" "KCS" "ONE" "KLAY" "BSC"
to
required
Array of strings

Blockchain address to send NFT token to.

tokenId
required
Array of strings

ID of token to be created.

minter
required
string [ 43 .. 42 ] characters

Address of NFT minter, which will be used to mint the tokens. From this address, transaction fees will be deducted.

url
required
Array of strings

Metadata of the token. See https://eips.ethereum.org/EIPS/eip-721#specification for more details.

contractAddress
required
string = 42 characters

Address of NFT token

feeCurrency
string

Currency to pay for transaction gas, only valid for CELO chain.

Value: "CELO"
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 during the processing of the request.

post/v3/nft/mint/batch
Request samples
application/json
{
  • "chain": "ETH",
  • "to": [
    ],
  • "tokenId": [
    ],
  • "minter": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "feeCurrency": "CELO"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Burn an NFT

100 credits per API call on Flow
2 credits on the other blockchains

To be able to use this API on the mainnet, you must have a paid pricing plan. Tatum covers the transaction fee for you and then deducts the corresponding number of credits from your monthly credit allowance.
If you have the Free pricing plan, you can use this API only on the testnet.

Burn one NFT Token. This method destroys any NFT token from smart contract defined in contractAddress.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Celo
  • Harmony.ONE
  • Tron
  • Flow
  • Binance Smart Chain
  • Klaytn
  • Algorand
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 loss of 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
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Value: "CELO"
tokenId
required
string <= 32 characters

ID of token to be destroyed.

contractAddress
required
string = 42 characters

Address of NFT token

fromPrivateKey
required
string = 66 characters

Private key of sender address. Private key, or signature Id must be present.

nonce
number >= 0

Nonce to be set to Celo transaction. If not present, last known nonce will be used.

feeCurrency
required
string

Currency to pay for transaction gas

Enum: "CELO" "CUSD" "CEUR"
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 during the processing of the request.

post/v3/nft/burn
Request samples
application/json
{
  • "chain": "CELO",
  • "tokenId": "100000",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2",
  • "nonce": 0,
  • "feeCurrency": "CELO"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Add NFT Minter

2 credits.


Add new minter of NFT Tokens. This method adds minter permission to new minter address.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Celo
  • Harmony.ONE
  • Klaytn
  • Binance Smart Chain
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 loss of 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
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Enum: "ETH" "MATIC" "KCS" "CELO" "ONE" "KLAY" "BSC"
contractAddress
required
string = 42 characters

Address of NFT token

minter
required
string = 42 characters

Address of NFT minter

fromPrivateKey
required
string = 66 characters

Private key of sender address. Private key, or signature Id must be present.

nonce
number >= 0

Nonce to be set to Ethereum transaction. If not present, last known nonce will be used.

object

Custom defined fee. If not present, it will be calculated automatically.

gasLimit
required
string^[+]?\d+$

Gas limit for transaction in gas price.

gasPrice
required
string^[+]?\d+$

Gas price in Gwei.

feeCurrency
string

Currency to pay for transaction gas, only valid for CELO chain.

Enum: "CELO" "CUSD" "CEUR"
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 during the processing of the request.

post/v3/nft/mint/add
Request samples
application/json
{
  • "chain": "ETH",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "minter": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2",
  • "nonce": 0,
  • "fee": {
    },
  • "feeCurrency": "CELO"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Update Royalty NFT

2 credits per API call.


Update royalty cashback value for one NFT Token. This method updates the first royalty value of specific author for 1 token. If royalty value is set to 0, it will disable the royalty system for the token. Only from author's address of the royalty can change it's royalty value, not the owner of the token.

Tatum now supports NFT these blockchains:

  • Ethereum
  • Polygon (Matic)
  • Kcs (KCS)
  • Celo
  • Harmony.ONE
  • Tron
  • Binance Smart Chain
  • Klaytn
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 loss of 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
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
Request Body schema: application/json
One of:
chain
required
string

Chain to work with.

Value: "CELO"
tokenId
required
string <= 32 characters

ID of token to be updated.

cashbackValue
required
string

New royalty cashback to be set for the author of token with tokenId. If set to 0, royalty is disabled for this token.

contractAddress
required
string = 42 characters

Address of NFT token

fromPrivateKey
required
string = 66 characters

Private key of sender address. Private key, or signature Id must be present.

nonce
number >= 0

Nonce to be set to Celo transaction. If not present, last known nonce will be used.

feeCurrency
required
string

Currency to pay for transaction gas

Enum: "CELO" "CUSD" "CEUR"
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 during the processing of the request.

put/v3/nft/royalty
Request samples
application/json
{
  • "chain": "CELO",
  • "tokenId": "100000",
  • "cashbackValue": "0.1",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2",
  • "nonce": 0,
  • "feeCurrency": "CELO"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9",
  • "failed": false
}

Get NFT transactions by address

1 credit per API call.


Get NFT transactions by address. This includes incoming and outgoing transactions for the address.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "CELO" "ETH" "MATIC"
Example: CELO
address
required
string

Account address you want to get balance of

Example: 0x8ce4e40889a13971681391aad29e88efaf91f784
tokenAddress
required
string

Address of the token smart contract

Example: 0x1ce4e40889a13971681391aad29e88efaf91f784
query Parameters
pageSize
required
number [ 1 .. 50 ]

Max number of items per page is 50.

Example: pageSize=10
offset
number

Offset to obtain next page of the data.

Example: offset=0
from
number >= 0

Transactions from this block onwords will be included.

Example: from=1087623
to
number >= 0

Transactions up to this block will be included.

Example: to=1087823
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.

500

Internal server error. There was an error on the server during the processing of the request.

get/v3/nft/transaction/{chain}/{address}/{tokenAddress}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/transaction/{chain}/{address}/{tokenAddress}?pageSize=10&offset=0&from=1087623&to=1087823' \
  -H 'x-api-key: YOUR_API_KEY_HERE'
Response samples
application/json
[
  • {
    }
]

Get NFT transactions by token

1 credit per API call.


Get NFT transactions by token. This includes incoming and outgoing transactions for the token.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "CELO" "ETH" "MATIC"
Example: CELO
tokenId
required
integer >= 0

NFT Token ID

Example: 1
tokenAddress
required
string

Address of the token smart contract

Example: 0x1ce4e40889a13971681391aad29e88efaf91f784
query Parameters
pageSize
required
number [ 1 .. 50 ]

Max number of items per page is 50.

Example: pageSize=10
offset
number

Offset to obtain next page of the data.

Example: offset=0
from
number >= 0

Transactions from this block onwords will be included.

Example: from=1087623
to
number >= 0

Transactions up to this block will be included.

Example: to=1087823
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.

500

Internal server error. There was an error on the server during the processing of the request.

get/v3/nft/transaction/tokenId/{chain}/{tokenAddress}/{tokenId}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/transaction/tokenId/{chain}/{tokenAddress}/{tokenId}?pageSize=10&offset=0&from=1087623&to=1087823' \
  -H 'x-api-key: YOUR_API_KEY_HERE'
Response samples
application/json
[
  • {
    }
]

Get contract address from transactionDeprecated

1 credit per API call.


Get NFT contract address from deploy transaction. This method is deprecated, use Get contract address instead.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "ONE" "KLAY" "CELO" "TRON" "FLOW" "MATIC" "KCS" "BSC"
hash
required
string

Transaction hash

Example: 0xe6e7340394958674cdf8606936d292f565e4ecc476aaa8b258ec8a141f7c75d7
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/address/{chain}/{hash}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/address/{chain}/{hash}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json
{
  • "contractAddress": "0xc21C81ef03f98898Fb155E00C364e8a7b9D158b8"
}

Get Transaction

1 credit per API call.


Get NFT transaction by transaction hash.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "CELO" "TRON" "FLOW" "BSC"
hash
required
string

Transaction hash

Example: 0xe6e7340394958674cdf8606936d292f565e4ecc476aaa8b258ec8a141f7c75d7
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/transaction/{chain}/{hash}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/transaction/{chain}/{hash}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json
{
  • "blockHash": "0xcf2c40f475e78c7c19778e1ae999a0e371c9319b38182ea15dc94536f13f9137",
  • "status": true,
  • "blockNumber": 6470854,
  • "from": "0x81b7E08F65Bdf5648606c89998A9CC8164397647",
  • "gas": 21000,
  • "gasPrice": "1000000000",
  • "transactionHash": "0xe6e7340394958674cdf8606936d292f565e4ecc476aaa8b258ec8a141f7c75d7",
  • "input": "0x",
  • "nonce": 26836405,
  • "to": "0xbC546fa1716Ed886967cf73f40e8F2F5e623a92d",
  • "transactionIndex": 3,
  • "value": "1000000000000000000",
  • "gasUsed": 21000,
  • "cumulativeGasUsed": 314159,
  • "contractAddress": "0x81b7E08F65Bdf5648606c89998A9CC8164397647",
  • "logs": [
    ]
}

Get NFT tokens for address

1 credit per API call + 5 credits for each owned token.


Get NFTs on address. Returns all NFTs this address holds.
For Solana and Algorand, the metadata are fetched only for addresses which hold less then 50 tokens. It's possible to get metadata from the Get Metadata operation.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ALGO" "CELO" "ETH" "MATIC" "SOL"
Example: SOL
address
required
string

Account address you want to get balance of

Example: FykfMwA9WNShzPJbbb9DNXsfgDgS3XZzWiFgrVXfWoPJ
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 during the processing of the request.

get/v3/nft/address/balance/{chain}/{address}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/address/balance/{chain}/{address}' \
  -H 'x-api-key: YOUR_API_KEY_HERE'
Response samples
application/json
[
  • {
    }
]

Get NFT tokens in collection

1 credit per API call + 5 credits for each listed token.


Get all minted NFTs in the collection. Returns all NFTs this contract minted.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "CELO" "MATIC" "ETH"
Example: ETH
address
required
string

Collection address

Example: 0x80d8bac9a6901698b3749fe336bbd1385c1f98f2
query Parameters
pageSize
required
number [ 1 .. 50 ]

Max number of items per page is 50.

Example: pageSize=10
offset
number

Offset to obtain next page of the data.

Example: offset=0
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 during the processing of the request.

get/v3/nft/collection/{chain}/{address}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/collection/{chain}/{address}?pageSize=10&offset=0' \
  -H 'x-api-key: YOUR_API_KEY_HERE'
Response samples
application/json
[
  • {
    }
]

Get NFT Account balance

1 credit per API call.


Get NFTs on Account. Returns tokenIDs of tokens Account holds. This method is valid only for tokens deplyed using Tatum API - it reads data from the smart contract.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "CELO" "TRON" "FLOW" "BSC" "SOL"
address
required
string

Account address you want to get balance of

Example: 0x3223AEB8404C7525FcAA6C512f91e287AE9FfE7B
contractAddress
required
string

NFT contract address

Example: 0x94Ce79B9F001E25BBEbE7C01998A78F7B27D1326
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/balance/{chain}/{contractAddress}/{address}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/balance/{chain}/{contractAddress}/{address}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json
[
  • "10"
]

Get NFT Token Provenance Data

1 credit per API call.


Get NFT token provenance data, valid only for provenance contract.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "CELO" "BSC"
tokenId
required
string <= 32 characters

Token ID

Example: 1
contractAddress
required
string

NFT contract address

Example: 0x94Ce79B9F001E25BBEbE7C01998A78F7B27D1326
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/provenance/{chain}/{contractAddress}/{tokenId}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/provenance/{chain}/{contractAddress}/{tokenId}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json
[
  • {
    }
]

Get NFT Token Metadata

1 credit per API call.


Get NFT token metadata.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "MATIC" "KCS" "SOL" "ONE" "KLAY" "CELO" "TRON" "FLOW" "BSC"
contractAddress
required
string

NFT contract address

Example: 0x94Ce79B9F001E25BBEbE7C01998A78F7B27D1326
token
required
string <= 32 characters

Token ID, required for all except SOL

Example: 1
query Parameters
account
string

Account holding this token. FLOW only.

Example: account=0xc1b45bc27b9c61c3
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/metadata/{chain}/{contractAddress}/{token}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/metadata/{chain}/{contractAddress}/{token}?account=0xc1b45bc27b9c61c3' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json

Get NFT Token Royalty information

1 credit per API call.


Get NFT token royalty.

SecurityX-API-Key
Request
path Parameters
chain
required
string

Blockchain to work with

Enum: "ETH" "MATIC" "KCS" "SOL" "ONE" "KLAY" "CELO" "TRON" "BSC"
contractAddress
required
string

NFT contract address

Example: 0x94Ce79B9F001E25BBEbE7C01998A78F7B27D1326
token
required
string <= 32 characters

Token ID, required for all except SOL

Example: 1
header Parameters
x-testnet-type
string
Default: ethereum-ropsten

Type of Ethereum testnet. Defaults to Ropsten. Valid only for ETH invocations for testnet API Key. For mainnet API Key, this value is ignored.

Enum: "ethereum-ropsten" "ethereum-rinkeby"
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 during the processing of the request.

get/v3/nft/royalty/{chain}/{contractAddress}/{token}
Request samples
curl -i -X GET \
  'https://api-eu1.tatum.io/v3/nft/royalty/{chain}/{contractAddress}/{token}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-testnet-type: ethereum-ropsten'
Response samples
application/json
{
  • "addresses": [
    ],
  • "values": [
    ]
}