Skip to content

Update a product

API v2 is in public beta: endpoints and fields can change before general availability. See the changelog

PATCH/preorders/products

Costs 2 rate-limit points · Rate limits

Save rows of the store-wide Preorders > Products tab: link each variant to one offer or to none, and set its shipping text and quantity limit on the offers it is in.

variants is a list of up to 100 rows. A row's offer_id replaces every offer the variant is in with that one, and null takes it out of all of them, as the tab's 'Offer linked' select does; omit offer_id to leave the links. Offers that sell in selected markets only cannot be picked, and a variant in one is skipped (skipped_market_shopify_variant_ids); change those on the offer itself. offers sets this variant's shipping_text and max_count on offers it is in; shipping_text only on an offer whose shipping text is per variant, max_count (1 or more) only on an out-of-stock offer. null clears either one; a key left out is unchanged. max_count is the variant's own limit, the same field GET /preorders/products returns, so writing a read value back changes nothing. On an offer with batches on, limits are per batch: max_count (a value or null) returns 422 there, so set batch_limits on PATCH /preorders/offers/:id/products/variants/:shopify_variant_id instead. quantity_limit is read-only. inventory_policy (CONTINUE or DENY) also sets 'Continue selling' on the variants whose offer_id changed, as the save confirm's Turn on / Turn off does; omit it for 'Don't change'. Variants STOQ has not stored yet are read from Shopify. Finishes before the response.

Also searched aslink product to offermove variant to offerchange offer linkedunlink product from offerset shipping text for variantset quantity limit for variantsave products tab

Headers

  • Idempotency-Keystring

    A fresh unique key for every write (a new UUID, say); reuse it only to retry that write. Keys are remembered for 1 hour: the same key and the same request within that hour returns the first result, with Idempotent-Replayed: true, without running again; the same key with a different method, path or body is refused (422 idempotency_key_reused); a retry while the first is still running gets 409 idempotency_key_in_progress. Keys are per store. Server errors and rate limits are not kept, so their retry runs.

Request body

  • variantsstring
    Example: string
  • inventory_policystring
    Example: string

Errors

401

Missing or invalid X-Auth-Token.

409

An earlier request with the same Idempotency-Key is still running. Wait, then resend the same request with the same key.

422

The request failed validation.

429

Rate limited: cost-weighted per token (read 1, write 2; 360 points / 60s). Check Retry-After.

Every error has the same shape: see Errors.

PATCH/preorders/products
curl -X PATCH "https://app.stoqapp.com/api/v2/external/preorders/products" \
  -H "X-Auth-Token: $STOQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "variants": "string",
    "inventory_policy": "string"
  }'
Response
No body