> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Recruitee

The Recruitee connector lets your AI agent act in each user's Recruitee account. Each user connects their own Recruitee access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 53 tools.

**Authentication:** Bearer Token
**Categories:** Productivity
**Tools:** 53: 26 read, 23 write, 4 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=RECRUITEE)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Recruitee connection

   In **AgentKit > Connections**, create a Recruitee connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   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 = 'recruitee'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Recruitee:', 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: 'recruitee_list_admins',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "recruitee"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Recruitee:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="recruitee_list_admins",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Recruitee credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'recruitee_get_candidate',
  toolInput: {
    id: 1,
  },
  connector: 'recruitee',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="recruitee_get_candidate",
    tool_input={
        "id": 1,
    },
    connection_name="recruitee",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `recruitee_get_candidate`

Get Candidate · Read-only

Retrieve one Recruitee candidate by ID.
Returns the candidate profile (name, emails, phones, source, ratings, timestamps, hired status) and a references array of related records.
Use get_candidate when you have the candidate ID. Use recruitee_search_candidates to find the ID first.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"id":1}`

### `recruitee_get_department`

Get Department · Read-only

Retrieve one Recruitee department by ID.
Returns the department with its id, name, and translations.
Use get_department when you have the department ID from recruitee_list_departments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the department. Get it from recruitee_list_departments.

Example input: `{"id":1}`

### `recruitee_get_location`

Get Location · Read-only

Retrieve one Recruitee location with its translations.
Returns the location with id, country code, state code, and translated names and addresses.
Use get_location when you have the location ID from recruitee_list_locations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the location. Get it from recruitee_list_locations.

Example input: `{"id":1}`

### `recruitee_get_offer`

Get Offer · Read-only

Retrieve one Recruitee job offer or talent pool by ID.
Returns the offer with title, status, description, requirements, department, locations, and pipeline details.
Use get_offer when you have the offer ID. Use recruitee_list_offers to find it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_get_pipeline_template`

Get Pipeline Template · Read-only

Retrieve one Recruitee pipeline template with its ordered stages.
Returns the pipeline_template with id, title, and its stages (id, name, category).
Use get_pipeline_template to find stage IDs for recruitee_change_placement_stage.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the pipeline template. Get it from recruitee_list_pipeline_templates or from an offer's pipeline details.

Example input: `{"id":1}`

### `recruitee_get_requisition`

Get Requisition · Read-only

Retrieve one Recruitee requisition by ID.
Returns the requisition with title, status, department, location, openings, and approval details.
Use get_requisition when you have the ID from recruitee_list_requisitions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the requisition. Get it from recruitee_list_requisitions.

Example input: `{"id":1}`

### `recruitee_get_talent_pool`

Get Talent Pool · Read-only

Retrieve one Recruitee talent pool by ID.
Returns the talent_pool with title, status, and description.
Use get_talent_pool when you have the ID from recruitee_list_talent_pools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the talent pool. Get it from recruitee_list_talent_pools.

Example input: `{"id":1}`

### `recruitee_get_task`

Get Task · Read-only

Retrieve one Recruitee task by ID.
Returns the task with title, description, due date, assignees, candidate, and completion state.
Use get_task when you have the task ID from recruitee_list_tasks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the task. Get it from recruitee_list_tasks.

Example input: `{"id":1}`

### `recruitee_list_admins`

List Admins · Read-only

List team members (admins) of the Recruitee company.
Returns the admins with id, name, email, and role.
Use list_admins to find admin IDs for recruitee_create_task and recruitee_add_candidate_followers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `authorized_for_candidate_id` (`integer`, optional): Return only admins who have access to this candidate.

Example input: `{}`

### `recruitee_list_candidate_activities`

List Candidate Activities · Read-only

