Update an integration on an offer
API v2 is in public beta: endpoints and fields can change before general availability. See the changelog
/preorders/offers/{id}/integrationsCosts 2 rate-limit points · Rate limits
Update any subset of the POS and B2B settings on a preorder offer.
Deep partial: absent fields are unchanged. This does not configure marketing or email integrations, which are shop-level.
Also searched asedit integrationschange integration settingsmodify integrationsenable posturn on posallow in posenable point of saledisable posturn off posblock from posdisable point of saleenable pos skip inventory checkskip inventory check on posbypass inventory at posallow pos sale without inventoryskip pos inventory checkdisable pos skip inventory checkenforce inventory check at posstop bypassing inventory at posenable b2bturn on b2ballow b2benable wholesaledisable b2bturn off b2bblock b2bdisable wholesaleb2b preorderswholesale preorderssell on pospos preorders
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
posobjectShow 2 child attributesHide child attributes
enable_posbooleanSell preorders on POS.
inventory_checkstringskip sells on POS without checking inventory; required keeps the inventory check.
One ofskiprequired
b2bobjectShow 1 child attributeHide child attributes
enable_b2bbooleanAllow B2B customers to place preorders on this offer.
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/integrations" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pos": {
"enable_pos": true,
"inventory_check": "skip"
},
"b2b": {
"enable_b2b": true
}
}'const res = await fetch("https://app.stoqapp.com/api/v2/external/preorders/offers/73a74948-2b57-4cc3-971f-2b441828c977/integrations", {
method: "PATCH",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"pos": {
"enable_pos": true,
"inventory_check": "skip"
},
"b2b": {
"enable_b2b": 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/integrations",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"pos": {
"enable_pos": True,
"inventory_check": "skip"
},
"b2b": {
"enable_b2b": 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/integrations")
req = Net::HTTP::Patch.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
pos: {
enable_pos: true,
inventory_check: "skip"
},
b2b: {
enable_b2b: 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": [
"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
}
]
}