> **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/pages>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/shopify/pages.mdx>

---

# Shopify Pages API

Every published page on a storefront, with its body and SEO.

`GET /v1/shopify/pages?store=…` returns `data.pages`, each with `id`, `gid`, `handle`, `title`, `url`, `body`, `bodySummary`, `seo`, `createdAt` and `updatedAt`. Use `limit` and `cursor` to page.

`body` can be null for a page built from theme sections rather than editor content, while `bodySummary` still gives you the first part of the text where the store provides it.

## Request

- **Endpoint:** `GET /v1/shopify/pages`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by store
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/shopify/pages/get)
- **Platform page:** [/platforms/shopify](https://www.socialfetch.dev/platforms/shopify)

## FAQ

### Why is body null?

Some pages are built from theme sections rather than page content. The store then has no body HTML to return, but the page row still carries its title, handle and URL.

### How do I get one page?

Use GET /v1/shopify/pages/{handle} with the handle from this list.

### How do I page?

Read page.hasMore and pass page.nextCursor back as cursor with the same filters.

### How do I name the store?

The store is the domain, for example allbirds.com, www.allbirds.com or weareallbirds.myshopify.com. A full URL is reduced to its host.

### How is it billed?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.

### 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.
