---
title: "Sell an asset on the NFT marketplace"
method: POST
path: "/v3/blockchain/marketplace/listing/sell"
tags: ["Marketplace"]
---

# Sell an asset on the NFT marketplace

`POST /v3/blockchain/marketplace/listing/sell`

## Request

- Base URL: `https://api.tatum.io`
- URL: `https://api.tatum.io/v3/blockchain/marketplace/listing/sell`
- Auth: API key in header `x-api-key`

/v3/blockchain/marketplace/listing/sell

**2 credits per API call**

Create a new listing for an asset on the NFT marketplace. The listing can be offered for the native blockchain assets (for example, ETH, MATIC, and so on) or for any fungible tokens.

After the listing is created, [allow the marketplace smart contract to transfer the asset that you are selling](https://apidoc.tatum.io/tag/Auction#operation/ApproveNftAuctionSpending).

You can create a listing only for an existing asset that you own (you must be the owner of the asset).

This API is supported for the following blockchains:

*   BNB Smart Chain
*   Celo
*   Ethereum
*   Harmony
*   Klaytn
*   Polygon
*   Solana (in **alpha**)

**A known issue on Harmony**  
On Harmony, when you are viewing a transaction in the Harmony Blockchain Explorer, the transaction status may be displayed as the following:  
`Error reverted:x0`  
This is a known issue with the Harmony Blockchain Explorer. This status does not mean that the transaction failed. You can safely ignore it.

**The "execution reverted" message**  
When making this API call, you may get the following message:  
`Although one or more Error Occurred [execution reverted] Contract Execution Completed`  
This message is a result of the marketplace version check and has no impact on completing the API call. You can safely ignore it.

**Signing a transaction**  
When creating a new listing on the NFT marketplace, 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)](https://github.com/tatumio/tatum-kms) and provide the signature ID instead of the private key in the API. Alternatively, you can use the [Tatum JavaScript client](https://github.com/tatumio/tatum-js/tree/v2).

## Request body

- union
  - SellAssetOnMarketplace
    - `chain` 'ETH' | 'ONE' | 'BSC' | 'KLAY' | 'MATIC', required: Blockchain to work with.
    - `contractAddress` string, required: Address of the marketplace smart contract.
    - `nftAddress` string, required: Address of the NFT asset to sell smart contract.
    - `seller` string, required: Address of the seller of the NFT asset.
    - `erc20Address` string: Optional address of the ERC20 token, which will be used as a selling currency of the NFT.
    - `listingId` string, required: ID of the listing. It's up to the developer to generate unique ID
    - `amount` string: Amount of the assets to be sent. For ERC-721 tokens, enter amount only in case of native currency cashback. In case of ERC-1155 this field is required and must be greater than 0
    - `tokenId` string, required: ID of token, if transaction is for ERC-721 or ERC-1155.
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `isErc721` boolean, required: True if asset is NFT of type ERC721, false if ERC1155.
    - `fromPrivateKey` string, required: The private key of the seller's blockchain address
    - `nonce` number: The nonce to be set to the transaction; if not present, the last known nonce will be used
    - `fee` object: Custom defined fee. If not present, it will be calculated automatically.
      - `gasLimit` string, required: Gas limit for transaction in gas price.
      - `gasPrice` string, required: Gas price in Gwei.
  - SellAssetOnMarketplaceKMS
    - `chain` 'ETH' | 'ONE' | 'BSC' | 'KLAY' | 'MATIC', required: Blockchain to work with.
    - `contractAddress` string, required: Address of the marketplace smart contract.
    - `nftAddress` string, required: Address of the NFT asset to sell smart contract.
    - `seller` string, required: Address of the seller of the NFT asset.
    - `erc20Address` string: Optional address of the ERC20 token, which will be used as a selling currency of the NFT.
    - `listingId` string, required: ID of the listing. It's up to the developer to generate unique ID
    - `amount` string: Amount of the assets to be sent. For ERC-721 tokens, enter amount only in case of natiev currency cashback.
    - `tokenId` string, required: ID of token, if transaction is for ERC-721 or ERC-1155.
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `isErc721` boolean, required: True if asset is NFT of type ERC721, false if ERC1155.
    - `signatureId` string, uuid, required: The KMS identifier of the private key of the seller's blockchain address
    - `index` number: If signatureId is mnemonic-based, this is the index to the specific address from that mnemonic.
    - `nonce` number: The nonce to be set to the transaction; if not present, the last known nonce will be used
    - `fee` object: Custom defined fee. If not present, it will be calculated automatically.
      - `gasLimit` string, required: Gas limit for transaction in gas price.
      - `gasPrice` string, required: Gas price in Gwei.
  - SellAssetOnMarketplaceCelo
    - `chain` 'CELO', required: Blockchain to work with.
    - `feeCurrency` 'CELO' | 'CUSD' | 'CEUR', required: The currency in which the transaction fee will be paid
    - `contractAddress` string, required: Address of the marketplace smart contract.
    - `nftAddress` string, required: Address of the NFT asset to sell smart contract.
    - `seller` string, required: Address of the seller of the NFT asset.
    - `erc20Address` string: Optional address of the ERC20 token, which will be used as a selling currency of the NFT.
    - `listingId` string, required: ID of the listing. It's up to the developer to generate unique ID
    - `amount` string: Amount of the assets to be sent. For ERC-721 tokens, enter amount only in case of native currency cashback.
    - `tokenId` string, required: ID of token, if transaction is for ERC-721 or ERC-1155.
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `isErc721` boolean, required: True if asset is NFT of type ERC721, false if ERC1155.
    - `fromPrivateKey` string, required: The private key of the seller's blockchain address
    - `nonce` number: The nonce to be set to the transaction; if not present, the last known nonce will be used
    - `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
  - SellAssetOnMarketplaceCeloKMS
    - `chain` 'CELO', required: Blockchain to work with.
    - `feeCurrency` 'CELO' | 'CUSD' | 'CEUR', required: The currency in which the transaction fee will be paid
    - `contractAddress` string, required: Address of the marketplace smart contract.
    - `nftAddress` string, required: Address of the NFT asset to sell smart contract.
    - `seller` string, required: Address of the seller of the NFT asset.
    - `erc20Address` string: Optional address of the ERC20 token, which will be used as a selling currency of the NFT.
    - `listingId` string, required: ID of the listing. It's up to the developer to generate unique ID
    - `amount` string: Amount of the assets to be sent. For ERC-721 tokens, enter amount only in case of natiev currency cashback.
    - `tokenId` string, required: ID of token, if transaction is for ERC-721 or ERC-1155.
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `isErc721` boolean, required: True if asset is NFT of type ERC721, false if ERC1155.
    - `signatureId` string, uuid, required: The KMS identifier of the private key of the seller's blockchain address
    - `index` number: If signatureId is mnemonic-based, this is the index to the specific address from that mnemonic.
    - `nonce` number: The nonce to be set to the transaction; if not present, the last known nonce will be used
    - `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
  - SellAssetOnMarketplaceSolana
    - `chain` 'SOL', required: Blockchain to work with.
    - `contractAddress` string, required: Blockchain address of the smart contract
    - `nftAddress` string, required: Blockchain address of the asset to sell
    - `from` string, required: Blockchain address of the seller
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `authorityPrivateKey` string: The private key used for signing transactions as authority; required if <code>requiresSignOff</code> is set to "true" for the marketplace
    - `fromPrivateKey` string, required: The private key of the seller
  - SellAssetOnMarketplaceSolanaKMS
    - `chain` 'SOL', required: Blockchain to work with.
    - `contractAddress` string, required: Blockchain address of the smart contract
    - `nftAddress` string, required: Blockchain address of the asset to sell
    - `from` string, required: Blockchain address of the seller
    - `price` string, required: Price of the asset to sell. Marketplace fee will be obtained on top of this price.
    - `authoritySignatureId` string, uuid: The KMS identifier of the private key used for signing transactions as authority; required if <code>requiresSignOff</code> is set to "true" for the marketplace
    - `signatureId` string, uuid, required: The KMS identifier of the private key of the seller

## 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.
  - SolanaMarketplaceSellTransactionHash
    - `txId` string, required: The hash (ID) of the transaction
    - `listingId` string, required: The ID of the listing

## 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)
