Skip to main content
Sell-specific behavior on top of quote-then-execute. Quotes expire in 60 seconds. Pass the quote total as expectedTotal so the live payout cannot go down.
Quotes and execute require stytch_admin. Payout methods require stytch_member. See Authentication.

Items

Up to 50 items. Either an offer id or product + variant (Pure matches the best live offers). Offer ids must be unique.
Refresh with GET /execution/v2/sell/quotes/:quoteId. Repeat selectedOptionalIds as query params — do not comma-join ids.

Optionals and fees

Built-in sell optionals are instant_payout and overnight_label. Fees are negative (they reduce payout). On execute, pass expectedOptionalFees from the quote:
If a fee drifted, you get 422 optional_fee_mismatch. Refresh and retry. Eligibility: Optionals.

Listing conflicts

If you also have active listings for the same products, call GET /execution/v2/sell/quotes/:quoteId/listing-conflicts before execute. At execute:
  • adjustListings: true — decrement those listings
  • confirmListingMismatch: true — continue when sell qty is less than listed qty
Conflicts return 409 listing_quantity_mismatch or listing_validation_failed.

Payout methods

Returns payoutMethod (electronic_check, teller_ach, or wire_transfer), e-check payee fields, and instant-payout credit (creditLimit, outstandingBalance, availableCredit). Check credit before selecting instant_payout. promotionCode applies at execute; preview on POST .../promotion-preview.

After execute

orderId from execute is a purchase order. That is Pure buying from you — not a sale-order row. Poll GET /orders/get-purchase-order/v1?id={orderId} for shippingLabelUrl. The URL is null until fulfillment generates the label. Execute does not wait for it, and there is no SLA of 10–15 minutes.

Endpoints

Errors: Execution errors. Sandbox: Sandbox.