Update a market
API v2 is in public beta: endpoints and fields can change before general availability. See the changelog
/account/marketsCosts 2 rate-limit points · Rate limits
Update how the store routes stock by market, for back in stock and preorders alike: the market setup, the market-to-location links and whether they are used, market URLs, and the single-market location filter.
Deep partial: absent fields are unchanged. links and preorder_location_filter.shopify_location_ids replace the stored list when present. Market and location ids are checked against Shopify.
Also searched aslink market to inventory locationmarket based locationssell in multiple marketspreorder market setupcount stock at specific locationspreorder location filterfilter preorder locationsuse market urls in alerts
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
market_setup_typestringExample:multiple_marketsmarket_locations_enabledbooleanExample:truemarket_urls_enabledanypreorder_location_filteranylinksarray of objectsShow 2 child attributesHide child attributes
shopify_market_idstringExample:gid://shopify/Market/12345shopify_location_idstringExample:gid://shopify/Location/67890
Returns
market_setup_typestringExample:multiple_marketsmarket_locations_enabledbooleanExample:truemarket_urls_enabledbooleanExample:falsepreorder_location_filterobjectShow 2 child attributesHide child attributes
enabledbooleanExample:falseshopify_location_idsarray of anys
linksarray of objectsShow 2 child attributesHide child attributes
shopify_market_idstringExample:gid://shopify/Market/12345shopify_location_idstringExample:gid://shopify/Location/67890
also_changedarray of strings
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.
The request failed validation.
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/account/markets" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"market_setup_type": "multiple_markets",
"market_locations_enabled": true,
"links": [
{
"shopify_market_id": "gid://shopify/Market/12345",
"shopify_location_id": "gid://shopify/Location/67890"
}
]
}'const res = await fetch("https://app.stoqapp.com/api/v2/external/account/markets", {
method: "PATCH",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"market_setup_type": "multiple_markets",
"market_locations_enabled": true,
"links": [
{
"shopify_market_id": "gid://shopify/Market/12345",
"shopify_location_id": "gid://shopify/Location/67890"
}
]
}),
});
const data = await res.json();import os
import requests
res = requests.patch(
"https://app.stoqapp.com/api/v2/external/account/markets",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"market_setup_type": "multiple_markets",
"market_locations_enabled": True,
"links": [
{
"shopify_market_id": "gid://shopify/Market/12345",
"shopify_location_id": "gid://shopify/Location/67890"
}
]
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v2/external/account/markets")
req = Net::HTTP::Patch.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
market_setup_type: "multiple_markets",
market_locations_enabled: true,
links: [
{
shopify_market_id: "gid://shopify/Market/12345",
shopify_location_id: "gid://shopify/Location/67890"
}
]
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"market_setup_type": "multiple_markets",
"market_locations_enabled": true,
"market_urls_enabled": false,
"preorder_location_filter": {
"enabled": false,
"shopify_location_ids": []
},
"links": [
{
"shopify_market_id": "gid://shopify/Market/12345",
"shopify_location_id": "gid://shopify/Location/67890"
}
],
"also_changed": [
"preorder_location_filter.enabled"
]
}{
"job_id": "job_a1b2c3",
"status_url": "/api/v2/external/jobs/job_a1b2c3"
}{
"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": [
"name is required"
],
"code": "validation_failed",
"details": [
{
"code": "validation_failed",
"message": "name is required",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"Rate limit exceeded"
],
"code": "rate_limited",
"details": [
{
"code": "rate_limited",
"message": "Rate limit exceeded",
"path": null,
"value": null,
"expected": null
}
]
}