Skip to main content

Go-Live Checklist

Use this checklist before sending production marketplace traffic to SWAPS.

Keys and Auth

  • Store sk_live_ only on your backend.
  • Use pk_live_ only in widget/browser calls.
  • Generate X-Swaps-User-Signature with your widget HMAC secret.
  • Reject stale widget timestamps in your own signing endpoint before returning signatures to the browser.

Inventory and Wants

  • Load a backend inventory snapshot with POST /api/v2/partners/inventory/bulk.
  • Use mode: "merge" for chunked imports or backfills where omitted wallets must remain untouched.
  • Use default authoritative mode only when the request body is the full tenant inventory snapshot.
  • Submit specific target wants through the widget or POST /api/v2/partners/wants/bulk.
  • Confirm NFT IDs match the tenant blockchain format before launch.

Valuation and Fees

  • Configure settings.valuation with a live partner valuation strategy before Solana signing.
  • Treat bulk inventory prices as display/bootstrap data only; they are not SWAPS fee authority.
  • Verify GET /api/v2/swaps/{walletAddress} and GET /api/v2/explore/{walletAddress} show fresh partner values where configured.
  • Verify POST /api/v2/swaps/{swapId}/accept returns transaction.feeQuote for the NFT the user receives.
  • Confirm the fee quote identifies its blockchain and native SOL or ETH currency before wallet confirmation.
  • Confirm transaction.feeQuote.feeBasisPoints is 250 and transaction.completionFeeLamports matches the quoted received NFT value.
  • Confirm stale, missing, unverified, or currency-incomplete partner valuations fail before wallet signature.

User Flow

  • Embed the V2 widget script with data-api-key, data-user-id, data-user-signature, and data-user-timestamp.
  • Verify GET /api/v2/swaps/{walletAddress} returns only the wallet's visible give/get opportunities.
  • Verify GET /api/v2/explore/{walletAddress} returns For You sections without exposing internal model metadata.
  • Verify POST /api/v2/swaps/{swapId}/accept prepares the expected wallet transaction only after live valuation succeeds.
  • Submit exactly one proof to POST /api/v2/blockchain/trades/broadcast: transactionHash after an Ethereum, Base, or Solana wallet broadcast, or base64 signedTransaction for an eligible Solana approval, delegation, revoke, or refund. Include tradeId, operation, blockchain, walletAddress, and nftId where required; declare Base explicitly.

Webhooks

  • Configure the tenant webhook URL.
  • Rotate the webhook signing secret with POST /api/v2/tenant/webhooks/secret/rotate, then store the one-time response in your receiver's secret manager.
  • Plan a short verification-maintenance window: the previous secret stops working immediately, so open the receiver's secret manager first, rotate, and install the one-time secret right away.
  • Verify the hex HMAC-SHA256 in X-SWAPS-Signature or the signature field against JSON.stringify of the parsed payload after removing signature.
  • Treat webhooks as state-change notifications, then read the relevant SWAPS endpoint if your UI needs the newest state.
  • Make webhook handlers idempotent by event, payload timestamp, trade ID, and transaction hash where present. The public payload has no stable delivery ID, so do not assume retries carry a unique delivery identifier.
  • Record and test the one-time webhook-secret rotation procedure before launch.

Readiness

  • Run GET /api/v2/partners/readiness after loading inventory and wants.
  • Do not launch the integration until readiness is true or the listed recommendations are intentionally accepted.
  • Validate a revoke or failed-broadcast path before launch so users are not stuck after a wallet rejection or transferred asset.

Asset Support

  • Ethereum mounted V2 accept paths use token-scoped ERC-721 approval.
  • Solana mounted V2 accept paths support standard NonFungible assets.
  • Metaplex Core supports 2-6 participant compact settlement when every asset passes live compatibility validation.
  • pNFT support is deployment-gated and requires compatibility validation. pNFT loops with 2-5 participants also require a populated Solana address lookup table configured through SWAPS_PNFT_ALT_ADDRESS.
  • ERC-1155 is legacy surface area, not the default mounted V2 widget accept path.