List the activity timeline of a Recruitee candidate, such as stage changes, notes, emails and edits.
Returns the candidate's activity entries in time order.
Use list_candidate_activities to audit what happened to a candidate.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"candidate_id":1}`

### `recruitee_list_candidate_attachments`

List Candidate Attachments · Read-only

List files attached to a Recruitee candidate, such as CVs, cover letters and note attachments.
Returns an attachments array with file name, kind, source, and download details.
Use list_candidate_attachments to find documents for a candidate.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `kind` (`string`, optional): Filter by attachment kind: document, image, or other. One of: `document`, `image`, `other`.
- `source` (`string`, optional): Filter by where the attachment came from: note, result, open_question, offer, requisition, requisition_approval_request, talent_pool, guest, candidate, or mailbox. One of: `note`, `result`, `open_question`, `offer`, `requisition`, `requisition_approval_request`, `talent_pool`, `guest`, `candidate`, `mailbox`.

Example input: `{"candidate_id":1}`

### `recruitee_list_candidate_notes`

List Candidate Notes · Read-only

List notes written on a Recruitee candidate's profile.
Returns a notes array with note body, author, visibility, and timestamps, plus a references array of authors.
Use list_candidate_notes to read the note history. Use recruitee_create_candidate_note to add one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"candidate_id":1}`

### `recruitee_list_candidate_tasks`

List Candidate Tasks · Read-only

List tasks linked to a Recruitee candidate, optionally limited to completed or uncompleted tasks.
Returns a tasks array with title, description, due date, assignees, and completion state.
Use list_candidate_tasks for one candidate. Use recruitee_list_tasks for tasks across the company.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `status` (`string`, optional): Limit tasks to completed or uncompleted ones. Leave empty for all tasks. One of: `completed`, `uncompleted`.

Example input: `{"candidate_id":1}`

### `recruitee_list_candidates`

List Candidates · Read-only

List candidates in the Recruitee company, optionally filtered by offer, qualification status, IDs or creation date.
Returns a candidates array with id, name, emails, phones, source, and timestamps, plus a references array of related admins and offers.
Use list_candidates to browse or page through candidates. Use recruitee_search_candidates for free-text or multi-field filtering, and recruitee_get_candidate for one candidate's full profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_after` (`string`, optional): Return only candidates created after this date, for example 2026-01-31.
- `deleted` (`boolean`, optional): When true, return only deleted candidates.
- `disqualified` (`boolean`, optional): When true, return only disqualified candidates.
- `ids` (`string`, optional): Comma-separated candidate IDs to return, for example 234221,4211412.
- `limit` (`integer`, optional): Maximum number of candidates to return. Default 100, maximum 1000.
- `offer_id` (`string`, optional): Return only candidates assigned to this offer. Pass the offer ID or slug.
- `offset` (`integer`, optional): Number of candidates to skip, for paging. The next page offset is the current offset plus limit.
- `qualified` (`boolean`, optional): When true, return only qualified (not disqualified) candidates.
- `query` (`string`, optional): Free-text search matched against the candidate's name or offer title.
- `sort` (`string`, optional): Sort order: by_date (default) or by_last_message. One of: `by_date`, `by_last_message`.

Example input: `{}`

### `recruitee_list_departments`

List Departments · Read-only

List departments in the Recruitee company.
Returns a departments array with id and name.
Use list_departments to find a department ID for recruitee_create_offer or recruitee_update_offer.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `recruitee_list_disqualify_reasons`

List Disqualify Reasons · Read-only

List the disqualify reasons configured in the Recruitee company.
Returns a disqualify_reasons array with id, name, and any automated actions.
Use list_disqualify_reasons to get a reason ID for recruitee_disqualify_placement.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `recruitee_list_locations`

List Locations · Read-only

List locations defined in the Recruitee company.
Returns a locations array with id, name, address, and country, plus paging meta.
Use list_locations to find location IDs for offers and hires.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of locations to return.
- `page` (`integer`, optional): Page number, starting at 1.
- `query` (`string`, optional): Search text matched against location name and full address.
- `scope` (`string`, optional): Which locations to return: all (default), active, or archived. One of: `all`, `active`, `archived`.
- `view_mode` (`string`, optional): brief (default) returns locations without translations; full includes translations and active offer counters. One of: `brief`, `full`.

Example input: `{}`

### `recruitee_list_offer_placements`

List Offer Placements · Read-only

List the candidates in a Recruitee offer's pipeline, grouped by stage.
Returns a stages array, each with its stage details and the placements (candidate memberships) in that stage.
Use list_offer_placements to see the pipeline board and to get placement IDs for recruitee_change_placement_stage.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `offer_id` (`integer`, required): Numeric ID of the offer, or its slug. Get it from recruitee_list_offers.
- `disqualified` (`boolean`, optional): When true, return only disqualified placements.
- `qualified` (`boolean`, optional): When true, return only qualified placements.
- `sort_by` (`string`, optional): Field to sort placements by.
- `sort_order` (`string`, optional): Sort direction: asc or desc. One of: `asc`, `desc`.
- `stage_id` (`integer`, optional): Return only placements in this pipeline stage. Get stage IDs from recruitee_get_pipeline_template.

