Shopify Store API — Collections and Products
Documentation menu
FetchLayer FetchLayer API

List collections, or one collection's products

See how a store organizes its catalog, or read one of those groups. Without collection, this returns the store's collections with their titles, handles, descriptions, images and product counts. With a collection URL or handle, it returns that collection's products in the same full shape /products returns. Both forms page with pages and cursor. A collection's reported productCount is the store's own number and can exceed what the collection actually returns.

POST /collections Catalog
https://api.fetchlayer.dev/shopify-stores/collections
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

store string required

Store domain, or any URL on the store — for example example.com, https://example.com/products/foo, or a myshopify.com domain.

collection string optional

Collection URL or handle. Omit to list the store's collections; supply it to get that collection's products.

limit number optional

Maximum items returned (max 2000), or -1 for everything available. (default: 30)

pages number optional

Pages of results to collect in one request (max 40), or -1 for the maximum allowed. Each page counts as one request.

cursor string optional

Resume from a previous response's nextCursor.

format string optional

json or markdown. Markdown returns the same result rendered for a model to read. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 120000).

Response Fields

collections

List collections, or one collection's products

requestedUrl string

The store URL this result corresponds to.

scrapedAt string

When the store was read, as an ISO timestamp.

transport string

Always shopify-storefront — the upstream source this data came from.

notes string[]

Caveats about this specific result: a truncated walk, an upstream limit, or a field this store does not publish. Read it before treating a result as complete.

pagesScraped number

Pages actually collected. Each page counts as one request against your plan.

pagesRequested number

Pages the request asked for.

nextCursor string

Pass back as cursor to continue, or null when the listing is exhausted.

hasNextPage boolean

Whether more results are available beyond this response.

resultType string

Always collection-list.

domain string

The store the result came from.

collections object[]

The store's collections, each with id, handle, title, collectionUrl, description, descriptionHtml, imageUrl, productCount and timestamps. Empty when one collection was requested.

collectionCount number

Number of collections in this response.

collection object

The collection the products below belong to, when one was requested. Null when listing collections.

products object[]

The products, in the order the store publishes them.

products[].id string

The product's id on the store.

products[].handle string

The product's identifier in its store URL — what product-detail takes.

products[].title string

Product title.

products[].productUrl string

Canonical product page URL on the store.

products[].vendor string

Vendor or brand the store attributes the product to.

products[].productType string

The store's own product type for this item.

products[].tags string[]

Merchandising tags, often the store's internal taxonomy.

products[].description string

Description as plain text; descriptionHtml carries the original markup.

products[].publishedAt string

When the product was published, and createdAt / updatedAt alongside it.

products[].images object[]

Every image, each with url, downloadUrl, width, height, position, altText and the variants it belongs to.

products[].options object[]

The choices a buyer makes — for example Size and the sizes available.

products[].variants object[]

Every buyable version, with price, compareAtPrice, sku, barcode, optionValues, grams, requiresShipping, taxable and available.

products[].variants[].inventoryQuantity number

Units on hand. Published only by product-detail, and only by stores that track inventory.

products[].variantsTruncated boolean

True when the product has more variants than the store publishes; the first 250 are returned.

products[].priceMin string

Lowest variant price, with priceMax and currency alongside it.

products[].available boolean

True when at least one variant can be bought.

products[].onSale boolean

True when at least one variant carries a compareAtPrice above its price.

productCount number

Number of products in this response. Zero when listing the store's collections.

Request

curl -X POST "https://api.fetchlayer.dev/shopify-stores/collections" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"allbirds.com","collection":"mens-shoes","limit":100}'

Response

{
  "resultType": "collection-list",
  "domain": "allbirds.com",
  "collections": [],
  "collectionCount": 0,
  "collection": {
    "handle": "mens-shoes",
    "title": "Men's Shoes",
    "productCount": 64
  },
  "productCount": 64,
  "hasNextPage": false,
  "nextCursor": null,
  "notes": []
}