PristineMarketplace API endpoint
Returns products from one Pristine Marketplace (https://www.pristinemarketplace.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug (typically a player, team, or memorabilia-type collection, e.g. `pop-culture`).
/pristine-marketplace/collections/{handle}/productsThis is a brand-pinned endpoint: the storefront URL (https://www.pristinemarketplace.com) is fixed server-side, so unlike the generic /shopify/* family this wraps, there is no url request parameter. The same storefront is reachable through the generic family by passing url=https://www.pristinemarketplace.com directly.
Path parameters:
handle: required. Collection handle, such as pop-culture.Query parameters:
page: optional integer. 1-based page number. Default: 1.limit: optional integer. Maximum products to return. Default: 50; maximum: 250.Notable response behavior:
200 with an empty products array -- many of the storefront's narrow per-player/per-team collections are momentarily out of stock rather than nonexistent; a 200 with an empty array is not itself evidence the handle is wrong.404 when Shopify returns not found.products roots return upstream errors.transport_mode: "ssr_embedded", total_items, total_pages, plus additive per-product fields (colour, canonical_colour, discount_percentage, rating, rating_count, collection_tags, labels, per-variant inventory_quantity) and may include facets/facets_stats. limit is honored as an upper bound only; page size is fixed by the storefront in this mode.sortBy or facet-filter query parameters (out of scope -- use the generic /shopify/collections/{handle}/products endpoint with url set to this brand's storefront for sort/filter support). The response reuses the same shared DTO as the generic family, which carries sort/filters fields for that feature; they are always omitted here since this endpoint never populates them. sort allowed values (never actually returned by this endpoint, listed for schema completeness): sortLTH, sortHTL, newest. This brand-pinned endpoint also does not accept the generic family's sort_by/min_price/max_price/product_type/in_stock_only/option_* Storefront Filtering params (same out-of-scope reasoning -- use the generic /shopify/collections/{handle}/products endpoint with url set to this brand's storefront). The response DTO carries the matching sort_by/min_price/max_price/product_type/in_stock_only/variant_options fields for that feature; they are always omitted here since this endpoint never populates them. sort_by allowed values (never actually returned by this endpoint, listed for schema completeness): manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending.transport_mode allowed values: ssr_embedded, storefront_filtered (only ever these two values; omitted for the classic transport).
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| handle | 40 | |
| title | 40 | “21 Savage Authentic Signed American Dream CD Insert Autogra…” and 39 other values |
| url | 40 | pristinemarketplace.com |
| description | 40 | median 1,039 characters |
| vendor | 40 | Press Pass Collectibles in all 40 |
| product_type | 40 | “CDs” and 8 other values |
| published_at | 40 | 2026-10-13 |
| created_at | 40 | 2026-10-07 to 2026-10-11 |
| updated_at | 40 | 2026-10-13 |
| price | 40 | 59 to 16,579, median 159 |
| available | 40 | true in 40 of 40 |
| options | 40 | median 1 entry |
| variants | 40 | median 1 entry |
| images | 40 | median 3 entries |
| featured_image | 40 | cdn.shopify.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| handle (path) | string | Yes | Collection handle | pop-culture | |
| page | integer | No | 1 | 1-based page, defaults to 1 | 1 |
| limit | integer | No | 50 and supports up to 250 | Maximum products, 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/pristine-marketplace/collections/pop-culture/products?page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_url": "https://www.pristinemarketplace.com",
"source_url": "https://www.pristinemarketplace.com",
"collection": "pop-culture",
"page": 1,
"limit": 2,
"products": [
{
"handle": "billie-eilish-authentic-signed-framed-hit-me-hard-and-soft-album-flat-bas",
"title": "Billie Eilish Authentic Signed & Framed Hit Me Hard and Soft Album Flat BAS",
"price": 709
}
]
}
}Request schema
No body schema
Response schema
#/definitions/shopifybrands.collectionProductsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | shopify.CollectionProductsResponse | No | ||||
| data.collection | string | No | mens | Handle of the collection the products belong to. | ||
| data.facets | object | No | Facets and FacetsStats are populated when TransportMode is ssr_embedded or storefront_filtered -- see the identical fields' doc comment on ProductsResponse. | |||
| data.facets_stats | object | No | Lowest, highest and average value per numeric facet such as `price`. Present only when `transport_mode` is set. | |||
| data.filters | object | No | Facet filters applied, mapping each facet name to the values requested. Present only for headless storefronts. | |||
| data.in_stock_only | boolean | No | Whether only in-stock products were requested. Present only when `transport_mode` is `storefront_filtered`. | |||
| data.limit | integer | No | 50 | Maximum number of products returned per page. | ||
| data.max_price | number | No | Maximum price filter applied. Present only when `transport_mode` is `storefront_filtered`. | |||
| data.min_price | number | No | Minimum price filter applied. Present only when `transport_mode` is `storefront_filtered`. | |||
| data.page | integer | No | 1 | Page number returned. | ||
| data.product_type | array | No | Product types the results were filtered to. Present only when `transport_mode` is `storefront_filtered`. | |||
| data.products | array | No | Products on this page, one item per product. ProductItem record, 57 fields: available, canonical_colour, collection_tags, colour, compare_at_price, condition, created_at, description, discount_percentage, featured_image, handle, id and 14 more. Described under Pristine Marketplace Search API. | |||
| data.sort | string | No | sortLTH, sortHTL, newest | sortLTH | Sort and Filters echo back the effective sortBy/facet-filter query params that were applied, present only when transport_mode is ssr_embedded and the caller supplied at least one. Always omitted for the classic transport (which rejects them as invalid params instead). | |
| data.sort_by | string | No | manual, best-selling, title-ascending, title-descending, price-ascending, price-descending, created-ascending, created-descending | price-ascending | SortBy, MinPrice, MaxPrice, ProductType, InStockOnly, and VariantOptions echo back the effective storefront-filtering params that were applied -- see the identical fields' doc comment on ProductsResponse. | |
| 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.total_items | integer | No | 184 | TotalItems and TotalPages are populated only when TransportMode is ssr_embedded, from the storefront's own embedded search-result pagination metadata. | ||
| data.total_pages | integer | No | 4 | Total number of result pages. Present only for headless storefronts. | ||
| data.transport_mode | string | No | ssr_embedded, storefront_filtered | ssr_embedded | Set to `ssr_embedded` for headless storefronts, or `storefront_filtered` when sort, price, product type, in-stock or variant filters were applied. Omitted otherwise. | |
| data.variant_options | object | No | Variant option filters applied, mapping an option name such as `size` to the values requested. Present only when `transport_mode` is `storefront_filtered`. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/pristine-marketplace/collections/pop-culture/products?page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"