Skip to content

Get products

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

GET
/preorders/reports/products
curl --request GET \
--url 'https://app.stoqapp.com/api/v2/external/preorders/reports/products?range=string&group_by=variant&from=string&to=string&sort_by=string&direction=string&page=string&per_page=string' \
--header 'X-Auth-Token: <X-Auth-Token>'

Preorder units, orders, line revenue and last order date per variant (or product), as the dashboard’s products table.

Note: Counts preorder line items only (ordinary items in a mixed cart are excluded). revenue is line revenue. group_by=product rolls variants up to their product. range=all_time is the dashboard’s All time. image_url is the variant’s stored image, else the product’s (null if none is stored).

range
null | string

Example

string
group_by
Allowed values: variant product

Example

variant
from

Example

string
to

Example

string
sort_by

Example

string
direction

Example

string
page

Example

string
per_page

Example

string

Success — example response shown.

Media typeapplication/json
object

Example

{
"window": {
"from": "2026-05-26T00:00:00Z",
"to": "2026-06-25T23:59:59Z"
},
"group_by": "variant",
"sort_by": "revenue",
"direction": "desc",
"currency": "USD",
"rows": [
{
"shopify_product_id": "gid://shopify/Product/8784906035384",
"product_title": "Classic Sneaker",
"shopify_variant_id": "gid://shopify/ProductVariant/47284734423096",
"variant_title": "Blue / Medium",
"sku": "CS-BLU-M",
"units": 64,
"orders": 58,
"revenue": "7040.00",
"last_order_date": "2026-06-25T10:02:00Z"
},
{
"shopify_product_id": "gid://shopify/Product/8784906035384",
"product_title": "Classic Sneaker",
"shopify_variant_id": "gid://shopify/ProductVariant/47284734455864",
"variant_title": "Red / Large",
"sku": "CS-RED-L",
"units": 31,
"orders": 30,
"revenue": "3410.00",
"last_order_date": "2026-06-24T18:40:00Z"
}
],
"meta": {
"total_count": 42,
"page": 1,
"per_page": 25,
"total_pages": 2
}
}

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 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