# Lever AI agent for Slack & Microsoft Teams

Viktor is an AI employee that connects to Lever in one click via OAuth and helps you manage job postings and track candidates through hiring, running 16 Lever actions for you like Add Note, List Users, and List Stages. Ask in plain English in Slack or Microsoft Teams; Viktor does the work in Lever and reports back. Setup takes about two minutes.

- Tool: Lever
- Category: HR & Recruiting
- Connection: One-click OAuth
- Actions available: 16
- Works from: Slack and Microsoft Teams
- Page: https://viktor.com/integrations/lever

## What can you ask Viktor to do in Lever?

- "Screen the new applicants in Lever against this job description and shortlist the top five."
- "Summarize this week's candidate pipeline from Lever for the hiring team."
- "Draft outreach to the candidates in Lever who passed the phone screen."
- "Keep Lever up to date after each interview - notes, stage, and next steps."

## What can Viktor do in Lever? (16 actions)

- **Update Opportunity Stage** - Moves a candidate to a different stage in the hiring pipeline. Use this when asked to advance, move, or update a candidate's stage. Use List Stages to find the target stage ID, and Search Opportunities to find the opportunity ID. Every stage change is logged in Lever's audit trail under the Perform As user. Example: call with opportunityId="<id>", stageId="<stageId>", performAs="<userId>" → moves the candidate to that stage and returns the updated opportunity.
- **Submit Feedback** - Submits an interview feedback form (scorecard) for an opportunity. Use this after an interview to record the interviewer's assessment. baseTemplateId is required — it identifies which feedback form template to submit against. Use List Feedback Templates to resolve the template id and its field IDs. panel and interview are optional but linked: if you specify one, you must specify the other. Use List Opportunity Items (resource=interviews) to find panel and interview IDs. Use List Opportunity Items (resource=feedback) to check if feedback has already been submitted for this panel. fieldValues is a JSON array of {"id": "<fieldid>", "value": "<answer>"} objects; the field IDs and valid values come from the template returned by List Feedback Templates. Perform As is required — feedback is attributed to this user. Use List Users to find user IDs. Example: call with opportunityId="<id>", performAs="<userId>", baseTemplateId="<templateId>", fieldValues=[{"id": "<fieldId>", "value": "strongyes"}] → submits the scorecard and returns the created feedback record.
- **Search Opportunities** - Searches and filters opportunities (candidate applications) in Lever. This is the primary tool for finding candidates — use it whenever asked to find, list, or filter candidates or applications. Supports filtering by job posting, pipeline stage, tag, origin, email, and archived status. Use List Postings to find posting IDs, List Stages to find stage IDs. The Lever API has no name or owner filter. To find a candidate by name, pass the name in email: when the value isn't a valid email address this tool lists opportunities and matches them by name/email locally (it does not send an invalid email to the API). The local name match sweeps up to the first several pages of results; if that cap is reached the $summary says so and the response next cursor lets you continue. When the user says 'my candidates', note that the API does not support filtering by owner directly — search by posting or stage and identify relevant records from the results. Set expand to include related objects inline (e.g. stage, owner, contact) and avoid follow-up calls. Returns cursor-paginated results; use the next field in the response to fetch subsequent pages. Example: to find a candidate by email, call with email="jane@example.com" → exact match; to find by name, call with email="Jane Doe" → local name match.
- **List Users** - Returns all users (recruiters, hiring managers, admins) in the Lever account. Use this to resolve team member names to user IDs before assigning ownership, filtering opportunities by owner, or setting the Perform As field on write operations. Returns each user's id, name, email, and access role. Returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Example: call with no arguments → returns users each with id, name, email, and access role; pass a user's id as Perform As on write actions.
- **List Stages** - Returns all pipeline stages configured in the Lever account. Use this to resolve stage names to IDs before filtering candidates with Search Opportunities, moving a candidate with Update Opportunity Stage, or creating an opportunity at a specific stage. Returns each stage's id and text (display name). Returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Example: call with no arguments → returns stages like { id: "lead-new", text: "New lead" }; pass a stage id to Update Opportunity Stage.
- **List Postings** - Returns job postings from Lever, optionally filtered by state, team, or location. Use this to discover posting IDs before searching opportunities with Search Opportunities or creating a new candidate with Create Opportunity. Returns each posting's id, name, state, team, department, and location. Returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Example: to find published engineering roles, call with team="Engineering", state="published" → returns postings each with id, name, state, team, and location.
- **List Opportunity Items** - Returns sub-records attached to a single opportunity (candidate): notes, feedback, interviews, resumes, files, or offers. Use this when asked about a candidate's notes, interview feedback/scorecards, scheduled interviews, resumes, attached files, or offer. Set resource to choose which: notes (recruiter notes), feedback (interview scorecards — each with panel id, interviewer, and score), interviews (scheduled interviews — each with panel id, date, interviewers), resumes (parsed resumes — each with a resume id), files (other attached documents — each with file id, name, extension), or offers (offer details). Use Search Opportunities to find the opportunity ID first. The panel IDs returned by interviews/feedback are used by Submit Feedback; the resumes resource returns each resume's parsed data inline (status, file info, and extracted fields). For notes, feedback, interviews, and offers this returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Gotcha: resumes and files are not paginated — Lever returns the full set in a single payload with no hasNext/next cursor, and limit/offset are ignored, so do not expect cursor metadata for them. Example: to read a candidate's interview feedback, call with opportunityId="<id>", resource="feedback" → returns feedback records each with panel id, interviewer, score, and completed form fields.
- **List Feedback Templates** - Returns the feedback form templates configured in the Lever account, including each template's field definitions. Use this before Submit Feedback to resolve the baseTemplateId and the field IDs required for fieldValues — without it those IDs are unknown. Returns each template's id, text (name), and fields (each with an id, type, and prompt text). Returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Example: call with no arguments → returns templates like { id: "<templateId>", text: "Onsite Interview", fields: [{ id: "<fieldId>", type: "score-system", text: "Overall" }] }; pass that template id as baseTemplateId and the field ids inside fieldValues when calling Submit Feedback.
- **List Archive Reasons** - Returns all archive reasons configured in the Lever account. Use this to find a reason ID before archiving a candidate with Archive Opportunity. Filter by type to get only hired reasons or only non-hired (rejection) reasons. Returns each reason's id, text, and type. Returns one page (up to limit); if the response's hasNext is true, pass its next value to offset to fetch the following page. Example: call with type="non-hired" → returns rejection reasons each with id, text, and type; pass an id as the reason for Archive Opportunity.
- **Get Posting** - Returns full details for a single job posting by ID, including its complete job description. Use this to read a specific role's description, requirements, and closing text — the response content object holds description/descriptionHtml, lists (e.g. requirements), and closing/closingHtml, plus salaryDescription, salaryRange, categories (team, department, location, commitment, level), state, and application urls. Use List Postings to find posting IDs. Example: call with postingId="<id>" → returns the posting with its full job description under content.description.
- **Get Opportunity** - Returns full details for a single opportunity (candidate application) by ID. Use this after Search Opportunities when you need complete candidate data including contact info, stage, notes, and application history. Set expand to inline related objects: applications for application records, stage for the current stage name, owner for the assigned recruiter, contact for full contact details. The opportunity ID comes from search results or from a webhook payload. Example: call with opportunityId="<id>", expand=["applications","stage"] → returns the full opportunity with the application and stage objects inlined.
- **Download Opportunity Files** - Downloads one or more candidate documents — résumés/CVs, other attached files, and/or offer documents — and saves them to the local file system for use in a later step. Use this when asked to download, export, or retrieve the actual files (not just their metadata). Set resources to the document types to pull from: resumes (CVs/résumés), files (other attachments), offers (offer documents). You can select more than one to grab everything at once. By default it downloads all matching documents of the selected types for the opportunity; narrow the set with fileNameContains (case-insensitive name/extension filter) and/or itemIds (specific document ids from List Opportunity Items). Use Search Opportunities to find the opportunity ID. Each file is saved to the temporary directory; the action exports filepaths and returns a files array (each with resource, id, name, filepath). Documents that fail to download are reported in errors rather than aborting the batch. Example: to get a candidate's CV and any other documents, call with opportunityId="<id>", resources=["resumes","files"] → downloads every résumé and file and exports their paths. Add fileNameContains=".pdf" to limit to PDFs.
- **Create Opportunity** - Creates a new opportunity (candidate + application) in Lever. Use this to add a new candidate to the pipeline, optionally applying them to a specific job posting. Use List Postings to find posting IDs, List Stages to find stage IDs, and List Users to find the recruiter user ID for Perform As. Perform As is required — it sets the opportunity creator and owner. If a candidate with the same email already exists, Lever will link the new opportunity to the existing contact rather than creating a duplicate. WARNING: only one posting UID may be specified per request. Example: to add Jane Doe as a referred candidate on a posting, call with performAs="<userId>", candidateName="Jane Doe", email="jane@example.com", postingId="<postingId>", origin="referred" → returns the created opportunity with its id.
- **Create Interview** - Schedules an interview for a candidate opportunity. Use this when asked to set up, book, or schedule an interview for a candidate. panel (Interview Panel UID), interviewers, date, duration, and Perform As are all required. Interviews can only be created on panels where externallyManaged == true. date is a single Unix timestamp in milliseconds for when the interview occurs (e.g. 1700000000000). duration is in minutes (e.g. 60). interviewers is a comma-separated list of user IDs — each will be assigned to the interview. Use List Users to find user IDs. Use Search Opportunities to find the opportunity ID. Example: call with opportunityId="<id>", panelId="<panelId>" (from List Opportunity Items (resource=interviews)), interviewers="<userId>", date=1700000000000, duration=60, performAs="<userId>" → adds an interview to the panel and returns it.
- **Archive Opportunity** - Archives a candidate opportunity with a specified reason (hired or not hired). Use this when a hiring decision has been made — to mark a candidate as hired or to reject them. Use List Archive Reasons to find valid reason IDs (filter by type hired or non-hired). Use Search Opportunities to find the opportunity ID. Archiving is reversible — candidates can be unarchived in the Lever UI. Example: call with opportunityId="<id>", reasonId="<reasonId>", performAs="<userId>" → archives the candidate (reversible in the Lever UI) and returns the updated opportunity.
- **Add Note** - Adds a note to an opportunity. Use this to record recruiter observations, interview impressions, or follow-up reminders on a candidate. Use List Opportunity Items (resource=notes) first to check existing notes and avoid duplicates. Set Secret to true to make the note visible only to admins and super admins. Example: call with opportunityId="<id>", note="Strong communicator; advancing to onsite.", performAs="<userId>" → adds the note and returns it.

