# Zoho Recruit

> Applicant tracking system. Add, search and update candidates, move them through job opening pipelines, open jobs, schedule interviews, and add notes and tags.

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

## Actions

### Add a candidate to a job opening

Associate a candidate with a job opening, adding them to its pipeline. A candidate already there is reported, not an error.

**Inputs**

- Candidate ID (`candidate_id`, text, required): The candidate's id, from 'List candidates' or 'Search candidates', or the candidate's address in Zoho Recruit.
- Job opening ID (`job_opening_id`, text, required): The job opening's id, from 'List job openings', or its address in Zoho Recruit.
- Comments (`comments`, text): Optional. A comment Zoho Recruit keeps with the change.

**Outputs**

- `already_associated` (true/false): Whether the candidate was already in the pipeline.
- `candidate_id` (text): The candidate's id.
- `job_opening_id` (text): The job opening's id.
- `message` (text): Zoho's confirmation.

**Example output**

```json
{
  "already_associated": false,
  "candidate_id": "486812000001660091",
  "job_opening_id": "486812000001660120",
  "message": "Record associated successfully"
}
```

### Add a note

Add a note to a candidate, job opening, interview or client.

**Inputs**

- Record type (`module`, text, required): The kind of record the note is on. One of: `Candidates`, `Job_Openings` (Job openings), `Interviews`, `Clients`, `Contacts`.
- Record ID (`record_id`, text, required): The record's id, from a List or Search action, or its address in Zoho Recruit.
- Note (`content`, text, required): The note's text.
- Title (`title`, text): Optional. The note's title.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.
- `module` (text): That record's module.
- `parent_id` (text): The record the note is on.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660170",
  "message": "record added",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00",
  "module": "Candidates",
  "parent_id": "486812000001660091"
}
```

### Add tags

Tag a record. Tags that do not exist yet are created.

**Inputs**

- Record type (`module`, text, required): The kind of record to tag. One of: `Candidates`, `Job_Openings` (Job openings), `Clients`, `Contacts`.
- Record ID (`record_id`, text, required): The record's id, from a List or Search action, or its address in Zoho Recruit.
- Tags (`tag_names`, list, required): The tags to add. New tag names are created.

**Outputs**

- `id` (text): The tagged record's id.
- `message` (text): Zoho's confirmation.
- `module` (text): That record's module.
- `tags` (list): The tags applied.

**Example output**

```json
{
  "id": "486812000001660091",
  "message": "tags updated successfully",
  "module": "Candidates",
  "tags": [
    "Campaign"
  ]
}
```

### Change a candidate's status

Set a candidate's status, overall or in one job opening's pipeline, with an optional comment.

**Inputs**

- Candidate ID (`candidate_id`, text, required): The candidate's id, from 'List candidates' or 'Search candidates', or the candidate's address in Zoho Recruit.
- Status (`candidate_status`, text, required): The status to set, from your account's own status list.
- Job opening ID (`job_opening_id`, text): Optional. Set the status in this job opening's pipeline only. Leave blank for the candidate's overall status.
- Comments (`comments`, text): Optional. A comment Zoho Recruit keeps with the change.

**Outputs**

- `candidate_status` (text): The status set.
- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The candidate's id.
- `job_opening_id` (text): The job opening whose pipeline it was set in, if any.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "candidate_status": "Qualified",
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660091",
  "job_opening_id": null,
  "message": "status changed",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```

### Create a candidate

Add a candidate. Zoho Recruit refuses a second candidate with the same email.

**Inputs**

- Last name (`last_name`, text, required): Last name.
- First name (`first_name`, text): Optional. First name.
- Email (`email`, text): Optional. Email address. Zoho Recruit refuses a duplicate.
- Phone (`phone`, text): Optional. Phone.
- Mobile (`mobile`, text): Optional. Mobile.
- Current job title (`current_job_title`, text): Optional. Current job title.
- Current employer (`current_employer`, text): Optional. Current employer.
- Experience (years) (`experience_in_years`, number): Optional. Years of experience. At least 0.
- Skills (`skill_set`, text): Optional. Skills, like Python, SQL.
- City (`city`, text): Optional. City.
- Country (`country`, text): Optional. Country.
- Extra fields (`extra_fields`, object): Optional. Any other fields, as a JSON object of field API names, like {"Source": "Referral"}. 'List fields' names every field.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660091",
  "message": "record added",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```

### Create a job opening

Open a job. Corporate accounts usually require a department and staffing accounts a client; 'List fields' shows what yours needs.

**Inputs**

- Posting title (`title`, text, required): The job's title, like Senior Python Developer.
- Department ID (`department_id`, text): Optional. The department's id, from its address in Zoho Recruit. Corporate accounts usually require one.
- Client ID (`client_company_id`, text): Optional. The client company's id, from its address in Zoho Recruit. Staffing agency accounts usually require one.
- Status (`job_opening_status`, text): Optional. From your account's own status list. The Free edition allows one active job opening per recruiter.
- Job type (`job_type`, text): Optional. From your account's own list, like Full time.
- Number of positions (`number_of_positions`, number): Optional. How many people to hire. At least 1.
- Target date (`target_date`, date): Optional. When the job should be filled by.
- Assigned recruiters (`assigned_recruiter_ids`, list): Optional. The recruiters working on the job.
- City (`city`, text): Optional. City.
- Country (`country`, text): Optional. Country.
- Job description (`job_description`, text): Optional. The job description.
- Remote job (`remote_job`, text): Optional. Whether the job is remote. Leave blank to not set it. One of: `yes`, `no`.
- Extra fields (`extra_fields`, object): Optional. Any other fields, as a JSON object of field API names, like {"Source": "Referral"}. 'List fields' names every field.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660120",
  "message": "record added",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```

### Delete records

Permanently delete up to 100 candidates, job openings or interviews.

**Inputs**

- Record type (`module`, text, required): The kind of record to delete. One of: `Candidates`, `Job_Openings` (Job openings), `Interviews`.
- Record IDs (`record_ids`, list, required): The ids to delete, up to 100. This cannot be undone.

**Outputs**

- `count` (number): How many were deleted.
- `deleted_ids` (list): The ids deleted.
- `failed` (list): Ids Zoho refused to delete, with why.
- `module` (text): The module the records were in.

**Example output**

```json
{
  "count": 1,
  "deleted_ids": [
    "486812000001660091"
  ],
  "failed": [],
  "module": "Candidates"
}
```

### Get a candidate

Get one candidate with all their fields.

**Inputs**

- Candidate ID (`record_id`, text, required): The candidate's id, from 'List candidates' or 'Search candidates', or the candidate's address in Zoho Recruit.

**Outputs**: A Zoho Recruit candidate.

- `Additional_Info` (text): Additional information.
- `Associated_Tags` (object): Tags on the candidate.
- `Candidate_ID` (text): The human-readable candidate number, like ZR_446_CAND.
- `Candidate_Owner` (object): The recruiter who owns the candidate.
- `Candidate_Status` (text): Status, from the account's own status list.
- `City` (text): City.
- `Country` (text): Country.
- `Created_By` (object): Who created it.
- `Created_Time` (text): When it was created (ISO 8601 with offset).
- `Current_Employer` (text): Current employer.
- `Current_Job_Title` (text): Current job title.
- `Current_Salary` (number): Current salary.
- `Email` (text): Email address.
- `Expected_Salary` (number): Expected salary.
- `Experience_in_Years` (number): Years of experience.
- `First_Name` (text): First name.
- `Full_Name` (text): Full name.
- `Highest_Qualification_Held` (text): Highest qualification.
- `Is_Locked` (true/false): Whether the record is locked.
- `Is_Unqualified` (true/false): Whether the candidate is marked unqualified.
- `Last_Activity_Time` (text): When anything last happened on the candidate.
- `Last_Name` (text): Last name.
- `Mobile` (text): Mobile.
- `Modified_By` (object): Who last changed it.
- `Modified_Time` (text): When it was last changed (ISO 8601 with offset).
- `Origin` (text): How the record was created.
- `Phone` (text): Phone.
- `Rating` (number): Rating.
- `Secondary_Email` (text): Secondary email address.
- `Skill_Set` (text): Skills.
- `Source` (text): Where the candidate came from.
- `State` (text): State.
- `Street` (text): Street.
- `Updated_On` (text): When the candidate was last updated.
- `Website` (text): Website.
- `Zip_Code` (text): Postal code.
- `id` (text): The record's Zoho Recruit id (18 digits, as text).

