跳转到内容

Text

创建和管理文本节点。

Type reference
// depth: omit → id+name stubs | 0 → props + child stubs | N → recurse N | -1 → full tree
// fields: whitelist e.g. ["fills","opacity"] — id, name, type always included. Pass ["*"] for all.
// layoutSizingHorizontal/Vertical: FIXED | HUG | FILL — how the node sizes within auto-layout.
// Colors: fillVariableName/strokeVariableName bind by name — preferred over raw color values.
// Note: node-based endpoints (frames, text, instances, components) use `results` as the list key.
// Standalone endpoints (styles, variables, variable_collections) use `items`. Components.list uses `items` (catalog view).
// ---
// visible: false hides the node. Omitted from response when true (the default).
// locked: true prevents editing in Figma UI. Omitted when false (the default).
// rotation: degrees (0-360). Omitted when 0.
// blendMode: layer blend mode. Omitted when PASS_THROUGH (the default).
// layoutPositioning: ABSOLUTE = floating inside auto-layout parent. Omitted when AUTO (the default).
// minWidth/maxWidth/minHeight/maxHeight: responsive constraints for auto-layout children.
// constraints: position behavior in non-auto-layout parents. Ignored inside auto-layout frames.
// bindings: bind design variables to node properties. field uses slash path: "fills/0/color" (first fill), "strokes/0/color", "opacity", "width", "height", "cornerRadius", "paddingLeft", "itemSpacing".
// explicitMode: pin a variable mode on this node. Use { collectionName, modeName } (preferred) or { collectionId, modeId }.
// clipsContent: clip children to the node bounds where supported (frames/components/instances). Set false for overflow-visible layouts.
interface Node {
id: string; name: string; type: string;
visible?: boolean; // omitted when true
locked?: boolean; // omitted when false
opacity?: number; // omitted when 1
rotation?: number; // omitted when 0
blendMode?: string; // omitted when PASS_THROUGH
layoutPositioning?: "AUTO" | "ABSOLUTE";
layoutSizingHorizontal?: "FIXED" | "HUG" | "FILL";
layoutSizingVertical?: "FIXED" | "HUG" | "FILL";
minWidth?: number; maxWidth?: number; minHeight?: number; maxHeight?: number;
absoluteBoundingBox: { x: number; y: number; width: number; height: number };
fills?: Paint[]; // readback Paint[]; authoring supports SOLID + gradients via gradientTransform + gradientStops
strokes?: Paint[];
effects?: Effect[]; // DROP_SHADOW | INNER_SHADOW | LAYER_BLUR | BACKGROUND_BLUR
children?: NodeStub[]; // stubs: {id, name, type} — use depth to expand
}
// PatchItem uses flat params matching create shape — no nested sub-objects.
// Fill/stroke/corner/layout/text params are identical to frames.create and text.create. Paint[] authoring supports SOLID + gradients only; IMAGE/VIDEO/PATTERN are readback-only metadata.
// Unknown keys produce a warning, preventing silent failures.
// Text nodes display text content with typography styling. They inherit node methods (get, list, update, delete, clone, reparent).
// textAutoResize: NONE (fixed box), WIDTH_AND_HEIGHT (grow both), HEIGHT (fixed width, auto height), TRUNCATE (fixed + ellipsis).
// Prefer textStyleName for typography, fontColorVariableName/fontColorStyleName for color.
// Aliases: fillColor → fontColor, fillVariableName → fontColorVariableName, fillStyleName → fontColorStyleName (consistent with frames API).
// ---
// Smart defaults inside auto-layout parent: layoutSizingHorizontal defaults to FILL, layoutSizingVertical to HUG, textAutoResize to HEIGHT.
// Text fills parent width and wraps automatically. Override with explicit values if needed.
// fontStyle vs fontWeight: fontStyle is a named variant like "Bold", "Italic", "SemiBold". When set, fontWeight is ignored.
// Use fonts.list to find available fontFamily + fontStyle combinations.
// scan: finds all text nodes in a subtree. path (when includePath:true) shows the layer hierarchy e.g. "Frame > Card > Label".
// ScanResult (per-item): { nodeId, count, truncated, textNodes: [{ id, name, characters, fontSize, fontFamily, fontStyle, path?, depth?, absoluteX?, absoluteY?, width?, height? }] }
// Shared types:
// Color: hex "#RGB"|"#RGBA"|"#RRGGBB"|"#RRGGBBAA" or {r: 0-1, g: 0-1, b: 0-1, a?: 0-1}
// VariableAlias: {type: "VARIABLE_ALIAS", id: string}. The id must be a Figma VariableID; discover it via variables.get/list or variable_collections.get. Prefer colorVariableName/fillVariableName/strokeVariableName when available; Paint[] VariableAlias is mainly for precise Paint[] round-trips and gradient stop bindings.
// Transform: [[number, number, number], [number, number, number]] (Figma Plugin API 2×3 matrix)
// BlendMode: "PASS_THROUGH"|"NORMAL"|"DARKEN"|"MULTIPLY"|"LINEAR_BURN"|"COLOR_BURN"|"LIGHTEN"|"SCREEN"|"LINEAR_DODGE"|"COLOR_DODGE"|"OVERLAY"|"SOFT_LIGHT"|"HARD_LIGHT"|"DIFFERENCE"|"EXCLUSION"|"HUE"|"SATURATION"|"COLOR"|"LUMINOSITY"
// ColorStop: {position: 0-1, color: Color, boundVariables?: {color?: VariableAlias}}
// GradientPaint: {type: "GRADIENT_LINEAR"|"GRADIENT_RADIAL"|"GRADIENT_ANGULAR"|"GRADIENT_DIAMOND", gradientTransform: Transform, gradientStops: ColorStop[], visible?: boolean, opacity?: number, blendMode?: BlendMode}. Use gradientTransform + gradientStops (basic left-to-right: [[1,0,0],[0,1,0]]); do not use CSS gradients or REST gradientHandlePositions.
// Effect: {type: "DROP_SHADOW"|"INNER_SHADOW"|"LAYER_BLUR"|"BACKGROUND_BLUR", radius: number, color?: {r,g,b,a} (0-1), offset?: {x, y}, spread?: number, visible?: boolean}
// Paint: Paint[] authoring accepts only SOLID and GRADIENT_LINEAR/GRADIENT_RADIAL/GRADIENT_ANGULAR/GRADIENT_DIAMOND. SolidPaint: {type: "SOLID", color: Color, visible?: boolean, opacity?: number, blendMode?: BlendMode, boundVariables?: {color?: VariableAlias}}. GradientPaint authoring: {type: GRADIENT_*, gradientTransform: Transform, gradientStops: ColorStop[], visible?, opacity?, blendMode?}; bind variables on gradientStops[].boundVariables.color, not top-level gradient boundVariables. Do not pass IMAGE/VIDEO/PATTERN to create/update Paint[]; those may appear only in readback metadata from existing Figma content. Use imageUrl/images for image authoring. VIDEO/PATTERN authoring is not supported here. Do not use CSS gradients or REST gradientHandlePositions.
// NodeStub: {id: string, name: string, type: string}

11 methods available.

readinherited

Get serialized node data

ParameterTypeRequiredDescription
idstring✓Node ID
fieldsstring[]✗Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.
depthnumber✗Response detail: omit for id+name only. 0=properties + child stubs. N=recurse N levels. -1=unlimited.
verboseboolean✗Include all properties (bounding box, constraints, text style details). Default false — returns slim, actionable output.

Response

Serialized node tree. Shape depends on depth parameter.

FieldTypeDescription
resultsobject[]Serialized node trees
_truncatedbooleanTrue when node budget exceeded
_noticestringHuman-readable truncation notice
readinherited

Search for nodes (returns stubs only — use get with depth for full properties)

ParameterTypeRequiredDescription
querystring✗Name search query (case-insensitive substring match)
typesstring[]✗Filter by node types (e.g. ["FRAME", "TEXT"])
parentIdstring✗Search only within this subtree
fieldsstring[]✗Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.
offsetnumber✗Skip N items for pagination (default 0) (default: 0)
limitnumber✗Max items per page (default 100) (default: 100)

Response

Paginated node search results (uses results not items)

FieldTypeDescription
totalCountnumberTotal matching nodes
returnednumberNodes in this page
offsetnumber
limitnumber
resultsobject[]Matching node stubs
↳ idstring
↳ namestring
↳ typestring
↳ parentIdstring
↳ parentNamestring
↳ boundsobject
↳ xnumber
↳ ynumber
↳ widthnumber
↳ heightnumber
editinherited

