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 the 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 API its own set of the blockchains. The list of the supported blockchains is provided in the API description further in this section.

Deploy an NFT smart contract

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

Deploy an NFT smart contract on the blockchain. In 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 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).

This API is supported for the following blockchains:

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

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

You can enable public minting for smart contracts. By default, public minting is disabled, which means that only the blockchain address whose private key was used to create the smart contract or the blockchain addresses added to the smart contract as NFT minters will be able to mint NFTs for 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.

NFT smart contracts and NFT Express
If you want to use NFT Express to mint NFTs on the deployed smart contract, deploy the smart contract as a general NFT smart contract.
After you have deployed the NFT smart contract, add the Tatum minter address as an NFT minter to your smart contract.

For the complete information about using NFT Express on your smart contract, see "Use your own smart contract to mint NFTs" in Mint an NFT.

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 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
header Parameters
x-testnet-type
string
Default: ethereum-sepolia

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:
chain
required
string

The blockchain to work with

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "BSC"
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 account address, from which gas for deployment of ERC721 will be paid. Private key, or signature Id must be present.

publicMint
boolean

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

nonce
number >= 0

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

object (CustomFee)

The custom defined fee; if not present, will be calculated automatically

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

The price for one gas unit (in Gwei)

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

The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price

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"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Add a blockchain address as an NFT minter to an NFT smart contract

2 credits per API call

Allow a blockchain address (the minter parameter in the request body) to mint NFTs on your NFT smart contract (the contractAddress parameter in the request body).

NOTE: Use this API only when you are using NFT Express with your own smart contract. For more information, see "Use your own smart contract to mint NFTs" in Mint an NFT.
Do not use this API in any other case.

This API is supported for the following blockchains:

  • BNB Smart Chain
  • Celo
  • Ethereum
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon

Signing a transaction
When allowing a blockchain address to mint NFTs, 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
header Parameters
x-testnet-type
string
Default: ethereum-sepolia

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:
chain
required
string

The blockchain to work with

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

The blockchain address of the NFT smart contract

minter
required
string = 42 characters

The blockchain address to add to the smart contract as an NFT minter
To find the address of the Tatum NFT minter for your blockchain, see the table in "Use your own smart contract to mint NFTs" in Mint an NFT.
This address will cover your NFT minting fees. The number of credits equivalent to the fees will be then deducted from the credit allowance of your paid pricing plan.

fromPrivateKey
required
string = 66 characters

The private key of the blockchain address that has priviledges to add an NFT minter to the NFT smart contract (the owner of the smart contract or a blockchain address that was granted such priviledges)

nonce
number >= 0

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

object (CustomFee)

The custom defined fee; if not present, will be calculated automatically

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

The price for one gas unit (in Gwei)

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

The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price

feeCurrency
string

(Celo only) The currency in which the transaction fee will be paid

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"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Mint an NFT

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

You can mint NFTs using either of the following methods:

Minting NFTs using NFT Express

NFT Express is Tatum's feature that helps you mint NFTs easier than minting natively on a blockchain.

  • You do not need to enter your private key or signature ID.
    NFT Express uses the private key provided by Tatum.
  • You do not need to hold crypto or keep addresses topped up with crypto to pay for minting transactions.
    • To use NFT Express on the mainnet, you have to have a paid pricing plan.
      Tatum covers your transaction fees for NFT minting and pays for them from its own blockchain address. Then, the fee amount paid by Tatum is converted to the number of credits, and these credits are deducted from the monthly credit allowance of your paid pricing plan.
      The transaction fees and the corresponding numbers of credits deducted from your allowance vary depending on what blockchain you mint NFTs on.
    • On the testnet, no credits are deducted from the monthly credit allowance. You can mint NFTs with NFT Express regardless of your pricing plan.

With NFT Express, you can choose whether to mint NFTs on the pre-built NFT smart contract provided by Tatum or on your own smart contract.

Use the pre-built smart contract provided by Tatum to mint NFTs

