# Recruitee

> Track hiring in Recruitee: find and create candidates, move them through a job's pipeline, and raise tasks for the hiring team.

App · Jobs & Hiring · 20 actions. Web page: https://docs.lodol.com/docs/integrations/recruitee

## Actions

### Add candidate note

Leave a note on a candidate's profile.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to note.
- Note (`body`, text, required): The note text.

**Outputs**

- `body` (text): The note text as stored.
- `candidate_id` (number): Candidate ID.
- `note` (object)
- `note_id` (number): New note ID.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "body": "Strong portfolio.",
  "candidate_id": 3547,
  "note": {
    "body": "Strong portfolio.",
    "id": 4
  },
  "note_id": 4,
  "status": "success"
}
```

### Add candidate to job

Place an existing candidate onto a job or into a talent pool, at the first stage of its pipeline.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to place.
- Job (`offer_id`, number): The job to act on.
- Talent pool ID (`talent_pool_id`, number): Add the candidate to this talent pool instead of a job. Supply either this or a job.

**Outputs**

- `candidate_id` (number): Candidate ID.
- `offer_id` (number): Job ID.
- `placement` (object)
- `placement_id` (number): New placement ID.
- `stage_id` (number): The stage the candidate landed in.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate_id": 3547,
  "offer_id": 3349,
  "placement": {
    "candidate_id": 3547,
    "id": 63246
  },
  "placement_id": 63246,
  "stage_id": 39299,
  "status": "success"
}
```

### Create candidate

Add a candidate to the company, optionally placing them onto one or more jobs straight away.

**Inputs**

- Full name (`name`, text, required): The candidate's full name.
- Email addresses (`emails`, list): One or more email addresses for the candidate.
- Phone numbers (`phones`, list): One or more phone numbers for the candidate.
- Jobs (`offer_ids`, list): Jobs to place the candidate on immediately. Leave empty to create the profile without applying them to anything.
- Cover letter (`cover_letter`, text): Cover letter text to store on the profile.

**Outputs**

- `candidate` (object)
- `candidate_id` (number): New candidate ID.
- `candidate_name` (text): Candidate name.
- `emails` (list): The email addresses stored on the candidate.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate": {
    "id": 3548,
    "name": "Jane Doe"
  },
  "candidate_id": 3548,
  "candidate_name": "Jane Doe",
  "emails": [
    "jane@example.com"
  ],
  "status": "success"
}
```

### Create task

Raise a task for the hiring team, optionally about a candidate and due at a given time.

**Inputs**

- Title (`title`, text, required): What needs doing.
- Description (`description`, text): Any detail to go with the task.
- Candidate ID (`candidate_id`, number): Attach the task to this candidate.
- Due (`due_date`, date and time): When the task is due.
- Time zone (`timezone`, text): Time zone the due date is written in, such as 'Europe/London'. Defaults to UTC.
- Assign to (`admin_ids`, list): Hiring team members to assign the task to.

**Outputs**

- `due_date` (text): When it is due.
- `status` (text): Status of the action execution ("success" on success).
- `task` (object)
- `task_id` (number): New task ID.
- `title` (text): Task title.

**Example output**

```json
{
  "due_date": "2026-09-10T09:00:00.000000Z",
  "status": "success",
  "task": {
    "id": 5622,
    "title": "Send offer letter"
  },
  "task_id": 5622,
  "title": "Send offer letter"
}
```

### Delete candidate

Permanently delete a candidate, along with their placements, notes and tasks. This cannot be undone.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to delete.

**Outputs**

- `candidate_id` (number): The candidate that was deleted.
- `deleted` (true/false): Always true on success.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate_id": 3547,
  "deleted": true,
  "status": "success"
}
```

### Disqualify candidate

Disqualify a candidate on one job, citing one of the company's disqualify reasons. Their other jobs are untouched.

**Inputs**

- Placement ID (`placement_id`, number, required): ID of the placement - the row linking one candidate to one job. Run 'List job candidates' to find it.
- Reason (`disqualify_reason_id`, number, required): Why the candidate is being disqualified.

**Outputs**

- `disqualified_at` (text): When the disqualification was recorded.
- `disqualify_reason_id` (number): The reason that was cited.
- `placement` (object)
- `placement_id` (number): Placement ID.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "disqualified_at": "2026-09-04T10:00:00.000000Z",
  "disqualify_reason_id": 123,
  "placement": {
    "id": 63246
  },
  "placement_id": 63246,
  "status": "success"
}
```

### Get candidate

Read one candidate's full profile, including the jobs they are placed on.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to read.

**Outputs**

- `candidate` (object)
- `candidate_id` (number): Candidate ID.
- `candidate_name` (text): Candidate name.
- `references` (list): The related records Recruitee returns alongside the candidate, such as the jobs behind their placements.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate": {
    "id": 3547,
    "name": "Jane Doe"
  },
  "candidate_id": 3547,
  "candidate_name": "Jane Doe",
  "references": [],
  "status": "success"
}
```

