{"openapi":"3.1.0","info":{"title":"Lever (BYOK) API","version":"0.1.0","description":"Lever (BYOK) lets an AI assistant read your own Lever data through the Lever API with a key you supply (Lever API key). Read-only: 9 tools (list_opportunities, get_opportunity, list_postings, list_requisitions, list_stages, list_users, list_archive_reasons, list_sources, list_tags). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-lever.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-lever/docs"},"termsOfService":"https://connectorbay.com/byok-lever/terms"},"servers":[{"url":"https://byok-lever.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-lever/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_opportunities":{"post":{"operationId":"list_opportunities","summary":"List Lever opportunities (candidates in the hiring pipeline) with contact details, stage id, owner, tags, source and dat","description":"List Lever opportunities (candidates in the hiring pipeline) with contact details, stage id, owner, tags, source and dates. Timestamps are milliseconds since 1970. Contains personal data. Use for \"Which Lever opportunities were created this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only opportunities of the contact with this email address.","title":"Email"},"tag":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only opportunities with this tag (case sensitive).","title":"Tag"},"stage_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only opportunities currently in this stage id (see list_stages).","title":"Stage Id"},"posting_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only opportunities applied to this posting id.","title":"Posting Id"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for archived opportunities only, false for active ones; leave out for both.","title":"Archived"},"created_at_start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only opportunities created at or after this time, in milliseconds since 1970.","title":"Created At Start"},"updated_at_start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only opportunities with any change at or after this time, in milliseconds since 1970.","title":"Updated At Start"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: pass the 'next' value from the previous answer (only values the API returned).","title":"Offset"}},"title":"list_opportunitiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_opportunity":{"post":{"operationId":"get_opportunity","summary":"Get one Lever opportunity by id with contact details, stage, owner, tags, sources and dates. Contains personal data. Use","description":"Get one Lever opportunity by id with contact details, stage, owner, tags, sources and dates. Contains personal data. Use for \"Show Lever opportunity 250d8f03-738a-4bba-a671-8a3d73477145\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"opportunity_id":{"description":"Lever opportunity id (a UUID).","maxLength":60,"title":"Opportunity Id","type":"string"}},"required":["opportunity_id"],"title":"get_opportunityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_postings":{"post":{"operationId":"list_postings","summary":"List Lever job postings with title, state, team, department, location, commitment, level, owner and public URLs. Filter ","description":"List Lever job postings with title, state, team, department, location, commitment, level, owner and public URLs. Filter by state or team. Use for \"Which job postings are published in Lever\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"anyOf":[{"enum":["published","internal","closed","draft","pending","rejected"],"type":"string"},{"type":"null"}],"default":null,"description":"Posting state: published, internal, closed, draft, pending or rejected.","title":"State"},"team":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only postings of this team name (case sensitive).","title":"Team"},"department":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only postings of this department name (case sensitive).","title":"Department"},"location":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only postings in this location (case sensitive).","title":"Location"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: pass the 'next' value from the previous answer (only values the API returned).","title":"Offset"}},"title":"list_postingsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_requisitions":{"post":{"operationId":"list_requisitions","summary":"List Lever requisitions with code, name, status, headcount, location, department and team. Use for \"Which Lever requisit","description":"List Lever requisitions with code, name, status, headcount, location, department and team. Use for \"Which Lever requisitions are open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Requisition status, for example open.","title":"Status"},"requisition_code":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only the requisition with this code from another system.","title":"Requisition Code"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: pass the 'next' value from the previous answer (only values the API returned).","title":"Offset"}},"title":"list_requisitionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_stages":{"post":{"operationId":"list_stages","summary":"List the pipeline stages of the Lever account (id and name). Use for \"What pipeline stages does Lever have\".","description":"List the pipeline stages of the Lever account (id and name). Use for \"What pipeline stages does Lever have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: pass the 'next' value from the previous answer (only values the API returned).","title":"Offset"}},"title":"list_stagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_users":{"post":{"operationId":"list_users","summary":"List the Lever users with name, email, access role, job title and deactivation time. Only active users unless includeDea","description":"List the Lever users with name, email, access role, job title and deactivation time. Only active users unless includeDeactivated is true. Use for \"Who has a Lever account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the user with this exact email address.","title":"Email"},"access_role":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Access role: super admin, admin, team member, limited team member or interviewer.","title":"Access Role"},"include_deactivated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include deactivated users.","title":"Include Deactivated"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging token: pass the 'next' value from the previous answer (only values the API returned).","title":"Offset"}},"title":"list_usersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_archive_reasons":{"post":{"operationId":"list_archive_reasons","summary":"List Lever archive reasons with text, status and whether they mean hired or non-hired. Use for \"What archive reasons are","description":"List Lever archive reasons with text, status and whether they mean hired or non-hired. Use for \"What archive reasons are configured in Lever\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["hired","non-hired"],"type":"string"},{"type":"null"}],"default":null,"description":"Only reasons of this type: hired or non-hired.","title":"Type"}},"title":"list_archive_reasonsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_sources":{"post":{"operationId":"list_sources","summary":"List the candidate sources used in Lever with how many candidates carry each. Use for \"Which sources bring the most cand","description":"List the candidate sources used in Lever with how many candidates carry each. Use for \"Which sources bring the most candidates in Lever\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sourcesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List the tags used in Lever with how many candidates carry each. Use for \"Which tags are used in Lever\".","description":"List the tags used in Lever with how many candidates carry each. Use for \"Which tags are used in Lever\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}