> figma-api
Interact with the Figma REST API to read design files, export assets, extract components, and pull design tokens programmatically. Use when tasks involve automating design handoff, syncing design tokens to code, exporting icons/images from Figma, or building integrations between Figma and development pipelines.
curl "https://skillshub.wtf/TerminalSkills/skills/figma-api?format=md"Figma API
The Figma REST API exposes design files as structured JSON. Every frame, component, text node, and style is addressable. Authentication uses personal access tokens or OAuth2.
Authentication
# .env — Figma personal access token from account settings.
FIGMA_TOKEN=figd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FIGMA_FILE_KEY=abc123DEFghiJKL
Reading a File
// src/figma/get-file.ts — Fetch the full Figma file tree.
// Returns a nested document structure with pages, frames, and nodes.
const FIGMA_BASE = "https://api.figma.com/v1";
export async function getFigmaFile(fileKey: string, token: string) {
const res = await fetch(`${FIGMA_BASE}/files/${fileKey}`, {
headers: { "X-Figma-Token": token },
});
if (!res.ok) throw new Error(`Figma API ${res.status}: ${res.statusText}`);
return res.json();
}
Exporting Assets
// src/figma/export-assets.ts — Export specific nodes as PNG/SVG/PDF.
// Pass node IDs (from the file tree) and desired format.
export async function exportNodes(
fileKey: string,
nodeIds: string[],
format: "png" | "svg" | "pdf",
token: string
) {
const ids = nodeIds.join(",");
const res = await fetch(
`${FIGMA_BASE}/images/${fileKey}?ids=${ids}&format=${format}&scale=2`,
{ headers: { "X-Figma-Token": token } }
);
const data = await res.json();
return data.images; // { nodeId: downloadUrl }
}
Extracting Design Tokens
// src/figma/extract-tokens.ts — Walk the Figma file tree and pull
// color styles, text styles, and spacing values into a tokens object.
interface DesignTokens {
colors: Record<string, string>;
typography: Record<string, { fontFamily: string; fontSize: number; fontWeight: number }>;
spacing: Record<string, number>;
}
export function extractTokens(figmaFile: any): DesignTokens {
const tokens: DesignTokens = { colors: {}, typography: {}, spacing: {} };
const styles = figmaFile.styles || {};
function walkNode(node: any) {
// Extract fill colors from nodes that reference a style
if (node.styles?.fill && node.fills?.[0]?.color) {
const c = node.fills[0].color;
const hex = rgbaToHex(c.r, c.g, c.b, c.a);
const styleName = styles[node.styles.fill]?.name || node.name;
tokens.colors[styleName] = hex;
}
// Extract text styles
if (node.type === "TEXT" && node.style) {
const s = node.style;
const styleName = styles[node.styles?.text]?.name || node.name;
tokens.typography[styleName] = {
fontFamily: s.fontFamily,
fontSize: s.fontSize,
fontWeight: s.fontWeight,
};
}
if (node.children) node.children.forEach(walkNode);
}
walkNode(figmaFile.document);
return tokens;
}
function rgbaToHex(r: number, g: number, b: number, a: number): string {
const toHex = (v: number) =>
Math.round(v * 255)
.toString(16)
.padStart(2, "0");
return `#${toHex(r)}${toHex(g)}${toHex(b)}${a < 1 ? toHex(a) : ""}`;
}
Listing Components
// src/figma/list-components.ts — Get all published components in a file.
// Useful for building component inventories or icon libraries.
export async function getComponents(fileKey: string, token: string) {
const res = await fetch(`${FIGMA_BASE}/files/${fileKey}/components`, {
headers: { "X-Figma-Token": token },
});
const data = await res.json();
return data.meta.components.map((c: any) => ({
key: c.key,
name: c.name,
description: c.description,
containingFrame: c.containing_frame?.name,
}));
}
Webhooks
// src/figma/webhook.ts — Register a webhook to get notified on file changes.
// Figma sends POST requests when files are updated, comments are added, etc.
export async function createWebhook(
teamId: string,
endpoint: string,
token: string
) {
const res = await fetch(`${FIGMA_BASE}/v2/webhooks`, {
method: "POST",
headers: {
"X-Figma-Token": token,
"Content-Type": "application/json",
},
body: JSON.stringify({
event_type: "FILE_UPDATE",
team_id: teamId,
endpoint,
passcode: "my-secret-passcode",
}),
});
return res.json();
}
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.