Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned.
Only Translation rows change. Base page content, its items and every other locale are untouched.
The project default language is rejected (400): it is the source other locales translate from.
Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested.
translation: "" clears a key, keeping the tombstone row that distinguishes “cleared” from “never translated”.
targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write.
At most 250 entries per request; duplicate itemId + key pairs are rejected.
A request that applies nothing advances no project revision and flushes no cache.
If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.
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.
Entries refused because the source or the target moved since the read. Re-run GET and resubmit those keys; they were NOT written.
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/translations/apply-translations-for-one-page-and-locale","slug":"/content-api/translations/apply-translations-for-one-page-and-locale","pageMetadata":{"title":"Apply translations for one page and locale","description":"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from `GET` with `translation` replaced; `source` and `targetGeneration` must be the values `GET` returned.\n\n- Only `Translation` rows change. Base page content, its items and every other locale are untouched.\n- The project default language is rejected (400): it is the source other locales translate from.\n- Each entry is compare-and-set on both its `source` and its `targetGeneration`, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in `stale` and were not written; re-read and resubmit them. `applied + stale = requested`.\n- `translation: \"\"` clears a key, keeping the tombstone row that distinguishes \"cleared\" from \"never translated\".\n- `targetGeneration` is required on every entry (`null` when `GET` returned `null`); omitting it is a 400, not a blind write.\n- At most 250 entries per request; duplicate `itemId` + `key` pairs are rejected.\n- A request that applies nothing advances no project revision and flushes no cache.\n- If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with `GET`; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.\n\nRequired scope: `content:write`","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","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 p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from \", _jsx(_components.code, {\n children: \"GET\"\n }), \" with \", _jsx(_components.code, {\n children: \"translation\"\n }), \" replaced; \", _jsx(_components.code, {\n children: \"source\"\n }), \" and \", _jsx(_components.code, {\n children: \"targetGeneration\"\n }), \" must be the values \", _jsx(_components.code, {\n children: \"GET\"\n }), \" returned.\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Only \", _jsx(_components.code, {\n children: \"Translation\"\n }), \" rows change. Base page content, its items and every other locale are untouched.\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"The project default language is rejected (400): it is the source other locales translate from.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Each entry is compare-and-set on both its \", _jsx(_components.code, {\n children: \"source\"\n }), \" and its \", _jsx(_components.code, {\n children: \"targetGeneration\"\n }), \", so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in \", _jsx(_components.code, {\n children: \"stale\"\n }), \" and were not written; re-read and resubmit them. \", _jsx(_components.code, {\n children: \"applied + stale = requested\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"translation: \\\"\\\"\"\n }), \" clears a key, keeping the tombstone row that distinguishes “cleared” from “never translated”.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"targetGeneration\"\n }), \" is required on every entry (\", _jsx(_components.code, {\n children: \"null\"\n }), \" when \", _jsx(_components.code, {\n children: \"GET\"\n }), \" returned \", _jsx(_components.code, {\n children: \"null\"\n }), \"); omitting it is a 400, not a blind write.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"At most 250 entries per request; duplicate \", _jsx(_components.code, {\n children: \"itemId\"\n }), \" + \", _jsx(_components.code, {\n children: \"key\"\n }), \" pairs are rejected.\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"A request that applies nothing advances no project revision and flushes no cache.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with \", _jsx(_components.code, {\n children: \"GET\"\n }), \"; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Required scope: \", _jsx(_components.code, {\n children: \"content:write\"\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":"Apply translations for one page and locale","description":"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from `GET` with `translation` replaced; `source` and `targetGeneration` must be the values `GET` returned.\n\n- Only `Translation` rows change. Base page content, its items and every other locale are untouched.\n- The project default language is rejected (400): it is the source other locales translate from.\n- Each entry is compare-and-set on both its `source` and its `targetGeneration`, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in `stale` and were not written; re-read and resubmit them. `applied + stale = requested`.\n- `translation: \"\"` clears a key, keeping the tombstone row that distinguishes \"cleared\" from \"never translated\".\n- `targetGeneration` is required on every entry (`null` when `GET` returned `null`); omitting it is a 400, not a blind write.\n- At most 250 entries per request; duplicate `itemId` + `key` pairs are rejected.\n- A request that applies nothing advances no project revision and flushes no cache.\n- If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with `GET`; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.\n\nRequired scope: `content:write`","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","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":"applyPageTranslations","summary":"Apply translations for one page and locale","description":"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from `GET` with `translation` replaced; `source` and `targetGeneration` must be the values `GET` returned.\n\n- Only `Translation` rows change. Base page content, its items and every other locale are untouched.\n- The project default language is rejected (400): it is the source other locales translate from.\n- Each entry is compare-and-set on both its `source` and its `targetGeneration`, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in `stale` and were not written; re-read and resubmit them. `applied + stale = requested`.\n- `translation: \"\"` clears a key, keeping the tombstone row that distinguishes \"cleared\" from \"never translated\".\n- `targetGeneration` is required on every entry (`null` when `GET` returned `null`); omitting it is a 400, not a blind write.\n- At most 250 entries per request; duplicate `itemId` + `key` pairs are rejected.\n- A request that applies nothing advances no project revision and flushes no cache.\n- If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with `GET`; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.\n\nRequired scope: `content:write`","parameters":["774bbaf8-a393-422a-98cb-e73d2270a1af","190ce9d8-51b6-45cd-a774-633e1f868949"],"requestBody":"f034f1e5-86bf-4b2d-a557-82a40ab62a11","responses":{"200":"8da897eb-9739-4e4b-8571-572a4eca6b8e","400":"aae7775d-4777-4cf5-bf56-c3926c17d599","401":"2566f29b-41f3-4ea4-a656-96f3c7e04a4c","403":"b384985c-df32-4643-adb1-d0288185b577","404":"0a19cae2-ca17-4c3e-94ea-6a5382bd7224","405":"ed54c821-a450-4ea4-b823-3d2de902477b","500":"e06942c7-e0cc-4ff6-88df-437c6260878e"},"tags":["Translations"],"x-mint":{"metadata":{"playground":"simple"}},"method":"post","type":"path","servers":["06e8abcf-d98e-4c65-a1d0-4fa031893726"],"security":["15700b4d-44b3-4c88-a94b-4706f3058ff6"],"path":"/projects/{projectId}/page-translations/{pageId}","baseUrlOptions":["https://studio.weaverse.io/api/v1/content"],"title":"Apply translations for one page and locale","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"774bbaf8-a393-422a-98cb-e73d2270a1af":{"name":"projectId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"190ce9d8-51b6-45cd-a774-633e1f868949":{"name":"pageId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["locale","translations"],"properties":{"locale":{"type":"string","description":"Target locale, resolved through the same language identity the storefront uses. Must be a configured, non-default language.","isRequired":true,"uniqueKey":"locale","typeLabel":"string"},"translations":{"type":"array","maxItems":250,"description":"Entries echoed from GET with `translation` replaced. `source` and `targetGeneration` must be the values GET returned.","items":{"type":"object","required":["itemId","key","source","translation","targetGeneration"],"properties":{"itemId":{"type":"string","description":"The item the key belongs to.","isRequired":true,"uniqueKey":"translations.items.[INDEX].itemId","typeLabel":"string"},"key":{"type":"string","description":"The extraction path of the translatable field, rooted at the item data column (e.g. `data.title`). Use it verbatim; it is the stored translation key.","isRequired":true,"uniqueKey":"translations.items.[INDEX].key","typeLabel":"string"},"source":{"type":"string","description":"The text the translation answers for, resolved server-side from the item value, its component-schema default, or the project default language overlay — whichever the runtime actually translates FROM.","isRequired":true,"uniqueKey":"translations.items.[INDEX].source","typeLabel":"string"},"translation":{"oneOf":[{"type":"string","description":"The current target text. `\"\"` is a deliberate clear; `null` means no row exists, or the stored one answers a source the merchant has since changed.","isRequired":true,"uniqueKey":"translations.items.[INDEX].translation.oneOf.0","typeLabel":"string"},{"type":"null","description":"The current target text. `\"\"` is a deliberate clear; `null` means no row exists, or the stored one answers a source the merchant has since changed.","isRequired":true,"uniqueKey":"translations.items.[INDEX].translation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"translations.items.[INDEX].translation","typeLabel":"string | null"},"targetGeneration":{"oneOf":[{"type":"string","description":"The raw stored target value at read time, independent of freshness: `null` = no row, `\"\"` = cleared. Replay it verbatim on write; it is the compare-and-set token that stops a delayed agent overwriting a newer translation.","isRequired":true,"uniqueKey":"translations.items.[INDEX].targetGeneration.oneOf.0","typeLabel":"string"},{"type":"null","description":"The raw stored target value at read time, independent of freshness: `null` = no row, `\"\"` = cleared. Replay it verbatim on write; it is the compare-and-set token that stops a delayed agent overwriting a newer translation.","isRequired":true,"uniqueKey":"translations.items.[INDEX].targetGeneration.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"translations.items.[INDEX].targetGeneration","typeLabel":"string | null"}},"uniqueKey":"translations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"translations","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"locale":"fr-fr","translations":[{"itemId":"clz8k3d2e0008poiu7ytr6ewq","key":"data.buttonText","source":"Shop now","translation":"Acheter maintenant","targetGeneration":null}]},"examples":{"Example":{"title":"Example","value":{"locale":"fr-fr","translations":[{"itemId":"clz8k3d2e0008poiu7ytr6ewq","key":"data.buttonText","source":"Shop now","translation":"Acheter maintenant","targetGeneration":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"8da897eb-9739-4e4b-8571-572a4eca6b8e":{"description":"Decision for the whole batch. `applied + stale = requested`; a non-zero `stale` means those keys must be re-read and resubmitted.","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","enum":["page_translations_update"],"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"projectId":{"type":"string","uniqueKey":"projectId","typeLabel":"string"},"pageId":{"type":"string","uniqueKey":"pageId","typeLabel":"string"},"language":{"type":"object","properties":{"id":{"type":"string","uniqueKey":"language.id","typeLabel":"string"},"code":{"type":"string","uniqueKey":"language.code","typeLabel":"string"}},"uniqueKey":"language","typeLabel":"object"},"requested":{"type":"integer","uniqueKey":"requested","typeLabel":"integer"},"applied":{"type":"integer","description":"Entries that passed both the source and target compare-and-set and were written.","uniqueKey":"applied","typeLabel":"integer"},"stale":{"type":"integer","description":"Entries refused because the source or the target moved since the read. Re-run GET and resubmit those keys; they were NOT written.","uniqueKey":"stale","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"object":"page_translations_update","projectId":"clz8k2m4n0001qwer7tyu8iop","pageId":"clz8k3a1b0004asdf5ghj6klz","language":{"id":"clz8k2x7y0003lkjh4gfd3sap","code":"fr-fr"},"requested":1,"applied":1,"stale":0},"examples":{"Example":{"title":"Example","value":{"object":"page_translations_update","projectId":"clz8k2m4n0001qwer7tyu8iop","pageId":"clz8k3a1b0004asdf5ghj6klz","language":{"id":"clz8k2x7y0003lkjh4gfd3sap","code":"fr-fr"},"requested":1,"applied":1,"stale":0}}},"exampleType":"examples"}},"exampleType":"examples"},"aae7775d-4777-4cf5-bf56-c3926c17d599":{"description":"Malformed body, unconfigured locale, the project default language, or more than 250 entries","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"},"2566f29b-41f3-4ea4-a656-96f3c7e04a4c":{"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"},"b384985c-df32-4643-adb1-d0288185b577":{"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"},"0a19cae2-ca17-4c3e-94ea-6a5382bd7224":{"description":"Project not found, page not owned by this project, or an item not on that page","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"},"ed54c821-a450-4ea4-b823-3d2de902477b":{"description":"Method not allowed","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"},"e06942c7-e0cc-4ff6-88df-437c6260878e":{"description":"Unexpected server error. Also returned when the translations COMMITTED but the cache fan-out failed: the message says how many were applied and that they may not be readable yet. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops.","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":"Apply translations for one page and locale - Weaverse","navMaps":{"firstHrefInVersion":{"v5.x":{"href":"/content-api/translations/apply-translations-for-one-page-and-locale","matchLevel":0}},"firstHrefInLanguage":{}},"originalFileLocation":"content-api/translations/apply-translations-for-one-page-and-locale.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=\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned. - Only Translation rows change. Base page content, its items and every other locale are untouched. - The project default language is rejected (400): it is the source other locales translate from. - Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested. - translation: \u0026quot;\u0026quot; clears a key, keeping the tombstone row that distinguishes \u0026quot;cleared\u0026quot; from \u0026quot;never translated\u0026quot;. - targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write. - At most 250 entries per request; duplicate itemId + key pairs are rejected. - A request that applies nothing advances no project revision and flushes no cache. - If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops. Required scope: content:write\">\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=\"Apply translations for one page and locale - Weaverse\">\u003cmeta data-mint-head property=\"og:description\" content=\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned. - Only Translation rows change. Base page content, its items and every other locale are untouched. - The project default language is rejected (400): it is the source other locales translate from. - Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested. - translation: \u0026quot;\u0026quot; clears a key, keeping the tombstone row that distinguishes \u0026quot;cleared\u0026quot; from \u0026quot;never translated\u0026quot;. - targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write. - At most 250 entries per request; duplicate itemId + key pairs are rejected. - A request that applies nothing advances no project revision and flushes no cache. - If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops. Required scope: content:write\">\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/translations/apply-translations-for-one-page-and-locale\">\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=Translations\u0026amp;title=Apply+translations+for+one+page+and+locale\u0026amp;description=Writes+translation+overrides+for+an+owned+page+and+one+configured%2C+non-default+target+locale.+Send+the+entries+read+from+%60GET%60+with+%60translation%60+replaced%3B+%60sou\u0026amp;theme=0d100f7670b454d40a653506\u0026amp;signature=5369ef4ecd7c29d0e112babf66fc2499b527bf8464358fea90453e9cf29d89e7\">\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=\"Apply translations for one page and locale - Weaverse\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned. - Only Translation rows change. Base page content, its items and every other locale are untouched. - The project default language is rejected (400): it is the source other locales translate from. - Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested. - translation: \u0026quot;\u0026quot; clears a key, keeping the tombstone row that distinguishes \u0026quot;cleared\u0026quot; from \u0026quot;never translated\u0026quot;. - targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write. - At most 250 entries per request; duplicate itemId + key pairs are rejected. - A request that applies nothing advances no project revision and flushes no cache. - If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops. Required scope: content:write\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://weaverse.mintlify.site/docs/_mintlify/api/og/v2?division=Translations\u0026amp;title=Apply+translations+for+one+page+and+locale\u0026amp;description=Writes+translation+overrides+for+an+owned+page+and+one+configured%2C+non-default+target+locale.+Send+the+entries+read+from+%60GET%60+with+%60translation%60+replaced%3B+%60sou\u0026amp;theme=0d100f7670b454d40a653506\u0026amp;signature=5369ef4ecd7c29d0e112babf66fc2499b527bf8464358fea90453e9cf29d89e7\">\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/translations/apply-translations-for-one-page-and-locale\">\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/translations/apply-translations-for-one-page-and-locale.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/translations/apply-translations-for-one-page-and-locale#webpage\",\"url\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale\",\"name\":\"Apply translations for one page and locale\",\"description\":\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned. - Only Translation rows change. Base page content, its items and every other locale are untouched. - The project default language is rejected (400): it is the source other locales translate from. - Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested. - translation: \\\"\\\" clears a key, keeping the tombstone row that distinguishes \\\"cleared\\\" from \\\"never translated\\\". - targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write. - At most 250 entries per request; duplicate itemId + key pairs are rejected. - A request that applies nothing advances no project revision and flushes no cache. - If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops. Required scope: content:write\",\"isPartOf\":{\"@id\":\"https://weaverse.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Translations\",\"item\":\"https://weaverse.io/docs/content-api/translations/read-a-pages-translations-for-one-locale\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apply translations for one page and locale\",\"item\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale#apireference\",\"headline\":\"Apply translations for one page and locale\",\"name\":\"Apply translations for one page and locale\",\"description\":\"Writes translation overrides for an owned page and one configured, non-default target locale. Send the entries read from GET with translation replaced; source and targetGeneration must be the values GET returned. - Only Translation rows change. Base page content, its items and every other locale are untouched. - The project default language is rejected (400): it is the source other locales translate from. - Each entry is compare-and-set on both its source and its targetGeneration, so a delayed agent can never overwrite a source the merchant edited or a newer translation another writer stored. Refused entries are counted in stale and were not written; re-read and resubmit them. applied + stale = requested. - translation: \\\"\\\" clears a key, keeping the tombstone row that distinguishes \\\"cleared\\\" from \\\"never translated\\\". - targetGeneration is required on every entry (null when GET returned null); omitting it is a 400, not a blind write. - At most 250 entries per request; duplicate itemId + key pairs are rejected. - A request that applies nothing advances no project revision and flushes no cache. - If the write committed but cache invalidation failed, the response is a 500 whose message states how many entries were applied. Verify with GET; retrying the same entries will not flush the cache, because they then lose the target compare-and-set as no-ops. Required scope: content:write\",\"url\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale\",\"mainEntityOfPage\":{\"@id\":\"https://weaverse.io/docs/content-api/translations/apply-translations-for-one-page-and-locale#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","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","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","description":"Returns every translatable text key of an owned page for one configured target locale: the source text the runtime translates from, the current target text, and the `targetGeneration` a writeback must replay.\n\n- Sources are resolved server-side from the item value, its component-schema default, or the project default language overlay (whichever the runtime actually translates from). Client-supplied schemas or bare item ids are never trusted.\n- `translation: null` means no row exists, or the stored one answers a source the merchant has since changed. `\"\"` is a deliberate clear.\n- `targetGeneration` is the raw stored target value at read time (`null` = no row, `\"\"` = cleared). Replay it verbatim on `POST`.\n- `language.isDefault` is `true` when the locale is the project default language; `POST` refuses to write it.\n- Not cached: a cached generation would guarantee a stale write.\n- Text only. Image translations are not exposed here; use `GET /projects/{projectId}/translation-units?kind=image`.\n\nWorkflow: `GET` this page and locale, change `translation` on the entries you want to write, `POST` them back unchanged otherwise, then `GET` again to confirm.\n\nRequired scope: `content:read`","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","description":"Project-wide translation inventory for one target locale: every unit an agent may translate, with opaque ids, source and target generations, context, storefront usages and a status summary. This is the first step of the translation-unit workflow:\n\n1. `GET /translation-units?targetLocale=…` (optionally `status=missing,stale`) and page with `after=\u003cnextCursor>` while `hasMore` is `true`.\n2. `POST /translations/validate` with the units you translated: every check runs, nothing is written, and each unit reports `apply` or `unchanged`.\n3. `POST /translations/apply` with the same body: the checks re-run under the project lock and the batch is written atomically (compare-and-set on both generations).\n4. Use the `readback` in the apply response, or list again, to confirm.\n\nWhat is listed:\n- Units of the pages the target locale actually renders, resolved with the storefront cascade. Items shared by several pages (global sections) appear once, with every route in `usages`.\n- Only fields the stored project schema approves: text, richtext and textarea inputs and their defaults. Components without a stored schema, and fields of other input types, are never listed or writable.\n- `kind=text` (default) lists text units; `kind=image` lists per-locale image overrides at declared image inputs, on the same protocol with an image object as the value.\n- `summary` counts `current`, `missing` and `stale` across all units of the requested kind (before the `status` filter), plus `excluded`: pages the locale renders that this project cannot write (inherited from a parent project or shared with another project).\n- A target is `missing` when no row exists or it was cleared, and `stale` when the stored translation answers a source that has since changed.\n- `usages` lists only concrete storefront paths and may be empty for templates, articles and system pages. Paths use the default route prefixes; a custom page prefix configured in Studio is not reflected.\n\nBehaviour:\n- Ordering is deterministic (by unit id). `limit` is 1-100 (default 100); `after` is a strict lower bound, so a cursor naming a unit that has since disappeared still resumes correctly.\n- `status` accepts a comma-separated list or repeated parameters.\n- `targetLocale` must be a configured, non-default language (400 otherwise).\n- Uncached by design: it carries the generations a write compare-and-sets against.\n\nAuthentication: accepts shop API keys, scoped API keys and delegated MCP OAuth tokens that hold the scope, and project-bound translation agent tokens (`wv_agent_…`, Authorization header only). Agent tokens are accepted only by this route and `POST /translations/{operation}`; a token bound to another project gets 403.\n\nRequired scope: `translations:read`","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":"Apply translations for one page and locale - 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"]}