Skip to main content

Pricing

This article will explain how the Pricing feature of the Marketplace API brings value to both web and in-game marketplaces, and describes the usage of each related endpoint.
PricingPricing
💡Who is this for?
Developers who want to offer indicative prices for the assets in their marketplace or in their player inventories.

What is Indicative Pricing?

Indicative Pricing allows players to learn valuation and market data for a particular asset without requiring the orderbook.

Players often struggle with price discovery when listing assets, which affects liquidity. By offering indicative prices based on market data such as last trade and floor price, games can provide accurate pricing tailored to their unique economic models. Ultimately, this means players can learn the value of a particular asset, without needing to study the orderbook each time.

How does Indicative Pricing work?

Indicative Pricing is powered by our Marketplace API endpoints. See below for usage information.

Why use Indicative Pricing?​

Indicative Pricing simplifies the listing process, improves liquidity and encourages players to engage more frequently in transactions, ultimately enhancing royalty fee generation.

Limitations

Only ERC-20s that are listed on CoinGecko’s Immutable ERC-20 List can be fully supported by the Indicative Pricing feature. For more information on how to get your custom ERC-20 on Immutable’s API endpoint, please reach out to your account representative.

How do I implement Indicative Pricing?

Indicative Pricing utilises 2 key endpoints described below. You can leverage each one for your specific use case:

1. Get pricing data for a list of Stack IDs

Given a particular Metadata Stack ID for a collection, get market listing and pricing details. The pricing details returned are for both floor listing and last trade.

Use cases

  • Show pricing details for a specific Metadata Stack
  • Show pricing details for a collection

Request Parameters

ParameterDescriptionRequired
chainNameString representing the name of the chain. A list of available chains can be found hereYes
contractAddressThe contract address of ERC721 contract you want to filter byYes
stackIdMetadata Stack ID to filter byYes
Pagination parametersParameters such as page_size and page_cursor that allow you to control the size and order of the data retrievedNo
quotes-for-stacks.tsView on GitHub
import { blockchainData } from '@imtbl/sdk';
import { client } from '../lib';

export async function quotesForStacks(
chainName: string,
contractAddress: string,
stackId: string[],
): Promise<blockchainData.Types.QuotesForStacksResult> {
return await client.quotesForStacks({
chainName,
contractAddress,
stackId,
});
}

Example response

{
"result": [
{
"chain": {
"id": "eip155:13372",
"name": "imtbl-zkevm-testnet"
},
"stack_id": "8d268dcf-caa3-4f85-9d09-6ac2a48a6fde",
"market_stack": {
"floor_listing": {
"listing_id": "018792C9-4AD7-8EC4-4038-9E05C598534A",
"price_details": {
"token": {
"type": "NATIVE",
"symbol": "IMX"
},
"amount": "9750000000000000000",
"fee_inclusive_amount": "9750000000000000000",
"fees": [
{
"type": "TAKER_ECOSYSTEM",
"recipient_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92233",
"amount": "1000000000000000000"
}
],
"converted_prices": {
"ETH": "0.0058079775",
"USD": "15.89"
}
},
"token_id": "1",
"contract_address": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"creator": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"amount": "1"
},
"last_trade": {
"trade_id": "4e28df8d-f65c-4c11-ba04-6a9dd47b179b",
"contract_address": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"token_id": "1",
"price_details": [
{
"token": {
"type": "NATIVE",
"symbol": "IMX"
},
"amount": "9750000000000000000",
"fee_inclusive_amount": "9750000000000000000",
"fees": [
{
"type": "TAKER_ECOSYSTEM",
"recipient_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92233",
"amount": "1000000000000000000"
}
],
"converted_prices": {
"ETH": "0.0058079775",
"USD": "15.89"
}
}
],
"amount": "1",
"created_at": "2022-08-16T17:43:26.991388Z"
}
},
"market_collection": {}
}
],
"page": {
"previous_cursor": "ewogICJ0eXBlIjogInByZXYiLAogICJpdGVtIjogewogICAgImlkIjogNjI3NTEzMCwKICAgICJjcmVhdGVkX2F0IjogIjIwMjItMDktMTNUMTc6MDQ6MTIuMDI0MTI2WiIKICB9Cn0=",
"next_cursor": "ewogICJ0eXBlIjogInByZXYiLAogICJpdGVtIjogewogICAgImlkIjogNjI3NTEzMCwKICAgICJjcmVhdGVkX2F0IjogIjIwMjItMDktMTNUMTc6MDQ6MTIuMDI0MTI2WiIKICB9Cn0="
}
}

2. Get pricing data for a list of Token IDs

Given a specific token ID, get last trade details for the asset as well as market details for its related metadata stack and collection (particularly last trade and floor listing).

Use cases

  • Create a deeper asset details page to display market and pricing data for the Token ID
  • Get the last trade for a particular asset
  • Show pricing details for an asset’s collection

Request Parameters

ParameterDescriptionRequired
chainNameString representing the name of the chain. A list of available chains can be found hereYes
contractAddressThe contract address of ERC721 contract you want to filter byYes
tokenIdAsset Token ID to filter byYes
Pagination parametersParameters such as page_size and page_cursor that allow you to control the size and order of the data retrievedNo
quotes-for-nfts.tsView on GitHub
import { blockchainData } from '@imtbl/sdk';
import { client } from '../lib';

export async function quotesForNFTs(
chainName: string,
contractAddress: string,
tokenId: string[],
): Promise<blockchainData.Types.QuotesForNFTsResult> {
return await client.quotesForNFTs({
chainName,
contractAddress,
tokenId,
});
}

Example response

{
"result": [
{
"chain": {
"id": "eip155:13372",
"name": "imtbl-zkevm-testnet"
},
"token_id": "string",
"market_stack": {
"floor_listing": {
"listing_id": "018792C9-4AD7-8EC4-4038-9E05C598534A",
"price_details": {
"token": {
"type": "NATIVE",
"symbol": "IMX"
},
"amount": "9750000000000000000",
"fee_inclusive_amount": "9750000000000000000",
"fees": [
{
"type": "TAKER_ECOSYSTEM",
"recipient_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92233",
"amount": "1000000000000000000"
}
],
"converted_prices": {
"ETH": "0.0058079775",
"USD": "15.89"
}
},
"token_id": "1",
"contract_address": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"creator": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"amount": "1"
},
"last_trade": {
"trade_id": "4e28df8d-f65c-4c11-ba04-6a9dd47b179b",
"contract_address": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"token_id": "1",
"price_details": [
{
"token": {
"type": "NATIVE",
"symbol": "IMX"
},
"amount": "9750000000000000000",
"fee_inclusive_amount": "9750000000000000000",
"fees": [
{
"type": "TAKER_ECOSYSTEM",
"recipient_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92233",
"amount": "1000000000000000000"
}
],
"converted_prices": {
"ETH": "0.0058079775",
"USD": "15.89"
}
}
],
"amount": "1",
"created_at": "2022-08-16T17:43:26.991388Z"
}
},
"market_nft": {
"last_trade": {
"trade_id": "4e28df8d-f65c-4c11-ba04-6a9dd47b179b",
"contract_address": "0xe9b00a87700f660e46b6f5deaa1232836bcc07d3",
"token_id": "1",
"price_details": [
{
"token": {
"type": "NATIVE",
"symbol": "IMX"
},
"amount": "9750000000000000000",
"fee_inclusive_amount": "9750000000000000000",
"fees": [
{
"type": "TAKER_ECOSYSTEM",
"recipient_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92233",
"amount": "1000000000000000000"
}
],
"converted_prices": {
"ETH": "0.0058079775",
"USD": "15.89"
}
}
],
"amount": "1",
"created_at": "2022-08-16T17:43:26.991388Z"
}
},
"market_collection": {}
}
],
"page": {
"previous_cursor": "ewogICJ0eXBlIjogInByZXYiLAogICJpdGVtIjogewogICAgImlkIjogNjI3NTEzMCwKICAgICJjcmVhdGVkX2F0IjogIjIwMjItMDktMTNUMTc6MDQ6MTIuMDI0MTI2WiIKICB9Cn0=",
"next_cursor": "ewogICJ0eXBlIjogInByZXYiLAogICJpdGVtIjogewogICAgImlkIjogNjI3NTEzMCwKICAgICJjcmVhdGVkX2F0IjogIjIwMjItMDktMTNUMTc6MDQ6MTIuMDI0MTI2WiIKICB9Cn0="
}
}