Returns a page’s full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications.
Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400.
Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (""). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API.
Resolution order, evaluated at each project level:
The requested handle’s market match, when the project uses market-first resolution
The requested handle with the exact locale
The requested handle with the empty locale ("")
The requested handle with the legacy en-us locale
For a non-CUSTOM request with a non-empty handle, the type’s shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order
If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND.
items is a flat list. Rebuild the tree from each item’s children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults.
Bearer token: a shop API key (WEAVERSE_API_KEY), a scoped API key or a delegated MCP OAuth token; translation-unit routes also accept a project-bound translation agent token. Each operation lists the scope it requires; the scope table is in the API description.
Page handle. This is the final greedy path component and may include /; pass the exact handle from the list endpoint, e.g. blue-shirt, track-order, or pages/gift-shop. Leave empty to target a singleton type's single default page — the home page (INDEX), the /products and /collections index pages (ALL_PRODUCTS, COLLECTION_LIST), CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH. A handle is required for CUSTOM pages and for per-resource templated types (PRODUCT, COLLECTION, PAGE, BLOG, ARTICLE), whose empty handle is the shared default template.
weaverse (default): rich text returned as HTML strings — original behavior, no migration needed.
portable-text: rich text returned as structured Portable Text blocks for multi-channel rendering and AI consumption.
Equivalent to setting Accept: application/portable-text+json on the request. The query parameter takes precedence over the header when both are provided. An invalid value returns 400 INVALID_PARAMS.
Opt-in inclusion of _weaverse: { id, schemaVersion } on each Portable Text custom block so consumers can round-trip back to the original Weaverse item id. Only meaningful when format=portable-text; silently ignored otherwise. Not applicable on /theme-settings (free-form leaves have no item id to round-trip).
Only the literal string true enables this; any other value (e.g. 1, yes, false) is silently treated as false rather than returning 400 — this asymmetry vs format exists because meta was added later and is purely additive.
Opt-in server-side default resolution. When true, each item's data is completed with the component schema defaultValue for every setting the merchant never customized (the studio strips values equal to their default on save). Stored values always win; only missing keys are filled. Items whose component type has no stored schema are returned unchanged. resolved=true is an accepted alias. Only the literal string true enables this; any other value is treated as false.
Note: component schemas are keyed by type only (not per theme version) — if two themes register the same section type, the most recently synced schema's defaults apply.
The page's SEO metadata (title, description, keywords, canonicalUrl, openGraph, twitter, ...), or null when the page has none.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Weaverse","colors":{"primary":"#246aff","light":"#599aff","dark":"#1e40af"},"logo":{"light":"https://mintcdn.com/weaverse/UqDg35noNYU1xQJr/logo/light.svg?fit=max\u0026auto=format\u0026n=UqDg35noNYU1xQJr\u0026q=85\u0026s=03570de959edb471a7177f81be24d246","dark":"https://mintcdn.com/weaverse/UqDg35noNYU1xQJr/logo/dark.svg?fit=max\u0026auto=format\u0026n=UqDg35noNYU1xQJr\u0026q=85\u0026s=37c6ba54acdc2f2fec124b27d05ac379","href":"https://weaverse.io"},"favicon":"https://mintcdn.com/weaverse/EOrmVdYBR-QCAvXJ/favicon.ico?fit=max\u0026auto=format\u0026n=EOrmVdYBR-QCAvXJ\u0026q=85\u0026s=fee3d7a85f68c8b9e62d849017c3c087","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","python"]}},"navbar":{"links":[{"href":"https://weaverse.io","label":"Weaverse.io"},{"href":"https://github.com/weaverse","label":"GitHub"},{"href":"https://wvse.cc/weaverse-slack","label":"Community"}],"primary":{"type":"button","label":"Studio","href":"https://studio.weaverse.io/dashboard"}},"footer":{"socials":{"x":"https://x.com/WeaverseIO","github":"https://github.com/weaverse","slack":"https://wvse.cc/weaverse-slack"}},"seo":{"metatags":{"og:site_name":"Weaverse Docs","twitter:site":"@WeaverseIO","keywords":"Weaverse, Shopify Hydrogen, headless commerce, visual page builder, React Router, Next.js"},"organization":{"name":"Weaverse","url":"https://weaverse.io","logo":"https://docs.weaverse.io/logo/light.svg","sameAs":["https://github.com/weaverse","https://x.com/WeaverseIO","https://wvse.cc/weaverse-slack"]}},"integrations":{"posthog":{"apiKey":"phc_BnZAhY8ELZCZukEErb6ab9T7txSsMolcgGIIhMj5oSP","apiHost":"https://posthog.weaverse.io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","add-mcp","download-spec","cursor","vscode"],"display":"header"},"thumbnails":{"preset":"headline","appearance":"dark"},"metadata":{"timestamp":true},"markdown":{"instructions":["Weaverse component configuration uses `settings`. `inspector` is deprecated; never generate it.","Weaverse Hydrogen themes use React Router v7: import from `react-router`, never `react-router-dom` or `@remix-run/*`.","The current SDK is `@weaverse/hydrogen` 6 for Shopify Hydrogen 2026.10 and later. React Router themes import from `@weaverse/hydrogen/react-router`; the root `@weaverse/hydrogen` entry only exports `createSchema()`, data helpers and types.","Some examples still show 5.x imports and type names. In 6.x, `HydrogenComponentProps` is `WeaverseComponentProps` and `HydrogenComponentSchema` is `WeaverseComponentSchema`; run `npx @weaverse/cli@latest migrate v6` to convert code. Projects on Hydrogen 2026.4 or earlier stay on 5.x. Do not mix major versions.","Next.js themes use `@weaverse/next` 1.x.","For live project data (pages, theme settings, translations), use the Weaverse MCP server: https://weaverse.io/docs/developer-tools/weaverse-mcp"]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"weaverse","hasAudioNarration":false,"actualSubdomain":"weaverse","customDomains":["weaverse.io"],"gitSource":{"type":"github","owner":"weaverse","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af195982da007b7b71ce667","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Content API","count":54},{"language":"default","tag":"React Router","count":43},{"language":"default","tag":"Guides","count":42},{"language":"default","tag":"Ecosystem","count":22},{"language":"default","tag":"Next.js","count":21},{"language":"default","tag":"SDKs","count":18},{"language":"default","tag":"Drafts and publishing","count":12},{"language":"default","tag":"Hooks","count":10},{"language":"default","tag":"Help \u0026 Community","count":10},{"language":"default","tag":"Building Components","count":7}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"content-api/pages/get-page-content","slug":"/content-api/pages/get-page-content","pageMetadata":{"title":"Get page content","description":"Returns a page's full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications.\n\nUse the exact `type`, `handle` and `locale` from `GET /projects/{projectId}/pages`. Custom page handles may include `/` (for example `pages/gift-shop`, fetched at `/projects/{projectId}/pages/CUSTOM/pages/gift-shop`). Singleton types (`INDEX`, `ALL_PRODUCTS`, `COLLECTION_LIST`, `CART`, `CUSTOMER`, `NOT_FOUND`, `PASSWORD`, `SEARCH`) accept an empty handle; `CUSTOM` and the per-resource types require one. An unknown `type` returns `400`.\n\n**Always pass `locale` on localized projects.** Content is stored per locale: a page edited while a market such as `en-us` is selected in Studio is saved on the `en-us` assignment, not the base locale (`\"\"`). Without `locale` the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API.\n\nResolution order, evaluated at each project level:\n\n1. The requested handle's market match, when the project uses market-first resolution\n2. The requested handle with the exact locale\n3. The requested handle with the empty locale (`\"\"`)\n4. The requested handle with the legacy `en-us` locale\n5. For a non-`CUSTOM` request with a non-empty handle, the type's shared default template (empty handle), in the same market, exact-locale, empty-locale, then `en-us` order\n\nIf the project has no match, the same sequence runs for its parent and then grandparent project (`meta.inherited`, `meta.depth`, `meta.sourceProjectId` tell you where the content came from). Nothing found returns `404 PAGE_NOT_FOUND`.\n\n`items` is a flat list. Rebuild the tree from each item's `children` references, starting at the root item. With `format=portable-text` (or `Accept: application/portable-text+json`), `items` is replaced by a `content` array of Portable Text blocks. `includeDefaults=true` fills settings the merchant never customized with their schema defaults.\n\nRequired scope: `content:read`","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/pages/{type}/{handle}","href":"/content-api/pages/get-page-content","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n ol: \"ol\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Returns a page’s full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Use the exact \", _jsx(_components.code, {\n children: \"type\"\n }), \", \", _jsx(_components.code, {\n children: \"handle\"\n }), \" and \", _jsx(_components.code, {\n children: \"locale\"\n }), \" from \", _jsx(_components.code, {\n children: \"GET /projects/{projectId}/pages\"\n }), \". Custom page handles may include \", _jsx(_components.code, {\n children: \"/\"\n }), \" (for example \", _jsx(_components.code, {\n children: \"pages/gift-shop\"\n }), \", fetched at \", _jsx(_components.code, {\n children: \"/projects/{projectId}/pages/CUSTOM/pages/gift-shop\"\n }), \"). Singleton types (\", _jsx(_components.code, {\n children: \"INDEX\"\n }), \", \", _jsx(_components.code, {\n children: \"ALL_PRODUCTS\"\n }), \", \", _jsx(_components.code, {\n children: \"COLLECTION_LIST\"\n }), \", \", _jsx(_components.code, {\n children: \"CART\"\n }), \", \", _jsx(_components.code, {\n children: \"CUSTOMER\"\n }), \", \", _jsx(_components.code, {\n children: \"NOT_FOUND\"\n }), \", \", _jsx(_components.code, {\n children: \"PASSWORD\"\n }), \", \", _jsx(_components.code, {\n children: \"SEARCH\"\n }), \") accept an empty handle; \", _jsx(_components.code, {\n children: \"CUSTOM\"\n }), \" and the per-resource types require one. An unknown \", _jsx(_components.code, {\n children: \"type\"\n }), \" returns \", _jsx(_components.code, {\n children: \"400\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [\"Always pass \", _jsx(_components.code, {\n children: \"locale\"\n }), \" on localized projects.\"]\n }), \" Content is stored per locale: a page edited while a market such as \", _jsx(_components.code, {\n children: \"en-us\"\n }), \" is selected in Studio is saved on the \", _jsx(_components.code, {\n children: \"en-us\"\n }), \" assignment, not the base locale (\", _jsx(_components.code, {\n children: \"\\\"\\\"\"\n }), \"). Without \", _jsx(_components.code, {\n children: \"locale\"\n }), \" the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Resolution order, evaluated at each project level:\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"The requested handle’s market match, when the project uses market-first resolution\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"The requested handle with the exact locale\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"The requested handle with the empty locale (\", _jsx(_components.code, {\n children: \"\\\"\\\"\"\n }), \")\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"The requested handle with the legacy \", _jsx(_components.code, {\n children: \"en-us\"\n }), \" locale\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"For a non-\", _jsx(_components.code, {\n children: \"CUSTOM\"\n }), \" request with a non-empty handle, the type’s shared default template (empty handle), in the same market, exact-locale, empty-locale, then \", _jsx(_components.code, {\n children: \"en-us\"\n }), \" order\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"If the project has no match, the same sequence runs for its parent and then grandparent project (\", _jsx(_components.code, {\n children: \"meta.inherited\"\n }), \", \", _jsx(_components.code, {\n children: \"meta.depth\"\n }), \", \", _jsx(_components.code, {\n children: \"meta.sourceProjectId\"\n }), \" tell you where the content came from). Nothing found returns \", _jsx(_components.code, {\n children: \"404 PAGE_NOT_FOUND\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"items\"\n }), \" is a flat list. Rebuild the tree from each item’s \", _jsx(_components.code, {\n children: \"children\"\n }), \" references, starting at the root item. With \", _jsx(_components.code, {\n children: \"format=portable-text\"\n }), \" (or \", _jsx(_components.code, {\n children: \"Accept: application/portable-text+json\"\n }), \"), \", _jsx(_components.code, {\n children: \"items\"\n }), \" is replaced by a \", _jsx(_components.code, {\n children: \"content\"\n }), \" array of Portable Text blocks. \", _jsx(_components.code, {\n children: \"includeDefaults=true\"\n }), \" fills settings the merchant never customized with their schema defaults.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Required scope: \", _jsx(_components.code, {\n children: \"content:read\"\n })]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get page content","description":"Returns a page's full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications.\n\nUse the exact `type`, `handle` and `locale` from `GET /projects/{projectId}/pages`. Custom page handles may include `/` (for example `pages/gift-shop`, fetched at `/projects/{projectId}/pages/CUSTOM/pages/gift-shop`). Singleton types (`INDEX`, `ALL_PRODUCTS`, `COLLECTION_LIST`, `CART`, `CUSTOMER`, `NOT_FOUND`, `PASSWORD`, `SEARCH`) accept an empty handle; `CUSTOM` and the per-resource types require one. An unknown `type` returns `400`.\n\n**Always pass `locale` on localized projects.** Content is stored per locale: a page edited while a market such as `en-us` is selected in Studio is saved on the `en-us` assignment, not the base locale (`\"\"`). Without `locale` the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API.\n\nResolution order, evaluated at each project level:\n\n1. The requested handle's market match, when the project uses market-first resolution\n2. The requested handle with the exact locale\n3. The requested handle with the empty locale (`\"\"`)\n4. The requested handle with the legacy `en-us` locale\n5. For a non-`CUSTOM` request with a non-empty handle, the type's shared default template (empty handle), in the same market, exact-locale, empty-locale, then `en-us` order\n\nIf the project has no match, the same sequence runs for its parent and then grandparent project (`meta.inherited`, `meta.depth`, `meta.sourceProjectId` tell you where the content came from). Nothing found returns `404 PAGE_NOT_FOUND`.\n\n`items` is a flat list. Rebuild the tree from each item's `children` references, starting at the root item. With `format=portable-text` (or `Accept: application/portable-text+json`), `items` is replaced by a `content` array of Portable Text blocks. `includeDefaults=true` fills settings the merchant never customized with their schema defaults.\n\nRequired scope: `content:read`","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/pages/{type}/{handle}","href":"/content-api/pages/get-page-content","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/weaverse/0543a9a70b6f3643/snitcher.js","/docs/_mintlify/custom/weaverse/20987ec1c9b2ceb6/same-tab-nav.js"],"openApiReferenceData":{"operation":{"operationId":"getPage","summary":"Get page content","description":"Returns a page's full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications.\n\nUse the exact `type`, `handle` and `locale` from `GET /projects/{projectId}/pages`. Custom page handles may include `/` (for example `pages/gift-shop`, fetched at `/projects/{projectId}/pages/CUSTOM/pages/gift-shop`). Singleton types (`INDEX`, `ALL_PRODUCTS`, `COLLECTION_LIST`, `CART`, `CUSTOMER`, `NOT_FOUND`, `PASSWORD`, `SEARCH`) accept an empty handle; `CUSTOM` and the per-resource types require one. An unknown `type` returns `400`.\n\n**Always pass `locale` on localized projects.** Content is stored per locale: a page edited while a market such as `en-us` is selected in Studio is saved on the `en-us` assignment, not the base locale (`\"\"`). Without `locale` the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API.\n\nResolution order, evaluated at each project level:\n\n1. The requested handle's market match, when the project uses market-first resolution\n2. The requested handle with the exact locale\n3. The requested handle with the empty locale (`\"\"`)\n4. The requested handle with the legacy `en-us` locale\n5. For a non-`CUSTOM` request with a non-empty handle, the type's shared default template (empty handle), in the same market, exact-locale, empty-locale, then `en-us` order\n\nIf the project has no match, the same sequence runs for its parent and then grandparent project (`meta.inherited`, `meta.depth`, `meta.sourceProjectId` tell you where the content came from). Nothing found returns `404 PAGE_NOT_FOUND`.\n\n`items` is a flat list. Rebuild the tree from each item's `children` references, starting at the root item. With `format=portable-text` (or `Accept: application/portable-text+json`), `items` is replaced by a `content` array of Portable Text blocks. `includeDefaults=true` fills settings the merchant never customized with their schema defaults.\n\nRequired scope: `content:read`","parameters":["e9a7d19f-8e21-4da2-8101-be3f1105423c","6f3ef327-c844-43d5-8068-ed02a8735377","c9581916-7081-48ec-8ce8-bf96be1792c7","a2782ad9-fe64-4cb6-879a-0de9ec178a40","ea9092a8-82c4-439f-bdbe-21964c75c3ab","77476083-fbe3-471f-929a-e019e8017906","063c0d59-e6d2-4334-85e6-08f608470cf3"],"responses":{"200":"c6acdc96-4ef8-45fd-9cb9-ea1bda2b8244","400":"89aebc5f-ed5c-4741-aa87-f7d0864e67f4","401":"9b250949-683e-43b0-9734-415e25b5236b","403":"d119a619-cb2a-41f2-8340-4817ad4b90fc","404":"7addf473-c3b2-4b71-a580-4739210ef73c"},"tags":["Pages"],"method":"get","type":"path","servers":["06e8abcf-d98e-4c65-a1d0-4fa031893726"],"security":["15700b4d-44b3-4c88-a94b-4706f3058ff6"],"path":"/projects/{projectId}/pages/{type}/{handle}","baseUrlOptions":["https://studio.weaverse.io/api/v1/content"],"title":"Get page content","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"e9a7d19f-8e21-4da2-8101-be3f1105423c":{"name":"projectId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"6f3ef327-c844-43d5-8068-ed02a8735377":{"name":"type","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Page type (e.g. PRODUCT, INDEX)","uniqueKey":"","typeLabel":"string"},"description":"Page type (e.g. PRODUCT, INDEX)"},"c9581916-7081-48ec-8ce8-bf96be1792c7":{"name":"handle","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Page handle. This is the final greedy path component and may include `/`; pass the exact handle from the list endpoint, e.g. `blue-shirt`, `track-order`, or `pages/gift-shop`. Leave empty to target a singleton type's single default page — the home page (`INDEX`), the `/products` and `/collections` index pages (`ALL_PRODUCTS`, `COLLECTION_LIST`), `CART`, `CUSTOMER`, `NOT_FOUND`, `PASSWORD`, `SEARCH`. A handle is required for `CUSTOM` pages and for per-resource templated types (`PRODUCT`, `COLLECTION`, `PAGE`, `BLOG`, `ARTICLE`), whose empty handle is the shared default template.","uniqueKey":"","typeLabel":"string"},"description":"Page handle. This is the final greedy path component and may include `/`; pass the exact handle from the list endpoint, e.g. `blue-shirt`, `track-order`, or `pages/gift-shop`. Leave empty to target a singleton type's single default page — the home page (`INDEX`), the `/products` and `/collections` index pages (`ALL_PRODUCTS`, `COLLECTION_LIST`), `CART`, `CUSTOMER`, `NOT_FOUND`, `PASSWORD`, `SEARCH`. A handle is required for `CUSTOM` pages and for per-resource templated types (`PRODUCT`, `COLLECTION`, `PAGE`, `BLOG`, `ARTICLE`), whose empty handle is the shared default template."},"a2782ad9-fe64-4cb6-879a-0de9ec178a40":{"name":"locale","in":"query","schema":{"type":"string","description":"Requested locale. Falls back through locale chain if not found.","uniqueKey":"","typeLabel":"string"},"description":"Requested locale. Falls back through locale chain if not found."},"ea9092a8-82c4-439f-bdbe-21964c75c3ab":{"name":"format","in":"query","description":"Output format for rich-text fields.\n- `weaverse` (default): rich text returned as HTML strings — original behavior, no migration needed.\n- `portable-text`: rich text returned as structured Portable Text blocks for multi-channel rendering and AI consumption.\n\nEquivalent to setting `Accept: application/portable-text+json` on the request. The query parameter takes precedence over the header when both are provided. An invalid value returns `400 INVALID_PARAMS`.","schema":{"type":"string","enum":["weaverse","portable-text"],"default":"weaverse","description":"Output format for rich-text fields.\n- `weaverse` (default): rich text returned as HTML strings — original behavior, no migration needed.\n- `portable-text`: rich text returned as structured Portable Text blocks for multi-channel rendering and AI consumption.\n\nEquivalent to setting `Accept: application/portable-text+json` on the request. The query parameter takes precedence over the header when both are provided. An invalid value returns `400 INVALID_PARAMS`.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"77476083-fbe3-471f-929a-e019e8017906":{"name":"meta","in":"query","description":"Opt-in inclusion of `_weaverse: { id, schemaVersion }` on each Portable Text custom block so consumers can round-trip back to the original Weaverse item id. Only meaningful when `format=portable-text`; silently ignored otherwise. Not applicable on `/theme-settings` (free-form leaves have no item id to round-trip).\n\nOnly the literal string `true` enables this; any other value (e.g. `1`, `yes`, `false`) is silently treated as `false` rather than returning 400 — this asymmetry vs `format` exists because `meta` was added later and is purely additive.","schema":{"type":"boolean","default":false,"description":"Opt-in inclusion of `_weaverse: { id, schemaVersion }` on each Portable Text custom block so consumers can round-trip back to the original Weaverse item id. Only meaningful when `format=portable-text`; silently ignored otherwise. Not applicable on `/theme-settings` (free-form leaves have no item id to round-trip).\n\nOnly the literal string `true` enables this; any other value (e.g. `1`, `yes`, `false`) is silently treated as `false` rather than returning 400 — this asymmetry vs `format` exists because `meta` was added later and is purely additive.","uniqueKey":"","typeLabel":"boolean"}},"063c0d59-e6d2-4334-85e6-08f608470cf3":{"name":"includeDefaults","in":"query","description":"Opt-in server-side default resolution. When `true`, each item's `data` is completed with the component schema `defaultValue` for every setting the merchant never customized (the studio strips values equal to their default on save). Stored values always win; only missing keys are filled. Items whose component type has no stored schema are returned unchanged. `resolved=true` is an accepted alias. Only the literal string `true` enables this; any other value is treated as `false`.\n\nNote: component schemas are keyed by type only (not per theme version) — if two themes register the same section type, the most recently synced schema's defaults apply.","schema":{"type":"boolean","default":false,"description":"Opt-in server-side default resolution. When `true`, each item's `data` is completed with the component schema `defaultValue` for every setting the merchant never customized (the studio strips values equal to their default on save). Stored values always win; only missing keys are filled. Items whose component type has no stored schema are returned unchanged. `resolved=true` is an accepted alias. Only the literal string `true` enables this; any other value is treated as `false`.\n\nNote: component schemas are keyed by type only (not per theme version) — if two themes register the same section type, the most recently synced schema's defaults apply.","uniqueKey":"","typeLabel":"boolean"}}},"responses":{"c6acdc96-4ef8-45fd-9cb9-ea1bda2b8244":{"description":"Page with item tree","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","enum":["page"],"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"id":{"oneOf":[{"type":"string","uniqueKey":"id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"id.oneOf.1","typeLabel":"null"}],"uniqueKey":"id","typeLabel":"string | null"},"type":{"type":"string","uniqueKey":"type","typeLabel":"string"},"handle":{"type":"string","uniqueKey":"handle","typeLabel":"string"},"locale":{"oneOf":[{"type":"string","uniqueKey":"locale.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"locale.oneOf.1","typeLabel":"null"}],"uniqueKey":"locale","typeLabel":"string | null"},"items":{"type":"array","items":{"type":"object","description":"A component instance. The `children` field is a JSON value encoding child items.","properties":{"id":{"type":"string","uniqueKey":"\\items.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","uniqueKey":"\\items.items.[INDEX].type","typeLabel":"string"},"data":{"type":"object","description":"Component props/settings","uniqueKey":"\\items.items.[INDEX].data","typeLabel":"object"},"children":{"description":"Child items (JSON structure)","uniqueKey":"\\items.items.[INDEX].children","typeLabel":"any"}},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"uniqueKey":"\\items","typeLabel":"object[]"},"updatedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time> | null"},"meta":{"type":"object","properties":{"inherited":{"type":"boolean","uniqueKey":"meta.inherited","typeLabel":"boolean"},"sourceProjectId":{"type":"string","uniqueKey":"meta.sourceProjectId","typeLabel":"string"},"depth":{"type":"integer","uniqueKey":"meta.depth","typeLabel":"integer"}},"uniqueKey":"meta","typeLabel":"object"},"seo":{"oneOf":[{"type":"object","description":"The page's SEO metadata (`title`, `description`, `keywords`, `canonicalUrl`, `openGraph`, `twitter`, ...), or null when the page has none.","uniqueKey":"seo.oneOf.0","typeLabel":"object"},{"type":"null","description":"The page's SEO metadata (`title`, `description`, `keywords`, `canonicalUrl`, `openGraph`, `twitter`, ...), or null when the page has none.","uniqueKey":"seo.oneOf.1","typeLabel":"null"}],"uniqueKey":"seo","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"object":"page","id":"clz2r7t5w0002mnop9012qrst","type":"PRODUCT","handle":"blue-shirt","locale":"en-us","items":[{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a81","type":"main","data":{},"children":[{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a82"},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a83"}]},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a82","type":"hero-banner","data":{"title":"Summer Collection","subtitle":"New arrivals for the season","buttonText":"Shop Now","buttonLink":"/collections/summer"},"children":null},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a83","type":"product-details","data":{"showPrice":true,"showVariants":true,"layout":"two-column"},"children":null}],"updatedAt":"2026-10-18T14:22:05.000Z","meta":{"inherited":false,"sourceProjectId":"clz1k8m2n0000abcd1234efgh","depth":0},"seo":null},"examples":{"Example":{"title":"Example","value":{"object":"page","id":"clz2r7t5w0002mnop9012qrst","type":"PRODUCT","handle":"blue-shirt","locale":"en-us","items":[{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a81","type":"main","data":{},"children":[{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a82"},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a83"}]},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a82","type":"hero-banner","data":{"title":"Summer Collection","subtitle":"New arrivals for the season","buttonText":"Shop Now","buttonLink":"/collections/summer"},"children":null},{"id":"019a3c2e-5b7d-7f10-8a2b-3c4d5e6f7a83","type":"product-details","data":{"showPrice":true,"showVariants":true,"layout":"two-column"},"children":null}],"updatedAt":"2026-10-18T14:22:05.000Z","meta":{"inherited":false,"sourceProjectId":"clz1k8m2n0000abcd1234efgh","depth":0},"seo":null}}},"exampleType":"examples"}},"exampleType":"examples"},"89aebc5f-ed5c-4741-aa87-f7d0864e67f4":{"description":"Invalid `format` value (must be `weaverse` or `portable-text`)","content":{"application/json":{"schema":{"type":"object","required":["object","code","message","status"],"properties":{"object":{"type":"string","enum":["error"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","INSUFFICIENT_SCOPE","PROJECT_NOT_FOUND","PAGE_NOT_FOUND","STALE_PAGE","STALE_PROJECT","STALE_TRANSLATION","TRANSLATION_UNIT_NOT_FOUND","SERVICE_UNAVAILABLE","CONFLICT","PRECONDITION_REQUIRED","INVALID_PARAMS","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"details":{"description":"Optional machine-readable context, for example the clashing handles of a 409 CONFLICT.","uniqueKey":"details","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","code":"UNAUTHORIZED","message":"\u003cstring>","status":123,"details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"9b250949-683e-43b0-9734-415e25b5236b":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["object","code","message","status"],"properties":{"object":{"type":"string","enum":["error"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","INSUFFICIENT_SCOPE","PROJECT_NOT_FOUND","PAGE_NOT_FOUND","STALE_PAGE","STALE_PROJECT","STALE_TRANSLATION","TRANSLATION_UNIT_NOT_FOUND","SERVICE_UNAVAILABLE","CONFLICT","PRECONDITION_REQUIRED","INVALID_PARAMS","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"details":{"description":"Optional machine-readable context, for example the clashing handles of a 409 CONFLICT.","uniqueKey":"details","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","code":"UNAUTHORIZED","message":"\u003cstring>","status":123,"details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"d119a619-cb2a-41f2-8340-4817ad4b90fc":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["object","code","message","status"],"properties":{"object":{"type":"string","enum":["error"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","INSUFFICIENT_SCOPE","PROJECT_NOT_FOUND","PAGE_NOT_FOUND","STALE_PAGE","STALE_PROJECT","STALE_TRANSLATION","TRANSLATION_UNIT_NOT_FOUND","SERVICE_UNAVAILABLE","CONFLICT","PRECONDITION_REQUIRED","INVALID_PARAMS","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"details":{"description":"Optional machine-readable context, for example the clashing handles of a 409 CONFLICT.","uniqueKey":"details","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","code":"UNAUTHORIZED","message":"\u003cstring>","status":123,"details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"7addf473-c3b2-4b71-a580-4739210ef73c":{"description":"Page not found","content":{"application/json":{"schema":{"type":"object","required":["object","code","message","status"],"properties":{"object":{"type":"string","enum":["error"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","INSUFFICIENT_SCOPE","PROJECT_NOT_FOUND","PAGE_NOT_FOUND","STALE_PAGE","STALE_PROJECT","STALE_TRANSLATION","TRANSLATION_UNIT_NOT_FOUND","SERVICE_UNAVAILABLE","CONFLICT","PRECONDITION_REQUIRED","INVALID_PARAMS","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"details":{"description":"Optional machine-readable context, for example the clashing handles of a 409 CONFLICT.","uniqueKey":"details","typeLabel":"any"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"error","code":"UNAUTHORIZED","message":"\u003cstring>","status":123,"details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"15700b4d-44b3-4c88-a94b-4706f3058ff6":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"WEAVERSE_API_KEY","description":"Bearer token: a shop API key (`WEAVERSE_API_KEY`), a scoped API key or a delegated MCP OAuth token; translation-unit routes also accept a project-bound translation agent token. Each operation lists the scope it requires; the scope table is in the API description.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"06e8abcf-d98e-4c65-a1d0-4fa031893726":{"url":"https://studio.weaverse.io/api/v1/content","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"WEAVERSE_API_KEY","description":"Bearer token: a shop API key (`WEAVERSE_API_KEY`), a scoped API key or a delegated MCP OAuth token; translation-unit routes also accept a project-bound translation agent token. Each operation lists the scope it requires; the scope table is in the API description.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer token: a shop API key (`WEAVERSE_API_KEY`), a scoped API key or a delegated MCP OAuth token; translation-unit routes also accept a project-bound translation agent token. Each operation lists the scope it requires; the scope table is in the API description.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"https://studio.weaverse.io/api/v1/content/openapi.json"},"subdomain":"weaverse","siteName":"Weaverse","title":"Get page content - Weaverse","navMaps":{"firstHrefInVersion":{"v5.x":{"href":"/content-api/pages/get-page-content","matchLevel":0}},"firstHrefInLanguage":{}},"originalFileLocation":"content-api/pages/get-page-content.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns a page\u0026#x27;s full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications. Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400. Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (\u0026quot;\u0026quot;). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API. Resolution order, evaluated at each project level: 1. The requested handle\u0026#x27;s market match, when the project uses market-first resolution 2. The requested handle with the exact locale 3. The requested handle with the empty locale (\u0026quot;\u0026quot;) 4. The requested handle with the legacy en-us locale 5. For a non-CUSTOM request with a non-empty handle, the type\u0026#x27;s shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND. items is a flat list. Rebuild the tree from each item\u0026#x27;s children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults. Required scope: content:read\">\u003cmeta data-mint-head name=\"keywords\" content=\"Weaverse, Shopify Hydrogen, headless commerce, visual page builder, React Router, Next.js\">\u003cmeta data-mint-head name=\"application-name\" content=\"Weaverse\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get page content - Weaverse\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns a page\u0026#x27;s full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications. Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400. Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (\u0026quot;\u0026quot;). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API. Resolution order, evaluated at each project level: 1. The requested handle\u0026#x27;s market match, when the project uses market-first resolution 2. The requested handle with the exact locale 3. The requested handle with the empty locale (\u0026quot;\u0026quot;) 4. The requested handle with the legacy en-us locale 5. For a non-CUSTOM request with a non-empty handle, the type\u0026#x27;s shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND. items is a flat list. Rebuild the tree from each item\u0026#x27;s children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults. Required scope: content:read\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Weaverse Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://weaverse.io/docs/content-api/pages/get-page-content\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://weaverse.mintlify.site/docs/_mintlify/api/og/v2?division=Pages\u0026amp;title=Get+page+content\u0026amp;description=Returns+a+page%27s+full+content%3A+its+component+items%2C+revision+and+inheritance+metadata.+This+is+the+primary+endpoint+for+rendering+Weaverse+pages+in+external+app\u0026amp;theme=0d100f7670b454d40a653506\u0026amp;signature=af728a1132e92de0d666a0eafa2750c5fcbe8dca48277eb8fb15945e2cb9e2a6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get page content - Weaverse\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns a page\u0026#x27;s full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications. Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400. Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (\u0026quot;\u0026quot;). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API. Resolution order, evaluated at each project level: 1. The requested handle\u0026#x27;s market match, when the project uses market-first resolution 2. The requested handle with the exact locale 3. The requested handle with the empty locale (\u0026quot;\u0026quot;) 4. The requested handle with the legacy en-us locale 5. For a non-CUSTOM request with a non-empty handle, the type\u0026#x27;s shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND. items is a flat list. Rebuild the tree from each item\u0026#x27;s children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults. Required scope: content:read\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://weaverse.mintlify.site/docs/_mintlify/api/og/v2?division=Pages\u0026amp;title=Get+page+content\u0026amp;description=Returns+a+page%27s+full+content%3A+its+component+items%2C+revision+and+inheritance+metadata.+This+is+the+primary+endpoint+for+rendering+Weaverse+pages+in+external+app\u0026amp;theme=0d100f7670b454d40a653506\u0026amp;signature=af728a1132e92de0d666a0eafa2750c5fcbe8dca48277eb8fb15945e2cb9e2a6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Weaverse\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#246aff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://weaverse.io/docs/content-api/pages/get-page-content\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/content-api/pages/get-page-content.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://weaverse.io/#organization\",\"name\":\"Weaverse\",\"url\":\"https://weaverse.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.weaverse.io/logo/light.svg\"},\"sameAs\":[\"https://github.com/weaverse\",\"https://x.com/WeaverseIO\",\"https://wvse.cc/weaverse-slack\"]},{\"@type\":\"WebSite\",\"@id\":\"https://weaverse.io/docs#website\",\"name\":\"Weaverse\",\"url\":\"https://weaverse.io/docs\",\"publisher\":{\"@id\":\"https://weaverse.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://weaverse.io/docs/content-api/pages/get-page-content#webpage\",\"url\":\"https://weaverse.io/docs/content-api/pages/get-page-content\",\"name\":\"Get page content\",\"description\":\"Returns a page's full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications. Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400. Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (\\\"\\\"). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API. Resolution order, evaluated at each project level: 1. The requested handle's market match, when the project uses market-first resolution 2. The requested handle with the exact locale 3. The requested handle with the empty locale (\\\"\\\") 4. The requested handle with the legacy en-us locale 5. For a non-CUSTOM request with a non-empty handle, the type's shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND. items is a flat list. Rebuild the tree from each item's children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults. Required scope: content:read\",\"isPartOf\":{\"@id\":\"https://weaverse.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://weaverse.io/docs/content-api/pages/get-page-content#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://weaverse.io/docs/content-api/pages/get-page-content#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Pages\",\"item\":\"https://weaverse.io/docs/content-api/pages/list-page-assignments\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get page content\",\"item\":\"https://weaverse.io/docs/content-api/pages/get-page-content\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://weaverse.io/docs/content-api/pages/get-page-content#apireference\",\"headline\":\"Get page content\",\"name\":\"Get page content\",\"description\":\"Returns a page's full content: its component items, revision and inheritance metadata. This is the primary endpoint for rendering Weaverse pages in external applications. Use the exact type, handle and locale from GET /projects/{projectId}/pages. Custom page handles may include / (for example pages/gift-shop, fetched at /projects/{projectId}/pages/CUSTOM/pages/gift-shop). Singleton types (INDEX, ALL_PRODUCTS, COLLECTION_LIST, CART, CUSTOMER, NOT_FOUND, PASSWORD, SEARCH) accept an empty handle; CUSTOM and the per-resource types require one. An unknown type returns 400. Always pass locale on localized projects. Content is stored per locale: a page edited while a market such as en-us is selected in Studio is saved on the en-us assignment, not the base locale (\\\"\\\"). Without locale the base locale is requested first and may resolve to a different, unedited assignment. This is the most common reason a published change looks missing from the API. Resolution order, evaluated at each project level: 1. The requested handle's market match, when the project uses market-first resolution 2. The requested handle with the exact locale 3. The requested handle with the empty locale (\\\"\\\") 4. The requested handle with the legacy en-us locale 5. For a non-CUSTOM request with a non-empty handle, the type's shared default template (empty handle), in the same market, exact-locale, empty-locale, then en-us order If the project has no match, the same sequence runs for its parent and then grandparent project (meta.inherited, meta.depth, meta.sourceProjectId tell you where the content came from). Nothing found returns 404 PAGE_NOT_FOUND. items is a flat list. Rebuild the tree from each item's children references, starting at the root item. With format=portable-text (or Accept: application/portable-text+json), items is replaced by a content array of Portable Text blocks. includeDefaults=true fills settings the merchant never customized with their schema defaults. Required scope: content:read\",\"url\":\"https://weaverse.io/docs/content-api/pages/get-page-content\",\"mainEntityOfPage\":{\"@id\":\"https://weaverse.io/docs/content-api/pages/get-page-content#webpage\"},\"publisher\":{\"@id\":\"https://weaverse.io/#organization\"},\"isPartOf\":{\"@id\":\"https://weaverse.io/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Weaverse\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Weaverse","nav":{"global":null,"versions":[{"version":"v5.x","default":true,"tag":"Latest","tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"Guides","dropdowns":[{"dropdown":"React Router","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/react-router.svg","groups":[{"group":"Environment","pages":[{"title":"Environment Variables","href":"/development-guide/environment-setup"},{"title":"Studio vs. Live Environment","href":"/development-guide/design-mode"}]},{"group":"Building Components","pages":[{"title":"Creating Components","href":"/development-guide/creating-components"},{"title":"Component Schema","href":"/development-guide/component-schema"},{"title":"Input Settings","href":"/development-guide/input-settings"},{"title":"Weaverse Hydrogen Component","href":"/development-guide/weaverse-component"},{"title":"Styling \u0026 Theming","href":"/development-guide/styling-theming"},{"title":"Section Data Fetching","href":"/development-guide/data-fetching"},{"title":"Data Connectors","href":"/development-guide/data-connectors"}]},{"group":"Content Management","pages":[{"title":"Global Sections","href":"/features/global-sections"},{"title":"Scheduled Publishing","href":"/features/schedule-publish"},{"title":"Navigation Configuration","href":"/features/navigation-menus"},{"title":"Third-party Integration","href":"/features/third-party-integrations"},{"title":"Installable Mobile App (PWA)","href":"/features/mobile-app-pwa"}]},{"group":"Internationalization","pages":[{"title":"Markets and Localization","href":"/features/markets-localization"},{"title":"Translation Feature Guide","href":"/features/translation-feature-guide"},{"title":"i18next Integration","href":"/features/i18next-integration"}]},{"group":"Security \u0026 Privacy","pages":[{"title":"Content Security Policy","href":"/features/content-security"},{"title":"Cookie Consent Banner","href":"/features/cookie-consent-banner"},{"title":"Analytics \u0026 Conversion Tracking","href":"/features/analytics-tracking"},{"title":"Security \u0026 Deployment Practices","href":"/features/security-deployment-practices"}]},{"group":"Pages \u0026 Routing","pages":[{"title":"Custom Pages","href":"/features/custom-pages"},{"title":"Page SEO","href":"/features/page-seo"},{"title":"Custom Templates","href":"/features/custom-templates"},{"title":"Custom Routing","href":"/features/custom-routing"}]},{"group":"Advanced","pages":[{"title":"Rendering Weaverse Pages","href":"/guides/rendering-page"},{"title":"Advanced Localization Guide","href":"/guides/localization-advanced"},{"title":"Multi-Project Architecture","href":"/guides/multi-project-architecture"},{"title":"Customer Account API Local Development","href":"/development-guide/customer-account-local-dev"},{"title":"Multipass in Hydrogen","href":"/development-guide/multipass-in-hydrogen"}]},{"group":"Deployment","root":{"title":"Deployment","href":"/guides/deployment/index"},"directory":"card","pages":[{"title":"Deploy to Shopify Oxygen","href":"/guides/deployment/oxygen"},{"title":"Custom Domain \u0026 DNS Setup","href":"/guides/deployment/custom-domain-and-dns"},{"title":"Deploy with Docker","href":"/guides/deployment/docker"},{"title":"Deploy to Cloudflare Workers","href":"/guides/deployment/workers"}]}]},{"dropdown":"Next.js","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/nextjs.svg","groups":[{"group":"Getting started","pages":[{"title":"Weaverse for Next.js","href":"/nextjs/overview"},{"title":"Next.js Quickstart","href":"/nextjs/quickstart"}]},{"group":"Next.js","pages":[{"title":"Rendering Pages in Next.js","href":"/nextjs/rendering-pages"},{"title":"Data Fetching in Next.js","href":"/nextjs/data-fetching"},{"title":"Connect Weaverse Studio","href":"/nextjs/studio"},{"title":"Markets \u0026 Translations","href":"/nextjs/markets-translations"}]},{"group":"Content Management","pages":[{"title":"Global Sections","href":"/features/global-sections"},{"title":"Navigation Configuration","href":"/features/navigation-menus"},{"title":"Third-party Integrations in Next.js","href":"/nextjs/third-party-integrations"},{"title":"Installable Mobile App (PWA)","href":"/features/mobile-app-pwa"}]},{"group":"Deployment","pages":[{"title":"Deploy to Vercel","href":"/guides/deployment/vercel"}]}]}]},{"tab":"SDKs","dropdowns":[{"dropdown":"React Router","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/react-router.svg","groups":[{"group":"Overview","pages":[{"title":"Introduction","sidebarTitle":"Overview","href":"/api-reference/introduction"}]},{"group":"Hooks","pages":[{"title":"useWeaverse","href":"/api-reference/use-weaverse"},{"title":"useItemInstance","href":"/api-reference/use-item-instance"},{"title":"useParentInstance","href":"/api-reference/use-parent-instance"},{"title":"useChildInstances","href":"/api-reference/use-child-instances"},{"title":"useThemeSettings","href":"/api-reference/use-theme-settings"}]},{"group":"Components","pages":[{"title":"WeaverseHydrogenRoot","href":"/api-reference/weaverse-root"},{"title":"WeaverseClient","href":"/api-reference/weaverse-client"},{"title":"withWeaverse","href":"/api-reference/with-weaverse"}]},{"group":"Utilities \u0026 Types","pages":[{"title":"getSelectedProductOptions","href":"/api-reference/get-selected-product-options"},{"title":"IMAGES_PLACEHOLDERS","href":"/api-reference/images-placeholders"},{"title":"Types","href":"/api-reference/types"}]}]},{"dropdown":"Next.js","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/nextjs.svg","groups":[{"group":"Overview","pages":[{"title":"@weaverse/next API Reference","href":"/nextjs/api-reference"}]},{"group":"Hooks","pages":[{"title":"useWeaverse","href":"/nextjs/api/use-weaverse"},{"title":"useItemInstance","href":"/nextjs/api/use-item-instance"},{"title":"useParentInstance","href":"/nextjs/api/use-parent-instance"},{"title":"useChildInstances","href":"/nextjs/api/use-child-instances"},{"title":"useThemeSettings","href":"/nextjs/api/use-theme-settings"}]}]}]},{"tab":"Content API","groups":[{"group":"Get started","pages":[{"title":"Content API","sidebarTitle":"Overview","href":"/content-api/overview"},{"title":"Portable Text Format","href":"/content-api/portable-text"},{"title":"List Public Custom Pages","href":"/content-api/public-custom-pages"}]},{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects","href":"/content-api/projects/list-projects"},{"title":"Run a project lifecycle operation","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects","href":"/content-api/projects/run-a-project-lifecycle-operation"},{"title":"Get project","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}","href":"/content-api/projects/get-project"},{"title":"Update project","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json patch /projects/{projectId}","href":"/content-api/projects/update-project"}]},{"group":"Pages","pages":[{"title":"List page assignments","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/pages","href":"/content-api/pages/list-page-assignments"},{"title":"Create a page","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/pages","href":"/content-api/pages/create-a-page"},{"title":"Bulk delete pages","description":"Deletes page assignments in a project and soft-deletes each underlying page once it has no remaining live assignments; assignments for other locales or resources keep a shared page live. Only assignments in the project named in the URL are touched.\n\nIdentify up to 500 targets with one selector per request:\n\n- `pageIds`: page ids, scoped to this project.\n- `handles` + `type`: handles of one page type, with an optional `locale`. When `locale` is omitted the legacy `en-us` locale is used; an empty string is rejected. For custom pages, pass the exact handle from the pages list, including any `/`.\n\nIf both `pageIds` and `handles` are present and `pageIds` is an array, `pageIds` wins and `handles` is ignored.\n\nA `handles` request naming an internal template-marker handle (`isTemplateMarker: true` on the pages list) is rejected with `400` and deletes nothing, so a bulk delete can never half-apply and strip a custom template's wiring. Delete such a template by its `pageIds` instead.\n\nDeletion is consequential: resolve targets with the pages list first and, when acting through an agent, confirm them with the user. Use the response counts and handle lists to find misses (`notFound`) or per-page failures (`failed`).\n\nClients or CDNs that strip `DELETE` bodies may send `POST` to the same URL with the same body.\n\nRequired scope: `content:write` and `content:delete`. A credential with a stored scope list (any delegated grant or a shop API key minted with scopes) without `content:delete` gets `403 INSUFFICIENT_SCOPE` and nothing is deleted. Only shop API keys minted before scopes existed keep this endpoint's historical delete access.","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json delete /projects/{projectId}/pages","href":"/content-api/pages/bulk-delete-pages"},{"title":"Get page content","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/pages/{type}/{handle}","href":"/content-api/pages/get-page-content"},{"title":"Update page content","description":"Edits component items on the page resolved for `type` / `handle` / `locale`, using the same fallback as the GET endpoint. Pass the exact handle from the pages list; it may include `/`. Singleton types accept an empty handle; `CUSTOM` and per-resource types require one.\n\n- `data` is shallow-merged into the item's existing data: send only changed top-level keys. Nested objects are replaced wholesale.\n- Up to 100 items per request; item ids must be unique within the request.\n- An unknown item id is created only when `type` is supplied; otherwise it is returned in `notFoundIds`.\n- `children` replaces an item's top-level child references. Each reference must point to an existing page item or a typed new item created in the same request.\n- A page inherited from a parent project returns `409`; edit it on the source project.\n- `exact: true` writes only the assignment whose stored type, handle and locale match exactly, returning `404` instead of falling back. Delegated writes are always exact.\n\nConcurrency: pass the `updatedAt` from your GET as `expectedUpdatedAt`. If the page changed since, the whole request is rejected with `409 STALE_PAGE` before any item is written; re-read and reapply on top of the newer content instead of retrying the same patch. Delegated (MCP OAuth) tokens must send it (`428 PRECONDITION_REQUIRED` otherwise); it is optional for API keys.\n\nOn success the edit goes live through api.weaverse.io like a Studio save. Clients or proxies that cannot send `PATCH` bodies may send `POST`.\n\nRequired scope: `content:write`","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json patch /projects/{projectId}/pages/{type}/{handle}","href":"/content-api/pages/update-page-content"}]},{"group":"Assignments","pages":[{"title":"Assign resources to a shared template page","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/template-assignments/{pageId}","href":"/content-api/assignments/assign-resources-to-a-shared-template-page"},{"title":"List page assignments","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/assignments","href":"/content-api/assignments/list-page-assignments"},{"title":"Update, localize or remove page assignments","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/assignments","href":"/content-api/assignments/update-localize-or-remove-page-assignments"}]},{"group":"Theme settings","pages":[{"title":"Get theme settings","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/theme-settings","href":"/content-api/theme-settings/get-theme-settings"},{"title":"Update theme settings","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json patch /projects/{projectId}/theme-settings","href":"/content-api/theme-settings/update-theme-settings"}]},{"group":"Languages and localization","pages":[{"title":"List project languages","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/languages","href":"/content-api/languages-and-localization/list-project-languages"},{"title":"Get languages, glossary or static text","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/localization","href":"/content-api/languages-and-localization/get-languages-glossary-or-static-text"},{"title":"Manage languages, glossary and static text","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/localization","href":"/content-api/languages-and-localization/manage-languages-glossary-and-static-text"}]},{"group":"Specification","pages":[{"title":"Get the OpenAPI specification","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /openapi.json","href":"/content-api/specification/get-the-openapi-specification"}]},{"group":"Translations","pages":[{"title":"Read a page's translations for one locale","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/page-translations/{pageId}","href":"/content-api/translations/read-a-pages-translations-for-one-locale"},{"title":"Apply translations for one page and locale","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/page-translations/{pageId}","href":"/content-api/translations/apply-translations-for-one-page-and-locale"},{"title":"List translation units for a target locale","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/translation-units","href":"/content-api/translations/list-translation-units-for-a-target-locale"},{"title":"Validate or apply a translation batch","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/translations/{operation}","href":"/content-api/translations/validate-or-apply-a-translation-batch"}]},{"group":"Drafts and publishing","pages":[{"title":"Get a page's editable content and revision tokens","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/page-drafts/{pageId}","href":"/content-api/drafts-and-publishing/get-a-pages-editable-content-and-revision-tokens"},{"title":"Save a page draft","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json put /projects/{projectId}/page-drafts/{pageId}","href":"/content-api/drafts-and-publishing/save-a-page-draft"},{"title":"Discard a page draft","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json delete /projects/{projectId}/page-drafts/{pageId}","href":"/content-api/drafts-and-publishing/discard-a-page-draft"},{"title":"Publish a saved page draft","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /publish-versions/{versionId}","href":"/content-api/drafts-and-publishing/publish-a-saved-page-draft"},{"title":"List page versions, theme versions or the schedule","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/versions","href":"/content-api/drafts-and-publishing/list-page-versions-theme-versions-or-the-schedule"},{"title":"Get one page or theme version","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /versions/{versionId}","href":"/content-api/drafts-and-publishing/get-one-page-or-theme-version"},{"title":"Replace a version's pending content","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json put /versions/{versionId}","href":"/content-api/drafts-and-publishing/replace-a-versions-pending-content"},{"title":"Cancel a scheduled publication","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json delete /versions/{versionId}","href":"/content-api/drafts-and-publishing/cancel-a-scheduled-publication"},{"title":"Reschedule a scheduled version","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json patch /versions/{versionId}","href":"/content-api/drafts-and-publishing/reschedule-a-scheduled-version"},{"title":"Schedule a version for publication","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /versions/{versionId}/schedule","href":"/content-api/drafts-and-publishing/schedule-a-version-for-publication"},{"title":"Publish a scheduled version immediately","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /versions/{versionId}/publish-now","href":"/content-api/drafts-and-publishing/publish-a-scheduled-version-immediately"},{"title":"Restore a version to live","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /versions/{versionId}/restore","href":"/content-api/drafts-and-publishing/restore-a-version-to-live"}]},{"group":"Global sections","pages":[{"title":"List global sections","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/global-sections","href":"/content-api/global-sections/list-global-sections"},{"title":"Promote an item to a global section","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/global-sections","href":"/content-api/global-sections/promote-an-item-to-a-global-section"},{"title":"Get a global section's draft","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/global-sections/{sectionId}","href":"/content-api/global-sections/get-a-global-sections-draft"},{"title":"Rename, delete, or draft and publish a global section","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/global-sections/{sectionId}","href":"/content-api/global-sections/rename-delete-or-draft-and-publish-a-global-section"}]},{"group":"Page settings","pages":[{"title":"Get page settings","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/page-settings/{pageId}","href":"/content-api/page-settings/get-page-settings"},{"title":"Rename a page or update its SEO","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/page-settings/{pageId}","href":"/content-api/page-settings/rename-a-page-or-update-its-seo"}]},{"group":"Project structure","pages":[{"title":"Get project hierarchy","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/hierarchy","href":"/content-api/project-structure/get-project-hierarchy"},{"title":"Manage variants and page overrides","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/hierarchy","href":"/content-api/project-structure/manage-variants-and-page-overrides"}]},{"group":"Backups and portability","pages":[{"title":"List, download or diff project backups","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/backups","href":"/content-api/backups-and-portability/list-download-or-diff-project-backups"},{"title":"Create a backup or restore one as a new project","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/backups","href":"/content-api/backups-and-portability/create-a-backup-or-restore-one-as-a-new-project"},{"title":"Export the live project","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/export","href":"/content-api/backups-and-portability/export-the-live-project"},{"title":"Import an export file into this project","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/import","href":"/content-api/backups-and-portability/import-an-export-file-into-this-project"},{"title":"Restore an uploaded backup file as a new project","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /backup-restores","href":"/content-api/backups-and-portability/restore-an-uploaded-backup-file-as-a-new-project"}]},{"group":"Previews and hostnames","pages":[{"title":"List preview URLs","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/previews","href":"/content-api/previews-and-hostnames/list-preview-urls"},{"title":"Create, update or delete a preview URL","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/previews","href":"/content-api/previews-and-hostnames/create-update-or-delete-a-preview-url"},{"title":"List observed storefront hostnames","deprecated":null,"version":null,"openapi":"https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/hostnames","href":"/content-api/previews-and-hostnames/list-observed-storefront-hostnames"},{"title":"Block or unblock a storefront hostname","deprecated":null,"version":null,"playground":"simple","openapi":"https://studio.weaverse.io/api/v1/content/openapi.json post /projects/{projectId}/hostnames","href":"/content-api/previews-and-hostnames/block-or-unblock-a-storefront-hostname"}]}]},{"tab":"Ecosystem","pages":[{"title":"Ecosystem","href":"/ecosystem"}]},{"tab":"Help \u0026 Community","pages":[{"title":"Help \u0026 Community","href":"/resources"}]}]}]},"basePath":"","title":"Get page content - Weaverse","buildId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","deploymentId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-D_7my4bd.js","utils-Cq_itTNA.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B5KPEvGz.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DBX-JepP.js","snippetPresets-Bsspz-Ge.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-jcs-2nGf.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Dp53in7F.js","shallow-Dv9eUdUd.js","getApiPlaygroundDisplay-D8cDwNhi.js","CodeSnippet-DkwXLQor.js","CodeSnippets-DcSgKqs5.js","Page-t8ynOKTD.js","getPastedJson-I2RjoApV.js","icon-BIj57rZC.js","MethodPill-CTwLPWXC.js","DuplicateIcon-BJpFwygY.js","createIcon-C7PorfAe.js","DynamicMarkdown-BBht_uEs.js","SectionHeading-YIBwxbzj.js","axios-vUo_bRtp.js","Markdown--YCeFtOs.js","clsx-CrPa459s.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BWxsj3I0.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fBzVvq7k.js"]}