### Get job

Read one job, including its pipeline and candidate counts.

**Inputs**

- Job (`offer_id`, number, required): The job to act on.

**Outputs**

- `offer` (object)
- `offer_id` (number): Job ID.
- `offer_status` (text): The job's own status - draft, published, internal, closed or archived.
- `status` (text): Status of the action execution ("success" on success).
- `title` (text): Job title.

**Example output**

```json
{
  "offer": {
    "id": 3349,
    "title": "Senior Engineer"
  },
  "offer_id": 3349,
  "offer_status": "published",
  "status": "success",
  "title": "Senior Engineer"
}
```

### List candidate notes

Read the notes the hiring team has left on a candidate.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate whose notes to read.

**Outputs**

- `candidate_id` (number): Candidate ID.
- `count` (number): How many were returned.
- `notes` (list): The notes on the candidate.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate_id": 3547,
  "count": 1,
  "notes": [
    {
      "body": "Strong portfolio.",
      "id": 4
    }
  ],
  "status": "success"
}
```

### List candidates

List candidates, newest first, optionally narrowed by a search phrase, a job, or whether they are still in the running.

**Inputs**

- Search (`query`, text): Match against a candidate's name or the job they applied to. Leave empty to list everyone.
- Job (`offer_id`, number): The job to act on.
- Limit (`limit`, number): How many results to return (1-1000). From 1 to 1000. Default: `25`.
- Skip (`offset`, number): Skip this many candidates before returning results, for paging through a long list. At least 0. Default: `0`.
- Sort by (`sort`, text): Order the results. One of: `by_date` (Newest first), `by_last_message` (Most recently messaged).
- Only still in the running (`qualified`, true/false): Return only candidates who are not disqualified.
- Only disqualified (`disqualified`, true/false): Return only candidates who were disqualified.
- Added after (`created_after`, date): Only candidates added on or after this date.

**Outputs**

- `candidates` (list): The candidates that matched.
- `count` (number): How many were returned.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidates": [
    {
      "emails": [
        "jane@example.com"
      ],
      "id": 3547,
      "name": "Jane Doe"
    }
  ],
  "count": 1,
  "status": "success"
}
```

### List disqualify reasons

List the reasons this company can cite when disqualifying a candidate, with the IDs the disqualify action needs.

**Inputs**: None.

**Outputs**

- `count` (number): How many there are.
- `disqualify_reasons` (list): The reasons this company has configured.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "count": 1,
  "disqualify_reasons": [
    {
      "id": 123,
      "name": "Withdrew"
    }
  ],
  "status": "success"
}
```

### List job candidates

List the candidates placed on a job. Each result carries the placement ID that the stage, disqualify and remove actions need.

**Inputs**

- Job (`offer_id`, number, required): The job to act on.
- Stage ID (`stage_id`, number): Only candidates sitting in this stage. Run 'List job stages' to find the ID.
- Only still in the running (`qualified`, true/false): Exclude disqualified candidates.
- Only disqualified (`disqualified`, true/false): Return only disqualified candidates.
- Sort by (`sort_by`, text): Order the results. One of: `created_at` (Applied), `last_activity_at` (Last activity), `rating`.
- Sort order (`sort_order`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).

**Outputs**

- `count` (number): How many were returned.
- `offer_id` (number): Job ID.
- `placements` (list): One placement per candidate on the job.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "count": 1,
  "offer_id": 3349,
  "placements": [
    {
      "candidate_id": 3547,
      "id": 63246,
      "stage_id": 39299
    }
  ],
  "status": "success"
}
```

### List job stages

List a job's pipeline stages with their IDs. Stage IDs differ per job, so this is how you find the one a stage move needs.

**Inputs**

- Job (`offer_id`, number, required): The job to act on.

**Outputs**

- `count` (number): How many stages there are.
- `offer_id` (number): Job ID.
- `stages` (list): The stages of this job's pipeline, in order.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "count": 1,
  "offer_id": 3349,
  "stages": [
    {
      "category": "applied",
      "id": 39299,
      "name": "Applied"
    }
  ],
  "status": "success"
}
```

### List jobs

List the company's jobs and talent pools, optionally filtered by status or department.

**Inputs**

- Statuses (`statuses`, list): Only jobs in these statuses. Leave empty for all of them. One or more of: `draft`, `published`, `internal`, `closed`, `archived`.
- Departments (`department_ids`, list): Only jobs in these departments.
- Extra detail (`include`, list): Extra fields to load with each job. Jobs come back without their description and counters unless asked for. One or more of: `description`, `requirements`, `highlight`, `work_models` (Work models), `salary`, `dynamic_fields` (Dynamic fields), `follower_ids` (Follower ids), `location_ids` (Location ids), `requisition_ids` (Requisition ids), `tags`, and 3 more.
- Limit (`limit`, number): How many results to return (1-1000). From 1 to 1000. Default: `25`.
- Page (`page`, number): Page of results, starting at 1. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many were returned.
- `offers` (list): The jobs that matched.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "count": 1,
  "offers": [
    {
      "id": 3349,
      "status": "published",
      "title": "Senior Engineer"
    }
  ],
  "status": "success"
}
```