Example input: `{"offer_id":1}`

### `recruitee_list_offers`

List Offers · Read-only

List job offers and talent pools in the Recruitee company, with filters for status, department, location and IDs.
Returns an offers array with id, title, status, kind, department, location, and slug.
Use list_offers to browse jobs. Use recruitee_get_offer for one offer's full details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `department_ids` (`array`, optional): Return only offers in these department IDs.
- `include` (`array`, optional): Extra fields to include per offer: description, requirements, highlight, work_models, salary, dynamic_fields, follower_ids, location_ids, requisition_ids, tags, job_scheduler, issues, counters.
- `limit` (`integer`, optional): Maximum number of offers to return. Default 1000.
- `location_ids` (`array`, optional): Return only offers in these location IDs.
- `offer_ids` (`array`, optional): Return only offers with these IDs.
- `page` (`integer`, optional): Page number, starting at 1.
- `statuses` (`array`, optional): Statuses to include: draft, published, internal, closed, or archived. Leave empty for all statuses.

Example input: `{}`

### `recruitee_list_pipeline_templates`

List Pipeline Templates · Read-only

List hiring pipeline templates in the Recruitee company.
Returns a pipeline_templates array with id, title, and stages.
Use list_pipeline_templates to see available pipelines. Use recruitee_get_pipeline_template for one pipeline's stages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `title` (`string`, optional): Filter pipeline templates by title.

Example input: `{}`

### `recruitee_list_requisitions`

List Requisitions · Read-only

List hiring requisitions in the Recruitee company.
Returns a requisitions array with title, status, department, location, and openings.
Use list_requisitions to browse. Use recruitee_get_requisition for one requisition.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, optional): Search text matched against title, guid, and location.
- `scope` (`string`, optional): active (default), requested_by_me, need_my_approval, or archived. One of: `active`, `requested_by_me`, `need_my_approval`, `archived`.
- `sort_by` (`string`, optional): Sort field, for example title, id, status, department_name, created_at, location, hires_count, or openings_count.

Example input: `{}`

### `recruitee_list_sources`

List Sources · Read-only

List candidate sources defined in the Recruitee company.
Returns a sources array with id and name, plus paging meta.
Use list_sources to see valid sources before recruitee_add_candidate_sources.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `recruitee_list_tags`

List Tags · Read-only

List candidate tags defined in the Recruitee company.
Returns a tags array with id, name, and taggings count, plus paging meta.
Use list_tags to see which tags exist before tagging candidates with recruitee_add_candidate_tags.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, optional): Search text to match tag names.
- `sort_by` (`string`, optional): Sort field: name or taggings_count. One of: `name`, `taggings_count`.
- `sort_order` (`string`, optional): Sort direction: asc (default) or desc. One of: `asc`, `desc`.

Example input: `{}`

### `recruitee_list_talent_pools`

List Talent Pools · Read-only

List talent pools in the Recruitee company.
Returns a talent_pools array with id, title, and status, plus paging meta.
Use list_talent_pools to browse pools. Use recruitee_get_talent_pool for one pool.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of talent pools to return.
- `offset` (`integer`, optional): Number of talent pools to skip, for paging.
- `scope` (`string`, optional): archived returns only archived pools; not_archived returns all but archived; empty returns all. One of: `archived`, `not_archived`.

Example input: `{}`

### `recruitee_list_tasks`

List Tasks · Read-only

List tasks in the Recruitee company, filtered by scope, status or assignee.
Returns a tasks array with title, due date, assignees, candidate, and completion state, plus paging meta and a references array.
Use list_tasks across the company. Use recruitee_list_candidate_tasks for a single candidate.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `admin_ids` (`array`, optional): Return only tasks assigned to these admin IDs.
- `limit` (`integer`, optional): Maximum number of tasks per page.
- `page` (`integer`, optional): Page number, starting at 1.
- `scope` (`string`, optional): my (your tasks), unassigned, or all. One of: `my`, `unassigned`, `all`.
- `sort_by` (`string`, optional): Order tasks by due_date, created_at, or completed_at. One of: `due_date`, `created_at`, `completed_at`.
- `sort_order` (`string`, optional): Sort direction: asc or desc. One of: `asc`, `desc`.
- `status` (`string`, optional): Limit tasks to completed or uncompleted ones. One of: `completed`, `uncompleted`.

Example input: `{}`

### `recruitee_search_candidates`

Search Candidates · Read-only

Search candidates with the Recruitee full-search endpoint, using structured filters such as free text, status, source, tags, jobs, and dates.
Returns total (match count), hits (matching candidates), and aggregations when requested.
Use search_candidates for multi-field or full-text filtering. Use recruitee_list_candidates for simple paging by offer or status.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `deleted` (`boolean`, optional): When true, search only deleted candidates.
- `filters_json` (`string`, optional): JSON array of filter objects, serialized to a string. Each filter targets one field, for example free text across the profile, a status, a source, a tag, or a creation date range. Example: [{"field":"all","query":"python developer"}].
- `limit` (`integer`, optional): Maximum number of candidates per page. Default 60.
- `page` (`integer`, optional): Page number, starting at 1.
- `sort_by` (`string`, optional): Sort order as <field>_<asc|desc>, for example created_at_desc (default), relevance_desc, candidate_name_asc, or updated_at_desc.

Example input: `{}`

### `recruitee_add_candidate_followers`

Add Candidate Followers · Write

Add team members as followers of a Recruitee candidate so they receive updates about that candidate.
Returns the candidate record with its updated followers.
Use add_candidate_followers to subscribe people. Get admin IDs from recruitee_list_admins.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `admin_ids` (`array`, required): IDs of the admins (team members) who should follow the candidate. Get them from recruitee_list_admins.
- `id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"admin_ids":[],"id":1}`

### `recruitee_add_candidate_sources`

Add Candidate Sources · Write

Add one or more sources to a Recruitee candidate, recording where the candidate came from.
Returns the sources now attached to the candidate.
Use add_candidate_sources to record origin such as Indeed or LinkedIn. Use recruitee_list_sources to see existing sources.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `sources` (`array`, required): Source names to add to the candidate.

Example input: `{"candidate_id":1,"sources":[]}`

### `recruitee_add_candidate_tags`

Add Candidate Tags · Write

Add one or more tags to a Recruitee candidate. Tags that do not exist yet are created.
Returns the tags now attached to the candidate.
Use add_candidate_tags to label a candidate. Use recruitee_remove_candidate_tags to take tags off, and recruitee_list_tags to see existing tags.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `tags` (`array`, required): Tag names to add to the candidate.

Example input: `{"candidate_id":1,"tags":[]}`

### `recruitee_archive_offer`

Archive Offer · Write

Archive a Recruitee job offer. Moves the job to the archive.
Returns the offer with its updated status.
Use recruitee_publish_offer, recruitee_unpublish_offer, recruitee_close_offer, recruitee_archive_offer and recruitee_unarchive_offer to move an offer between statuses. Use recruitee_update_offer to edit content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_change_placement_stage`

Change Placement Stage · Write

Move a candidate to another pipeline stage within a Recruitee offer.
Returns the updated placement and a references array of related records.
Use change_placement_stage to advance or return a candidate. Get stage IDs from recruitee_get_pipeline_template and placement IDs from recruitee_list_offer_placements.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the placement, which is a candidate's membership in one job offer. Get it from recruitee_list_offer_placements or from the placement object returned when a candidate is added to an offer.
- `stage_id` (`integer`, required): Numeric ID of the destination pipeline stage. Get it from recruitee_get_pipeline_template.
- `hired_at` (`string`, optional): ISO 8601 datetime when the candidate was hired. Use when moving to the hired stage.
- `job_starts_at` (`string`, optional): ISO 8601 datetime when the candidate starts the job. Use when moving to the hired stage.
- `opening_id` (`integer`, optional): Opening ID, needed when requisitions are enabled and the candidate is marked as hired.
- `proceed` (`boolean`, optional): When true, place the candidate at the top of the destination stage list.
- `run_actions` (`boolean`, optional): When true, automated actions configured on the stage are triggered.
- `work_location_id` (`integer`, optional): Location ID, needed when marking a candidate as hired. Get it from recruitee_list_locations.

Example input: `{"id":1,"stage_id":1}`

### `recruitee_close_offer`

Close Offer · Write

Close a Recruitee job offer. Stops accepting applications while keeping the job and its candidates.
Returns the offer with its updated status.
Use recruitee_publish_offer, recruitee_unpublish_offer, recruitee_close_offer, recruitee_archive_offer and recruitee_unarchive_offer to move an offer between statuses. Use recruitee_update_offer to edit content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_complete_task`

Complete Task · Write

Mark a Recruitee task as completed or reopen it.
Returns the updated task and a references array of related records.
Use complete_task to change completion state. Use recruitee_update_task to edit other fields.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `completed` (`boolean`, required): True to mark the task completed, false to reopen it.
- `id` (`integer`, required): Numeric ID of the task. Get it from recruitee_list_tasks.

Example input: `{"completed":true,"id":1}`

### `recruitee_create_candidate`

Create Candidate · Write

Create a candidate in Recruitee, optionally assigning them to one or more offers.
Returns the created candidate and a references array of related records. The candidate is marked as manually added and receives no automatic confirmation email.
Use create_candidate to add a new person. Use recruitee_create_placement to add an existing candidate to another offer.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Full name of the candidate.
- `cover_letter` (`string`, optional): Cover letter text for the candidate.
- `emails` (`array`, optional): Email addresses of the candidate.
- `links` (`array`, optional): Other relevant URLs, such as a portfolio or personal site.
- `offers` (`array`, optional): IDs of the offers to assign the candidate to, placing them in each offer's first pipeline stage.
- `phones` (`array`, optional): Phone numbers of the candidate.
- `remote_cv_url` (`string`, optional): Public URL of a CV file for Recruitee to download and attach.
- `social_links` (`array`, optional): Social profile URLs of the candidate.
- `sources` (`array`, optional): Source tags describing where the candidate came from, for example Indeed or LinkedIn.

Example input: `{"name":"<name>"}`

### `recruitee_create_candidate_note`

Create Candidate Note · Write

