Lever Postings API

The public Lever Postings API lets anyone build a custom careers site by listing a company's published jobs at /v0/postings/{site}, fetching a single posting, and submitting applications. Supports JSON, HTML, and iframe response modes, query filters by location/team/department/commitment, and a multipart application submission endpoint. Available globally and in the EU region.

Lever Postings API is one of 4 APIs that Lever publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Postings, Jobs, Careers, and Recruiting. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

lever-postings-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Lever Postings API
  description: |
    The public Lever Postings API lets anyone build a custom job site against a company's published Lever
    postings. Three resources: list postings for a site, retrieve a single posting, and submit an
    application. Available globally and in the EU region.
  version: "0.0"
  contact:
    name: Lever
    url: https://github.com/lever/postings-api
servers:
  - url: https://api.lever.co/v0/postings
    description: Lever Postings API (global)
  - url: https://api.eu.lever.co/v0/postings
    description: Lever Postings API (EU region)
tags:
  - name: Postings
    description: Public job postings.
  - name: Applications
    description: Application submission.
paths:
  /{site}:
    parameters:
      - name: site
        in: path
        required: true
        description: Lever company site name (e.g. `acmeco`).
        schema:
          type: string
    get:
      tags: [Postings]
      summary: List Public Postings
      description: |
        Returns a paginated list of published postings for the given Lever site. Supports JSON (default),
        HTML, and iframe response modes via the `mode` query parameter.
      operationId: listPublicPostings
      parameters:
        - name: skip
          in: query
          schema:
            type: integer
        - name: limit
          in: query
          schema:
            type: integer
            maximum: 100
        - name: location
          in: query
          schema:
            type: string
        - name: commitment
          in: query
          schema:
            type: string
        - name: team
          in: query
          schema:
            type: string
        - name: department
          in: query
          schema:
            type: string
        - name: level
          in: query
          schema:
            type: string
        - name: group
          in: query
          description: Group results by `location`, `commitment`, `team`, `department`, or `level`.
          schema:
            type: string
        - name: mode
          in: query
          description: Response format.
          schema:
            type: string
            enum: [json, html, iframe, xml]
        - name: css
          in: query
          description: Optional URL of a CSS stylesheet to apply when mode is `html` or `iframe`.
          schema:
            type: string
        - name: resize
          in: query
          description: Enable iframe auto-resize.
          schema:
            type: boolean
      responses:
        '200':
          description: A page of postings, or HTML / XML content depending on `mode`.
  /{site}/{postingId}:
    parameters:
      - name: site
        in: path
        required: true
        schema:
          type: string
      - name: postingId
        in: path
        required: true
        schema:
          type: string
    get:
      tags: [Postings]
      summary: Retrieve A Public Posting
      description: Returns a single published posting as JSON.
      operationId: getPublicPosting
      responses:
        '200':
          description: The posting.
    post:
      tags: [Applications]
      summary: Submit An Application
      description: |
        Submit an application against a posting. Accepts either JSON or multipart/form-data.
        Requires a posting-form API key passed via `?key=`.
      operationId: submitApplication
      parameters:
        - name: key
          in: query
          required: true
          description: Posting-form API key.
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required: [name, email]
              properties:
                name:
                  type: string
                email:
                  type: string
                  format: email
                phone:
                  type: string
                org:
                  type: string
                resume:
                  type: string
                  format: binary
                urls:
                  type: array
                  items:
                    type: string
                    format: uri
                comments:
                  type: string
                source:
                  type: string
                ip:
                  type: string
                referer:
                  type: string
                consent:
                  type: object
          application/json:
            schema:
              type: object
              required: [name, email]
              properties:
                name:
                  type: string
                email:
                  type: string
                  format: email
                phone:
                  type: string
                org:
                  type: string
                urls:
                  type: array
                  items:
                    type: string
                    format: uri
                comments:
                  type: string
                silent:
                  type: boolean
                source:
                  type: string
                ip:
                  type: string
                timezone:
                  type: string
                userAgent:
                  type: string
                acceptLanguage:
                  type: string
                referer:
                  type: string
                consent:
                  type: object
      responses:
        '201':
          description: Application submitted.
        '429':
          description: Rate-limited (max 2 POST per second per site).