Access the Figma REST API with managed OAuth authentication. Read files and nodes, render images, work with comments, and browse published components and styles.
Reference
Figma has no "list my files" endpoint, so start from a file key. It is the segment after /design/ (or /file/) in a Figma URL: https://www.figma.com/design/{fileKey}/....
Get Current User
GET /figma/v1/meGet File
GET /figma/v1/files/{fileKey}?depth=1Full file responses are very large. Start with depth=1 for the pages, use depth=2 to see the frames on each page, then request specific nodes.
Get File Nodes
GET /figma/v1/files/{fileKey}/nodes?ids={nodeId1},{nodeId2}The response keys the requested nodes by ID under nodes, next to the file-level fields.
Get File Metadata
GET /figma/v1/files/{fileKey}/metaGet File Versions
GET /figma/v1/files/{fileKey}/versionsRender Images
GET /figma/v1/images/{fileKey}?ids={nodeId}&format=png&scale=2format is jpg, png, svg, or pdf, and scale ranges from 0.01 to 4. The response maps each node ID to a temporary download URL. A node ID that doesn't exist returns 200 with that value set to null, so check each value.
Get Image Fills
GET /figma/v1/files/{fileKey}/imagesGet Comments
GET /figma/v1/files/{fileKey}/comments?as_md=truePost Comment
POST /figma/v1/files/{fileKey}/comments
Content-Type: application/json
{
"message": "Comment text"
}Pass comment_id to reply within a thread, or client_meta to pin the comment to a position or region. Comments notify the file's collaborators.
Get Comment Reactions
GET /figma/v1/files/{fileKey}/comments/{commentId}/reactionsList Team Components
GET /figma/v1/teams/{teamId}/components?page_size=30The same pattern works for component_sets and styles, at team scope (/v1/teams/{teamId}/...), file scope (/v1/files/{fileKey}/...), or by key (/v1/components/{key}, /v1/component_sets/{key}, /v1/styles/{key}). File-scoped library endpoints need a main file key, not a branch key.
Notes:
- These endpoint groups are not available through the gateway:
| Group | Paths | Result |
|---|---|---|
| Projects | /v1/teams/{teamId}/projects, /v1/projects/{projectId}/files | 404, deprecated by Figma |
| Project metadata | /v1/projects/{projectId}/meta | 403 Invalid scope |
| Folders | /v2/teams/{teamId}/folders, /v2/folders/{folderId}/... | 403 Invalid scope |
| Webhooks | /v2/webhooks... | 403 Invalid scope |
| Variables | /v1/files/{fileKey}/variables/... | 403; Enterprise-only |
| Dev resources | /v1/files/{fileKey}/dev_resources, /v1/dev_resources | 404 on reads; writes return 200 with nothing created |
- A
403body of{"message":"Invalid scope"}means the endpoint isn't available here.You don't have permission to view this team.means the endpoint works but the connected account can't see that team. - Rendered image URLs expire. Download them promptly instead of storing the URL.