Patch node properties

ParameterTypeRequiredDescription
itemsobject[]✓Array of {id, ...fields} to patch
↳ fillsobject[]✗Fill Paint[] authoring — accepts only SOLID or GRADIENT_LINEAR/RADIAL/ANGULAR/DIAMOND with gradientTransform + gradientStops. [] for transparent. Do not use CSS gradients, REST gradientHandlePositions, IMAGE/VIDEO/PATTERN, or top-level gradient boundVariables; use imageUrl/images for image authoring. IMAGE/VIDEO/PATTERN may appear in readback metadata only. Primary way to set non-image fills.
↳ fillColorstring✗Shorthand — sets a single solid fill (auto-binds to matching variable/style)
↳ fillStyleNamestring✗Paint style name for fill
↳ fillVariableNamestring✗Color variable by name e.g. 'bg/surface'
↳ strokesobject[]✗Stroke Paint[] authoring — accepts only SOLID or GRADIENT_LINEAR/RADIAL/ANGULAR/DIAMOND with gradientTransform + gradientStops. [] to clear. Do not use CSS gradients, REST gradientHandlePositions, IMAGE/VIDEO/PATTERN, or top-level gradient boundVariables. IMAGE/VIDEO/PATTERN may appear in readback metadata only. Primary way to set strokes.
↳ strokeColorstring✗Shorthand — sets a single solid stroke (auto-binds to matching variable/style)
↳ strokeStyleNamestring✗Paint style name for stroke
↳ strokeVariableNamestring✗Color variable by name for stroke
↳ strokeWeighttoken✗All sides (number) or variable name (string). Per-side: strokeTopWeight, strokeBottomWeight, strokeLeftWeight, strokeRightWeight.
↳ strokeTopWeighttoken✗
↳ strokeBottomWeighttoken✗
↳ strokeLeftWeighttoken✗
↳ strokeRightWeighttoken✗
↳ strokeAlign"INSIDE" | "OUTSIDE" | "CENTER"✗Stroke position (default: INSIDE)
↳ cornerRadiustoken✗All corners (number) or variable name (string). Per-corner: topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius.
↳ topLeftRadiustoken✗
↳ topRightRadiustoken✗
↳ bottomRightRadiustoken✗
↳ bottomLeftRadiustoken✗
↳ visibleboolean✗Show/hide (default true)
↳ lockedboolean✗Lock/unlock (default false)
↳ opacitytoken✗Opacity (0-1) or variable name
↳ blendMode"PASS_THROUGH" | "NORMAL" | "DARKEN" | "MULTIPLY" | "LINEAR_BURN" | "COLOR_BURN" | "LIGHTEN" | "SCREEN" | "LINEAR_DODGE" | "COLOR_DODGE" | "OVERLAY" | "SOFT_LIGHT" | "HARD_LIGHT" | "DIFFERENCE" | "EXCLUSION" | "HUE" | "SATURATION" | "COLOR" | "LUMINOSITY"✗
↳ effectStyleNamestring✗Effect style name (e.g. 'Shadow/Card') for shadows, blurs
↳ layoutMode"NONE" | "HORIZONTAL" | "VERTICAL"✗Layout direction (default: NONE)
↳ layoutWrap"NO_WRAP" | "WRAP"✗Wrap children to new rows (HORIZONTAL layout only — Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
↳ paddingtoken✗All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
↳ paddingToptoken✗
↳ paddingRighttoken✗
↳ paddingBottomtoken✗
↳ paddingLefttoken✗
↳ primaryAxisAlignItems"MIN" | "MAX" | "CENTER" | "SPACE_BETWEEN"✗
↳ counterAxisAlignItems"MIN" | "MAX" | "CENTER" | "BASELINE"✗
↳ itemSpacingtoken✗Spacing between children (number or variable name string, default: 0)
↳ counterAxisSpacingtoken✗Gap between wrapped rows (requires layoutWrap: WRAP)
↳ strokesIncludedInLayoutboolean✗Include stroke width in layout measurements (default: false)
↳ layoutSizingHorizontal"FIXED" | "HUG" | "FILL"✗
↳ layoutSizingVertical"FIXED" | "HUG" | "FILL"✗
↳ layoutPositioning"AUTO" | "ABSOLUTE"✗ABSOLUTE = floating inside auto-layout parent
↳ minWidthnumber✗Min width for responsive auto-layout
↳ maxWidthnumber✗Max width for responsive auto-layout
↳ minHeightnumber✗Min height for responsive auto-layout
↳ maxHeightnumber✗Max height for responsive auto-layout
↳ fontSizenumber✗Font size
↳ fontFamilystring✗Font family
↳ fontStylestring✗Font variant e.g. "Bold", "Italic" — overrides fontWeight
↳ fontWeightnumber✗100-900. Ignored when fontStyle is set.
↳ lineHeightany✗number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}
↳ letterSpacingany✗number | {value, unit: "PIXELS"|"PERCENT"}
↳ textCase"ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED"✗
↳ textDecoration"NONE" | "UNDERLINE" | "STRIKETHROUGH"✗
↳ fontColorstring✗Shorthand — sets text color (auto-binds to matching variable/style)
↳ fontColorVariableNamestring✗Bind color variable by name e.g. 'text/primary'
↳ fontColorStyleNamestring✗Apply paint style — overrides fontColor
↳ textStyleIdstring✗Apply text style by ID — overrides fontSize/fontWeight
↳ textStyleNamestring✗Text style by name (case-insensitive)
↳ textAlignHorizontal"LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED"✗
↳ textAlignVertical"TOP" | "CENTER" | "BOTTOM"✗
↳ textAutoResize"NONE" | "WIDTH_AND_HEIGHT" | "HEIGHT" | "TRUNCATE"✗
↳ idstring✓
↳ namestring✗Rename node
↳ rotationnumber✗Degrees (0-360)
↳ xnumber✗
↳ ynumber✗
↳ widthnumber✗
↳ heightnumber✗
↳ clearFillboolean✗Remove all fills
↳ imageUrlstring✗Image source — 'pexel:<id>' for Pexels photos, a public URL, or a local file path. SVGs are inserted as vectors; raster images become IMAGE fills.
↳ imageScaleMode"FILL" | "FIT" | "CROP" | "TILE"✗How the image is scaled within the frame (default: FILL)
↳ effectsobject[]✗Effect array (DROP_SHADOW, INNER_SHADOW, LAYER_BLUR, BACKGROUND_BLUR)
↳ overflowDirection"NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"✗Scroll overflow in prototype (default: NONE)
↳ constraintsobject✗
↳ horizontal"MIN" | "CENTER" | "MAX" | "STRETCH" | "SCALE"✗
↳ vertical"MIN" | "CENTER" | "MAX" | "STRETCH" | "SCALE"✗
↳ bindingsobject[]✗Bind variables to properties. field path examples: 'fills/0/color', 'strokes/0/color', 'opacity', 'width', 'cornerRadius', 'itemSpacing'.
↳ fieldstring✓
↳ variableNamestring✗
↳ variableIdstring✗
↳ explicitModeobject✗Pin variable mode — use { collectionName, modeName } (preferred) or { collectionId, modeId }
↳ exportSettingsobject[]✗Export settings
↳ annotationsobject[]✗Set annotations — [{label?, labelMarkdown?, properties?, categoryId?}]. Properties are validated per node type.
↳ clipsContentboolean✗Clip children to bounds where supported (frames/components/instances).