## How does Viktor work with Lever?

1. Add Viktor to Slack or Microsoft Teams.
2. Connect Lever with one-click OAuth - Viktor handles authentication.
3. Ask in plain English. Viktor runs the Lever actions, chains them with your other tools when needed, and reports back. Sensitive actions wait for your approval.

## What is a Lever AI agent?

A Lever AI agent is an AI that connects to your Lever account and completes work in it - it doesn't just answer questions about Lever, it takes the actions. Viktor is that agent: an AI employee that works in Lever on your behalf and delivers the finished result in Slack or Microsoft Teams.

Unlike workflow builders such as Zapier or Make, there is nothing to configure - no triggers to map, no workflows to maintain. You describe the outcome in plain English, and Viktor picks the right Lever actions, chains them with the other 3,200+ tools it connects to, and asks for approval before anything sensitive runs.

### About Lever

Flexible Recruiting Software for Today's Hiring Teams

## Security and permissions

- One-click OAuth - Viktor never sees your password, and you can revoke access at any time.
- Review-first approvals: sensitive Lever actions wait for your sign-off before they run.
- Isolated compute per team, encrypted in transit and at rest - and your data is never used to train models.
- SOC 2 Type 1 compliant, with Type 2 and ISO 27001 in progress.

## FAQ

### Does Viktor integrate with Lever?

