Figma APIfigma.com ↗
Access Figma job postings via API. List, search, and retrieve full job details including title, department, location, and HTML description.
What is the Figma API?
The Figma Careers API exposes 3 endpoints for accessing open job postings at Figma. Use list_jobs to retrieve all current openings with department, location, and URL, search_jobs to match postings by keyword against titles and description content, or get_job to pull a specific posting's full HTML job description by its numeric Greenhouse ID. Each job object includes 6 fields: id, title, department, location, url, and updated_at.
curl -X GET 'https://api.parse.bot/scraper/8a938f9f-30ba-40d2-a56a-56daea650166/list_jobs?location=San+Francisco&department=Engineering' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace figma-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Figma Careers SDK — browse and inspect job postings."""
from parse_apis.figma_com_api import FigmaCareers, JobNotFound
client = FigmaCareers()
# List engineering jobs filtered by department
for job in client.job_summaries.list(department="Engineering", limit=5):
print(job.title, "|", job.location)
# Search for product manager roles
result = client.job_summaries.search(query="product manager", limit=3).first()
if result:
print(f"Found: {result.title} in {result.department}")
# Drill into full job details
detail = result.details()
print(detail.title, "|", detail.location, "|", len(detail.content), "chars")
# Typed error handling for a non-existent job
try:
client.jobsummary(id=9999999999).details()
except JobNotFound as exc:
print(f"Job not found: {exc.job_id}")
print("exercised: job_summaries.list / job_summaries.search / details / jobsummary")
List all open job postings at Figma. Returns each job's title, department, location, and URL. Optionally filter by department name or location substring match (case-insensitive). Results are returned as a single page containing all matching jobs.
| Param | Type | Description |
|---|---|---|
| location | string | Filter jobs by location (case-insensitive substring match, e.g. 'San Francisco', 'London', 'Remote'). |
| department | string | Filter jobs by department name (case-insensitive substring match, e.g. 'Engineering', 'Sales', 'Design'). |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with id, title, department, location, url, updated_at",
"total": "integer"
},
"sample": {
"data": {
"jobs": [
{
"id": 5707966004,
"url": "https://boards.greenhouse.io/figma/jobs/5707966004?gh_jid=5707966004",
"title": "AI Applied Scientist",
"location": "San Francisco, CA • New York, NY • United States",
"department": "Engineering",
"updated_at": "2026-04-15T15:32:40-04:00"
}
],
"total": 38
},
"status": "success"
}
}About the Figma API
Listing and Filtering Jobs
The list_jobs endpoint returns every open position at Figma as a flat array. Each object includes a numeric id, title, department, location, url, and updated_at timestamp. You can narrow results using the department parameter (e.g. Engineering, Design, Sales) or the location parameter (e.g. San Francisco, Remote). Both filters are case-insensitive substring matches, so partial strings work. The response also includes a total count of matched jobs.
Keyword Search
The search_jobs endpoint accepts a required query string and matches it against both job titles and the full description text of each posting. You can combine query with the same department and location filters available in list_jobs. This is useful for finding roles that mention a specific technology, skill, or team name without knowing the exact department structure Figma uses.
Full Job Detail
The get_job endpoint takes a single required job_id — a numeric Greenhouse job ID available from the id field in list_jobs or search_jobs results — and returns the complete job posting. The content field contains the full HTML job description, which typically includes role responsibilities, qualifications, and benefits text. The rest of the fields mirror the summary object: title, department, location, url, and updated_at.
The Figma API is a managed, monitored endpoint for figma.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when figma.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official figma.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor Figma's engineering headcount trends by tracking new postings in the Engineering department over time.
- Build a job alert tool that notifies users when Figma posts a role matching a specific keyword like 'machine learning' or 'iOS'.
- Aggregate Figma job openings into a multi-company tech careers board alongside other employers.
- Analyze which cities and remote arrangements Figma is hiring for by collecting location fields from list_jobs.
- Parse the HTML content field from get_job to extract required skills and qualifications for competitive analysis.
- Cross-reference Figma hiring volume by department against funding or product announcement timelines.
- Programmatically check whether a specific role is still open before applying by querying get_job with a known Greenhouse job ID.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Figma have an official public API for job listings?+
What does get_job return beyond what list_jobs provides?+
get_job endpoint adds a content field containing the full HTML job description — responsibilities, qualifications, and any other structured content from the posting. The summary endpoints (list_jobs and search_jobs) return only id, title, department, location, url, and updated_at.Does the API support pagination for list_jobs results?+
list_jobs returns all matching jobs in a single response along with a total count. If Figma has a large number of open roles, the full set is returned at once. You can fork this API on Parse and revise it to add offset or page-based pagination if your use case requires chunked responses.Can I retrieve closed or historical job postings through this API?+
How specific can department or location filters be in list_jobs?+
department and location use case-insensitive substring matching, so passing Eng will match Engineering and passing New York will match any location string containing that phrase. Exact department names used by Figma (such as Product Design or Go-To-Market) are discoverable by first calling list_jobs without filters and inspecting the returned department fields.