Response

FieldTypeDescription
resultsany[]Array of "ok" or {error} per item
editinherited

Delete nodes

ParameterTypeRequiredDescription
idstring✗Single node ID
itemsobject[]✗Batch: [{id}, ...]
↳ idstring✗

Response

FieldTypeDescription
resultsstring[]Array of "ok" per item
createinherited

Duplicate nodes — produces a same-type copy (frame→frame, instance→instance, component→component). Instance clones reference the same source component; they do not duplicate the component definition.

ParameterTypeRequiredDescription
idstring✗Node ID
namestring✗Rename the clone (set before appending to parent — required when cloning a variant into its component set to avoid duplicate names)
parentIdstring✗Parent node ID. Omit to place at current page root.
xnumber✗X position (default: 0)
ynumber✗Y position (default: 0)
itemsobject[]✗Batch: [{id, name?, parentId?, x?, y?}, ...]. Alternative to single-item params.
↳ idstring✓Node ID to clone
↳ namestring✗Rename the clone
↳ parentIdstring✗Target parent
↳ xnumber✗
↳ ynumber✗
depthnumber✗Response detail: omit for id+name only. 0=properties + child stubs. N=recurse N levels. -1=unlimited.

Response

FieldTypeDescription
resultsobject[]One entry per input item
↳ idstring
editinherited

Proportionally rescale a node subtree using Figma’s visual Scale tool behavior. This is for visual/artifact scaling, not responsive layout resizing.

Example

{endpoint}(method:"scale", id:"1:23", factor:0.5)
ParameterTypeRequiredDescription
idstring✗Node ID to scale
factornumber✗Scale factor, >= 0.01. 0.5 = 50%, 2 = 200%. Scales children, text, strokes, effects, and layout geometry from the node's top-left. On auto-layout or HUG/FILL nodes, Figma may resolve responsive sizing to fixed width/height.
itemsobject[]✗Batch: [{id, factor}, ...]. Alternative to single-item params.
↳ idstring✓Node ID to scale
↳ factornumber✓Scale factor, >= 0.01. 0.5 = 50%, 2 = 200%.

Response

FieldTypeDescription
resultsstring[]Array of "ok" per item
readinherited

Run lint on a node — returns severity-ranked findings

ParameterTypeRequiredDescription
idstring✓Node ID to audit
rulesstring[]✗Rules to check. Default: ["all"]. Categories: "component", "composition", "token", "naming", "wcag".
maxDepthnumber✗Max tree depth (default: 10)
maxFindingsnumber✗Max findings (default: 50)
minSeverity"error" | "unsafe" | "heuristic" | "style" | "verbose"✗Minimum severity to report (default: style). Set to 'verbose' to include AAA contrast and line-height checks.
skipInstancesboolean✗Skip instance internals — findings inside instances are owned by the component (default: true)

Response

FieldTypeDescription
nodeIdstring
nodeNamestring
categoriesarraySorted by severity (error > unsafe > heuristic > style)
editinherited

Move nodes into a new parent

ParameterTypeRequiredDescription
itemsobject[]✓Array of {id, parentId, index?}
↳ idstring✓
↳ parentIdstring✓
↳ indexnumber✗

Response

FieldTypeDescription
resultsstring[]Array of "ok" per item

Create text nodes

Example

