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-Signaturewith 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.valuationwith 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}andGET /api/v2/explore/{walletAddress}show fresh partner values where configured. - Verify
POST /api/v2/swaps/{swapId}/acceptreturnstransaction.feeQuotefor the NFT the user receives. - Confirm the fee quote identifies its
blockchainand nativeSOLorETHcurrency before wallet confirmation. - Confirm
transaction.feeQuote.feeBasisPointsis250andtransaction.completionFeeLamportsmatches 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, anddata-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}/acceptprepares the expected wallet transaction only after live valuation succeeds. - Submit exactly one proof to
POST /api/v2/blockchain/trades/broadcast:transactionHashafter an Ethereum, Base, or Solana wallet broadcast, or base64signedTransactionfor an eligible Solana approval, delegation, revoke, or refund. IncludetradeId,operation,blockchain,walletAddress, andnftIdwhere 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-Signatureor thesignaturefield againstJSON.stringifyof the parsed payload after removingsignature. - 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/readinessafter loading inventory and wants. - Do not launch the integration until readiness is
trueor 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.