**Example output**

```json
{
  "Candidate_ID": "ZR_446_CAND",
  "Candidate_Owner": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "Candidate_Status": "New",
  "Created_By": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "Created_Time": "2026-09-01T10:00:00+00:00",
  "Current_Job_Title": "Engineer",
  "Email": "ada@example.com",
  "Experience_in_Years": 5,
  "First_Name": "Ada",
  "Full_Name": "Ada Lovelace",
  "Last_Name": "Lovelace",
  "Modified_By": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "Modified_Time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660091"
}
```

### Get a job opening

Get one job opening with all its fields.

**Inputs**

- Job opening ID (`record_id`, text, required): The job opening's id, from 'List job openings', or its address in Zoho Recruit.

**Outputs**: A Zoho Recruit job opening.

- `Account_Name` (object): The client (staffing editions).
- `Assigned_Recruiter` (object): The recruiters assigned.
- `City` (text): City.
- `Contact_Name` (object): The client contact (staffing editions).
- `Country` (text): Country.
- `Created_By` (object): Who created it.
- `Created_Time` (text): When it was created (ISO 8601 with offset).
- `Date_Opened` (text): When it opened (YYYY-MM-DD).
- `Industry` (text): Industry.
- `Is_Hot_Job_Opening` (true/false): Whether it is marked hot.
- `Job_Description` (text): The job description.
- `Job_Opening_ID` (text): The human-readable job opening number.
- `Job_Opening_Status` (text): Status, from the account's own status list.
- `Job_Type` (text): Job type, like Full time.
- `Modified_By` (object): Who last changed it.
- `Modified_Time` (text): When it was last changed (ISO 8601 with offset).
- `No_of_Candidates_Associated` (number): Candidates in the pipeline.
- `No_of_Candidates_Hired` (number): Candidates hired.
- `Number_of_Positions` (text): How many positions.
- `Posting_Title` (text): The job's title.
- `Publish` (true/false): Whether it is published.
- `Salary` (text): Salary.
- `Skillset` (text): Required skills.
- `State` (text): State.
- `Target_Date` (text): Target date to fill it (YYYY-MM-DD).
- `Work_Experience` (text): Required experience.
- `Zip_Code` (text): Postal code.
- `id` (text): The record's Zoho Recruit id (18 digits, as text).

**Example output**

```json
{
  "Created_By": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "Created_Time": "2026-09-01T10:00:00+00:00",
  "Job_Opening_ID": "ZR_12_JOB",
  "Job_Opening_Status": "In-progress",
  "Job_Type": "Full time",
  "Modified_By": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "Modified_Time": "2026-09-01T10:00:00+00:00",
  "No_of_Candidates_Associated": 1,
  "Number_of_Positions": "1",
  "Posting_Title": "Senior Python Developer",
  "Target_Date": "2026-12-31",
  "id": "486812000001660120"
}
```

### List a job opening's candidates

List the candidates in a job opening's pipeline, optionally only those with certain statuses.

**Inputs**

- Job opening ID (`job_opening_id`, text, required): The job opening's id, from 'List job openings', or its address in Zoho Recruit.
- Statuses (`candidate_statuses`, list): Optional. Only candidates with one of these statuses.
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.

**Outputs**

