NFTgate supports holding and capturing payments in separate steps, enabling you to support escrow-less auctions! This includes auctions that allow both crypto and fiat bids.
đ What is an escrow-less auction?
When a customer makes an auction bid, they pre-authorize their payment method to have funds taken but no funds are actually exchanged. When the auction ends, the auction platform captures the payment from the highest bidder and delivers the NFT to them. All other bidders’ holds are cancelled.
NFTgate currently does not support escrowed auctions where funds are sent to the auction contract for each bid.
Prerequisites
- Your backend keeps track of bids (user wallet, bid amount in crypto).
- You register your contract with NFTgate.
- Your contract has a method that follows the custom contract requirements in the Integration Guide. It must allow NFTgate to call a paid method to mint an NFT directly to a buyer’s wallet.
- Your auction must not last longer than 7 days. Many banks don’t allow holds longer than this duration.
Integration
Let’s walk through an example with an auction priced in ETH.
Accepting a bid
- On your auction page, collect the buyer’s wallet and bid amount in ETH.
- On your backend, create a Checkout SDK Intent and setÂ
capturePaymentLater: true
. - Pass the SDK client secret to render the component on your frontend.
- The buyer enters their card information.
- Upon confirming their bid, a hold for the bid amount + fees in USD equivalent is placed on their card. Their card will not be charged.
- Your backend should listen to theÂ
payment:hold_created
 webhook event and store these specific fields from the webhook response:result.id
: The transaction ID of this bid. You’ll need this capture or cancel the transaction hold later.result.valueInCurrency
: The bid amount provided.result.metadata
 (optional): Any custom metadata provided when creating the Checkout SDK intent on step 2.
Settling the auction
- When the auction ends, determine if the winning bidder made their bid with NFTgate.
- If so, capture their transaction hold to complete their purchase.
- This step attempts to capture their payment. If the bank declines the payment, the API will return an error. You may decide to contact the bidder or attempt to charge the next highest bidder.
- Upon successful payment, NFTgate will mint and transfer the NFT to the buyer’s wallet similar to a standard checkout flow.
- (Optional) Cancel all other bidders’ transaction holds to release the hold on their card. Any holds are automatically released after 7 days.
Tips
- Auctions are not suited for NFTs that are not yet minted. Consider using NFTgate’s Checkout products for NFT drops.
- Looking for tools to set up your marketplace? Check out thirdweb’s marketplace contract/SDK or 0x’s NFT Swap SDK.
đ§ Looking to integrate an escrowed auction?
Please contact [email protected] to discuss implementation of escrowed auctions.