Shopify Store API — Getting Started — FetchLayer Docs
Documentation menu
FetchLayer FetchLayer API

Getting Started

You supply the domain. Confirm it is a Shopify store, then read its catalog — the same two steps for every storefront on the web.

1. Get your API key

Create an account and generate a FetchLayer API key from your dashboard. There is no Shopify Partner account to register, no app to install on the store, and no per-store access token.

Create free account →

2. Confirm the domain is a Shopify store

bash
curl -X POST https://api.fetchlayer.dev/shopify-stores/detect-store \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"allbirds.com"}'

A domain that is not a Shopify store is a normal 200 with isShopify: false, not an error — so this is safe to run down a list of a thousand domains. Read the endpoints array on the response before going further: it says whether this particular store publishes its products, its collections and its metadata, and a store can switch any of them off.

Tip

A store that looks nothing like Shopify is usually still readable. Every classic storefront answers the same endpoints no matter how it has been themed, and a headless store is read at the permanentDomain its own markup reveals — pass that back as store.

3. Pull the catalog

bash
curl -X POST https://api.fetchlayer.dev/shopify-stores/products \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"allbirds.com","limit":250,"pages":5}'

Each page walked counts as one request, so pages: 5 bills as five. When hasNextPage is true, pass the response's nextCursor back as cursor to continue where you stopped.

Read the notes array

Every result carries a notes array, and it is the only place a partial answer announces itself — a walk that stopped early, an upstream limit, a field this store does not publish. An empty notes means the result is as complete as the store publishes.

4. Go deeper on one product

A catalog walk returns every variant's price, sale price, SKU and availability, but not units on hand. /product-detail is the only endpoint that returns inventoryQuantity, and only for stores that track inventory — which is what makes per-product stock tracking over time possible.

bash
curl -X POST https://api.fetchlayer.dev/shopify-stores/product-detail \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"product":"https://allbirds.com/products/mens-tree-runners"}'

Tip

Have a URL and are not sure what it points at? Send it to /resolve-url first — it tells you whether it is a product, a collection or the store, and hands back the domain, handle and variant id the other endpoints take. It touches no store and does not consume a credit.

Next steps