Update pages
API v2 is in public beta: endpoints and fields can change before general availability. See the changelog
/preorders/settings/pagesCosts 2 rate-limit points · Rate limits
Update the Preorder pages settings (Preorders > Settings > Pages): the Preorder button on the home, collection and search pages, and the collection-page badge rule. Shop-wide, not per offer. Locations and markets are PATCH /account/markets; CSS selectors are PATCH /preorders/settings/developer.
Deep partial: absent fields are unchanged; unknown keys are rejected. Returns the pages section.
Also searched asshow preorder on collection pagehide preorder on collection pageshow preorder on home pageshow preorder on search pageturn off preorder on search pageshow preorder badge if any variant is preorder
Headers
Idempotency-KeystringA 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 (422idempotency_key_reused); a retry while the first is still running gets 409idempotency_key_in_progress. Keys are per store. Server errors and rate limits are not kept, so their retry runs.
Request body
homeobjectShow 1 child attributeHide child attributes
enabledbooleanShow the Preorder button on products listed on the home page.
collectionobjectShow 2 child attributesHide child attributes
enabledbooleanShow the Preorder button on products listed on collection pages.
show_badge_if_any_variant_is_preorderbooleanShow the offer's preorder badge on a product card when any variant is on preorder, not only the variant the card shows first. The editor shows it under Collection page; it applies to every product list with the Preorder button on. The badge shows only for offers with Add badge on. Turning collection pages on does not need it: leave it out unless the merchant asks about the badge.
searchobjectShow 1 child attributeHide child attributes
enabledbooleanShow the Preorder button on products listed on search results pages.
Errors
Missing or invalid X-Auth-Token.
An earlier request with the same Idempotency-Key is still running. Wait, then resend the same request with the same key.
Invalid fields: one details entry per field error, its path the canonical section path. Nothing was saved.
Rate limited: cost-weighted per token (read 1, write 2; 360 points / 60s). Check Retry-After.
Every error has the same shape: see Errors.
curl -X PATCH "https://app.stoqapp.com/api/v2/external/preorders/settings/pages" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"home": {
"enabled": true
},
"collection": {
"enabled": true,
"show_badge_if_any_variant_is_preorder": true
},
"search": {
"enabled": true
}
}'const res = await fetch("https://app.stoqapp.com/api/v2/external/preorders/settings/pages", {
method: "PATCH",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"home": {
"enabled": true
},
"collection": {
"enabled": true,
"show_badge_if_any_variant_is_preorder": true
},
"search": {
"enabled": true
}
}),
});
const data = await res.json();import os
import requests
res = requests.patch(
"https://app.stoqapp.com/api/v2/external/preorders/settings/pages",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"home": {
"enabled": True
},
"collection": {
"enabled": True,
"show_badge_if_any_variant_is_preorder": True
},
"search": {
"enabled": True
}
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v2/external/preorders/settings/pages")
req = Net::HTTP::Patch.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
home: {
enabled: true
},
collection: {
enabled: true,
show_badge_if_any_variant_is_preorder: true
},
search: {
enabled: true
}
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"errors": [
"Invalid API key"
],
"code": "auth_invalid",
"details": [
{
"code": "auth_invalid",
"message": "Invalid API key",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"A request with this Idempotency-Key is still running"
],
"code": "idempotency_key_in_progress",
"details": [
{
"code": "idempotency_key_in_progress",
"message": "A request with this Idempotency-Key is still running",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"widget.button.text_color must be a hex color"
],
"code": "invalid_params",
"details": [
{
"code": "invalid_params",
"message": "must be a hex color",
"path": "widget.button.text_color",
"value": "blue",
"expected": {
"type": "string"
}
}
]
}{
"errors": [
"Rate limit exceeded"
],
"code": "rate_limited",
"details": [
{
"code": "rate_limited",
"message": "Rate limit exceeded",
"path": null,
"value": null,
"expected": null
}
]
}