- `count` (number): How many candidates are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The candidates.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Candidate_ID": "ZR_446_CAND",
      "Candidate_Owner": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Candidate_Status": "New",
      "Created_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Created_Time": "2026-09-01T10:00:00+00:00",
      "Current_Job_Title": "Engineer",
      "Email": "ada@example.com",
      "Experience_in_Years": 5,
      "First_Name": "Ada",
      "Full_Name": "Ada Lovelace",
      "Last_Name": "Lovelace",
      "Modified_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Modified_Time": "2026-09-01T10:00:00+00:00",
      "id": "486812000001660091"
    }
  ]
}
```

### List candidates

List candidates, newest first or sorted by any field.

**Inputs**

- Fields (`fields`, text): Optional. Only return these fields: API names separated by commas, like First_Name,Last_Name,Email. 'List fields' names them.
- Sort by (`sort_by`, text): Optional. A field API name to sort by, like Modified_Time.
- Sort order (`sort_order`, text): Optional. Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.
- Changed since (`modified_since`, date and time): Optional. Only records changed after this moment.

**Outputs**

- `count` (number): How many candidates are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The candidates.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Candidate_ID": "ZR_446_CAND",
      "Candidate_Owner": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Candidate_Status": "New",
      "Created_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Created_Time": "2026-09-01T10:00:00+00:00",
      "Current_Job_Title": "Engineer",
      "Email": "ada@example.com",
      "Experience_in_Years": 5,
      "First_Name": "Ada",
      "Full_Name": "Ada Lovelace",
      "Last_Name": "Lovelace",
      "Modified_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Modified_Time": "2026-09-01T10:00:00+00:00",
      "id": "486812000001660091"
    }
  ]
}
```

### List fields

List a module's fields with their API names, types and picklist values, for 'Extra fields', criteria and statuses.

**Inputs**

- Record type (`module`, text, required): The kind of record whose fields to list. One of: `Candidates`, `Job_Openings` (Job openings), `Interviews`, `Clients`, `Contacts`.

**Outputs**

- `count` (number): How many fields.
- `fields` (list): The fields.
- `module` (text): The module's API name.

**Example output**

```json
{
  "count": 1,
  "fields": [
    {
      "api_name": "Candidate_Status",
      "custom_field": false,
      "data_type": "picklist",
      "field_label": "Candidate Status",
      "id": "486812000000002591",
      "pick_list_values": [
        {
          "actual_value": "New",
          "display_value": "New"
        }
      ],
      "read_only": false,
      "system_mandatory": false
    }
  ],
  "module": "Candidates"
}
```

### List interviews

List interviews, newest first or sorted by any field.

**Inputs**

- Fields (`fields`, text): Optional. Only return these fields: API names separated by commas, like First_Name,Last_Name,Email. 'List fields' names them.
- Sort by (`sort_by`, text): Optional. A field API name to sort by, like Modified_Time.
- Sort order (`sort_order`, text): Optional. Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.
- Changed since (`modified_since`, date and time): Optional. Only records changed after this moment.

**Outputs**

- `count` (number): How many interviews are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The interviews.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Candidate_Name": {
        "id": "486812000001660091",
        "name": "Ada Lovelace"
      },
      "End_DateTime": "2026-11-12T12:00:00+00:00",
      "Interview_Name": "Level 1 Interview",
      "Job_Opening_Name": {
        "id": "486812000001660120",
        "name": "Senior Python Developer"
      },
      "Start_DateTime": "2026-11-12T11:00:00+00:00",
      "id": "486812000001660150"
    }
  ]
}
```

### List job openings

List job openings, newest first or sorted by any field.

**Inputs**

- Fields (`fields`, text): Optional. Only return these fields: API names separated by commas, like First_Name,Last_Name,Email. 'List fields' names them.
- Sort by (`sort_by`, text): Optional. A field API name to sort by, like Modified_Time.
- Sort order (`sort_order`, text): Optional. Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.
- Changed since (`modified_since`, date and time): Optional. Only records changed after this moment.

**Outputs**

- `count` (number): How many job openings are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The job openings.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Created_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Created_Time": "2026-09-01T10:00:00+00:00",
      "Job_Opening_ID": "ZR_12_JOB",
      "Job_Opening_Status": "In-progress",
      "Job_Type": "Full time",
      "Modified_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Modified_Time": "2026-09-01T10:00:00+00:00",
      "No_of_Candidates_Associated": 1,
      "Number_of_Positions": "1",
      "Posting_Title": "Senior Python Developer",
      "Target_Date": "2026-12-31",
      "id": "486812000001660120"
    }
  ]
}
```

