---
title: "Lever API"
description: "Lever Postings API documentation: the keyless api.lever.co postings endpoint, what the Lever API returns, and one call for every public Lever board."
canonical: https://jobspipe.dev/sources/lever
date_published: 2026-06-16
date_modified: 2026-09-30
author: Dvir Atias
---

# Lever API

Lever's official Postings API is public and keyless: GET https://api.lever.co/v0/postings/<company>?mode=json returns one company's open jobs as JSON, while the authenticated v1 API at api.lever.co/v1 manages postings, candidates and webhooks for a single account. JobsPipe returns Lever postings from one search endpoint, in the same record shape as the rest of its 30+ sources, so you skip the slug hunt. Official documentation: [hire.lever.co/developer/documentation](https://hire.lever.co/developer/documentation).

> Lever's public postings endpoint is one of the cleanest in the ATS world, one company at a time. JobsPipe returns postings from every public Lever board through one endpoint, in the same record shape as every other board it covers.

**Canonical URL:** https://jobspipe.dev/sources/lever

## Lever job board URL format

A Lever-hosted job site lives at jobs.lever.co followed by the company's site name, and each posting has its own address under it. Lever's Postings API documentation says each company has one site, usually the company name with no spaces. The same site name goes into the postings API, which returns the published postings as JSON when you add mode=json or send an Accept: application/json header, and pages with skip and limit. Companies on Lever's EU instance use the eu hosts instead.

- Job site: `https://jobs.lever.co/{company}`
- One posting on the job site: `https://jobs.lever.co/{company}/{posting_id}`
- Postings API: `https://api.lever.co/v0/postings/{company}?mode=json`
- One posting in the API: `https://api.lever.co/v0/postings/{company}/{posting_id}`
- EU job site: `https://jobs.eu.lever.co/{company}`
- EU postings API: `https://api.eu.lever.co/v0/postings/{company}?mode=json`

- [Lever Postings API documentation: github.com/lever/postings-api](https://github.com/lever/postings-api)
- [Lever developer documentation: hire.lever.co/developer/documentation](https://hire.lever.co/developer/documentation)

## Coverage

- **Sources covered:** Public Lever postings boards
- **Freshness:** discovered_at, last_seen_at and verified_at on every record
- **History retention:** Closed postings kept, with closed_at and closed_reason

## Lever's public postings endpoint works per company with no key. Swap in any company's Lever site name.

Endpoint: `https://api.lever.co/v0/postings/netflix?mode=json`

```bash
curl "https://api.lever.co/v0/postings/netflix?mode=json"
```

## Why Lever jobs data is confusing

Lever has a documented public Postings API at api.lever.co/v0/postings/<company> with two practical limits. First, you need to know each company's Lever slug in advance (there is no list endpoint). Second, many Lever customers disable the public postings endpoint or use vanity URLs, so the documented pattern does not always work.

JobsPipe returns Lever postings in the same schema as every other board it covers, with no site name to look up.

## Workarounds

### Hit api.lever.co/v0/postings/<company> directly

Works for customers who have not disabled the public endpoint and whose slug you know. There is no list endpoint to discover slugs from.

### Scrape jobs.lever.co subdomains

Possible. Subject to rate limits and HTML drift.

### Use JobsPipe

Every public Lever board, one endpoint, no slugs to manage. The free plan includes 1,000 jobs to start.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## Sample response

```json
{
  "id": "8a7e4f24-3c1d-4b9e-a2f6-1d5c7e9b0a34",
  "job_title": "Staff Software Engineer, Platform",
  "company": "Ramp",
  "company_domain": "ramp.com",
  "url": "https://jobs.lever.co/ramp/8a7e4f24-3c1d-4b9e-a2f6-1d5c7e9b0a34",
  "date_posted": "2026-09-03",
  "discovered_at": "2026-09-03T20:15:02+00:00",
  "last_seen_at": "2026-09-08 02:48:31",
  "verified_at": "2026-09-08 03:11:09",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 6,
  "seniority": "lead",
  "cities": [
    "New York"
  ],
  "state_code": "NY",
  "min_annual_salary_usd": 220000,
  "max_annual_salary_usd": 290000,
  "technology_slugs": [
    "python",
    "kubernetes",
    "terraform"
  ],
  "keyword_slugs": [
    "platform-engineering",
    "developer-productivity"
  ],
  "sources": [
    {
      "provider": "lever",
      "url": "https://jobs.lever.co/ramp/8a7e4f24-3c1d-4b9e-a2f6-1d5c7e9b0a34"
    }
  ]
}
```

## FAQ

### How do I find a company's Lever slug?

The slug is the company's Lever site name, the path segment in its jobs.lever.co URL, such as ramp in jobs.lever.co/ramp. Lever has no list endpoint, so you need each slug in advance, and customers on vanity URLs or embedded boards hide it. With JobsPipe you search Lever postings by company name, so no slug is needed.

### Does the Lever postings API include salary?

Rarely in a structured form. The v0 endpoint gives location as a free-text string and the full description as HTML, and a salaryRange object appears only when the customer fills it in. JobsPipe parses stated ranges from the description into min_annual_salary_usd and max_annual_salary_usd, and the data section on this page shows what share of Lever postings carry one.

### What is the rate limit on api.lever.co/v0/postings?

Lever's Postings API documentation publishes no rate limit for reading postings. The one limit it states is on applications: more than 2 application POST requests per second returns a 429. The endpoint accepts skip and limit parameters for paging plus team, location and commitment filters, and mode=json returns JSON instead of an HTML fragment. The authenticated v1 API is rate limited per API key, as documented at hire.lever.co/developer/documentation.

### Why doesn't the Lever postings endpoint work for some companies?

Many Lever customers disable the public postings endpoint or publish their board on a vanity URL, so the documented api.lever.co/v0/postings/<company> pattern does not always work. The call also fails if you guess the wrong slug, since there is no directory to check it against. JobsPipe returns Lever postings by company name, in the same schema as every other board it covers.

## Does Lever have an API?

Yes, two. The public Postings API at api.lever.co/v0/postings/<company> returns one customer's open postings as JSON (or as an HTML fragment without mode=json) with no key, and it accepts skip, limit, team, location and commitment parameters. The authenticated Lever API at api.lever.co/v1 covers opportunities, candidates, postings management, stages, users, requisitions and webhooks for one account, with Basic-auth keys or partner OAuth. There is no endpoint that lists Lever customers and no cross-account read. JobsPipe returns postings from every public Lever board together.

## Is the Lever API free?

The v0 postings endpoint is free and keyless, and its documentation publishes no rate limit for reading postings. The v1 API has no separate price and is only reachable with a key issued inside a customer's account. JobsPipe's free plan includes 1,000 jobs to start across every board it covers, Lever included, and the sandbox at POST /v1/sandbox/jobs/search needs no key.

## How do I get a Lever API key?

Reading postings needs none. If you are integrating with one Lever customer, an admin of that account creates a key under Settings, Integrations and API, with read or write scopes chosen at creation, and you send it as the username in HTTP Basic auth. Lever partners go through the partner program and use OAuth 2.0 with per-customer consent. Neither route reads other companies' boards. For postings across the Lever customer base, create a JobsPipe key and send it as a Bearer token to POST /v1/jobs/search with "source_or": ["lever"].

## What does the Lever API documentation cover?

hire.lever.co/developer/documentation covers the v1 API resource by resource (opportunities, postings, candidates, applications, stages, archive reasons, requisitions, users, webhooks), authentication with API keys and OAuth, rate limits and the sandbox environment. The Postings API section documents the v0 endpoint: the JSON fields (id, text, categories, description, lists, hostedUrl, applyUrl, createdAt, salaryRange when set), the query parameters, and the apply POST. What it does not cover is a way to find Lever customers. JobsPipe's docs at /docs cover the one record shape returned for Lever rows and every other board it covers.

## What JobsPipe returns for Lever

A POST /v1/jobs/search with "source_or": ["lever"] returns Lever postings as JobsPipe records: id (the Lever posting uuid), job_title, company, company_domain, url on jobs.lever.co, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when a range is stated, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to lever. Lever's free-text location ('San Francisco, CA', 'Remote - US') is resolved into cities, state_code and the job_country_code_or and remote filters. Narrow to one company with company_name_partial_match_or, or drop source_or to search every board at once.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/lever.

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin