Update an advanced on an offer
API v2 is in public beta: endpoints and fields can change before general availability. See the changelog
/preorders/offers/{id}/advancedCosts 2 rate-limit points · Rate limits
Update any subset of the advanced settings on a preorder offer: the purchase option and the cart attributes.
Deep partial: absent fields are unchanged. Accepting terms as a cart attribute is limits terms.record_acceptance.
Also searched asedit advancedchange advanced settingsmodify advancedenable line item propertyinclude in line item propertiesadd cart propertyshow on cart linedisable line item propertyexclude from line item propertiesremove cart propertyhide from cart lineclear button text overrideremove button text overridereset button text for stateuse default button textattach to shopify selling planuse shopify selling plansresume shopify syncreattach to shopifydetach from shopify selling planstop using shopify selling plansmanage selling plan internallybypass shopify selling planset custom line item propertyset custom cart propertyset custom cart textadd custom cart text
Path parameters
idstringRequired
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
checkout_methodstringselling_plan uses a Shopify purchase option (selling plan); line_item_property runs the offer without one. line_item_property breaks Shopify-native checkout selling-plan display and third-party subscription apps, and resets what needs the purchase option: partial payment to full payment, the discount to none, and a Scheduled fulfillment status to On hold (listed in the response as also_changed). selling_plan is refused while "Move preorder items to a separate order" (shipping fulfillment.handling separate_orders) is on; turn that off first.
One ofselling_planline_item_propertycart_attributesobjectShow 3 child attributesHide child attributes
show_paymentbooleanShow payment details & savings in cart.
show_shippingbooleanShow fulfillment timeline in cart.
custom_textstringCustom attribute: free text added to every preorder cart line. Empty string or null removes it.
localestringLanguage the translated fields are written in, such as 'fr' or 'pt-BR'. Omitted: the shop's default language. Untranslated fields ignore it.
Returns
checkout_methodstringExample:selling_plancart_attributesobjectShow 3 child attributesHide child attributes
show_paymentbooleanExample:trueshow_shippingbooleanExample:truecustom_textany
Errors
Missing or invalid X-Auth-Token.
The resource does not exist for this shop, or the action path is not registered.
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/offers/73a74948-2b57-4cc3-971f-2b441828c977/advanced" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cart_attributes": {
"show_payment": true
}
}'const res = await fetch("https://app.stoqapp.com/api/v2/external/preorders/offers/73a74948-2b57-4cc3-971f-2b441828c977/advanced", {
method: "PATCH",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"cart_attributes": {
"show_payment": true
}
}),
});
const data = await res.json();import os
import requests
res = requests.patch(
"https://app.stoqapp.com/api/v2/external/preorders/offers/73a74948-2b57-4cc3-971f-2b441828c977/advanced",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"cart_attributes": {
"show_payment": True
}
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v2/external/preorders/offers/73a74948-2b57-4cc3-971f-2b441828c977/advanced")
req = Net::HTTP::Patch.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
cart_attributes: {
show_payment: true
}
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"checkout_method": "selling_plan",
"cart_attributes": {
"show_payment": true,
"show_shipping": true,
"custom_text": null
}
}{
"errors": [
"Invalid API key"
],
"code": "auth_invalid",
"details": [
{
"code": "auth_invalid",
"message": "Invalid API key",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"Offer not found"
],
"code": "not_found",
"details": [
{
"code": "not_found",
"message": "Offer not found",
"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
}
]
}