### List notes

List the notes on a record.

**Inputs**

- Record type (`module`, text, required): The kind of record the note is on. One of: `Candidates`, `Job_Openings` (Job openings), `Interviews`, `Clients`, `Contacts`.
- Record ID (`record_id`, text, required): The record's id, from a List or Search action, or its address in Zoho Recruit.
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.

**Outputs**

- `count` (number): How many notes are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The notes.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Note_Content": "Strong fit.",
      "Note_Owner": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Note_Title": "Phone screen",
      "Parent_Id": {
        "id": "486812000001660091",
        "name": "Ada Lovelace"
      },
      "id": "486812000001660170"
    }
  ]
}
```

### List users

List the account's users, such as recruiters to assign or interviewers. 'The connected user' checks the connection.

**Inputs**

- Which users (`user_type`, text): Optional. Which users to list; active users by default. One of: `AllUsers` (All users), `ActiveUsers` (Active users), `DeactiveUsers` (Deactivated users), `ConfirmedUsers` (Confirmed users), `NotConfirmedUsers` (Unconfirmed users), `DeletedUsers` (Deleted users), `ActiveConfirmedUsers` (Active, confirmed users), `AdminUsers` (Administrators), `ActiveConfirmedAdmins` (Active, confirmed administrators), `CurrentUser` (The connected user).
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.

**Outputs**

- `count` (number): How many users are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `users` (list): The users.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "users": [
    {
      "email": "alex@example.com",
      "full_name": "Alex Recruiter",
      "id": "486812000000180003",
      "profile": {
        "id": "486812000000026011",
        "name": "Administrator"
      },
      "role": {
        "id": "486812000000026005",
        "name": "CEO"
      },
      "status": "active"
    }
  ]
}
```

### Schedule an interview

Schedule an interview of a candidate for a job opening, with interviewers and a place.

**Inputs**

- Candidate ID (`candidate_id`, text, required): The candidate's id, from 'List candidates' or 'Search candidates', or the candidate's address in Zoho Recruit.
- Job opening ID (`job_opening_id`, text, required): The job opening's id, from 'List job openings', or its address in Zoho Recruit.
- Interview name (`interview_name`, text, required): The interview's name, like Level 1 Interview.
- Starts at (`start_datetime`, date and time, required): When the interview starts.
- Ends at (`end_datetime`, date and time, required): When the interview ends.
- Interviewers (`interviewer_ids`, list): Optional. The users who interview.
- Location (`location`, text): Optional. Where the interview takes place.
- Client ID (`client_company_id`, text): Optional. The client company's id, from its address in Zoho Recruit. Staffing agency accounts usually require one.
- Extra fields (`extra_fields`, object): Optional. Any other fields, as a JSON object of field API names, like {"Source": "Referral"}. 'List fields' names every field.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660150",
  "message": "record added",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```

### Search candidates

Find candidates by email, phone, a word, or Zoho criteria such as (Last_Name:equals:Smith).

**Inputs**

- Search by (`search_by`, text, required): What to match: an email address, a phone number, a word anywhere in the record, or Zoho criteria. One of: `email`, `phone`, `word`, `criteria`.
- Search for (`value`, text, required): The email, phone or word to find. For criteria, Zoho's form: (Last_Name:equals:Smith), joined with and / or, up to 10.
- Page (`page`, number): Optional. Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200 (the default). From 1 to 200.

**Outputs**

- `count` (number): How many candidates are on this page.
- `more_records` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.
- `records` (list): The candidates.

**Example output**

```json
{
  "count": 1,
  "more_records": false,
  "page": 1,
  "per_page": 200,
  "records": [
    {
      "Candidate_ID": "ZR_446_CAND",
      "Candidate_Owner": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Candidate_Status": "New",
      "Created_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Created_Time": "2026-09-01T10:00:00+00:00",
      "Current_Job_Title": "Engineer",
      "Email": "ada@example.com",
      "Experience_in_Years": 5,
      "First_Name": "Ada",
      "Full_Name": "Ada Lovelace",
      "Last_Name": "Lovelace",
      "Modified_By": {
        "id": "486812000000180003",
        "name": "Alex Recruiter"
      },
      "Modified_Time": "2026-09-01T10:00:00+00:00",
      "id": "486812000001660091"
    }
  ]
}
```

### Update a candidate

Change a candidate's fields. Fields left blank are kept.

**Inputs**

- Candidate ID (`record_id`, text, required): The candidate's id, from 'List candidates' or 'Search candidates', or the candidate's address in Zoho Recruit.
- Last name (`last_name`, text): Optional. Last name.
- First name (`first_name`, text): Optional. First name.
- Email (`email`, text): Optional. Email address. Zoho Recruit refuses a duplicate.
- Phone (`phone`, text): Optional. Phone.
- Mobile (`mobile`, text): Optional. Mobile.
- Current job title (`current_job_title`, text): Optional. Current job title.
- Current employer (`current_employer`, text): Optional. Current employer.
- Experience (years) (`experience_in_years`, number): Optional. Years of experience. At least 0.
- Skills (`skill_set`, text): Optional. Skills, like Python, SQL.
- City (`city`, text): Optional. City.
- Country (`country`, text): Optional. Country.
- Extra fields (`extra_fields`, object): Optional. Any other fields, as a JSON object of field API names, like {"Source": "Referral"}. 'List fields' names every field.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660091",
  "message": "record updated",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```

### Update a job opening

Change a job opening's fields, including its status. Fields left blank are kept.

**Inputs**

- Job opening ID (`record_id`, text, required): The job opening's id, from 'List job openings', or its address in Zoho Recruit.
- Posting title (`title`, text): Optional. A new title.
- Department ID (`department_id`, text): Optional. The department's id, from its address in Zoho Recruit. Corporate accounts usually require one.
- Client ID (`client_company_id`, text): Optional. The client company's id, from its address in Zoho Recruit. Staffing agency accounts usually require one.
- Status (`job_opening_status`, text): Optional. From your account's own status list. The Free edition allows one active job opening per recruiter.
- Job type (`job_type`, text): Optional. From your account's own list, like Full time.
- Number of positions (`number_of_positions`, number): Optional. How many people to hire. At least 1.
- Target date (`target_date`, date): Optional. When the job should be filled by.
- Assigned recruiters (`assigned_recruiter_ids`, list): Optional. The recruiters working on the job.
- City (`city`, text): Optional. City.
- Country (`country`, text): Optional. Country.
- Job description (`job_description`, text): Optional. The job description.
- Remote job (`remote_job`, text): Optional. Whether the job is remote. Leave blank to not set it. One of: `yes`, `no`.
- Extra fields (`extra_fields`, object): Optional. Any other fields, as a JSON object of field API names, like {"Source": "Referral"}. 'List fields' names every field.

**Outputs**

- `created_by` (object): Who created it.
- `created_time` (text): When it was created.
- `id` (text): The saved record's id.
- `message` (text): Zoho's confirmation, like 'record added'.
- `modified_by` (object): Who last changed it.
- `modified_time` (text): When it was last changed.

**Example output**

```json
{
  "created_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "created_time": "2026-09-01T10:00:00+00:00",
  "id": "486812000001660120",
  "message": "record updated",
  "modified_by": {
    "id": "486812000000180003",
    "name": "Alex Recruiter"
  },
  "modified_time": "2026-09-01T10:00:00+00:00"
}
```
