Paper 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.
Paper currently does not support escrowed auctions where funds are sent to the auction contract for each bid.
- Your backend keeps track of bids (user wallet, bid amount in crypto).
- You register your contract with Paper.
- Your contract has a method that follows the custom contract requirements. It must allow Paper 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.
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 an SDK Client Secret and set
- Pass the SDK client secret to render the CheckoutWithCard 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 for the
payment:hold_createdwebhook 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 Paper.
- 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, Paper will mint and transfer the NFT to the buyer's wallet similar to a standard checkout flow.
- (Optional) Cancel other bidders' transaction holds to release the hold on their card. Any holds are automatically released after 7 days.
- Auctions are not suited for NFTs that are not yet minted. Consider using Shareable Checkout Links for NFT drops.
- Looking for tools to set up your marketplace? Check out Reservoir, thirdweb marketplace, or 0x's NFT Swap SDK.