Lever Postings API
Free ATS job feed with no key: every open role on a company's Lever board as JSON, with full descriptions, categories and apply links. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Lever Postings API?
Lever's postings API serves any company's public job board as JSON with no API key. Passing a company's Lever handle returns each open role with its full description, team and location categories, workplace type and a direct apply URL.
Job aggregators resell what they scrape; going straight to the applicant tracking system gets you the same roles first-hand, complete and unmangled. Lever powers the careers pages of a large number of technology companies, and every one of those boards is readable at `api.lever.co/v0/postings/{handle}` with nothing but the handle — which you can read off the company's own careers URL.
The `mode=json` parameter is not optional in practice: without it the endpoint returns rendered HTML meant for embedding in a careers page. With it you get structured postings, each carrying both `description` as HTML and `descriptionPlain` as text, which saves you stripping tags for a search index. A word of warning about content volume: the boilerplate `additionalPlain` block, describing life at the company, is often longer than the role itself, so truncate before displaying. An empty array is a perfectly normal answer — it means the company currently has nothing open.
Quick facts
- Base URL
https://api.lever.co/v0/postings- Authentication
- No API key for public postings. Lever's full Data API, which covers candidates and pipelines, is a separate authenticated product.
- Rate limit
- No published limit for the public postings feed. Cache per company and refresh hourly at most.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Lever Postings API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch a company's open roles
GET https://api.lever.co/v0/postings/palantir?mode=json&limit=1
curl 'https://api.lever.co/v0/postings/palantir?mode=json&limit=1'const res = await fetch("https://api.lever.co/v0/postings/palantir?mode=json&limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.lever.co/v0/postings/palantir?mode=json&limit=1", timeout=20)
res.raise_for_status()
print(res.json())[
{
"additionalPlain": "Life at Palantir\n \nWe want every Palantirian to achieve their best outcomes, that’s why we celebrate individuals’ strengths, skills, and interests, from your first interview to your longterm growth, rather than rely on traditional career ladders. Paying attention to the needs of our community enables us to optimize our opportunities to grow and helps ensure many pathways to success at Palantir. Promoting health and well-being across all areas of Palantirians’ lives is just one of the ways we’re investing in our community. Learn more at Life at Palantir and note that our offerings may vary by region.\n \nIn keeping consistent with Palantir’s values and culture, we believe employees are “better together” and in-person work affords the opportunity for more creative outcomes. Therefore, we encourage employees to work from our offices to foster connectivity and innovation. Many teams do offer hybrid options (WFH a day or two a week), allowing our employees to strike the right trade-off for their personal productivity. Based on business need, there are a few roles that allow for “Remote” work on an exceptional basis. If you are applying for one of these roles, you must work from the city and or country in which you are employed. If the posting is specified as Onsite, you are required to work from an office.\n \nIf you want to empower the world's most important institutions, you belong here. Palantir values excellence regardless of background. We are committed to making the application and hiring process accessible to everyone and will provide a reaParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(handle) | path | Required | The company's Lever account handle, taken from its careers page URL. palantir |
mode | query | Required | Set to `json`. Without it the endpoint returns HTML for page embedding. json |
limit | query | Optional | Cap the number of postings returned. 1 |
team / location / commitment | query | Optional | Filter by the corresponding category value. Engineering |
group | query | Optional | Group results by `team`, `location` or `commitment` instead of returning a flat list. team |
Response fields
(root)array- Postings. An empty array means the board currently has no open roles.
idstring- Posting UUID, stable while the role is live.
textstring- Job title as displayed.
descriptionPlain / descriptionstring- Role description as plain text and as HTML. Use the plain version for indexing and search.
additionalPlain / additionalstring- Company boilerplate appended to every posting — culture, benefits, equal opportunity statements. Frequently longer than the role itself.
categoriesobject- Team, department, location, commitment and workplace type, which is what the filter parameters match against.
listsarray- Structured sub-sections of the description such as responsibilities and requirements, each with a heading and HTML content.
hostedUrl / applyUrlstring- The public posting page and the direct application form.
createdAtinteger- Posting creation time in Unix milliseconds, not seconds.
workplaceTypestring- `onsite`, `remote` or `hybrid`, where the company has set it.
countrystring- ISO country code for the primary location, when available.
What you can build with the Lever Postings API
- Embed a live careers list on a company's own marketing site
- Build a niche job board tracking a curated set of employers
- Alert when a specific company posts a role matching your criteria
- Analyse hiring patterns by team and location over time
Common errors and how to fix them
404 Document not found
The handle is wrong or the company does not use Lever.
Fix: Read the handle from the company's careers page URL. There is no directory of valid handles to search.
HTML instead of JSON
`mode=json` was omitted.
Fix: It is required. The default output is markup intended for embedding in a page.
Empty array
The company has no open roles right now.
Fix: This is a valid response, not a failure. Distinguish it from a 404, which means the board does not exist.
Descriptions dominated by boilerplate
`additionalPlain` repeats company-wide text on every posting.
Fix: Index and display `descriptionPlain` instead, and treat `additional` as optional detail.
Lever Postings API — frequently asked questions
Do I need an API key for Lever job postings?
No. Public postings are open with no key. Lever's Data API, which handles candidates and hiring pipelines, is a separate authenticated product.
How do I find a company's Lever handle?
It is in their careers page URL — `jobs.lever.co/{handle}`. If a company's careers page is on that domain, this endpoint will work for them.
Why did I get HTML back?
The `mode=json` parameter was missing. Without it the endpoint serves rendered markup designed to be embedded into a careers page.
Is an empty array an error?
No, it means the company has nothing open at the moment. A non-existent board returns a 404 with a `Document not found` message instead.
Tools that pair with this API
JobPosting Schema Generator
Generate JobPosting JSON-LD structured data for Google Jobs with salary, location, remote options and employment type. Free, with required-field warnings.
Strip HTML Tags
Remove all HTML tags and convert markup to clean plain text. Decode HTML entities and keep line breaks for block elements like paragraphs and headings.
Resume Keyword Matcher
Compare your resume against a job description, see which keywords and phrases you cover, which are missing, and how densely each section uses them.
Lever Postings is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.