Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Lever

Scalekit connector
Open markdown

The Lever connector lets your AI agent act in each user's Lever account. Each user signs in to Lever once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 77 tools.

Tools
77
What they doRead · write · destructive
46 · 25 · 646 read25 write6 destructive
Users sign in with
OAuth app
Your own Lever app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Lever connection

    In AgentKit > Connections, create a Lever connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Lever connections use your own OAuth app. Register one with Lever and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Lever connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'lever'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Lever:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'lever_archive_reasons_list',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • lever_applications_deleted_listList applications deleted from the Lever account within a time window of at most 30 days.Read-only

    List Deleted Applications

    List applications deleted from the Lever account within a time window of at most 30 days. Returns a page of deleted applications with id, deletedAt, opportunityId and postingId. Use this to sync application deletions. Use lever_opportunity_get with expand applications for live applications.

    Inputs

    deleted_at_endintegerrequired
    End of the deletion window (exclusive). The window may not exceed 30 days. Unix timestamp in milliseconds. Example: 1407460069499
    deleted_at_startintegerrequired
    Start of the deletion window (inclusive). The window may not exceed 30 days. Unix timestamp in milliseconds. Example: 1407460069499
    limitinteger
    Maximum number of results to return per page, between 1 and 100. Lever defaults to its own page size when omitted. Example: 50
    offsetstring
    Pagination cursor. Pass the next value returned by the previous page of this list to fetch the following page. Omit for the first page. Example: 0.1414895548650.a6070140-33db-407c-91f5-2760e15c8e94
  • lever_archive_reason_getRetrieve one archive reason.Read-only

    Get Archive Reason

    Retrieve one archive reason. Returns the reason id, text, status and type. Use this to resolve an archive reason UID. Use lever_archive_reasons_list for every reason.

    Inputs

    archive_reason_idstringrequired
    Archive reason UID. Get it from lever_archive_reasons_list. Example: 63dd55b2-a99f-4e7b-985f-22c7bf80ab42
  • lever_archive_reasons_listList the archive reasons in the Lever account, optionally only hired or non-hired ones.Read-only

    List Archive Reasons

    List the archive reasons in the Lever account, optionally only hired or non-hired ones. Returns archive reasons with id, text, status and type. Use this to get a reason UID for lever_opportunity_archive.

    Inputs

    limitinteger
    Maximum number of results to return per page, between 1 and 100. Lever defaults to its own page size when omitted. Example: 50
    offsetstring
    Pagination cursor. Pass the next value returned by the previous page of this list to fetch the following page. Omit for the first page. Example: 0.1414895548650.a6070140-33db-407c-91f5-2760e15c8e94
    typestring
    Return only reasons of this type. Allowed values: hired, non-hired. Example: non-hiredone of hirednon-hired
  • lever_contact_getRetrieve the contact record of a person, shared across all of their opportunities.Read-only

    Get Contact

    Retrieve the contact record of a person, shared across all of their opportunities. Returns the contact with id, name, headline, location, emails, phones and isAnonymized. Use this to read a candidate's personal details. Use lever_opportunity_get for one candidacy. Requires a contact UID from the contact field of lever_opportunity_get.

    Inputs

    contact_idstringrequired
    Contact UID. Get it from the contact field of lever_opportunity_get or lever_opportunities_list. Example: 7f23e772-f2cb-4ebb-b33f-54b872999992
  • lever_disposition_stages_listList the account's full pipeline configuration: every stage with its pipeline, rank and hasInterview, plus every archive reason.Read-only

    List Disposition Stages

    List the account's full pipeline configuration: every stage with its pipeline, rank and hasInterview, plus every archive reason. Returns stages and archive reasons in one response. Use this to map Lever's pipeline to another system. Use lever_stages_list or lever_archive_reasons_list for a single list.

    Inputs

    This tool takes no inputs.

  • lever_diversity_survey_getRetrieve the active diversity survey that applies to a posting's location, or to a candidate-selected country.Read-only

    Get Diversity Survey

    Retrieve the active diversity survey that applies to a posting's location, or to a candidate-selected country. Returns the survey with id, text, instructions, locations and fields (questions with their answer options). Use this to build the diversitySurvey answers for lever_posting_apply.

    Inputs

    posting_idstringrequired
    Posting UID. Get it from lever_postings_list. Example: f2f01e16-27f8-4711-a728-7d49499795a0
    country_codestring
    Country code used to pick a candidate self-select location survey. Example: US
  • lever_feedback_getRetrieve one feedback form on an opportunity.Read-only

    Get Feedback

    Retrieve one feedback form on an opportunity. Returns the feedback form with its fields and values, user, panel, interview and timestamps. Use this when you have a feedback ID. Use lever_feedback_list to browse feedback.

    Inputs

    feedback_idstringrequired
    Feedback form UID. Get it from lever_feedback_list. Example: c64fb192-d6d8-42dc-ac82-47cb87e9839c
    opportunity_idstringrequired
    UID of the opportunity (one candidacy of a contact for a role). Get it from lever_opportunities_list (id field). Example: 250d8f03-738a-4bba-a671-8a3d73477145
    expandarray
    Related objects to return inline as full objects instead of IDs. Allowed values: user. Example: ["user"]
  • lever_feedback_listList the feedback forms submitted for an opportunity, typically completed by interviewers.Read-only

    List Feedback

    List the feedback forms submitted for an opportunity, typically completed by interviewers. Returns feedback forms with id, type, text, baseTemplateId, fields with their values, user, panel, interview and timestamps. Use this to read interview scorecards. Use lever_feedback_get for one form and lever_notes_list for free-form notes.

    Inputs

    opportunity_idstringrequired
    UID of the opportunity (one candidacy of a contact for a role). Get it from lever_opportunities_list (id field). Example: 250d8f03-738a-4bba-a671-8a3d73477145
    expandarray
    Related objects to return inline as full objects instead of IDs. Allowed values: user. Example: ["user"]
    limitinteger
    Maximum number of results to return per page, between 1 and 100. Lever defaults to its own page size when omitted. Example: 50
    offsetstring
    Pagination cursor. Pass the next value returned by the previous page of this list to fetch the following page. Omit for the first page. Example: 0.1414895548650.a6070140-33db-407c-91f5-2760e15c8e94