Add a text note to a Recruitee candidate's profile.
Returns the created note and a references array of related records.
Use create_candidate_note to record feedback or context. Use recruitee_create_task to schedule a follow-up action instead.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the note.
- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"body":"<body>","candidate_id":1}`

### `recruitee_create_departments`

Create Departments · Write

Create one or more departments in the Recruitee company.
Returns a departments array containing the departments.
Use create_departments to add departments. Use recruitee_update_department to rename one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `departments` (`array`, required): Names of the departments to create.

Example input: `{"departments":[]}`

### `recruitee_create_location`

Create Location · Write

Create a location in the Recruitee company for use on offers.
Returns the created location.
Use create_location when no suitable location exists in recruitee_list_locations.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `country_code` (`string`, required): Two-letter ISO country code of the location.
- `translations` (`array`, required): Localized details as a list of objects, each with lang_code, name, city, street, postal_code and an optional note. Example: [{"lang_code":"en","name":"Poznan HQ","city":"Poznan","street":"ul. Wiosny Ludow 2","postal_code":"60-001"}].
- `state_code` (`string`, optional): State or region code within the country.

Example input: `{"country_code":"<country_code>","translations":[{"lang_code":"en","name":"Poznan HQ","city":"Poznan","street":"ul. Wiosny Ludow 2","postal_code":"60-001"}]}`

### `recruitee_create_offer`

Create Offer · Write

Create a job offer or talent pool in Recruitee as a draft.
Returns the created offer with its ID, status, and slug.
Use create_offer to open a new job. Use recruitee_publish_offer afterwards to make it live, and recruitee_update_offer to change an existing offer.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `description` (`string`, required): Offer description as HTML.
- `title` (`string`, required): Title of the offer, for example the job title.
- `department_id` (`string`, optional): ID of an existing department to assign the offer to. Get it from recruitee_list_departments.
- `hybrid` (`boolean`, optional): When true, the careers site shows the offer as hybrid.
- `kind` (`string`, optional): Type of offer: job (default) or talent_pool. One of: `job`, `talent_pool`.
- `location_ids` (`array`, optional): IDs of the locations for the offer. Get them from recruitee_list_locations.
- `on_site` (`boolean`, optional): When true, the careers site shows the offer as on-site. At least one of on_site, hybrid or remote must be true for work model fields.
- `remote` (`boolean`, optional): When true, the careers site shows the offer as remote. Location details are still needed because some job boards require them.
- `requirements` (`string`, optional): Offer requirements as HTML. Optional for talent pools.

Example input: `{"description":"<description>","title":"<title>"}`

### `recruitee_create_placement`

Create Placement · Write

Add an existing Recruitee candidate to a job offer or talent pool by creating a placement.
Returns the placement and a references array of related records.
Use create_placement to assign a candidate to another job. Use recruitee_create_candidate to add a brand new person.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the candidate to add. Get it from recruitee_list_candidates.
- `location_ids` (`array`, optional): IDs of the locations to attach to the placement.
- `offer_id` (`integer`, optional): Numeric ID or slug of the offer to add the candidate to. Provide this or talent_pool_id.
- `talent_pool_id` (`integer`, optional): Numeric ID of the talent pool to add the candidate to. Provide this or offer_id.

Example input: `{"candidate_id":1}`

### `recruitee_create_task`

Create Task · Write

Create a task in Recruitee, optionally linked to a candidate and assigned to team members.
Returns the created task and a references array of related records.
Use create_task to schedule follow-ups. Use recruitee_create_candidate_note to record information instead.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `title` (`string`, required): Name of the task.
- `admin_ids` (`array`, optional): IDs of the admins the task is assigned to. Get them from recruitee_list_admins.
- `candidate_id` (`integer`, optional): ID of the candidate the task is about.
- `description` (`string`, optional): Longer description of the task.
- `due_date` (`string`, optional): Due date as an ISO 8601 datetime. Needs timezone when set.
- `timezone` (`string`, optional): IANA timezone of the due date, required when due_date is set.

Example input: `{"title":"<title>"}`

### `recruitee_disqualify_placement`

Disqualify Placement · Write

Disqualify a candidate in one Recruitee offer, recording a disqualify reason.
Returns the updated placement and a references array of related records.
Use disqualify_placement to reject a candidate for one job. Use recruitee_requalify_placement to undo it. Get reasons from recruitee_list_disqualify_reasons.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `disqualify_reason_id` (`integer`, required): Numeric ID of the disqualify reason. Get it from recruitee_list_disqualify_reasons.
- `id` (`integer`, required): Numeric ID of the placement, which is a candidate's membership in one job offer. Get it from recruitee_list_offer_placements or from the placement object returned when a candidate is added to an offer.

Example input: `{"disqualify_reason_id":1,"id":1}`

### `recruitee_publish_offer`

Publish Offer · Write

Publish a Recruitee job offer. Makes the job visible on the careers site. Fails when the account has no free job slots.
Returns the offer with its updated status.
Use recruitee_publish_offer, recruitee_unpublish_offer, recruitee_close_offer, recruitee_archive_offer and recruitee_unarchive_offer to move an offer between statuses. Use recruitee_update_offer to edit content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_requalify_placement`

Requalify Placement · Write

Requalify a previously disqualified candidate in a Recruitee offer.
Returns the updated placement and a references array of related records.
Use requalify_placement to reverse recruitee_disqualify_placement.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the placement, which is a candidate's membership in one job offer. Get it from recruitee_list_offer_placements or from the placement object returned when a candidate is added to an offer.

Example input: `{"id":1}`

### `recruitee_unarchive_offer`

Unarchive Offer · Write

