---
title: "Mint multiple NFTs"
method: POST
path: "/v3/nft/mint/batch"
tags: ["NFT (ERC-721 or compatible)"]
---

# Mint multiple NFTs

`POST /v3/nft/mint/batch`

## Request

- Base URL: `https://api.tatum.io`
- URL: `https://api.tatum.io/v3/nft/mint/batch`
- Auth: API key in header `x-api-key`

/v3/nft/mint/batch

**2 credits per API call**

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
*   Harmony
*   Klaytn
*   KuCoin Community Chain
*   Polygon
*   TRON
*   Flare
*   Cronos
*   Base
*   Avalanche
*   Fantom
*   Optimism

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](https://github.com/tatumio/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":"0x3cbb48f740595ed846abb641adfcd9f04588348d",
   "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.

## Query parameters

- `testnetType` 'ethereum-sepolia' | 'flare-coston' | 'flare-coston2' | 'flare-songbird': Specifies the testnet type. The default is ethereum-sepolia for Ethereum (ETH) currency and flare-coston for Flare (FLR) currency. Valid testnet types depend on the specified currency.

## Headers

- `x-testnet-type` Schema (unresolved $ref)

## Request body

- union
  - MintMultipleNftMinter
    - `chain` 'ETH' | 'MATIC' | 'CELO' | 'KCS' | 'ONE' | 'KLAY' | 'BSC', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `minter` string, required: Address of NFT minter, which will be used to mint the tokens. From this address, transaction fees will be deducted.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `feeCurrency` 'CELO': (Celo only) The currency in which the transaction fee will be paid
  - MintMultipleNft
    - `chain` 'ETH' | 'MATIC' | 'KCS' | 'ONE' | 'KLAY' | 'BSC' | 'FLR' | 'CRO' | 'BASE' | 'AVAX' | 'OPTIMISM' | 'FTM', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `fromPrivateKey` string, required: 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
    - `erc20` string: The blockchain address of the custom fungible token
    - `fee` CustomFee: The custom defined fee; if not present, will be calculated automatically
      - `gasPrice` string, required: The price for one gas unit (in Gwei)
      - `gasLimit` string, required: The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price
  - MintMultipleNftCelo
    - `chain` 'CELO', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `fromPrivateKey` string, required: 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
    - `feeCurrency` 'CELO' | 'CUSD' | 'CEUR', required: The currency in which the transaction fee will be paid
    - `fee` CustomFee: The custom defined fee; if not present, will be calculated automatically
      - `gasPrice` string, required: The price for one gas unit (in Gwei)
      - `gasLimit` string, required: The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price
  - MintMultipleNftTron
    - `chain` 'TRON', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `fromPrivateKey` string, required: Private key of sender address. Private key, or signature Id must be present.
    - `feeLimit` number, required: The maximum amount to be paid as the transaction fee (in TRX)
  - MintMultipleNftKMS
    - `chain` 'ETH' | 'MATIC' | 'KCS' | 'ONE' | 'KLAY' | 'BSC', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `index` number: If signatureId is mnemonic-based, this is the index to the specific address from that mnemonic.
    - `signatureId` string, uuid, required: Identifier of the private key associated in signing application. 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
    - `erc20` string: The blockchain address of the custom fungible token
    - `fee` CustomFee: The custom defined fee; if not present, will be calculated automatically
      - `gasPrice` string, required: The price for one gas unit (in Gwei)
      - `gasLimit` string, required: The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price
  - MintMultipleNftKMSCelo
    - `chain` 'CELO', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `index` number: If signatureId is mnemonic-based, this is the index to the specific address from that mnemonic.
    - `signatureId` string, uuid, required: Identifier of the private key associated in signing application. 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
    - `feeCurrency` 'CELO' | 'CUSD' | 'CEUR', required: The currency in which the transaction fee will be paid
    - `fee` CustomFee: The custom defined fee; if not present, will be calculated automatically
      - `gasPrice` string, required: The price for one gas unit (in Gwei)
      - `gasLimit` string, required: The maximum number of gas units that you are willing to spend on processing the transaction at the provided gas price
  - MintMultipleNftKMSTron
    - `chain` 'TRON', required: The blockchain to work with
    - `to` string[], required: Blockchain address to send NFT token to.
    - `from` string, required: Blockchain address to perform transaction from
    - `tokenId` string[], required: ID of token to be created.
    - `url` string[], required: The URL pointing to the NFT metadata; for more information, see <a href="https://eips.ethereum.org/EIPS/eip-721#specification" target="_blank">EIP-721</a>
    - `contractAddress` string, required: Address of NFT token
    - `index` number: If signatureId is mnemonic-based, this is the index to the specific address from that mnemonic.
    - `signatureId` string, uuid, required: Identifier of the private key associated in signing application. Private key, or signature Id must be present.
    - `feeLimit` number, required: The maximum amount to be paid as the transaction fee (in TRX)

## Response `200`

OK

- union
  - TransactionHash
    - `txId` string, required: The hash (ID) of the transaction
  - SignatureId
    - `signatureId` string, uuid, required: The internal Tatum ID of the prepared transaction for Key Management Sysytem (KMS) to sign<br/>This is different from the <code>signatureId</code> parameter that you provided in the request body. The <code>signatureId</code> parameter in the request body specifies the signature ID associated with the private key in KMS.

## Other responses

- `400`: Bad Request
- `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 perform the 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.

---

[API](https://skmtc.dev/tatum/apis/smart-contracts.md) - [All operations](https://skmtc.dev/tatum/apis/smart-contracts/llms.txt) - [OpenAPI document](https://skmtc.dev/tatum/apis/smart-contracts/revisions/c0146043bb37?raw)
