Skip to content

Get offers

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

GET
/preorders/offers/{id}
curl --request GET \
--url https://app.stoqapp.com/api/v2/external/preorders/offers/example \
--header 'X-Auth-Token: <X-Auth-Token>'

Read a preorder offer’s full representation.

id
required
string

Success — example response shown.

Media typeapplication/json
object

Example

{
"id": "gid://shopify/SellingPlan/1",
"name": "Summer Sneaker Drop",
"internal_name": "summer-2026",
"status": "active",
"created_at": "2026-06-25T10:30:45Z",
"updated_at": "2026-06-25T11:45:30Z",
"variants": {
"count": 3,
"url": "/api/v2/external/preorders/offers/1/products/variants"
},
"products": {
"source": "custom",
"custom": {
"variant_ids_sample": [
47284734423096,
47284734455864,
47284734488632
]
}
},
"widget": {
"button": {
"text": "Preorder Now",
"colors": {
"enabled": true,
"text_color": "#FFFFFF",
"background_color": "#1a1a1a"
}
},
"disclaimer": {
"enabled": true,
"text": "Expected to ship by August 2026",
"text_color": "#666666",
"background_color": "#F5F5F5",
"border_radius": "4px"
},
"badge": {
"enabled": true,
"text": "Pre-Order",
"text_color": "#FFFFFF",
"background_color": "#FF6B35"
}
},
"shipping": {
"delivery": {
"applies_to_all_products": true,
"type": "on_date",
"days": null,
"date": "2026-08-15T00:00:00Z"
},
"display": {
"show_details": true,
"shipping_text": "Ships in August 2026",
"shipping_line_item_property_enabled": true
}
},
"payments": {
"mode": "full",
"discount": {
"type": null,
"value": null
},
"options": [
{
"type": "full",
"deposit_percent": null
}
]
},
"limits": {
"per_order": {
"min": 1,
"max": 5
},
"per_customer": {
"max": 2
},
"total": {
"max": 500,
"current_count": null
},
"display": {
"show_remaining": true,
"quantity_limit_text": "Only 500 available"
}
},
"checkout": {
"terms": {
"enabled": true,
"text": "I understand this is a pre-order and will ship in August",
"disable_button_until_acknowledged": true
},
"mixed_cart": {
"allowed": false,
"error_message": "Pre-orders cannot be mixed with regular items"
},
"order_tags": {
"tags": [
"preorder",
"summer-2026"
]
}
},
"inventory": {
"provider": "stoq",
"reservation": {
"timing": "on_sale"
},
"continue_selling": {
"enabled": true,
"auto_apply_to_new_variants": true
}
},
"markets": {
"enabled": false,
"applies_to_all_markets": false,
"market_ids": []
},
"countdown": {
"enabled": true,
"mode": "to_schedule_end",
"format": "d:h:m:s",
"text": "Offer ends in"
},
"integrations": {
"pos": {
"enabled": true,
"skip_inventory_check": false
},
"b2b": {
"enabled": false
}
},
"translations": {
"default_locale": "en",
"locales": [
"en",
"fr"
],
"fields": [
"widget.button.text"
],
"translations": {
"fr": {
"widget.button.text": "Pré-commander"
}
}
},
"advanced": {
"use_shopify_selling_plan": false,
"custom_css": ".preorder-badge { font-weight: bold; }"
}
}

Missing or invalid X-Auth-Token.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"Unauthorized"
]
}

The resource does not exist for this shop, or the action path is not registered.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"Offer not found"
]
}

The request failed validation.

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"name is required"
]
}

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

Media typeapplication/json

Error envelope returned by every failed request.

object
errors
required
Array<string>

Example

{
"errors": [
"Rate limit exceeded"
]
}
Was this page helpful?

Still stuck? Ask Quinn or chat with support