If you want to mint NFTs using the pre-built smart contract, you do not need to deploy your own NFT smart contract. You do not need to provide the address of the NFT smart contract and the token ID in the request body either. The address of the smart contract and the token ID are provided automatically by Tatum.
The token ID is autogenerated. It starts with 0 and is increased by 1 for each new NFT. The token ID is calculated separately for each supported blockchain and its mainnet and testnet.
For more information, see our user documentation.

You can mint NFTs on the pre-built smart contract provided by Tatum on the following blockchains:

  • Algorand
  • BNB Smart Chain
  • Celo
  • Ethereum
  • Harmony
  • Klaytn
  • Polygon
  • Solana

Depending on what blockchain you use, choose the request body schema to use in the API call.

  • To mint NFTs on BNB Smart Chain, Celo, Ethereum, Harmony, Klaytn, or Polygon, use this API with the MintNftExpress schema of the request body.
  • To mint NFTs on Algorand, use this API with the MintNftExpressAlgorand schema of the request body.
    To be able to burn the minted NFTs any time later, specify the address of the manager account in the manager parameter.
    An NFT minted on Algorand is automatically transferred to your blockchain address. After the NFT is minted, you have to transfer it to the recipient's address. The recipient has to agree in advance to receive your NFT because Algorand charges users for storing NFTs on their addresses, and an Algorand blockchain address by default does not receive NFTs unless explicitly agreed.
    This how it works:
    1. The recipient agrees to receive the NFT to their address.
    2. You transfer the NFT to the recipient's address (use the transferNftAlgoExpress schema of the request body).
      NOTE: On the mainnet, Tatum covers your transaction fees for the NFT transfer and pays for them from its own blockchain address. Then, the fee amount paid by Tatum is converted to the number of credits, and these credits are deducted from the monthly credit allowance of your paid pricing plan. On the testnet, no credits are deducted from the monthly credit allowance.
  • To mint NFTs on Solana, use this API with the MintNftExpressSolana schema of the request body.
    Solana uses the Metaplex Protocol, a smart contract and metadata standard for creating and working with NFTs. When you mint an NFT on Solana with NFT Express, the pre-built smart contract based on the Metaplex Protocol is used.
    When an NFT is minted on Solana, a new blockchain address is created to receive the NFT under the recipient's account address (the one in the to parameter of the request body). This address is returned in the nftAccountAddress parameter in the response body, is owned by the recipient's address, and has the same private key.
    The response body also returns the address of the minted NFT itself, which is held in the nftAddress parameter.

Use your own smart contract to mint NFTs

If you want to mint NFTs using your own smart contract, you are going to use an NTF minter, a special blockchain address provided by Tatum that will cover the minting fees. The number of credits equivalent to the fees will be then deducted from the monthly credit allowance of your paid pricing plan.

For more information, see our user documentation and the article in the Tatum blog.

You can mint NFTs on your own smart contract on the following blockchains:

  • BNB Smart Chain
  • Celo
  • Ethereum
  • Harmony
  • Klaytn
  • Polygon

To mint NFTs using your own smart contract, do the following:

  1. In the table located under this section, find the blockchain address of the Tatum NFT minter for your blockchain and network (mainnet or testnet).
  2. Add the minter address as an NFT minter to your smart contract.
  3. Use this API with the MintNftMinter schema of the request body.
    In the request body, enter the following information:
    • chain is the blockchain that you use.
    • to is the blockchain address where to send the minted NFT to.
    • url is the URL of the NFT metadata.
    • minter is the address of the NFT minter that you found in Step 1.
    • contractAddress is the address of your NFT smart contract.
    • tokenId is the the token ID of the NFT.
      For example:
      {
        "chain": "CELO",
        "to": "0x8ce4e40889a13971681391aad29e88efaf91f784",
        "url": "ipfs://QmXJJ6UF5WkF4WTJvsdhiA1etGwBLfpva7Vr9AudGMe3pj",
        "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
        "tokenId": "0123",
        "minter": "0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F"
      }
      
      When you make an API call with this request body, the private key of the NFT minter will be added to the request body automatically:
      {
        "chain": "CELO",
        "to": "0x8ce4e40889a13971681391aad29e88efaf91f784",
        "url": "ipfs://QmXJJ6UF5WkF4WTJvsdhiA1etGwBLfpva7Vr9AudGMe3pj",
        "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
        "tokenId": "0123",
        "minter": "0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F",
        "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2"
      }
      

