{ "projectId": "project-id-1", "branchId": null, "results": [ { "figmaNodeId": "1:23", "textItemId": "greeting", "outcome": "linked" }, { "figmaNodeId": "1:30", "textItemId": "submit-button", "outcome": "linked_to_other_text_item", "linkedTextItemId": "header-title", "message": "This Figma text node is already linked to text item \"header-title\"." }, { "figmaNodeId": "1:24", "textItemId": "greeting", "outcome": "not_found", "message": "This Figma text node is not in the cache for the target project context. Sync first, then retry." } ]}
{
"message": "Project \"project-id-1\" is not linked to Figma."
}
{
"message": "Text item \"greeting\" was not found in project \"project-id-1\"."
}
Text Items
Link Figma nodes to text items
Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs.
The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project’s main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings.
The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn’t reflect the link — and later edits to the text item don’t reach that layer — until someone next opens the Ditto Figma plugin on the file.
Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node’s already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component’s text from the Figma plugin) all indicate the node was not linked.
Figma branch ID (from the branch file's Figma URL) that every node in this request belongs to; one branch per request. If omitted, nodes are looked up in the project's main Figma file.
Response
Returns the resolved project and branch context, plus 1 result per distinct Figma node ID
(Linked · object | Linked to another text item · object | Not linked · object)[]
required
Linked
Linked to another text item
Not linked
Show child attributes
{"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":""},"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":"6aee3ddcc5d9abc893e67d94","clientVersion":"0.0.4094","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":"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":"api-reference/text-items/link-figma-nodes","slug":"/api-reference/text-items/link-figma-nodes","pageMetadata":{"openapi":"openapi.json post /textItems/linkFigmaNodes","title":"Link Figma nodes to text items","description":"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs.\n\nThe nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass `branchId` to link nodes inside a branch file; if not provided, nodes are looked up in the project's main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings.\n\nThe link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn't reflect the link — and later edits to the text item don't reach that layer — until someone next opens the Ditto Figma plugin on the file.\n\nUnknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. `linked` indicates a successful outcome. `already_linked` indicates the node is already linked to the requested text item, and `linked_to_other_text_item` indicates the node's already linked to a different text item. Outcomes `not_found` (sync the file from the plugin, then retry), `not_text_node`, `wrong_file_or_branch`, or `main_component_text_node` (link instance text nodes directly, or link the main component's text from the Figma plugin) all indicate the node was not linked.","href":"/api-reference/text-items/link-figma-nodes"},"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: \"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass \", _jsx(_components.code, {\n children: \"branchId\"\n }), \" to link nodes inside a branch file; if not provided, nodes are looked up in the project’s main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn’t reflect the link — and later edits to the text item don’t reach that layer — until someone next opens the Ditto Figma plugin on the file.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. \", _jsx(_components.code, {\n children: \"linked\"\n }), \" indicates a successful outcome. \", _jsx(_components.code, {\n children: \"already_linked\"\n }), \" indicates the node is already linked to the requested text item, and \", _jsx(_components.code, {\n children: \"linked_to_other_text_item\"\n }), \" indicates the node’s already linked to a different text item. Outcomes \", _jsx(_components.code, {\n children: \"not_found\"\n }), \" (sync the file from the plugin, then retry), \", _jsx(_components.code, {\n children: \"not_text_node\"\n }), \", \", _jsx(_components.code, {\n children: \"wrong_file_or_branch\"\n }), \", or \", _jsx(_components.code, {\n children: \"main_component_text_node\"\n }), \" (link instance text nodes directly, or link the main component’s text from the Figma plugin) all indicate the node was not linked.\"]\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 post /textItems/linkFigmaNodes","title":"Link Figma nodes to text items","description":"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs.\n\nThe nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass `branchId` to link nodes inside a branch file; if not provided, nodes are looked up in the project's main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings.\n\nThe link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn't reflect the link — and later edits to the text item don't reach that layer — until someone next opens the Ditto Figma plugin on the file.\n\nUnknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. `linked` indicates a successful outcome. `already_linked` indicates the node is already linked to the requested text item, and `linked_to_other_text_item` indicates the node's already linked to a different text item. Outcomes `not_found` (sync the file from the plugin, then retry), `not_text_node`, `wrong_file_or_branch`, or `main_component_text_node` (link instance text nodes directly, or link the main component's text from the Figma plugin) all indicate the node was not linked.","href":"/api-reference/text-items/link-figma-nodes"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Text Items"],"description":"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs.\n\nThe nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass `branchId` to link nodes inside a branch file; if not provided, nodes are looked up in the project's main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings.\n\nThe link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn't reflect the link — and later edits to the text item don't reach that layer — until someone next opens the Ditto Figma plugin on the file.\n\nUnknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. `linked` indicates a successful outcome. `already_linked` indicates the node is already linked to the requested text item, and `linked_to_other_text_item` indicates the node's already linked to a different text item. Outcomes `not_found` (sync the file from the plugin, then retry), `not_text_node`, `wrong_file_or_branch`, or `main_component_text_node` (link instance text nodes directly, or link the main component's text from the Figma plugin) all indicate the node was not linked.","summary":"Link Figma nodes to text items","security":["44638588-a2eb-424c-a065-4a8bc065e28e"],"requestBody":"4b29d2a6-0885-4eab-a531-fad7015b72e3","responses":{"200":"e0ba3c77-8d84-4ba5-b699-d46d39a6d05d","400":"7a71a3ad-6e9a-4042-a356-9613caeaa019","404":"64367e9f-2bce-4403-86f0-37083980a2db"},"method":"post","type":"path","servers":["c17b7272-afc0-4eb1-bfae-7d1426781740"],"path":"/textItems/linkFigmaNodes","baseUrlOptions":["https://api.dittowords.com/v2"],"title":"Link Figma nodes to text items","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Developer ID of the Ditto project linked to the Figma file containing these nodes.","isRequired":true,"uniqueKey":"projectId","typeLabel":"string"},"links":{"type":"array","items":{"type":"object","properties":{"textItemId":{"type":"string","description":"Developer ID of the existing Ditto text item to link these Figma nodes to.","isRequired":true,"uniqueKey":"links.items.[INDEX].textItemId","typeLabel":"string"},"figmaNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"links.items.[INDEX].figmaNodeIds.items.[INDEX]","typeLabel":"string"},"minItems":1,"description":"Figma text node IDs to link to this text item.","isRequired":true,"uniqueKey":"links.items.[INDEX].figmaNodeIds","typeLabel":"string[]"}},"required":["textItemId","figmaNodeIds"],"uniqueKey":"links.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"Text items and the Figma node IDs to link to each. Max 500 distinct node IDs in total per request, across all links.","isRequired":true,"uniqueKey":"links","typeLabel":"object[]"},"branchId":{"oneOf":[{"type":"string","description":"Figma branch ID (from the branch file's Figma URL) that every node in this request belongs to; one branch per request. If omitted, nodes are looked up in the project's main Figma file.","uniqueKey":"branchId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Figma branch ID (from the branch file's Figma URL) that every node in this request belongs to; one branch per request. If omitted, nodes are looked up in the project's main Figma file.","uniqueKey":"branchId.oneOf.1","typeLabel":"null"}],"uniqueKey":"branchId","typeLabel":"string | null"}},"required":["projectId","links"],"example":{"projectId":"project-id-1","links":[{"textItemId":"greeting","figmaNodeIds":["1:23","1:24"]},{"textItemId":"submit-button","figmaNodeIds":["1:30"]}],"branchId":null},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"projectId":"project-id-1","links":[{"textItemId":"greeting","figmaNodeIds":["1:23","1:24"]},{"textItemId":"submit-button","figmaNodeIds":["1:30"]}],"branchId":null}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"e0ba3c77-8d84-4ba5-b699-d46d39a6d05d":{"description":"Returns the resolved project and branch context, plus 1 result per distinct Figma node ID","content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","isRequired":true,"uniqueKey":"projectId","typeLabel":"string"},"branchId":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"branchId.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"branchId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"branchId","typeLabel":"string | null"},"results":{"type":"array","items":{"oneOf":[{"type":"object","title":"Linked","required":["figmaNodeId","textItemId","outcome"],"properties":{"figmaNodeId":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.figmaNodeId","typeLabel":"string"},"textItemId":{"type":"string","description":"Developer ID of the text item this node was requested to link to.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.textItemId","typeLabel":"string"},"outcome":{"type":"string","enum":["linked","already_linked"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.outcome","typeLabel":"enum\u003cstring>"}},"uniqueKey":"results.items.[INDEX].oneOf.0","typeLabel":"Linked · object"},{"type":"object","title":"Linked to another text item","required":["figmaNodeId","textItemId","outcome","message"],"properties":{"figmaNodeId":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.figmaNodeId","typeLabel":"string"},"textItemId":{"type":"string","description":"Developer ID of the text item this node was requested to link to.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.textItemId","typeLabel":"string"},"outcome":{"type":"string","enum":["linked_to_other_text_item"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.outcome","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.message","typeLabel":"string"},"linkedTextItemId":{"type":"string","description":"Developer ID of the text item the node is already linked to, when Ditto can resolve it.","uniqueKey":"results.items.[INDEX].oneOf.1.linkedTextItemId","typeLabel":"string"}},"uniqueKey":"results.items.[INDEX].oneOf.1","typeLabel":"Linked to another text item · object"},{"type":"object","title":"Not linked","required":["figmaNodeId","textItemId","outcome","message"],"properties":{"figmaNodeId":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.2.figmaNodeId","typeLabel":"string"},"textItemId":{"type":"string","description":"Developer ID of the text item this node was requested to link to.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.2.textItemId","typeLabel":"string"},"outcome":{"type":"string","enum":["not_found","not_text_node","wrong_file_or_branch","main_component_text_node"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.2.outcome","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.2.message","typeLabel":"string"}},"uniqueKey":"results.items.[INDEX].oneOf.2","typeLabel":"Not linked · object"}],"uniqueKey":"results.items.[INDEX]","typeLabel":"Linked · object | Linked to another text item · object | Not linked · object"},"isRequired":true,"uniqueKey":"results","typeLabel":"(Linked · object | Linked to another text item · object | Not linked · object)[]"}},"required":["projectId","branchId","results"],"example":{"projectId":"project-id-1","branchId":null,"results":[{"figmaNodeId":"1:23","textItemId":"greeting","outcome":"linked"},{"figmaNodeId":"1:30","textItemId":"submit-button","outcome":"linked_to_other_text_item","linkedTextItemId":"header-title","message":"This Figma text node is already linked to text item \"header-title\"."},{"figmaNodeId":"1:24","textItemId":"greeting","outcome":"not_found","message":"This Figma text node is not in the cache for the target project context. Sync first, then retry."}]},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"projectId":"project-id-1","branchId":null,"results":[{"figmaNodeId":"1:23","textItemId":"greeting","outcome":"linked"},{"figmaNodeId":"1:30","textItemId":"submit-button","outcome":"linked_to_other_text_item","linkedTextItemId":"header-title","message":"This Figma text node is already linked to text item \"header-title\"."},{"figmaNodeId":"1:24","textItemId":"greeting","outcome":"not_found","message":"This Figma text node is not in the cache for the target project context. Sync first, then retry."}]}}},"exampleType":"generated"}},"exampleType":"generated"},"7a71a3ad-6e9a-4042-a356-9613caeaa019":{"description":"Returned when the project is not linked to Figma, a node ID is mapped to more than one text item, or the request has too many node IDs","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the validation failure","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["message"],"uniqueKey":"","typeLabel":"object"},"example":{"message":"Project \"project-id-1\" is not linked to Figma."},"examples":{"Example":{"title":"Example","value":{"message":"Project \"project-id-1\" is not linked to Figma."}}},"exampleType":"examples"}},"exampleType":"examples"},"64367e9f-2bce-4403-86f0-37083980a2db":{"description":"Returned when the project doesn't exist, or any requested text item doesn't exist in that project","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing what was not found","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["message"],"uniqueKey":"","typeLabel":"object"},"example":{"message":"Text item \"greeting\" was not found in project \"project-id-1\"."},"examples":{"Example":{"title":"Example","value":{"message":"Text item \"greeting\" was not found in project \"project-id-1\"."}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"44638588-a2eb-424c-a065-4a8bc065e28e":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"c17b7272-afc0-4eb1-bfae-7d1426781740":{"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":"Link Figma nodes to text items - Ditto","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T21:09:54.714Z","originalFileLocation":"api-reference/text-items/link-figma-nodes.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=\"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs. The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project\u0026#x27;s main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings. The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn\u0026#x27;t reflect the link — and later edits to the text item don\u0026#x27;t reach that layer — until someone next opens the Ditto Figma plugin on the file. Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node\u0026#x27;s already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component\u0026#x27;s text from the Figma plugin) all indicate the node was not linked.\">\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=\"Link Figma nodes to text items - Ditto\">\u003cmeta data-mint-head property=\"og:description\" content=\"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs. The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project\u0026#x27;s main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings. The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn\u0026#x27;t reflect the link — and later edits to the text item don\u0026#x27;t reach that layer — until someone next opens the Ditto Figma plugin on the file. Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node\u0026#x27;s already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component\u0026#x27;s text from the Figma plugin) all indicate the node was not linked.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ditto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ditto.mintlify.site/_mintlify/api/og/v2?division=Text+Items\u0026amp;title=Link+Figma+nodes+to+text+items\u0026amp;description=Links+Figma+text+nodes+to+existing+text+items+in+a+Figma-linked+project%2C+so+those+nodes+become+Figma+instances+of+their+text+items.+Takes+a+mapping+of+text+item\u0026amp;theme=4036b03ce109cfe5ed49d7db\u0026amp;signature=b16805f463501096f35c73097460cca3ba1a727701d5379bfe5d4287a952a501\">\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=\"Link Figma nodes to text items - Ditto\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs. The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project\u0026#x27;s main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings. The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn\u0026#x27;t reflect the link — and later edits to the text item don\u0026#x27;t reach that layer — until someone next opens the Ditto Figma plugin on the file. Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node\u0026#x27;s already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component\u0026#x27;s text from the Figma plugin) all indicate the node was not linked.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ditto.mintlify.site/_mintlify/api/og/v2?division=Text+Items\u0026amp;title=Link+Figma+nodes+to+text+items\u0026amp;description=Links+Figma+text+nodes+to+existing+text+items+in+a+Figma-linked+project%2C+so+those+nodes+become+Figma+instances+of+their+text+items.+Takes+a+mapping+of+text+item\u0026amp;theme=4036b03ce109cfe5ed49d7db\u0026amp;signature=b16805f463501096f35c73097460cca3ba1a727701d5379bfe5d4287a952a501\">\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/text-items/link-figma-nodes\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/text-items/link-figma-nodes.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/text-items/link-figma-nodes#webpage\",\"url\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes\",\"name\":\"Link Figma nodes to text items\",\"description\":\"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs. The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project's main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings. The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn't reflect the link — and later edits to the text item don't reach that layer — until someone next opens the Ditto Figma plugin on the file. Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node's already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component's text from the Figma plugin) all indicate the node was not linked.\",\"dateModified\":\"2026-10-19T21:09:54.714Z\",\"isPartOf\":{\"@id\":\"https://developer.dittowords.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes#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\":\"Text Items\",\"item\":\"https://developer.dittowords.com/api-reference/text-items/get-text-items\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Link Figma nodes to text items\",\"item\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes#apireference\",\"headline\":\"Link Figma nodes to text items\",\"name\":\"Link Figma nodes to text items\",\"description\":\"Links Figma text nodes to existing text items in a Figma-linked project, so those nodes become Figma instances of their text items. Takes a mapping of text item developer IDs to Figma node IDs. The nodes must already have been synced to Ditto through the Ditto Figma plugin. Get node IDs from Figma (its REST API or MCP server). Pass branchId to link nodes inside a branch file; if not provided, nodes are looked up in the project's main Figma file. A max of 500 distinct node IDs are allowed per request across all link mappings. The link is recorded in Ditto right away, but Ditto writes to a Figma file only from the plugin. So the Figma layer doesn't reflect the link — and later edits to the text item don't reach that layer — until someone next opens the Ditto Figma plugin on the file. Unknown text item IDs, or a node ID mapped to more than one text item, reject the whole request. Otherwise nodes are handled independently: the response reports an outcome per node ID. linked indicates a successful outcome. already_linked indicates the node is already linked to the requested text item, and linked_to_other_text_item indicates the node's already linked to a different text item. Outcomes not_found (sync the file from the plugin, then retry), not_text_node, wrong_file_or_branch, or main_component_text_node (link instance text nodes directly, or link the main component's text from the Figma plugin) all indicate the node was not linked.\",\"url\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes\",\"mainEntityOfPage\":{\"@id\":\"https://developer.dittowords.com/api-reference/text-items/link-figma-nodes#webpage\"},\"dateModified\":\"2026-10-19T21:09:54.714Z\",\"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","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","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","description":"Deletes text items by their developer IDs.","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","description":"Returns a list of the variables in the workspace.","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":"Link Figma nodes to text items - Ditto","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}