Yes. Lever is one of the 3,200+ tools Viktor connects to, via a managed connector. Once connected, anyone on your team can put Viktor to work in Lever from Slack or Microsoft Teams - no workflow builder, no code.

### How do I connect Lever to Viktor?

Ask Viktor in Slack or Microsoft Teams to connect Lever, then approve the one-click OAuth prompt. Viktor never sees your password, handles authentication itself, and starts working right away. Setup takes about two minutes, and you can revoke access at any time.

### What can Viktor do in Lever?

Viktor can run 16 Lever actions, including Add Note, List Users, and List Stages - and chain them with other tools in a single request. In practice that means Viktor helps you manage job postings and track candidates through hiring. If a task spans several actions, Viktor plans the sequence itself and reports back when the work is done.

### Do I need to build workflows to automate Lever?

No. Viktor isn't a workflow builder - there are no triggers to map and no workflows to maintain. You ask for the outcome in plain English in Slack or Microsoft Teams, and Viktor decides which Lever actions to take, runs them, and reports back.

### Is my Lever data secure with Viktor?

Yes. Viktor connects to Lever in one click via OAuth, runs in an isolated environment per team, and never trains models on your data. Sensitive actions wait for your approval, and you can revoke access at any time. Viktor is SOC 2 Type 1 compliant, with Type 2 and ISO 27001 in progress.

### How much does the Lever integration cost?

Nothing extra - every integration, including Lever, is available on every plan. You can start free with up to $100 in credits, no credit card required; paid plans start at $50/month.

### Can Viktor use Lever together with my other tools?

Yes - that's the point. Viktor connects to 3,200+ tools and works across them in a single run: it can pull data from Lever, cross-reference it with another tool - for example Slack or Gmail, and deliver the finished result in Slack or Microsoft Teams.

## Viktor uses Lever together with

- [Slack](https://viktor.com/integrations/slack)
- [Gmail](https://viktor.com/integrations/gmail)
- [Google Sheets](https://viktor.com/integrations/google-sheets)
- [HubSpot](https://viktor.com/integrations/hubspot)
- [Notion](https://viktor.com/integrations/notion)
- [Salesforce](https://viktor.com/integrations/salesforce)

## More HR & Recruiting integrations

- [Moodle](https://viktor.com/integrations/moodle)
- [Brainbase Labs](https://viktor.com/integrations/brainbase-labs)
- [Deel](https://viktor.com/integrations/deel)
- [Buddee](https://viktor.com/integrations/buddee)
- [TalentHR](https://viktor.com/integrations/talenthr)
- [Clockwork Recruiting](https://viktor.com/integrations/clockwork-recruiting)
- [Microsoft Entra ID](https://viktor.com/integrations/microsoft-entra-id)
- [Ashby](https://viktor.com/integrations/ashby)

## Get started

Viktor is free to start - up to $100 in credits, no credit card required. All 3,200+ integrations are included on every plan. Sign up at https://viktor.com or browse all integrations at https://viktor.com/integrations.
