Listings

A listing is a signed EIP-712 MakerOrder that represents an NFT for sale at a fixed price. Listings are stored off-chain and fulfilled on-chain by the MintpadExchange contract when a buyer executes a purchase.

Operations

OperationEndpointDescription
CreatePOST /v1/listingsSign and submit a new listing
QueryGET /v1/listingsFetch active listings with pagination
CancelDELETE /v1/listings/:orderHashCancel an active listing
UpdateCancel + CreateUpdate price or expiration

EIP-712 Order Fields

Each listing is a MakerOrder struct signed by the token owner:

FieldTypeValue
isOrderAskboolAlways true for sell listings
signeraddressOwner's wallet address
collectionaddressNFT contract address
priceuint256Price in Wei (WCRO)
tokenIduint256The NFT token ID
amountuint256Always 1 for ERC-721
strategyaddressStrategy contract address (resolved by builder API)
currencyaddressWCRO: 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
nonceuint256Unique order nonce (use current timestamp)
startTimeuint256Listing start — Unix epoch (seconds)
endTimeuint256Listing expiration — Unix epoch (seconds)
minPercentageToAskuint256Always 8500 (85% minimum return)
paramsbytesAlways 0x

ERC-721 Approval Requirement

Before requesting a signature, verify the seller has approved the exchange contract to transfer their NFT. If not, prompt them to call setApprovalForAll on the collection contract:

  • Exchange Address: 0xdFbE43b2c154B6a790158fa2696cDb32A86Efc78
  • Function: setApprovalForAll(exchangeAddress, true)
TypeScript
// ethers.js v6
const nftContract = new Contract(collectionAddress, ERC721_ABI, provider)
const isApproved = await nftContract.isApprovedForAll(sellerAddress, EXCHANGE_ADDRESS)
if (!isApproved) {
const tx = await nftContract.connect(signer).setApprovalForAll(EXCHANGE_ADDRESS, true)
await tx.wait()
}