Unarchive a Recruitee job offer. Restores an archived job.
Returns the offer with its updated status.
Use recruitee_publish_offer, recruitee_unpublish_offer, recruitee_close_offer, recruitee_archive_offer and recruitee_unarchive_offer to move an offer between statuses. Use recruitee_update_offer to edit content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_unpublish_offer`

Unpublish Offer · Write

Unpublish a Recruitee job offer. Takes the job off the careers site and returns it to draft.
Returns the offer with its updated status.
Use recruitee_publish_offer, recruitee_unpublish_offer, recruitee_close_offer, recruitee_archive_offer and recruitee_unarchive_offer to move an offer between statuses. Use recruitee_update_offer to edit content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.

Example input: `{"id":1}`

### `recruitee_update_candidate`

Update Candidate · Write

Update fields on an existing Recruitee candidate, such as name, contact details, links or cover letter.
Returns the updated candidate and a references array of related records.
Use update_candidate to change profile data. Use recruitee_add_candidate_tags or recruitee_add_candidate_sources to add tags or sources.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `cover_letter` (`string`, optional): New cover letter text.
- `emails` (`array`, optional): Replacement list of email addresses for the candidate.
- `links` (`array`, optional): Replacement list of other relevant URLs.
- `name` (`string`, optional): New full name of the candidate.
- `phones` (`array`, optional): Replacement list of phone numbers for the candidate.
- `social_links` (`array`, optional): Replacement list of social profile URLs.

Example input: `{"id":1}`

### `recruitee_update_department`

Update Department · Write

Rename a Recruitee department or set its translated names.
Returns the updated department.
Use update_department to change a name. Use recruitee_create_departments to add new ones.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the department. Get it from recruitee_list_departments.
- `name` (`string`, optional): New department name.
- `translations` (`array`, optional): Translated names, as a list of objects each with lang_code and name. Example: [{"lang_code":"de","name":"Technik"}].

Example input: `{"id":1}`

### `recruitee_update_offer`

Update Offer · Write

Update fields on an existing Recruitee offer, such as title, description, requirements, department or locations.
Returns the updated offer.
Use update_offer to edit content. Use recruitee_publish_offer, recruitee_close_offer or recruitee_archive_offer to change status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee offer (job or talent pool). Get it from recruitee_list_offers.
- `department_id` (`string`, optional): ID of an existing department to assign the offer to. Get it from recruitee_list_departments.
- `description` (`string`, optional): Offer description as HTML.
- `hybrid` (`boolean`, optional): When true, the careers site shows the offer as hybrid.
- `location_ids` (`array`, optional): IDs of the locations for the offer. Get them from recruitee_list_locations.
- `on_site` (`boolean`, optional): When true, the careers site shows the offer as on-site. At least one of on_site, hybrid or remote must be true for work model fields.
- `remote` (`boolean`, optional): When true, the careers site shows the offer as remote. Location details are still needed because some job boards require them.
- `requirements` (`string`, optional): Offer requirements as HTML. Optional for talent pools.
- `title` (`string`, optional): Title of the offer, for example the job title.

Example input: `{"id":1}`

### `recruitee_update_task`

Update Task · Write

Update a Recruitee task's title, description, due date, candidate or assignees.
Returns the updated task and a references array of related records.
Use update_task to edit fields. Use recruitee_complete_task to mark it done or reopen it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `id` (`integer`, required): Numeric ID of the task. Get it from recruitee_list_tasks.
- `admin_ids` (`array`, optional): IDs of the admins the task is assigned to. Get them from recruitee_list_admins.
- `candidate_id` (`integer`, optional): ID of the candidate the task is about.
- `description` (`string`, optional): Longer description of the task.
- `due_date` (`string`, optional): Due date as an ISO 8601 datetime. Needs timezone when set.
- `timezone` (`string`, optional): IANA timezone of the due date, required when due_date is set.
- `title` (`string`, optional): Name of the task.

Example input: `{"id":1}`

### `recruitee_delete_candidate`

Delete Candidate · Destructive

Delete a Recruitee candidate by ID.
Returns the deleted candidate and a references array of related records.
Use delete_candidate only when the candidate should be removed. Use recruitee_disqualify_placement to reject a candidate for one job while keeping the profile.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.

Example input: `{"id":1}`

### `recruitee_delete_note`

Delete Note · Destructive

Delete a note from Recruitee by note ID.
Returns the deleted note and a references array of related records.
Use delete_note to remove a note. Get the note ID from recruitee_list_candidate_notes.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the note. Get it from recruitee_list_candidate_notes.

Example input: `{"id":1}`

### `recruitee_delete_task`

Delete Task · Destructive

Delete a Recruitee task by ID.
Returns the deleted task and a references array of related records.
Use delete_task to remove a task. Use recruitee_complete_task to close it while keeping the record.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the task. Get it from recruitee_list_tasks.

Example input: `{"id":1}`

### `recruitee_remove_candidate_tags`

Remove Candidate Tags · Destructive

Remove one or more tags from a Recruitee candidate. The tags stay available in the company.
Returns the tags still attached to the candidate.
Use remove_candidate_tags to unlabel a candidate. Use recruitee_add_candidate_tags to add tags.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Numeric ID of the Recruitee candidate. Get it from recruitee_list_candidates or recruitee_search_candidates.
- `tags` (`array`, required): Tag names to remove from the candidate.

Example input: `{"candidate_id":1,"tags":[]}`

## Related

Other Productivity connectors ([all 144](/agentkit/connectors/?category=productivity)):

- [Slack](/agentkit/connectors/slack/): Scalekit connector, OAuth, 96 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
