> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/shopify>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/shopify.mdx>

---

# Shopify API. Public storefronts, one JSON shape.

Products, variants, collections, pages, articles, search, reviews and store details from public Shopify storefronts. Name the domain, get JSON.

- Public Shopify stores
- 25 read-only routes
- 1 credit per request

Social Fetch exposes 25 read-only routes under `/v1/shopify`, and every one starts with a `store` query: `allbirds.com`, `www.allbirds.com`, `weareallbirds.myshopify.com` or a full URL. The same account covers public Shopify storefronts without a store login or an app install. A storefront that is unavailable returns a temporary error and is not charged.

Catalogue routes cover products with variants, options, images, collections and price ranges; a single product also gets stock fields where the store exposes them. Collection routes return the store's filter facets with counts, so you can build the same category pages the store shows. Search returns products, articles and pages in one answer, with the store's own `totalCount` and facets.

Content routes cover pages, blog lists and articles with full text. Store routes cover identity and market settings, policy text, locations, navigation menus, redirects, sitemaps and pickup availability. Review routes return the product or store reviews the storefront publishes.

Every response uses the `{ data, meta }` envelope and starts with `data.lookupStatus`. A store or entity that does not exist comes back as `not_found`, a password-protected storefront as `private`, and a paused or frozen store as `restricted`, all with HTTP 200. Lists page with `page.nextCursor` and `page.hasMore`, and `meta.creditsCharged` is the billing source of truth.

## What you can get

- Products with variants, options, SKUs, barcodes, prices, images, SEO and collection membership.
- Collection lists and a single collection with its filter facets and product counts.
- Store search across products, articles and pages, plus a separate suggestion route.
- Pages and blog articles with plain text, HTML, authors, tags and comments.
- Store identity, market and payment settings, policies with full text, locations and menus.
- Sitemap index and typed child sitemaps, plus the store's redirect table.
- Product and store reviews with ratings, media and merchant replies where the store publishes them.
- Pickup availability by variant and location for one product.

## Shopify endpoints

| Endpoint | Request | Credits | Docs |
| --- | --- | --- | --- |
| Store | GET /v1/shopify/store | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/get) |
| Policies | GET /v1/shopify/store/policies | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/policies/get) |
| Locations | GET /v1/shopify/store/locations | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/locations/get) |
| Menu | GET /v1/shopify/store/menus/{handle} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/menus/handle/get) |
| Redirects | GET /v1/shopify/store/redirects | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/redirects/get) |
| Sitemap | GET /v1/shopify/store/sitemap | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/sitemap/get) |
| Products | GET /v1/shopify/products | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/get) |
| Product | GET /v1/shopify/products/{handle} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/get) |
| Recommendations | GET /v1/shopify/products/{handle}/recommendations | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/recommendations/get) |
| Products by handle | GET /v1/shopify/products/batch | 1 credit per product handle Up to 25 handles per request Max 25 credits A handle the store does not know is still charged Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/batch/get) |
| Metafields | GET /v1/shopify/products/{handle}/metafields | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/metafields/get) |
| Pickup availability | GET /v1/shopify/products/{handle}/availability | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/availability/get) |
| Collections | GET /v1/shopify/collections | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/collections/get) |
| Collection | GET /v1/shopify/collections/{handle} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/collections/handle/get) |
| Collection products | GET /v1/shopify/collections/{handle}/products | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/collections/handle/products/get) |
| Search | GET /v1/shopify/search | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/search/get) |
| Suggestions | GET /v1/shopify/search/suggest | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/search/suggest/get) |
| Pages | GET /v1/shopify/pages | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/pages/get) |
| Page | GET /v1/shopify/pages/{handle} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/pages/handle/get) |
| Blogs | GET /v1/shopify/blogs | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/blogs/get) |
| Articles | GET /v1/shopify/blogs/{blogHandle}/articles | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/blogs/bloghandle/articles/get) |
| Article | GET /v1/shopify/blogs/{blogHandle}/articles/{handle} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/blogs/bloghandle/articles/handle/get) |
| Reviews | GET /v1/shopify/products/{handle}/reviews | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/reviews/get) |
| Review summary | GET /v1/shopify/products/{handle}/reviews/summary | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/products/handle/reviews/summary/get) |
| Store reviews | GET /v1/shopify/store/reviews | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/shopify/store/reviews/get) |

## How to start

1. **Create an API key.** Sign up at Social Fetch and copy a key (`sfk_…`). New accounts get 100 free credits, enough to try every Shopify route on a few stores.
2. **Pick a store and route.** Use the store's domain, for example `GET /v1/shopify/products?store=allbirds.com` or `GET /v1/shopify/products/mens-wool-runners?store=allbirds.com`. Send `x-api-key` on every request.
3. **Branch, page and bill.** Check `data.lookupStatus` before storing a row, keep requesting with `page.nextCursor` while `page.hasMore` is true, and bill from `meta.creditsCharged`.

