Skip to content
Back to skills

Figma Hello World

BSecurity

'Make your first Figma REST API call to fetch a file and inspect its

  • 2,719 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 21, 2026
ai-agentstypescriptbashnodetestingapi

Works with

  • claude code
  • api

Security analysis

B88/100
  • criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study

Pro scans all 7 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add jeremylongshore/claude-code-plugins-plus --skill figma-hello-world --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Figma Hello World?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Figma Hello World
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/jeremylongshore-figma-hello-world-949987aa/badge)](https://www.skillsdirectory.com/skills/jeremylongshore-figma-hello-world-949987aa)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: figma-hello-world
description: 'Make your first Figma REST API call to fetch a file and inspect its
  node tree.

  Use when starting a new Figma integration, testing API connectivity,

  or learning the Figma document structure.

  Trigger with phrases like "figma hello world", "figma first call",

  "figma quick start", "fetch figma file".

  '
allowed-tools: Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(npx:*)
version: 1.6.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- figma
compatibility: Designed for Claude Code
---
# Figma Hello World

## Overview

Make your first Figma REST API call. Fetch a file's metadata and document tree, then inspect the node structure that represents every layer and object in a Figma design.

## Prerequisites

- Completed `figma-install-auth` setup
- A Figma file key (from the URL: `figma.com/design/<FILE_KEY>/...`)
- `FIGMA_PAT` environment variable set

## Instructions

### Step 1: Fetch a File

```bash
# Get the full document JSON for a file
curl -s -H "X-Figma-Token: ${FIGMA_PAT}" \
  "https://api.figma.com/v1/files/${FIGMA_FILE_KEY}" | jq '{
    name: .name,
    lastModified: .lastModified,
    version: .version,
    pages: [.document.children[] | .name]
  }'
```

Expected output:

```json
{
  "name": "My Design File",
  "lastModified": "2025-03-15T10:30:00Z",
  "version": "1234567890",
  "pages": ["Page 1", "Components", "Tokens"]
}
```

### Step 2: Understand the Node Tree

Every Figma file is a tree of typed nodes:

```
DOCUMENT (root)
├── CANVAS (page)
│   ├── FRAME (container / auto-layout)
│   │   ├── TEXT
│   │   ├── RECTANGLE
│   │   └── INSTANCE (component instance)
│   ├── GROUP
│   │   └── VECTOR
│   ├── COMPONENT (reusable master)
│   └── SECTION
```

Key node types: `DOCUMENT`, `CANVAS`, `FRAME`, `GROUP`, `RECTANGLE`, `ELLIPSE`, `TEXT`, `VECTOR`, `COMPONENT`, `COMPONENT_SET`, `INSTANCE`, `LINE`, `SECTION`, `BOOLEAN_OPERATION`.

### Step 3: TypeScript Hello World

```typescript
// hello-figma.ts
const PAT = process.env.FIGMA_PAT!;
const FILE_KEY = process.env.FIGMA_FILE_KEY!;

interface FigmaNode {
  id: string;
  name: string;
  type: string;
  children?: FigmaNode[];
}

interface FigmaFileResponse {
  name: string;
  lastModified: string;
  version: string;
  document: FigmaNode;
  components: Record<string, { key: string; name: string; description: string }>;
  styles: Record<string, { key: string; name: string; style_type: string }>;
}

async function main() {
  const res = await fetch(
    `https://api.figma.com/v1/files/${FILE_KEY}`,
    { headers: { 'X-Figma-Token': PAT } }
  );

  if (!res.ok) {
    throw new Error(`Figma API error: ${res.status} ${res.statusText}`);
  }

  const file: FigmaFileResponse = await res.json();

  console.log(`File: ${file.name}`);
  console.log(`Last modified: ${file.lastModified}`);
  console.log(`Components: ${Object.keys(file.components).length}`);
  console.log(`Styles: ${Object.keys(file.styles).length}`);

  // Walk the first page and list top-level frames
  const firstPage = file.document.children?.[0];
  if (firstPage) {
    console.log(`\nPage: ${firstPage.name}`);
    for (const child of firstPage.children ?? []) {
      console.log(`  ${child.type}: ${child.name} (${child.id})`);
    }
  }
}

main().catch(console.error);
```

### Step 4: Fetch Specific Nodes

```typescript
// Fetch only specific nodes by ID (faster for large files)
async function fetchNodes(fileKey: string, nodeIds: string[]) {
  const ids = nodeIds.join(',');
  const res = await fetch(
    `https://api.figma.com/v1/files/${fileKey}/nodes?ids=${ids}`,
    { headers: { 'X-Figma-Token': PAT } }
  );
  const data = await res.json();
  // data.nodes is a map: { "nodeId": { document: {...}, components: {...} } }
  return data.nodes;
}

// Node IDs use the format "pageId:frameId" (e.g., "0:1", "123:456")
const nodes = await fetchNodes(FILE_KEY, ['0:1', '2:3']);
```

## Output

- File metadata (name, version, last modified)
- Page names listed from the document tree
- Top-level frames with node IDs and types
- Component and style counts

## Error Handling

| Error | Status | Cause | Solution |
|-------|--------|-------|----------|
| `Not found` | 404 | Invalid file key | Verify the key from the Figma URL |
| `Forbidden` | 403 | No access to file | Check token scopes and file permissions |
| `Rate limited` | 429 | Too many requests | Honor `Retry-After` header |
| Empty `document` | 200 | File has no pages | Check if file was recently created |

## Examples

### Quick Node Counter

```bash
# Count total nodes in a file
curl -s -H "X-Figma-Token: ${FIGMA_PAT}" \
  "https://api.figma.com/v1/files/${FIGMA_FILE_KEY}" \
  | jq '[.. | .id? // empty] | length'
```

### Get File Thumbnail

```bash
curl -s -H "X-Figma-Token: ${FIGMA_PAT}" \
  "https://api.figma.com/v1/files/${FIGMA_FILE_KEY}" \
  | jq -r '.thumbnailUrl'
```

## Resources

- [Figma REST API Introduction](https://developers.figma.com/docs/rest-api/)
- [File Endpoints Reference](https://developers.figma.com/docs/rest-api/file-endpoints/)
- [Node Types Reference](https://developers.figma.com/docs/plugins/api/nodes/)

## Next Steps

Proceed to `figma-local-dev-loop` for setting up a development workflow.

Files in this skill

  • SKILL.md5.2 KB
  • references/errors.md692 B
  • references/examples.md653 B
  • references/fetch-a-file.md754 B
  • references/fetch-specific-nodes.md894 B
  • references/typescript-hello-world.md1.6 KB
  • references/understand-the-node-tree.md875 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.