Authenticate using HTTP Basic auth with your Lever API key as the username and an empty password, or use OAuth 2.0 for partner integrations via https://auth.lever.co/authorize.
GET https://api.lever.co/v1/postings to list active job postings; use query parameters 'state=published' to filter, and 'limit' plus 'offset' for pagination — the response includes a 'hasNext' boolean.
To create an opportunity (candidate + application combined), POST to https://api.lever.co/v1/opportunities with a body containing 'name', 'headline' (email), and 'postings' array of posting IDs.
Include 'perform_as' query parameter set to a Lever user ID on write requests to attribute actions correctly in the audit log.
To add a resume or file, POST to /v1/opportunities/{id}/files with multipart/form-data; Lever accepts PDF and DOCX.
Advance a candidate through stages by POSTing to /v1/opportunities/{id}/stage with body 'stage' set to the target stage ID retrieved from GET /v1/stages.
Known gotchas
Lever has two separate data models: 'contacts' (people) and 'opportunities' (applications); the same person applying to two roles creates two opportunities linked to one contact — querying only opportunities can surface duplicates if you're not deduplicating by contact ID.
Archived opportunities are excluded from default list responses; pass 'archived=true' or 'archived_reason_id' explicitly if you need historical pipeline data.
Webhook signatures use HMAC-SHA256 against the raw request body; validating against a parsed/re-serialized body will cause signature mismatches — always verify against the raw bytes.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp