Getting Started
Confirm a domain runs WooCommerce, then read its catalog. You pick the store — there is no single target site.
1. Get your API key
Create an account and generate a FetchLayer API key from your dashboard. Nothing is needed from the store itself: no consumer key, no consumer secret, no plugin, no permission from the shop owner beyond what it already publishes.
Create free account →2. Detect the store first
Plenty of domains look like shops and are not WooCommerce, and plenty of WooCommerce stores live on a subdomain or a path. One call settles both, and tells you which data sources the store publishes.
curl -X POST https://api.fetchlayer.dev/woocommerce-stores/detect-store \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"store":"example-shop.com"}'Tip
detection.dataSource that comes back is the source every later call will read from. catalog-api is the cheap, complete one. product-pages means the store publishes no catalog and each product has to be read from a rendered page. 3. Pull the catalog
curl -X POST https://api.fetchlayer.dev/woocommerce-stores/products \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"store":"example-shop.com","category":"outerwear","onSale":true,"orderBy":"price","limit":50}'limit is a request budget, not a target
dataSource on the response before you raise limit, and walk a large catalog with cursor instead of asking for all of it at once. 4. Read the notes
Every response carries a notes[] array. It reports truncated walks, upstream limits, and fields a particular store does not publish. A result set that is shorter than you expected is usually explained there rather than by an error, so read it before concluding a store is empty.
{
"productCount": 30,
"totalProducts": 412,
"dataSource": "product-pages",
"notes": [
"Store publishes no catalog; products read from rendered pages.",
"Walk stopped at the requested limit — 382 products remain."
]
}