{
"message": "Component with developer ID \"component-id-1\" not found"
}
Components
Update components
Updates a set of components’ base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables.
Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged.
A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead.
In workspaces that have opted into library component versioning, a component with unpublished changes can’t have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.
When set to 'html', all text values in this request (including plural text) are parsed as HTML and saved as rich text. Supported formatting: <strong>/<b>, <em>/<i>, <u>, <s>, and <br> for line breaks. <sup> and <sub> are only supported for workspaces with superscript and subscript enabled. Unsupported markup (for example links, lists, or headings) is dropped and its text content kept.
Note: Fully-bolded strings will have that bold styling stripped, as Figma does not support bolding an entire text layer this way.
When omitted, text is saved as plaintext and any markup is stored literally.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ditto","description":"Developer documentation for Ditto, the source of truth for product text. Scan a codebase to import its strings, then connect coding agents through the Ditto MCP server, link Figma files, and pull localized string files with the CLI.","colors":{"primary":"#E2B103","light":"#F0D164","dark":"#1D1700"},"logo":{"light":"https://mintcdn.com/ditto/A9jN5zv6WG_Dk9hK/logo/ditto_logo.svg?fit=max\u0026auto=format\u0026n=A9jN5zv6WG_Dk9hK\u0026q=85\u0026s=4e38ddaa8955775a191cbe1616e02312","dark":"https://mintcdn.com/ditto/A9jN5zv6WG_Dk9hK/logo/ditto_logo.svg?fit=max\u0026auto=format\u0026n=A9jN5zv6WG_Dk9hK\u0026q=85\u0026s=4e38ddaa8955775a191cbe1616e02312"},"favicon":"https://mintcdn.com/ditto/WgRtoF9rLXWv6hNh/favicon.jpeg?fit=max\u0026auto=format\u0026n=WgRtoF9rLXWv6hNh\u0026q=85\u0026s=011fcbfc2411f0c04ab811e7b701750c","background":{"color":{"dark":"#11141B"}},"navbar":{"links":[{"href":"mailto:support@dittowords.com","label":"Support"}],"primary":{"type":"button","label":"Open App","href":"https://app.dittowords.com"}},"footer":{"socials":{"twitter":"https://twitter.com/dittowords","github":"https://github.com/dittowords","linkedin":"https://www.linkedin.com/company/ditto-app"}},"seo":{"organization":{"id":"https://www.dittowords.com/#organization","name":"Ditto","url":"https://www.dittowords.com","logo":"https://developer.dittowords.com/logo/ditto_logo.svg","sameAs":["https://twitter.com/dittowords","https://github.com/dittowords","https://www.linkedin.com/company/ditto-app"]},"indexing":"navigable"},"contextual":{"options":["copy","view","claude","chatgpt","mcp","cursor","vscode"],"display":"header"},"markdown":{"instructions":["These are Ditto's developer docs. Ditto is a single source of truth for product copy across design, review, localization, and code.","The first step on any codebase is a scan: https://developer.dittowords.com/get-started/scan-your-repo.md. That page also covers reviewing the style guide Ditto drafts from the scan. After it, the follow-on guides are Connect Figma files and Set up localization (under /guides/) and Connect the Ditto MCP (the Setup page of the MCP reference).","Two different MCP servers: the Ditto MCP server at https://api.dittowords.com/v2/mcp gives an agent a workspace's text and style guide rules; the documentation MCP server at https://developer.dittowords.com/mcp searches these docs.","Prefer logging in with a Ditto account (npx -y @dittowords/cli@latest login; OAuth in MCP clients) over API keys. API keys are for CI and headless clients only.","Commands are complete as written and use npx -y @dittowords/cli@latest; nothing needs a global install."]},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Help Guides","icon":"book-open-cover","href":"https://help.dittowords.com/en/"},{"anchor":"What's New","icon":"newspaper","href":"https://www.dittowords.com/whats-new"},{"anchor":"Figma Plugin","icon":"figma","href":"https://www.figma.com/community/plugin/798826066406007173/ditto-manage-copy-from-design-to-production"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ditto","hasAudioNarration":false,"actualSubdomain":"ditto","customDomains":["developer.dittowords.com"],"gitSource":{"type":"github","owner":"dittowords","repo":"ditto-app","deployBranch":"master","contentDirectory":"docs-public","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae8ed523bb3be0fc83986bd","collectionId":"429c0528-e487-45b3-9c55-b2cef3bd9c31","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae8ed523bb3be0fc83986bd"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae8ed523bb3be0fc83986bd","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Documentation","count":97},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"Endpoints","count":66},{"language":"default","tag":"Legacy","count":18},{"language":"default","tag":"Components","count":16},{"language":"default","tag":"Projects","count":8},{"language":"default","tag":"Text Items","count":8},{"language":"default","tag":"CLI Reference","count":7},{"language":"default","tag":"Component Folders","count":6},{"language":"default","tag":"Style guides","count":6}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/components/patch-components","slug":"/api-reference/components/patch-components","pageMetadata":{"openapi":"openapi.json patch /components","title":"Update components","description":"Updates a set of components' base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables.\n\nEach component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged.\n\nA Developer ID can appear at most once in `updates`. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead.\n\nIn workspaces that have opted into library component versioning, a component with unpublished changes can't have its `text`, `plurals`, `tags`, `notes`, or `characterLimit` updated directly, because publishing those changes would overwrite the unpublished updates.","href":"/api-reference/components/patch-components"},"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 p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Updates a set of components’ base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A Developer ID can appear at most once in \", _jsx(_components.code, {\n children: \"updates\"\n }), \". A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"In workspaces that have opted into library component versioning, a component with unpublished changes can’t have its \", _jsx(_components.code, {\n children: \"text\"\n }), \", \", _jsx(_components.code, {\n children: \"plurals\"\n }), \", \", _jsx(_components.code, {\n children: \"tags\"\n }), \", \", _jsx(_components.code, {\n children: \"notes\"\n }), \", or \", _jsx(_components.code, {\n children: \"characterLimit\"\n }), \" updated directly, because publishing those changes would overwrite the unpublished updates.\"]\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":{"openapi":"openapi.json patch /components","title":"Update components","description":"Updates a set of components' base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables.\n\nEach component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged.\n\nA Developer ID can appear at most once in `updates`. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead.\n\nIn workspaces that have opted into library component versioning, a component with unpublished changes can't have its `text`, `plurals`, `tags`, `notes`, or `characterLimit` updated directly, because publishing those changes would overwrite the unpublished updates.","href":"/api-reference/components/patch-components"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Components"],"description":"Updates a set of components' base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables.\n\nEach component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged.\n\nA Developer ID can appear at most once in `updates`. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead.\n\nIn workspaces that have opted into library component versioning, a component with unpublished changes can't have its `text`, `plurals`, `tags`, `notes`, or `characterLimit` updated directly, because publishing those changes would overwrite the unpublished updates.","summary":"Update components","security":["cc5dfe59-e733-4166-b5dc-1a66d40e77db"],"requestBody":"4b2cfef2-52f3-4ec4-abbe-9306d858c0da","responses":{"200":"fa7d3a3f-88a5-4fb3-88e2-845f6d32127a","400":"cdfc3602-c79f-4812-83a5-f6f262222b61"},"method":"patch","type":"path","servers":["8892940f-7a15-4835-801c-baeb17547cf7"],"path":"/components","baseUrlOptions":["https://api.dittowords.com/v2"],"title":"Update components","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"updates":{"type":"array","items":{"type":"object","properties":{"developerId":{"type":"string","description":"The component's developer ID","isRequired":true,"uniqueKey":"updates.items.[INDEX].developerId","typeLabel":"string"},"text":{"type":"string","description":"The text the component will be updated to. Text will remain unchanged if unset. **Note:** Cannot be combined with plurals in the same update object. To update both the display text and other plural forms at once, include the first plural form in the plurals upsert array instead.","uniqueKey":"updates.items.[INDEX].text","typeLabel":"string"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"updates.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"description":"The set of tags that will be set on this component. Other tags will be removed. If unset tags will remain unchanged.","uniqueKey":"updates.items.[INDEX].tags","typeLabel":"string[]"},"status":{"type":"string","description":"The status to set on this component (for example: 'NONE', 'WIP', 'REVIEW', 'FINAL'). If not provided, status will remain unchanged. These are stored status keys; by default the web app and Figma plugin display them as NONE = \"Draft\", WIP = \"In Progress\", REVIEW = \"In Review\", FINAL = \"Final\" (a workspace may rename these or replace the set entirely, so none of these keys are guaranteed to exist — read the workspace's actual statuses from GET /v2/statuses or the list_statuses MCP tool rather than assuming this set).","uniqueKey":"updates.items.[INDEX].status","typeLabel":"string"},"assignee":{"oneOf":[{"type":"string","format":"email","description":"The email of the user to assign to the component. If null the assignee will be removed. If not provided, assignee will remain unchanged.","uniqueKey":"updates.items.[INDEX].assignee.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","format":"email","description":"The email of the user to assign to the component. If null the assignee will be removed. If not provided, assignee will remain unchanged.","uniqueKey":"updates.items.[INDEX].assignee.oneOf.1","typeLabel":"null"}],"uniqueKey":"updates.items.[INDEX].assignee","typeLabel":"string\u003cemail> | null"},"integrated":{"type":"boolean","description":"Mark the component as integrated or not integrated into development. If not provided, integration status will remain unchanged.","uniqueKey":"updates.items.[INDEX].integrated","typeLabel":"boolean"},"notes":{"oneOf":[{"type":"string","description":"Notes for the component. Use null or empty string to clear notes. If not provided, notes will remain unchanged.","uniqueKey":"updates.items.[INDEX].notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"Notes for the component. Use null or empty string to clear notes. If not provided, notes will remain unchanged.","uniqueKey":"updates.items.[INDEX].notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"updates.items.[INDEX].notes","typeLabel":"string | null"},"characterLimit":{"oneOf":[{"type":"number","minimum":1,"description":"Character limit for the component. Use null to remove the limit. If not provided, character limit will remain unchanged.","uniqueKey":"updates.items.[INDEX].characterLimit.oneOf.0","typeLabel":"number"},{"type":"null","minimum":1,"description":"Character limit for the component. Use null to remove the limit. If not provided, character limit will remain unchanged.","uniqueKey":"updates.items.[INDEX].characterLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"updates.items.[INDEX].characterLimit","typeLabel":"number | null"},"variables":{"type":"array","items":{"type":"string","uniqueKey":"updates.items.[INDEX].variables.items.[INDEX]","typeLabel":"string"},"description":"Developer IDs of variables (the `id` field from GET /v2/variables) used in this update's text or plurals. Text fields support `{{variable_name}}` placeholders that will be resolved using the variables listed here. Placeholders whose names are not in this list are kept as literal text.","uniqueKey":"updates.items.[INDEX].variables","typeLabel":"string[]"},"plurals":{"type":"object","properties":{"upsert":{"type":"array","items":{"type":"object","properties":{"form":{"type":"string","enum":["one","two","few","many","zero","other"],"description":"The plural form","isRequired":true,"uniqueKey":"updates.items.[INDEX].plurals.upsert.items.[INDEX].form","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"The text for this plural form","isRequired":true,"uniqueKey":"updates.items.[INDEX].plurals.upsert.items.[INDEX].text","typeLabel":"string"}},"required":["form","text"],"uniqueKey":"updates.items.[INDEX].plurals.upsert.items.[INDEX]","typeLabel":"object"},"description":"Array of plural forms to create or update. If a plural with the given form already exists, its text will be updated. Otherwise, a new plural will be created. Each form may only appear once in the array.","uniqueKey":"updates.items.[INDEX].plurals.upsert","typeLabel":"object[]"},"remove":{"type":"array","items":{"type":"string","enum":["one","two","few","many","zero","other"],"uniqueKey":"updates.items.[INDEX].plurals.remove.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Array of plural forms to remove from the text item. Each form may only appear once. A form cannot appear in both upsert and remove.","uniqueKey":"updates.items.[INDEX].plurals.remove","typeLabel":"enum\u003cstring>[]"}},"description":"Optional plural form updates. Existing plural forms not mentioned in either upsert or remove are preserved. The order of plurals matters: the first plural form is the 'master' value whose text is used as the text item's display text. New plurals are appended after existing ones. If you need to change which plural is first, remove and re-add them in the desired order.","uniqueKey":"updates.items.[INDEX].plurals","typeLabel":"object"},"newDeveloperId":{"type":"string","description":"A new developer ID for this component. Must be unique within the workspace. Can be set alongside other field changes in the same update object.","uniqueKey":"updates.items.[INDEX].newDeveloperId","typeLabel":"string"},"folderId":{"oneOf":[{"type":"string","description":"The Developer ID of the folder to move this component into. Provide null or \"root\" to move it to the library root (All Components). Omit to leave the component's folder unchanged.","uniqueKey":"updates.items.[INDEX].folderId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Developer ID of the folder to move this component into. Provide null or \"root\" to move it to the library root (All Components). Omit to leave the component's folder unchanged.","uniqueKey":"updates.items.[INDEX].folderId.oneOf.1","typeLabel":"null"}],"uniqueKey":"updates.items.[INDEX].folderId","typeLabel":"string | null"}},"required":["developerId"],"uniqueKey":"updates.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"Array of updates to components.","isRequired":true,"uniqueKey":"updates","typeLabel":"object[]"},"variantId":{"type":"string","description":"Developer ID of the target variant. If a component does not already have the target variant, it will be added. Omit if targeting base text.","uniqueKey":"variantId","typeLabel":"string"},"forceVariantCreation":{"type":"boolean","description":"If true, and the provided variantId is not found, create the variant. A variant name will be generated based on the passed in ID.","uniqueKey":"forceVariantCreation","typeLabel":"boolean"},"richText":{"type":"string","enum":["html"],"description":"When set to 'html', all `text` values in this request (including plural text) are parsed as HTML and saved as rich text. Supported formatting: `\u003cstrong>`/`\u003cb>`, `\u003cem>`/`\u003ci>`, `\u003cu>`, `\u003cs>`, and `\u003cbr>` for line breaks. `\u003csup>` and `\u003csub>` are only supported for workspaces with superscript and subscript enabled. Unsupported markup (for example links, lists, or headings) is dropped and its text content kept.\n\nNote: Fully-bolded strings will have that bold styling stripped, as Figma does not support bolding an entire text layer this way.\n\nWhen omitted, text is saved as plaintext and any markup is stored literally.","uniqueKey":"richText","typeLabel":"enum\u003cstring>"}},"required":["updates"],"example":{"variantId":"french","updates":[{"developerId":"component-id-1","text":"Updated text","status":"REVIEW"}]},"uniqueKey":"","typeLabel":"object"},"examples":{"update_base_text":{"title":"update_base_text","value":{"updates":[{"developerId":"component-id-1","text":"Hello!"}]}},"update_variant_text":{"title":"update_variant_text","value":{"variantId":"french","updates":[{"developerId":"component-id-1","text":"Bonjour!"}]}},"update_with_variables":{"title":"update_with_variables","description":"Use `{{variable_name}}` placeholders in the text and list the variable Developer IDs in `variables`. Variables not in the list are kept as literal text.","value":{"updates":[{"developerId":"component-id-1","text":"Hello, {{user_name}}!","variables":["user_name"]}]}},"update_with_rich_text":{"title":"update_with_rich_text","description":"Set `richText` to `html` to have every `text` value in the request parsed as HTML and saved as rich text. Supported formatting: `\u003cstrong>`/`\u003cb>`, `\u003cem>`/`\u003ci>`, `\u003cu>`, `\u003cs>`, and `\u003cbr>` for line breaks. `\u003csup>` and `\u003csub>` are only supported for workspaces with superscript and subscript enabled. Unsupported markup such as links, lists, or headings is dropped while its text content is kept.\n\nNote: Fully-bolded strings will have that bold styling stripped, as Figma does not support bolding an entire text layer this way.\n\nWithout this flag, markup is saved as plaintext.","value":{"richText":"html","updates":[{"developerId":"component-id-1","text":"\u003cstrong>Updated\u003c/strong> text"}]}},"update_status":{"title":"update_status","value":{"updates":[{"developerId":"component-id-1","status":"FINAL"},{"developerId":"component-id-2","status":"REVIEW"}]}},"update_notes_and_limit":{"title":"update_notes_and_limit","value":{"updates":[{"developerId":"component-id-1","notes":"Keep this under the character limit","characterLimit":60}]}},"update_assignee":{"title":"update_assignee","value":{"updates":[{"developerId":"component-id-1","assignee":"john@example.com"},{"developerId":"component-id-2","assignee":null}]}},"update_tags":{"title":"update_tags","value":{"updates":[{"developerId":"component-id-1","tags":["tag-1","tag-2"]}]}},"add_plurals":{"title":"add_plurals","value":{"updates":[{"developerId":"component-id-1","plurals":{"upsert":[{"form":"one","text":"item"},{"form":"other","text":"items"}]}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"fa7d3a3f-88a5-4fb3-88e2-845f6d32127a":{"description":"Returns success status of the update operation","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the update was successful","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"}},"required":["success"],"example":{"success":true},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true}}},"exampleType":"generated"}},"exampleType":"generated"},"cdfc3602-c79f-4812-83a5-f6f262222b61":{"description":"Returned when the request body fails validation. Common causes include: a Developer ID that does not match any existing component, a variant ID that does not exist (when forceVariantCreation is not set), an assignee email that does not correspond to a workspace member, a variable name not found in the workspace, a content update to a component with unpublished changes, or providing both `text` and `plurals` in the same update object.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the validation failure","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"details":{"type":"object","description":"Optional additional error details","uniqueKey":"details","typeLabel":"object"},"unpublishedDeveloperIds":{"type":"array","items":{"type":"string","uniqueKey":"unpublishedDeveloperIds.items.[INDEX]","typeLabel":"string"},"description":"Developer IDs of the components whose content can't be updated directly because they have unpublished changes. Only included for that error.","uniqueKey":"unpublishedDeveloperIds","typeLabel":"string[]"}},"required":["message"],"uniqueKey":"","typeLabel":"object"},"example":{"message":"Component with developer ID \"component-id-1\" not found"},"examples":{"Example":{"title":"Example","value":{"message":"Component with developer ID \"component-id-1\" not found"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"cc5dfe59-e733-4166-b5dc-1a66d40e77db":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"8892940f-7a15-4835-801c-baeb17547cf7":{"url":"https://api.dittowords.com/v2"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Authorization","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"ditto","siteName":"Ditto","title":"Update components - Ditto","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-21T13:20:12.927Z","originalFileLocation":"api-reference/components/patch-components.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=\"Updates a set of components\u0026#x27; base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables. Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged. A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead. In workspaces that have opted into library component versioning, a component with unpublished changes can\u0026#x27;t have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ditto\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_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=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update components - Ditto\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates a set of components\u0026#x27; base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables. Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged. A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead. In workspaces that have opted into library component versioning, a component with unpublished changes can\u0026#x27;t have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ditto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.dittowords.com/api-reference/components/patch-components\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ditto.mintlify.app/_mintlify/api/og/v2?division=Components\u0026amp;title=Update+components\u0026amp;description=Updates+a+set+of+components%27+base+or+variant+text%2C+plural+forms%2C+tags%2C+status%2C+assignee%2C+notes%2C+character+limit%2C+integrated%2C+and+variables.%0A%0AEach+component+is+i\u0026amp;theme=cafcf8215feabbb48baf53ae\u0026amp;signature=db3183a3ce428788bf6af486773362608255673fc1ede15880887573120d36c5\">\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=\"Update components - Ditto\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates a set of components\u0026#x27; base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables. Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged. A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead. In workspaces that have opted into library component versioning, a component with unpublished changes can\u0026#x27;t have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ditto.mintlify.app/_mintlify/api/og/v2?division=Components\u0026amp;title=Update+components\u0026amp;description=Updates+a+set+of+components%27+base+or+variant+text%2C+plural+forms%2C+tags%2C+status%2C+assignee%2C+notes%2C+character+limit%2C+integrated%2C+and+variables.%0A%0AEach+component+is+i\u0026amp;theme=cafcf8215feabbb48baf53ae\u0026amp;signature=db3183a3ce428788bf6af486773362608255673fc1ede15880887573120d36c5\">\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=\"/mintlify-assets/_mintlify/favicons/ditto/sayH8aGeMpv32blB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ditto\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#E2B103\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.dittowords.com/api-reference/components/patch-components\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/components/patch-components.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.dittowords.com/#organization\",\"name\":\"Ditto\",\"url\":\"https://www.dittowords.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://developer.dittowords.com/logo/ditto_logo.svg\"},\"sameAs\":[\"https://twitter.com/dittowords\",\"https://github.com/dittowords\",\"https://www.linkedin.com/company/ditto-app\"]},{\"@type\":\"WebSite\",\"@id\":\"https://developer.dittowords.com#website\",\"name\":\"Ditto\",\"url\":\"https://developer.dittowords.com\",\"publisher\":{\"@id\":\"https://www.dittowords.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.dittowords.com/api-reference/components/patch-components#webpage\",\"url\":\"https://developer.dittowords.com/api-reference/components/patch-components\",\"name\":\"Update components\",\"description\":\"Updates a set of components' base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables. Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged. A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead. In workspaces that have opted into library component versioning, a component with unpublished changes can't have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.\",\"dateModified\":\"2026-10-21T13:20:12.927Z\",\"isPartOf\":{\"@id\":\"https://developer.dittowords.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.dittowords.com/api-reference/components/patch-components#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.dittowords.com/api-reference/components/patch-components#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://developer.dittowords.com/api-reference/authentication\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Endpoints\",\"item\":\"https://developer.dittowords.com/api-reference/activity/get-activity\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Components\",\"item\":\"https://developer.dittowords.com/api-reference/components/get-components\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Update components\",\"item\":\"https://developer.dittowords.com/api-reference/components/patch-components\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.dittowords.com/api-reference/components/patch-components#apireference\",\"headline\":\"Update components\",\"name\":\"Update components\",\"description\":\"Updates a set of components' base or variant text, plural forms, tags, status, assignee, notes, character limit, integrated, and variables. Each component is identified by its Developer ID. Only provided fields are modified — omitted fields remain unchanged. A Developer ID can appear at most once in updates. A request that repeats a Developer ID is rejected with a 400 rather than silently applying the last write and discarding the rest — combine the changes into a single update instead. In workspaces that have opted into library component versioning, a component with unpublished changes can't have its text, plurals, tags, notes, or characterLimit updated directly, because publishing those changes would overwrite the unpublished updates.\",\"url\":\"https://developer.dittowords.com/api-reference/components/patch-components\",\"mainEntityOfPage\":{\"@id\":\"https://developer.dittowords.com/api-reference/components/patch-components#webpage\"},\"dateModified\":\"2026-10-21T13:20:12.927Z\",\"publisher\":{\"@id\":\"https://www.dittowords.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.dittowords.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ditto\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ditto","nav":{"global":{"anchors":[{"anchor":"Help Guides","icon":"book-open-cover","href":"https://help.dittowords.com/en/"},{"anchor":"What's New","icon":"newspaper","href":"https://www.dittowords.com/whats-new"},{"anchor":"Figma Plugin","icon":"figma","href":"https://www.figma.com/community/plugin/798826066406007173/ditto-manage-copy-from-design-to-production"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Start here","pages":[{"title":"Ditto developer documentation","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Scan your repo","href":"/get-started/scan-your-repo"},{"title":"Connect Figma files","href":"/guides/connect-figma-files"},{"title":"Set up localization","href":"/guides/set-up-localization"}]},{"group":"Concepts","pages":[{"title":"Key concepts","href":"/concepts"}]},{"group":"CLI Reference","pages":[{"title":"Install and log in to the Ditto CLI","sidebarTitle":"Install and log in","href":"/cli-reference/authentication"},{"title":"Ditto CLI commands","sidebarTitle":"Commands","href":"/cli-reference/commands"},{"title":"Ditto CLI configuration","sidebarTitle":"Configuration","href":"/cli-reference/configuration"},{"title":"Ditto CLI output files","sidebarTitle":"Files","href":"/cli-reference/files"}]},{"group":"API Reference","pages":[{"title":"Ditto API authentication","sidebarTitle":"Authentication","href":"/api-reference/authentication"},{"group":"Endpoints","pages":[{"group":"Activity","pages":[{"openapi":"openapi.json get /activity","title":"Fetch activity","href":"/api-reference/activity/get-activity"}]},{"group":"Bases","tag":"BETA","pages":[{"openapi":"openapi.json get /bases","tag":"BETA","title":"Fetch bases","href":"/api-reference/bases/get-bases"},{"openapi":"openapi.json get /bases/{baseId}","tag":"BETA","title":"Fetch a base","href":"/api-reference/bases/get-base"},{"openapi":"openapi.json post /bases","tag":"BETA","title":"Create bases","href":"/api-reference/bases/create-bases"},{"openapi":"openapi.json patch /bases/{baseId}","tag":"BETA","title":"Update a base","href":"/api-reference/bases/patch-bases"}]},{"group":"Components","pages":[{"openapi":"openapi.json get /components","title":"Fetch components","href":"/api-reference/components/get-components"},{"openapi":"openapi.json get /components/export","title":"Export components","href":"/api-reference/components/export-components"},{"openapi":"openapi.json post /components","title":"Create components","description":"Creates one or more library components in your workspace.\n\nThe operation is all-or-nothing: if any component is invalid, none are created.","href":"/api-reference/components/create-components"},{"openapi":"openapi.json patch /components","title":"Update components","href":"/api-reference/components/patch-components"},{"openapi":"openapi.json delete /components","title":"Delete components","description":"Deletes library components from the workspace by their developer IDs.","href":"/api-reference/components/delete-components"},{"group":"Text Item Linking","pages":[{"openapi":"openapi.json post /components/publish","title":"Publish a text item to the library","href":"/api-reference/components/publish-component"},{"openapi":"openapi.json patch /components/link","title":"Link text items to a component","href":"/api-reference/components/link-components"},{"openapi":"openapi.json patch /components/unlink","title":"Unlink text items from a component","href":"/api-reference/components/unlink-components"}]},{"group":"Versioning","pages":[{"openapi":"openapi.json get /components/staged","title":"Fetch unpublished component changes","href":"/api-reference/components/get-unpublished-component-changes"},{"openapi":"openapi.json patch /components/staged","title":"Save unpublished component changes","href":"/api-reference/components/save-unpublished-component-changes"},{"openapi":"openapi.json delete /components/staged","title":"Discard unpublished component changes","href":"/api-reference/components/discard-unpublished-component-changes"},{"openapi":"openapi.json post /components/staged/publish","title":"Publish component changes","href":"/api-reference/components/publish-component-changes"},{"openapi":"openapi.json patch /components/upgrade","title":"Upgrade component instances","href":"/api-reference/components/upgrade-component-instances"}]}]},{"group":"Component Folders","pages":[{"openapi":"openapi.json get /componentFolders","title":"Fetch component folders","href":"/api-reference/component-folders/get-component-folders"},{"openapi":"openapi.json post /componentFolders","title":"Create component folders","href":"/api-reference/component-folders/create-component-folders"},{"openapi":"openapi.json patch /componentFolders","title":"Update component folders","href":"/api-reference/component-folders/patch-component-folders"},{"openapi":"openapi.json delete /componentFolders","title":"Delete component folders","href":"/api-reference/component-folders/delete-component-folders"}]},{"group":"Projects","pages":[{"openapi":"openapi.json get /projects","title":"Fetch projects","href":"/api-reference/projects/get-projects"},{"openapi":"openapi.json post /projects","title":"Create a project","href":"/api-reference/projects/create-projects"},{"openapi":"openapi.json patch /projects/{projectId}","title":"Update a project","href":"/api-reference/projects/patch-projects"},{"openapi":"openapi.json post /projects/{projectId}/publish","tag":"BETA","title":"Publish to base","href":"/api-reference/projects/publish-project"},{"openapi":"openapi.json post /projects/{projectId}/updateFromBase","tag":"BETA","sidebarTitle":"Update from base","title":"Update text items from base","href":"/api-reference/projects/update-text-items-from-base"}]},{"group":"Project Blocks","pages":[{"openapi":"openapi.json get /projectBlocks","title":"Fetch project blocks","href":"/api-reference/project-blocks/get-project-blocks"},{"openapi":"openapi.json post /projectBlocks","title":"Create project blocks","href":"/api-reference/project-blocks/create-project-blocks"},{"openapi":"openapi.json patch /projectBlocks","title":"Update project blocks","href":"/api-reference/project-blocks/patch-project-blocks"},{"openapi":"openapi.json delete /projectBlocks","title":"Delete project blocks","href":"/api-reference/project-blocks/delete-project-blocks"}]},{"group":"Statuses","pages":[{"openapi":"openapi.json get /statuses","title":"Fetch statuses","href":"/api-reference/statuses/get-statuses"}]},{"group":"Style guides","pages":[{"title":"Get style guides","openapi":"openapi.json get /styleguides","href":"/api-reference/styleguides/get-styleguides"},{"openapi":"openapi.json post /styleguides","title":"Create a style guide","href":"/api-reference/styleguides/create-styleguides"},{"openapi":"openapi.json patch /styleguides","title":"Update a style guide","href":"/api-reference/styleguides/patch-styleguides"},{"openapi":"openapi.json post /styleguides/rules","title":"Create style guide rules","href":"/api-reference/styleguides/create-styleguide-rules"},{"openapi":"openapi.json patch /styleguides/rules","title":"Update style guide rules","href":"/api-reference/styleguides/patch-styleguide-rules"},{"openapi":"openapi.json delete /styleguides/rules","title":"Delete style guide rules","href":"/api-reference/styleguides/delete-styleguide-rules"}]},{"group":"Text Items","pages":[{"openapi":"openapi.json get /textItems","title":"Fetch text items","href":"/api-reference/text-items/get-text-items"},{"openapi":"openapi.json get /textItems/export","title":"Export text items","href":"/api-reference/text-items/export-text-items"},{"openapi":"openapi.json post /textItems","title":"Create text items","href":"/api-reference/text-items/create-text-items"},{"openapi":"openapi.json post /textItems/fromBase","tag":"BETA","title":"Create text items from a base","href":"/api-reference/text-items/create-text-items-from-base"},{"openapi":"openapi.json patch /textItems","title":"Update text items","href":"/api-reference/text-items/patch-text-items"},{"openapi":"openapi.json put /textItems","title":"Update text items","href":"/api-reference/text-items/update-text-items"},{"openapi":"openapi.json delete /textItems","title":"Delete text items","href":"/api-reference/text-items/delete-text-items"},{"openapi":"openapi.json post /textItems/linkFigmaNodes","title":"Link Figma nodes to text items","href":"/api-reference/text-items/link-figma-nodes"}]},{"group":"Variables","pages":[{"openapi":"openapi.json get /variables","title":"Fetch variables","href":"/api-reference/variables/get-variables"},{"openapi":"openapi.json post /variables","title":"Create variables","href":"/api-reference/variables/create-variables"},{"openapi":"openapi.json patch /variables","title":"Update variables","href":"/api-reference/variables/patch-variables"},{"openapi":"openapi.json delete /variables","title":"Delete variables","href":"/api-reference/variables/delete-variables"}]},{"group":"Variants","pages":[{"openapi":"openapi.json get /variants","title":"Fetch variants","href":"/api-reference/variants/get-variants"},{"openapi":"openapi.json post /variants","title":"Create variants","href":"/api-reference/variants/create-variants"},{"openapi":"openapi.json patch /variants","title":"Update variants","href":"/api-reference/variants/patch-variants"},{"openapi":"openapi.json delete /variants","title":"Delete variants","href":"/api-reference/variants/delete-variants"}]}]}]},{"group":"String Formats","pages":[{"title":"JSON","icon":"js","href":"/string-formats/json"},{"title":"iOS string formats","sidebarTitle":"iOS Strings","icon":"apple","href":"/string-formats/ios"},{"title":"Android XML string format","sidebarTitle":"Android XML","icon":"android","href":"/string-formats/android"}]},{"group":"MCP Reference","pages":[{"title":"Ditto MCP server overview","sidebarTitle":"Overview","href":"/mcp-reference/overview"},{"title":"Connect the Ditto MCP","sidebarTitle":"Setup","href":"/guides/connect-the-mcp"},{"title":"Ditto MCP tools","sidebarTitle":"Tools","href":"/mcp-reference/tools"},{"title":"Agent instructions","href":"/guides/agent-instructions"}]},{"group":"Ditto Specs CLI","pages":[{"title":"Ditto Specs overview","sidebarTitle":"Overview","href":"/ditto-specs-cli-reference/overview"},{"title":"Ditto Specs CLI setup","sidebarTitle":"Setup","href":"/ditto-specs-cli-reference/setup"},{"title":"Ditto Specs CLI commands","sidebarTitle":"Commands","href":"/ditto-specs-cli-reference/commands"},{"title":"Ditto Spec Files","sidebarTitle":"Spec files","href":"/ditto-specs-cli-reference/spec-files"},{"title":"Ditto Specs agent skills","sidebarTitle":"Agent skills","href":"/ditto-specs-cli-reference/agent-skills"}]},{"group":"Additional Tools","pages":[{"title":"GitHub PR Review Bot","href":"/additional-tools/github-pr-review-bot"},{"title":"Webhooks","href":"/additional-tools/webhooks"},{"title":"GitHub Action","href":"/additional-tools/gh-action"}]},{"group":"Legacy","pages":[{"group":"API Reference","pages":[{"title":"Legacy API authentication","sidebarTitle":"Authentication","href":"/legacy/api-reference-legacy/authentication"},{"group":"Endpoints","pages":[{"group":"Components","pages":[{"openapi":"openapi-legacy.json get /components","title":"Fetch component text","href":"/legacy/api-reference-legacy/components/fetch-component-text"},{"openapi":"openapi-legacy.json post /components/file","title":"Import components via a file","href":"/legacy/api-reference-legacy/components/import-components-via-a-file"},{"openapi":"openapi-legacy.json put /components","title":"Update component text variant","href":"/legacy/api-reference-legacy/components/update-component-text-variant"}]},{"group":"Component Folders","pages":[{"openapi":"openapi-legacy.json get /component-folders","title":"Fetch component folders","href":"/legacy/api-reference-legacy/components-folders/fetch-component-folders"},{"openapi":"openapi-legacy.json get /component-folders/{api_id}/components","title":"Fetch component text by component folder","href":"/legacy/api-reference-legacy/components-folders/fetch-component-text-by-component-folder"}]},{"group":"Projects","pages":[{"openapi":"openapi-legacy.json get /projects/{id}/components","title":"Fetch component text by project id","href":"/legacy/api-reference-legacy/projects/fetch-component-text-by-project-id"},{"openapi":"openapi-legacy.json get /projects","title":"Fetch projects","href":"/legacy/api-reference-legacy/projects/fetch-projects"},{"openapi":"openapi-legacy.json get /projects/{id}","title":"Fetch text by project id","href":"/legacy/api-reference-legacy/projects/fetch-text-by-project-id"}]},{"group":"Project Folders","pages":[{"openapi":"openapi-legacy.json get /project-folders","title":"Fetch project folders","href":"/legacy/api-reference-legacy/project-folders/fetch-project-folders"},{"openapi":"openapi-legacy.json get /project-folders/{folder_id}/projects","title":"Fetch projects by project folder id","href":"/legacy/api-reference-legacy/project-folders/fetch-projects-by-project-folder-id"}]},{"group":"Variables","pages":[{"openapi":"openapi-legacy.json get /variables","title":"Fetch variables","href":"/legacy/api-reference-legacy/variables/fetch-variables"}]},{"group":"Variants","pages":[{"openapi":"openapi-legacy.json get /variants","title":"Fetch variants","href":"/legacy/api-reference-legacy/variants/fetch-variants"}]}]}]},{"group":"CLI Reference","pages":[{"title":"Legacy CLI installation","sidebarTitle":"Installation","href":"/legacy/cli-reference-legacy/authentication"},{"title":"Legacy CLI configuration","sidebarTitle":"Configuration","href":"/legacy/cli-reference-legacy/configuration"},{"title":"Legacy CLI output files","sidebarTitle":"Files","href":"/legacy/cli-reference-legacy/files"}]},{"title":"Legacy tools","href":"/legacy/legacy-tools"},{"title":"Example apps","href":"/example-apps"}]}]},{"tab":"Feedback \u0026 Support","pages":[{"title":"Feedback \u0026 Support","href":"/feedback-support/feedback-support"}]}]},"basePath":"","title":"Update components - Ditto","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}