The following table lists the blockchain addresses of the Tatum NFT minters for the testnet and mainnet of the supported blockchains:

Blockchain Minter address - testnet* Minter address - mainnet**
BNB Smart Chain 0xc16ae5e8c985b906935a0cadf4e24f0400531883 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94
Celo 0xBC2eBA680EE50d685cc4Fe65f102AA70AfB27D3F 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94
Ethereum 0x53e8577C4347C365E4e0DA5B57A589cB6f2AB848 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94
Harmony 0x8906f62d40293ddca77fdf6714c3f63265deddf0 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94
Klaytn 0x80d8bac9a6901698b3749fe336bbd1385c1f98f2 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94
Polygon 0x542b9ac4945a3836fd12ad98acbc76a0c8b743f5 0x49678AAB11E001eb3cB2cBD9aA96b36DC2461A94

*If a minter blockchain address on the testnet does not have sufficient funds to cover the transaction fee, add some amount to it using a crypto faucet of the blockchain.

**To be able to use NFT Express on the mainnet, you have to have a paid pricing plan.
For Ethereum specifically, we recommend an Enterprise Plan because transaction fees on Ethereum are very high.

Minting NFTs natively on a blockchain

When minting an NFT natively on a blockchain, you are using your own 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 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.

You can mint NFTs natively on the following blockchains:

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

Depending on what blockchain you use, choose the request body schema to use in the API call.

  • To mint NFTs natively on Algorand and:
    • To sign the transaction with your private key, use this API with the MintNftAlgorand schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftAlgorandKMS schema of the request body.
      NOTE:
      • To be able to burn the minted NFTs any time later, specify the address of the manager account in the manager parameter.
      • An NFT minted on Algorand is automatically transferred to your blockchain address. After the NFT is minted, you have to transfer it to the recipient's address. The recipient has to agree in advance to receive your NFT because Algorand charges users for storing NFTs on their addresses, and an Algorand blockchain address by default does not receive NFTs unless explicitly agreed. For more information about how it works, see the section about minting NFTs on Algorand using the pre-built NFT smart contract provided by Tatum.
  • To mint NFTs natively on BNB Smart Chain, Ethereum, Harmony, Klaytn, KuCoin Community Chain, or Polygon, and:
    • To sign the transaction with your private key, use this API with the MintNft schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftKMS schema of the request body.
  • To mint NFTs natively on Celo and:
    • To sign the transaction with your private key, use this API with the MintNftCelo schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftKMSCelo schema of the request body.
  • To mint NFTs natively on Flow and:
    • To sign the transaction with your private key, use this API with the MintNftFlowPK schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftFlowMnemonic schema of the request body.
    • To sign the transaction with your wallet mnemonic, use this API the MintNftFlowKMS schema of the request body.
  • To mint NFTs natively on Solana and:
    • To sign the transaction with your private key, use this API with the MintNftSolana schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftSolanaKMS schema of the request body.
      NOTE: When an NFT is minted on Solana, a new blockchain address is created to receive the NFT under the recipient's account address. After the NFT is minted, you have to transfer it to the recipient's address. For more information about how it works, see the section about minting NFTs on Solana using the pre-built NFT smart contract provided by Tatum.
  • To mint NFTs natively on TRON and:
    • To sign the transaction with your private key, use this API with the MintNftTron schema of the request body.
    • To sign the transaction with your signature ID, use this API the MintNftKMSTron schema of the request body.
SecurityX-API-Key
Request
header Parameters
x-testnet-type
string
Default: ethereum-sepolia

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:

The MintNftExpress schema lets you mint NFTs on BNB Smart Chain, Celo, Ethereum, Harmony, Klaytn, and Polygon using NTF Express with the pre-built smart contract provided by Tatum.
For more information, see "Use the pre-built smart contract provided by Tatum to mint NFTs" in Mint an NFT.


chain
required
string

The blockchain to work with

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

The blockchain address to send the NFT to

url
required
string <= 256 characters

The URL pointing to the NFT metadata; for more information, see EIP-721

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"
}

Transfer an NFT

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

Transfer an NFT from the smart contract (the contractAddress parameter in the request body) to the specified blockchain address (the to parameter in the request body).

In one API call, you can transfer only one NFT.

This API is supported for the following blockchains:

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

For Ethereum, Celo, and BNB Smart Chain, transferring NFTs invokes the safeTransfer() method.

Transferring NFTs on Algorand

  • On Algorand, the recipient has to agree in advance to receive your NFT because Algorand charges users for storing NFTs on their addresses, and an Algorand blockchain address by default does not receive NFTs unless explicitly agreed. Before transferring an NFT, make sure that the recipient has agreed to receive the NFT to their address.
  • If you want to transfer an NFT that was minted using NFT Express, use the transferNftAlgoExpress schema of the request body.
    NOTE: On the mainnet, Tatum covers your transaction fees for the NFT transfer and pays for them from its own blockchain address. Then, the fee amount paid by Tatum is converted to the number of credits, and these credits are deducted from the monthly credit allowance of your paid pricing plan. On the testnet, no credits are deducted from the monthly credit allowance.

Transferring NFTs on Solana
If you want to transfer an NFT that was minted using NFT Express, use the transferNftSolana or transferNftSolanaKMS schema of the request body. In the request body:

  • Set the from parameter to the address that you used in the to parameter in the request body of the minting call.
  • Set the to parameter to the recipient's address.
  • Set the contractAddress parameter to the address from the nftAddress parameter returned in the response body of the minting call.
  • Set the fromPrivateKey/signatureId parameter to the private key/signature ID of the blockchain address that you specified in the from parameter.

Signing a transaction
When transferring an NFT, 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.

NOTE: This does not apply to transferring NFTs that were minted on Algorand using NFT Express (see earlier in this section).

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

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:
chain
required
string

The blockchain 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 <uint256> <= 78 characters

ID of the token.

contractAddress
required
string [ 1 .. 42 ] characters

Address of NFT token

fromPrivateKey
required
string [ 66 .. 103 ] characters

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

nonce
number

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

object (CustomFee)

The custom defined fee; if not present, will be calculated automatically

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

The price for one gas unit (in Gwei)

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

The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price

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
{
  • "chain": "ETH",
  • "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "tokenId": "123",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Mint multiple NFTs

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

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

This API is supported for the following blockchains:

  • BNB Smart Chain
  • Celo
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • TRON
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 debited in form of credits. The credits are debited 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.

Chain Testnet address Mainnet Address
MATIC 0x542b9ac4945a3836fd12ad98acbc76a0c8b743f5 0xcf9e127455d28e7362380aec1b92ddee8200b295
BSC 0xc16ae5e8c985b906935a0cadf4e24f0400531883 0xcf9e127455d28e7362380aec1b92ddee8200b295
ONE 0x8906f62d40293ddca77fdf6714c3f63265deddf0 0xcf9e127455d28e7362380aec1b92ddee8200b295
ETH 0x53e8577C4347C365E4e0DA5B57A589cB6f2AB848 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-sepolia

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:
chain
required
string

The blockchain 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 <uint256>

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

The URL pointing to the NFT metadata; for more information, see EIP-721

contractAddress
required
string = 42 characters

Address of NFT token

feeCurrency
string

(Celo only) The currency in which the transaction fee will be paid

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"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Burn an NFT

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

Destroy an NFT. Burning the NFT transfers it to an un-spendable blockchain address that no one can access.

This API is supported for the following blockchains:

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

Burning NFTs on Algorand
You can burn only the NFTs that were minted with the address of the manager account specified in the manager parameter in the minting call (see the MintNftExpressAlgorand, MintNftAlgorand, and MintNftAlgorandKMS schemas of the request body).

Signing a transaction
When burning an NFT, 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
header Parameters
x-testnet-type
string
Default: ethereum-sepolia

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

Value: "ethereum-sepolia"
Request Body schema: application/json
One of:
chain
required
string

The blockchain to work with

Enum: "ETH" "MATIC" "KCS" "ONE" "KLAY" "BSC"
tokenId
required
string <uint256> <= 78 characters

The ID of the NFT to burn

contractAddress
required
string [ 1 .. 42 ] characters

The blockchain address of the NFT to burn

fromPrivateKey
required
string [ 66 .. 103 ] characters

The private key of the blockchain address from which the fee will be deducted

nonce
number >= 0

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

object (CustomFee)

The custom defined fee; if not present, will be calculated automatically

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

The price for one gas unit (in Gwei)

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

The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price

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": "ETH",
  • "tokenId": "123",
  • "contractAddress": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  • "fromPrivateKey": "0x05e150c73f1920ec14caa1e0b6aa09940899678051a78542840c2668ce5080c2"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Verify an NFT in an NFT collection on Solana

2 credits per API call

Verify an NFT in an NFT collection on Solana. Verifying an NFT sets the Verified parameter to true for the NFT, which means that the NFT is really a part of the collection. To know more about Solana collections and verification, refer to the Solana user documentation.

The collection must be a sized collection that was introduced in Version 1.3 of the Metaplex Token Metadata program. The NFT must have been minted in this collection.

This API is supported only for Solana.

Signing a transaction
When verifying an NFT, 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:
chain
required
string

The blockchain to work with

Value: "SOL"
nftAddress
required
string [ 43 .. 44 ] characters

The blockchain address of the NFT to verify

collectionAddress
required
string [ 43 .. 44 ] characters

The blockchain address of the NFT collection where the NFT should be verified in. The collection must be a sized collection that was introduced in Version 1.3 of the Metaplex Token Metadata program.

from
required
string [ 43 .. 44 ] characters

The blockchain address of the collection verifier on behalf of whom the transaction will be originated. The transaction fee will be paid from this address.

fromPrivateKey
required
string [ 64 .. 128 ] characters

The private key of the collection verifier's address

feePayer
string [ 43 .. 44 ] characters

Address on the Solana blockchain, from which the fee will be paid for transaction. Defaults to from.

feePayerPrivateKey
string [ 128 .. 87 ] characters

Private key of the fee payer address.

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/verify
Request samples
application/json
{
  • "chain": "SOL",
  • "nftAddress": "CHw1Fy5YdbaaosLXrrxhuc3X3fpssMqDQm9XwJh9LPGe",
  • "collectionAddress": "CHw1Fy5YdbaaosLXrrxhuc3X3fpssMqDQm9XwJh9LPGe",
  • "from": "FykfMwA9WNShzPJbbb9DNXsfgDgS3XZzWiFgrVXfWoPJ",
  • "fromPrivateKey": "3abc79a31093e4cfa4a724e94a44906cbbc3a32e2f75f985a28616676a5dbaf1de8d82a7e1d0561bb0e1b729c7a9b9b1708cf2803ad0ca928a332587ace391ad"
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Get NFT transactions on a blockchain address

1 credit per API call

Get incoming and outgoing NFT transactions on a blockchain address.

This API is supported for the following blockchains:

  • Celo
  • Ethereum
  • Polygon
SecurityX-API-Key
Request
path Parameters
chain
required
string

The 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 onwards 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
Response samples
application/json
[
  • {
    }
]

Get transactions for a specific NFT

1 credit per API call

Get incoming and outgoing transactions for an NFT.

This API is supported for the following blockchains:

  • Celo
  • Ethereum
  • Polygon
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

Enum: "CELO" "ETH" "MATIC"
Example: CELO
tokenId
required
string <uint256> <= 78 characters

NFT Token ID.

Example: 123
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 onwards 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
Response samples
application/json
[
  • {
    }
]

Get an NFT transaction by its hash

1 credit per API call

Get an NFT transaction by its hash.

This API is supported for the following blockchains:

  • BNB Smart Chain
  • Celo
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • TRON
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

The hash (ID) of the NFT transaction

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

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

Value: "ethereum-sepolia"
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
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 balance of the wallet

1 credit per API call + 5 credits for each owned NFT

Get all NFTs that a blockchain address holds. The NFTs are returned grouped by the smart contracts they were minted on.

This API is supported for the following blockchains:

  • Algorand
  • BNB Smart Chain - mainnet only
  • Celo
  • Ethereum
  • Polygon
  • Solana

On Solana and Algorand, if a blockchain address holds fewer than 50 NFTs, the API also returns each NFT's metadata. If the metadata is not returned, you can obtain it using the API for getting NFT metadata.

SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

The blockchain address that you want to get the token 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
Response samples
application/json
[
  • {
    }
]

Get all NFTs from a collection

1 credit per API call + 5 credits for each listed NFT

Get all NFTs from a collection (all the NFTs that were minted on the smart contract).

This API is supported for the following blockchains:

  • Celo
  • Ethereum
  • Polygon
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

The blockchain address of the collection

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
Response samples
application/json
[
  • {
    }
]

Get the NFTs from a specific smart contract that a blockchain address holds

1 credit per API call

Get the NFTs minted on a specific smart contract (the contractAddress path parameter in the request endpoint URL) that a blockchain address holds.

NOTE: This API works only for the NFT smart contracts deployed using the Tatum smart contract API.

This API is supported for the following blockchains:

  • Algorand
  • BNB Smart Chain
  • Celo
  • Elrond
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • Solana
  • TRON
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

The blockchain address that you want to get the token balance of

Example: 0x3223AEB8404C7525FcAA6C512f91e287AE9FfE7B
contractAddress
required
string

The address of the NFT smart contract

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

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

Value: "ethereum-sepolia"
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
Response samples
application/json
{
  • "data": [
    ]
}

Get NFT metadata

1 credit per API call

Get metadata of an NFT.

This API is supported for the following blockchains:

  • Algorand
  • BNB Smart Chain
  • Celo
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • Solana
  • TRON
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

The blockchain address of the NFT to get metadata for

Example: 0x94Ce79B9F001E25BBEbE7C01998A78F7B27D1326
tokenId
required
string <uint256> <= 78 characters

The ID of the NFT to get metadata for
For Solana and ALGO put 0 since this parameter is irrelevant for those chains.

Example: 123
query Parameters
account
string

(Flow only) The account that holds the NFT

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

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

Value: "ethereum-sepolia"
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}/{tokenId}
Request samples
Response samples
application/json

Get the address of an NFT smart contract by its transaction hashDeprecated

This endpoint is deprecated. Do not use it.
Instead, use this API.


1 credit per API call

Get NFT contract address from deploy transaction.

This API is supported for the following blockchains:

  • Algorand
  • BNB Smart Chain
  • Celo
  • Ethereum
  • Flow
  • Harmony
  • Klaytn
  • KuCoin Community Chain
  • Polygon
  • TRON
SecurityX-API-Key
Request
path Parameters
chain
required
string

The blockchain to work with

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

Transaction hash

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

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

Value: "ethereum-sepolia"
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
Response samples
application/json
{
  • "contractAddress": "0xc21C81ef03f98898Fb155E00C364e8a7b9D158b8"
}