Offers

An offer is a signed EIP-712 MakerOrder that represents a buyer's bid to purchase an NFT or a group of NFTs. Offers can be made on:

  1. Specific NFTs: Offering to buy a single specific token.
  2. Collections (Collection-wide): Offering to buy any NFT in a collection.
  3. Traits: Offering to buy any NFT in a collection that matches a specific trait (e.g. Background: Blue).

Offers are stored off-chain and settled on-chain when a seller accepts the offer.

Operations

OperationEndpointDescription
CreatePOST /v1/offersSubmit a new signed offer order
QueryGET /v1/offersFetch active offers on a collection or NFT
CancelDELETE /v1/offers/:orderHashCancel an active offer

EIP-712 Order Fields

Each offer is a MakerOrder struct signed by the buyer:

FieldTypeValue
isOrderAskboolAlways false for buy offers
signeraddressBuyer's wallet address
collectionaddressNFT contract address
priceuint256Price in Wei (WCRO)
tokenIduint2560 for collection/trait offers, or the specific NFT token ID
amountuint256Always 1 for ERC-721
strategyaddressResolved automatically by the builder API
currencyaddressWCRO: 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
nonceuint256Unique order nonce (use current timestamp)
startTimeuint256Offer start — Unix epoch (seconds)
endTimeuint256Offer expiration — Unix epoch (seconds)
minPercentageToAskuint256Always 8500 (85% minimum return)
paramsbytes0x or Merkle root parameter (generated automatically by builder API for trait offers)

WCRO & Approval Requirements

Because offers are signed off-chain, the buyer's wallet must hold the required WCRO (Wrapped CRO) balance and have approved the exchange contract to spend WCRO on their behalf.

The Partner API validates these requirements on-chain during offer submission:

  • WCRO Token Address: 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
  • Exchange Spender Address: 0xdFbE43b2c154B6a790158fa2696cDb32A86Efc78
  • Validation: If the buyer does not have enough WCRO balance or has not approved the exchange, the submission will be rejected with an INSUFFICIENT_BALANCE or INSUFFICIENT_ALLOWANCE error.