Query `translatableResource(resourceId: $productId)` to retrieve the product's translatable content fields and their `digest` values — each field has a SHA-256 digest of the original content that you must include in the translation input
Identify the field keys you want to translate (e.g., `title`, `body_html`, `handle`) from the returned `translatableContent` array
Call `translationsRegister(resourceId: $productId, translations: [{locale: "de", key: "title", value: "Mein Produkt", translatableContentDigest: $digest}])` for each field and locale
Check the returned `translations` array and `userErrors` in the payload; a digest mismatch (when original content has changed since you fetched it) causes a validation error — re-fetch the digest and retry
Repeat for other translatable resources (collections, metafields, shop policies) using their respective GIDs as `resourceId`
Verify translations by querying the Storefront API with `@inContext(language: DE)` and confirming the returned product title matches the registered translation
Known gotchas
The `translatableContentDigest` field is mandatory and must match the current SHA-256 hash of the source field's content; if the original product was edited since you fetched the digest, the registration will fail with a digest mismatch error
translationsRegister requires the `write_translations` access scope — this is separate from product write scopes and must be explicitly declared in your app
Translations registered for a locale that is not enabled on any Market will be stored but never served to buyers — always confirm the target locale is enabled in Settings > Languages before registering
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp