Shopify API endpoint
Returns collections from a public Shopify storefront. Valid empty result pages return `200` with an empty collections array.
/shopify/collectionsQuery parameters:
url: required. Full Shopify storefront URL, using http or https. Localhost, private network, link-local, and credentialed URLs are rejected.page: optional integer. 1-based page number. Default: 1.limit: optional integer. Maximum collections to return. Default: 50; maximum: 250.Notable response behavior:
200 with an empty collections array.collections roots return upstream errors.transport_mode: "ssr_embedded", and title is a best-effort derivation from the handle (hyphens become spaces, each word title-cased) — not the storefront's real display name. products_count and other fields not available for these storefronts are omitted, never fabricated. transport_mode is omitted entirely for other stores.handle is derived from the last path segment of the collection URL and is not guaranteed unique: some storefronts nest gender/audience-scoped sub-collections under the same final segment (for example /collections/all-products/womens and /collections/legacy/womens both derive handle: "womens"). Use the item's own url to identify a specific nested collection rather than assuming handle alone round-trips through GET /shopify/collections/{handle}/products.transport_mode allowed values: ssr_embedded (only ever present, never any other value; omitted for the classic transport).
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| handle | 40 | |
| title | 40 | “$109 Tree Dashers for Outlet Discount Code” and 39 other values |
| url | 40 | allbirds.com |
| published_at | 40 | 2018-08-07 to 2026-08-12 |
| updated_at | 40 | 2026-07-08 to 2026-10-13 |
| products_count | 27 | 1 to 4,143, median 28 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Shopify storefront URL | https://www.allbirds.com | |
| page | integer | No | 1 | 1-based page, defaults to 1 | 1 |
| limit | integer | No | 50 and supports up to 250 | Maximum collections, defaults to 50 and supports up to 250 | 50 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/shopify/collections?url=https%3A%2F%2Fwww.allbirds.com&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_url": "https://www.allbirds.com",
"source_url": "https://www.allbirds.com",
"page": 1,
"limit": 2,
"collections": [
{
"id": "278435758160",
"handle": "mens",
"title": "Men",
"url": "https://www.allbirds.com/collections/mens",
"products_count": 24
}
]
}
}Request schema
No body schema
Response schema
#/definitions/shopify.collectionsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | shopify.CollectionsResponse | No | ||||
| data.collections | array | No | Collections on this page, one item per collection. | |||
| data.collections[].created_at | string | No | Time the record was created, as Shopify returns it. | |||
| data.collections[].description | string | No | Collection description as plain text. | |||
| data.collections[].handle | string | No | mens | URL slug of the collection, for example `mens`. | ||
| data.collections[].id | string | No | 278435758160 | Shopify collection id. | ||
| data.collections[].products_count | integer | No | 24 | Number of products in the collection. Omitted for headless storefronts. | ||
| data.collections[].published_at | string | No | Time the record was published, as Shopify returns it. | |||
| data.collections[].title | string | No | Men | Collection name as shown on the storefront. | ||
| data.collections[].updated_at | string | No | Time the record was last updated, as Shopify returns it. | |||
| data.collections[].url | string | No | https://www.allbirds.com/collections/mens | Storefront page URL of the collection. | ||
| data.limit | integer | No | 50 | Maximum number of collections returned per page. | ||
| data.page | integer | No | 1 | Page number returned. | ||
| data.source_url | string | No | https://www.allbirds.com | URL the data was read from. | ||
| data.store_url | string | No | https://www.allbirds.com | Base URL of the Shopify storefront that was queried. | ||
| data.transport_mode | string | No | ssr_embedded | ssr_embedded | Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise. Titles are then derived from handles. | |
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/shopify/collections?url=https%3A%2F%2Fwww.allbirds.com&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"