text(method:"create", items:[{text:"Hello", textStyleName:"Body/Regular", fontColorVariableName:"text/primary"}])
ParameterTypeRequiredDescription
itemsobject[]✓Array of text items to create
↳ textstring✗Text content
↳ namestring✗Layer name
↳ xnumber✗
↳ ynumber✗
↳ widthnumber✗Fixed width in px — implies layoutSizingHorizontal: FIXED and textAutoResize: HEIGHT
↳ parentIdstring✗Parent node ID. Omit to place at current page root.
↳ fontFamilystring✗Font family (default: Inter). Use fonts.list to find installed fonts.
↳ fontStylestring✗Font variant e.g. "Bold", "Italic" — overrides fontWeight
↳ fontSizenumber✗Font size (default: 14)
↳ fontWeightnumber✗100-900 (default: 400). Ignored when fontStyle is set.
↳ lineHeightany✗number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}
↳ letterSpacingany✗number | {value, unit: "PIXELS"|"PERCENT"}
↳ textCase"ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED"✗
↳ textDecoration"NONE" | "UNDERLINE" | "STRIKETHROUGH"✗
↳ fillsobject[]✗Text Paint[] authoring — accepts only SOLID or GRADIENT_LINEAR/RADIAL/ANGULAR/DIAMOND with gradientTransform + gradientStops. Same as node fills. Do not use CSS gradients, REST gradientHandlePositions, IMAGE/VIDEO/PATTERN, or top-level gradient boundVariables. IMAGE/VIDEO/PATTERN may appear in readback metadata only.
↳ fontColorstring✗Shorthand — sets text color (auto-binds to matching variable/style)
↳ fontColorVariableNamestring✗Bind color variable by name e.g. 'text/primary'
↳ fontColorStyleNamestring✗Apply paint style — overrides fontColor
↳ textStyleIdstring✗Text style ID or name (case-insensitive) — overrides fontSize/fontWeight
↳ textStyleNamestring✗Alias for textStyleId — accepts name (case-insensitive)
↳ textAlignHorizontal"LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED"✗
↳ textAlignVertical"TOP" | "CENTER" | "BOTTOM"✗
↳ layoutSizingHorizontal"FIXED" | "HUG" | "FILL"✗
↳ layoutSizingVertical"FIXED" | "HUG" | "FILL"✗
↳ textAutoResize"NONE" | "WIDTH_AND_HEIGHT" | "HEIGHT" | "TRUNCATE"✗NONE (fixed box), WIDTH_AND_HEIGHT (grow both), HEIGHT (fixed width, auto height), TRUNCATE (fixed + ellipsis)
↳ componentPropertyNamestring✗Bind to a component TEXT property by name. Walks up ancestors to find the nearest component, or targets the component specified by componentId. For deeply nested text, consider using components(method:'create', type:'from_node') with exposeText:true instead — it auto-discovers and binds all text nodes.
↳ componentIdstring✗Target component ID for componentPropertyName binding. When omitted, walks up ancestors to find the nearest COMPONENT or COMPONENT_SET.
↳ annotationsobject[]✗Annotations — [{label?, labelMarkdown?, properties?, categoryId?}]
depthnumber✗Response detail: omit for id+name only. 0=properties + child stubs. N=recurse N levels. -1=unlimited.

Response

FieldTypeDescription
resultsobject[]One entry per input item
↳ idstring

Replace text content on existing text nodes

ParameterTypeRequiredDescription
itemsobject[]✓Array of {nodeId, text}
↳ nodeIdstring✓Text node ID
↳ textstring✓New text content
depthnumber✗Response detail: omit for id+name only. 0=properties + child stubs. N=recurse N levels. -1=unlimited.

Response

FieldTypeDescription
resultsstring[]Array of "ok" per item

Scan all text nodes within a subtree

ParameterTypeRequiredDescription
itemsobject[]✓Array of subtrees to scan

Response

FieldTypeDescription
resultsany[]Array of "ok" or {error} per item