## Pricing

Most Shopify routes charge 1 credit per completed request, and the product batch route charges one credit for each requested handle, up to 25. Each page of a list is its own request. Credits never expire on pay-as-you-go packs, and `meta.creditsCharged` on every response is the billing source of truth.

## Compared with the official API

Shopify's own Admin API is built for the store's owner: it needs an app, credentials and permissions on that store. Social Fetch returns public storefront data instead, so you can start with a domain and no merchant setup. The trade is scope: the Admin API can read private store data, while these routes return what the public storefront publishes, and some fields are null when the store does not expose them.

## FAQ

### Is there a Shopify API for public storefront data?

Yes. Social Fetch has 25 Shopify routes under /v1/shopify for products, variants, collections, search, suggestions, pages, blogs, articles, reviews, pickup availability and store details. Authenticate with your Social Fetch API key in x-api-key.

### How do I name the store?

Pass the domain as store: allbirds.com, www.allbirds.com, weareallbirds.myshopify.com or a full URL. A full URL is reduced to its host. Only public storefront hosts are accepted.

### What does lookupStatus mean?

found means the lookup succeeded. not_found means the store or entity does not exist or is not a Shopify store. private means the storefront is password-protected. restricted means it is paused or frozen. HTTP 200 only means the request finished, so branch on lookupStatus.

### How do I page through a large catalogue?

Read data.page.hasMore and pass data.page.nextCursor back as cursor with the same filters. Lists also return truncated when they stop at the 25,000-item list limit; narrow the range with createdBefore or createdAfter to reach the rest.

### What does a product response include?

On found, product carries id, handle, title, vendor, product type, tags, description, options, variants, images, media, collections, SEO, price range and compare-at range. variants include SKU, barcode, options, weight, price and an image. inventoryQuantity and inventoryPolicy are filled only when the store exposes them; stockAvailable false means the fields are null for that answer, not that stock is zero.

### Can I get product reviews and store reviews?

The review routes return the reviews the storefront publishes through its review widget. When the store has no supported widget, reviewsAvailable is false and reviews is empty. A store that mounts its widget only on product pages can still return store-wide reviews as unavailable. Review rows can belong to related products, so check each row's productHandle when you need the requested product. Sorts are requests, not guarantees: a widget that does not support a sort keeps its own order.

### Can I read metafields?

Yes, for metafields the merchant exposes to the storefront. Call GET /v1/shopify/products/{handle}/metafields and optionally pass keys such as reviews.rating or global.title_tag. An empty list means the store did not expose those fields, not that the product has none.

### Do you return stock levels and pickup availability?

Stock fields are best effort: exact inventoryQuantity, inventoryPolicy and inventoryManagement appear when the store exposes them. Pickup availability returns locations with available and pickUpTime for each variant, and the route does not require a store login.

### What if the store is password-protected or paused?

The response is still HTTP 200 with lookupStatus private or restricted and the operation's empty payload. A store that is not a Shopify store returns not_found. These are completed lookups and are billed as the operation documents; confirm every response with meta.creditsCharged.

### How much does the Shopify API cost?

Most routes charge 1 credit per completed request, and the batch route charges one credit per requested handle, up to 25. Each page is billed separately. Check meta.creditsCharged on every response. New accounts start with 100 free credits.

### Can I use the Shopify routes from agents or MCP?

Yes. Every Shopify route is a typed MCP tool and is reachable through Ask (POST /v1/ask) in plain English. Use the typed routes for production jobs.

## Related

- [Shopify Products API](https://www.socialfetch.dev/platforms/shopify/products): Catalogue products with variants, prices and images (`GET /v1/shopify/products`).
- [Shopify Product API](https://www.socialfetch.dev/platforms/shopify/products-handle): One product with variants, options and stock detail (`GET /v1/shopify/products/{handle}`).
- [Shopify Collection Products API](https://www.socialfetch.dev/platforms/shopify/collections-handle-products): Products in a collection with filters and facets (`GET /v1/shopify/collections/{handle}/products`).
- [Shopify Search API](https://www.socialfetch.dev/platforms/shopify/search): Search products, articles and pages in one store (`GET /v1/shopify/search`).
- [Shopify Article API](https://www.socialfetch.dev/platforms/shopify/blogs-bloghandle-articles-handle): One blog article with text, author and comments (`GET /v1/shopify/blogs/{blogHandle}/articles/{handle}`).
- [Ask in plain English](https://www.socialfetch.dev/ask): Route a natural-language storefront question to the matching Shopify operation.
