Endpoint Playground
Returns products from a Shopify collection. `sortBy` and dynamic facet-filter query params (e.g. `fit`, `canonicalColour`) only take effect for headless storefronts (`transport_mode: "ssr_embedded"`) and return an invalid-param error if supplied against a classic store, since classic Shopify storefronts have no server-side sort or filter support. `sort_by`, `min_price`, `max_price`, `product_type`, `in_stock_only`, and `option_`-prefixed params (e.g. `option_size=Small,Medium`) drive a separate, independent mechanism -- Shopify's own native Storefront Filtering collection-page feature (`transport_mode: "storefront_filtered"`) -- which works for both classic and headless stores; supplying any of these takes precedence over sortBy/dynamic facet filters.
14 Oct 2026: 40 products; 15 fields had a value in every checked item and 2 varied between items.
Sample value profiles: published_at: 2026-06-11 to 2026-09-25; price: 75 to 140, median 100; title: “Men's Dasher NZ - Anthracite (Dark Anthracite Sole)” and 39 other values.
curl 'https://api.crawlora.net/api/v1/shopify/collections/mens/products?url=https%3A%2F%2Fwww.allbirds.com&sortBy=sortLTH&sort_by=manual' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| handle (path) | string | Yes | mens | Collection handle |
| url | string | Yes | https://www.allbirds.com | Shopify storefront URL |
| page | integer | No | 1-based page, defaults to 1 | |
| limit | integer | No | Maximum products, defaults to 50 and supports up to 250 | |
| sortBy | string | No | sortLTH | SSR-fallback transport only (transport_mode ssr_embedded). Allowed values: sortLTH, sortHTL, newest. Omit for the storefront's default relevancy order. Rejected as an invalid param for classic-transport stores. |
| sort_by | string | No | manual | Storefront-filtering transport. Allowed values: manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending. Omit for the collection's own default order. |
| min_price | number | No | Storefront-filtering transport. Minimum price (inclusive), in the storefront's display currency's major unit. | |
| max_price | number | No | Storefront-filtering transport. Maximum price (inclusive), in the storefront's display currency's major unit. | |
| product_type | string | No | Storefront-filtering transport, comma-separated. Exact product-type display strings from the storefront's own Product Type facet -- see facets.product_type in an unfiltered response for the live value set. | |
| in_stock_only | boolean | No | Storefront-filtering transport. true restricts to currently in-stock items only. | |
| option_size | string | No | Storefront-filtering transport. Example dynamic variant-option filter: comma-separated exact display values for the storefront's own size option (e.g. option_size=Small,Medium). Any variant option name is accepted the same way (option_color, ...) -- see facets in an unfiltered response for the live option names/values per store. |
{
"code": 200,
"msg": "OK",
"data": {
"store_url": "https://www.allbirds.com",
"source_url": "https://www.allbirds.com",
"collection": "mens",
"page": 1,
"limit": 2,
"products": [
{
"handle": "mens-dasher-nz-ochre",
"title": "Men's Tree Dasher 2",
"price": 135
}
]
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.