The Orderbook supports multiple fee types—protocol fees, royalties, and marketplace fees—that are automatically distributed when trades execute.
Fee Types
| Fee | Recipient | Set By |
|---|
| Protocol Fee | Immutable | Fixed by protocol |
| Royalty Fee | NFT Creator | Set on NFT contract |
| Maker Fee | Listing marketplace | Order creator |
| Taker Fee | Filling marketplace | Order filler |
How Fees Work
When a trade executes, fees are deducted from the payment:
Sale Price: 1.00 IMX
├── Protocol Fee (2%): 0.02 IMX → Immutable
├── Royalty (5%): 0.05 IMX → Creator
├── Maker Fee (1%): 0.01 IMX → Listing Marketplace
├── Taker Fee (1%): 0.01 IMX → Filling Marketplace
└── Seller Receives: 0.91 IMX
Protocol Fee
The protocol fee is a small percentage that supports the Immutable ecosystem.
| Network | Protocol Fee |
|---|
| Mainnet | 2% |
| Testnet | 2% |
The protocol fee is non-negotiable and applies to all trades on the Orderbook.
Royalties
Royalties ensure creators earn from secondary sales. They’re set on the NFT contract and enforced by the Orderbook.
Setting Royalties
Royalties are configured when deploying your NFT contract:
// In your ERC-721 contract
function royaltyInfo(uint256 tokenId, uint256 salePrice)
external
view
returns (address receiver, uint256 royaltyAmount)
{
// 5% royalty to the creator
return (creatorAddress, (salePrice * 500) / 10000);
}
Typical Royalty Rates
| Game Type | Typical Royalty |
|---|
| Gaming items | 2-5% |
| Collectibles | 5-10% |
| Art | 5-15% |
Royalties must be implemented via the Operator Allowlist to be enforced. Collections not on the allowlist may have royalties bypassed.
Marketplace Fees
Marketplaces can add their own fees on top of protocol fees and royalties.
Maker Fees
Set by the marketplace where the order is created:
const { result } = await orderbookClient.createListing({
orderComponents: prepareListing.orderComponents,
orderHash: prepareListing.orderHash,
orderSignature: signature,
makerFees: [
{
recipientAddress: MARKETPLACE_FEE_WALLET,
amount: '10000000000000000', // 0.01 IMX flat fee
},
],
});
Taker Fees
Set by the marketplace where the order is filled:
const { actions } = await orderbookClient.fulfillOrder(
orderId,
buyerAddress,
[
{
recipientAddress: MARKETPLACE_FEE_WALLET,
amount: '10000000000000000', // 0.01 IMX flat fee
},
]
);
Percentage-Based Fees
Calculate fees as a percentage of the order value:
function calculateFee(orderAmount: string, percentageBps: number): string {
// BPS = basis points (100 bps = 1%)
const amount = BigInt(orderAmount);
const fee = (amount * BigInt(percentageBps)) / BigInt(10000);
return fee.toString();
}
// 2.5% marketplace fee
const fee = calculateFee(listing.buy.amount, 250);
const { actions } = await orderbookClient.fulfillOrder(
orderId,
buyerAddress,
[{ recipientAddress: MARKETPLACE_WALLET, amount: fee }]
);
Fee Splitting
Distribute fees to multiple recipients:
const makerFees = [
{
recipientAddress: PLATFORM_WALLET,
amount: calculateFee(price, 100), // 1% to platform
},
{
recipientAddress: AFFILIATE_WALLET,
amount: calculateFee(price, 50), // 0.5% to affiliate
},
];
await orderbookClient.createListing({
// ...
makerFees,
});
Displaying Fees to Users
Show users the fee breakdown before they trade:
interface FeeBreakdown {
protocolFee: bigint;
royalty: bigint;
makerFee: bigint;
takerFee: bigint;
sellerReceives: bigint;
}
function calculateFeeBreakdown(
salePrice: bigint,
royaltyBps: number,
makerFeeBps: number,
takerFeeBps: number
): FeeBreakdown {
const protocolFee = (salePrice * 200n) / 10000n; // 2%
const royalty = (salePrice * BigInt(royaltyBps)) / 10000n;
const makerFee = (salePrice * BigInt(makerFeeBps)) / 10000n;
const takerFee = (salePrice * BigInt(takerFeeBps)) / 10000n;
const sellerReceives = salePrice - protocolFee - royalty - makerFee;
return { protocolFee, royalty, makerFee, takerFee, sellerReceives };
}
Example UI
You're selling: Sword of Power #123
Price: 1.00 IMX
Fee Breakdown:
Protocol Fee (2%): -0.02 IMX
Creator Royalty (5%): -0.05 IMX
Marketplace Fee (1%): -0.01 IMX
─────────────────────────────────
You'll receive: 0.92 IMX
Fee Limits
| Fee Type | Maximum |
|---|
| Royalty | 10% recommended, contract-defined |
| Maker Fee | No protocol limit |
| Taker Fee | No protocol limit |
| Total Fees | Should not exceed sale price |
Keep total fees reasonable (under 15%) to maintain a healthy marketplace. High fees discourage trading.
Next Steps