### List tasks

List the hiring team's tasks.

**Inputs**

- Whose tasks (`scope`, text): Whose tasks to list. One of: `my` (Assigned to me), `unassigned`, `all` (Everyone's).
- Status (`status`, text): Only done, or only outstanding, tasks. One of: `completed`, `uncompleted` (Not done yet).
- Sort by (`sort_by`, text): Order the results. One of: `due_date` (Due date), `created_at` (Created), `completed_at` (Completed).
- Sort order (`sort_order`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Limit (`limit`, number): How many results to return (1-1000). From 1 to 1000. Default: `25`.
- Page (`page`, number): Page of results, starting at 1. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many were returned.
- `status` (text): Status of the action execution ("success" on success).
- `tasks` (list): The tasks that matched.

**Example output**

```json
{
  "count": 1,
  "status": "success",
  "tasks": [
    {
      "id": 5622,
      "title": "Send offer letter"
    }
  ]
}
```

### Move candidate to stage

Move a candidate to another stage of the job they are on. Takes the placement ID, not the candidate ID.

**Inputs**

- Placement ID (`placement_id`, number, required): ID of the placement - the row linking one candidate to one job. Run 'List job candidates' to find it.
- Stage ID (`stage_id`, number, required): The stage to move them into. Run 'List job stages' for the job to find it - stage IDs differ per job.
- Put at top of stage (`proceed`, true/false): Place the candidate at the top of the new stage rather than the bottom.

**Outputs**

- `candidate_id` (number): Candidate ID.
- `placement` (object)
- `placement_id` (number): Placement ID.
- `stage_id` (number): The stage now set.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate_id": 3547,
  "placement": {
    "id": 63246,
    "stage_id": 39300
  },
  "placement_id": 63246,
  "stage_id": 39300,
  "status": "success"
}
```

### Remove candidate from job

Take a candidate off a job. The candidate's own profile stays.

**Inputs**

- Placement ID (`placement_id`, number, required): ID of the placement - the row linking one candidate to one job. Run 'List job candidates' to find it.

**Outputs**

- `deleted` (true/false): Always true on success.
- `placement_id` (number): The placement that was removed.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "deleted": true,
  "placement_id": 63246,
  "status": "success"
}
```

### Requalify candidate

Put a disqualified candidate back into the running on that job.

**Inputs**

- Placement ID (`placement_id`, number, required): ID of the placement - the row linking one candidate to one job. Run 'List job candidates' to find it.

**Outputs**

- `disqualified_at` (text): Empty once the candidate is back in the running.
- `placement` (object)
- `placement_id` (number): Placement ID.
- `stage_id` (number): The stage they returned to.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "disqualified_at": null,
  "placement": {
    "id": 63246
  },
  "placement_id": 63246,
  "stage_id": 39299,
  "status": "success"
}
```

### Tag candidate

Add tags to a candidate. A tag the company does not have yet is created.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to tag.
- Tags (`tags`, list, required): One or more tags to add.

**Outputs**

- `candidate_id` (number): Candidate ID.
- `status` (text): Status of the action execution ("success" on success).
- `tag_names` (list): Just the names of those tags.
- `tags` (list): The tags now on the candidate.

**Example output**

```json
{
  "candidate_id": 3547,
  "status": "success",
  "tag_names": [
    "Shortlist"
  ],
  "tags": [
    {
      "id": 148,
      "name": "Shortlist"
    }
  ]
}
```

### Update candidate

Change a candidate's name, contact details or cover letter. Anything left empty is left as it is.

**Inputs**

- Candidate ID (`candidate_id`, number, required): ID of the candidate to update.
- Full name (`name`, text): Replace the candidate's name.
- Email addresses (`emails`, list): Replace the stored email addresses with these ones.
- Phone numbers (`phones`, list): Replace the stored phone numbers with these ones.
- Cover letter (`cover_letter`, text): Replace the cover letter text.

**Outputs**

- `candidate` (object)
- `candidate_id` (number): Candidate ID.
- `candidate_name` (text): Candidate name.
- `status` (text): Status of the action execution ("success" on success).

**Example output**

```json
{
  "candidate": {
    "id": 3547,
    "name": "Jane Doe"
  },
  "candidate_id": 3547,
  "candidate_name": "Jane Doe",
  "status": "success"
}
```
