# Zoho People

> HR software. Read and update employee and other form records, apply for and cancel leave, check leave balances and holidays, and post announcements.

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

## Actions

### Add a record

Add a record to any form, for example a Department or a custom form, from field values keyed by label name.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').
- Fields (`fields`, object, required): Field values keyed by the field's label name from 'Get form fields' (for example FirstName). For a lookup or pick-list field, send the choice's id. Dates are written in your organization's date format.
- Save as draft (`is_draft`, true/false): Optional. Save the record as a draft instead of submitting it. Default: `false`.

**Outputs**: The record that was saved.

- `message` (text): Zoho's confirmation message.
- `record_id` (text): The record's id (Zoho's pkId).

**Example output**

```json
{
  "message": "Successfully Added",
  "record_id": "412762000000222222"
}
```

### Add an employee

Add an employee. By default Zoho emails them an invitation and the profile stays inactive until they accept; choose 'Without a login' to add a profile that cannot sign in and gets no email.

**Inputs**

- Employee ID (`employee_id`, text, required): Your organization's Employee ID for them, for example EMP042.
- First name (`first_name`, text, required): First name.
- Last name (`last_name`, text, required): Last name.
- Email (`email`, text, required): Their email address.
- Other fields (`other_fields`, object): Optional. More Employee form fields keyed by label name from 'Get form fields' (for example Dateofjoining).
- Without a login (`without_login`, true/false): Optional. Add them as a profile that cannot sign in, and send no invitation. Default: `false`.

**Outputs**: The record that was saved.

- `message` (text): Zoho's confirmation message.
- `record_id` (text): The record's id (Zoho's pkId).

**Example output**

```json
{
  "message": "Successfully Added",
  "record_id": "412762000000123456"
}
```

### Apply for leave

Apply for whole days of leave for an employee. It then follows the organization's approval process.

**Inputs**

- Employee (`employee`, text, required): The employee's Zoho id (record_id from 'List records' on the Employee form), email address, or Employee ID.
- Leave type (`leave_type_id`, text, required): The leave type. The list shows the employee's leave types once their Zoho id is entered.
- From (`from_date`, date, required): The first day.
- To (`to_date`, date, required): The last day.
- Reason (`reason`, text): Optional. Why the leave is needed.

**Outputs**: The leave request that was changed.

- `leave_id` (text): The leave request's id.
- `message` (text): Zoho's confirmation message.

**Example output**

```json
{
  "leave_id": "412762000000456789",
  "message": "Record(s) added successfully."
}
```

### Cancel a leave request

Cancel a leave request.

**Inputs**

- Leave request ID (`leave_id`, text, required): The leave request's id, from 'List leave requests' or 'Apply for leave'.
- Reason (`reason`, text): Optional. Why it is cancelled.

**Outputs**: The leave request that was changed.

- `leave_id` (text): The leave request's id.
- `message` (text): Zoho's confirmation message.

**Example output**

```json
{
  "leave_id": "412762000000456789",
  "message": "Record(s) cancelled successfully."
}
```

### Count records

Count the records in a form.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').

**Outputs**: How many records a form holds.

- `count` (number): The number of records.
- `form_link_name` (text): The form's link name.

**Example output**

```json
{
  "count": 42,
  "form_link_name": "employee"
}
```

### Get a leave request

Get one leave request: its dates, leave type, employee and approval status.

**Inputs**

- Leave request ID (`leave_id`, text, required): The leave request's id, from 'List leave requests' or 'Apply for leave'.

**Outputs**: A leave request.

- `approval_status` (text): Approved, pending, rejected, cancelled and so on.
- `created_time` (text): When it was created.
- `date_of_request` (text): When it was requested.
- `days` (object): Per day: the leave count and times.
- `employee` (object): The employee.
- `from_date` (text): The first day, in the organization's date format.
- `leave_id` (text): The leave request's id.
- `leave_type` (object): The leave type.
- `modified_time` (text): When it was last modified.
- `to_date` (text): The last day, in the organization's date format.

**Example output**

```json
{
  "approval_status": "PENDING",
  "date_of_request": "30-Sep-2026",
  "days": {
    "07-Oct-2026": {
      "leave_count": 1
    }
  },
  "employee": {
    "avatar": "",
    "id": "EMP001",
    "name": "Ada Lovelace",
    "zoho_id": "412762000000123456"
  },
  "from_date": "07-Oct-2026",
  "leave_id": "412762000000456789",
  "leave_type": {
    "id": "412762000000011111",
    "name": "Casual Leave",
    "type": "PAID",
    "unit": "Days"
  },
  "to_date": "07-Oct-2026"
}
```

### Get a record

Get one record of a form by its id, with every field.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').
- Record ID (`record_id`, text, required): The record's id: record_id from 'List records' or 'Search records', or a Zoho People address that contains it.

**Outputs**: A record. Its fields are the form's own, keyed by label name.

- `AddedTime` (text): When the record was added.
- `Dateofjoining` (text): Date of joining (employee form).
- `EmailID` (text): Email address (employee form).
- `EmployeeID` (text): The employee's Employee ID (employee form).
- `Employeestatus` (text): Employee status (employee form).
- `FirstName` (text): First name (employee form).
- `LastName` (text): Last name (employee form).
- `ModifiedTime` (text): When the record was last modified.
- `Role` (text): Role (employee form).
- `Zoho_ID` (text): The record's Zoho id.
- `record_id` (text): The record's id.

**Example output**

```json
{
  "AddedTime": "01-Mar-2026 09:00:00",
  "EmailID": "ada@example.com",
  "EmployeeID": "EMP001",
  "Employeestatus": "Active",
  "FirstName": "Ada",
  "LastName": "Lovelace",
  "ModifiedTime": "02-Mar-2026 10:00:00",
  "Zoho_ID": "412762000000123456",
  "record_id": "412762000000123456"
}
```

### Get an employee's leave summary

Get the leave types that apply to an employee, with how much of each is taken and available.

**Inputs**

- Employee's Zoho id (`employee_zoho_id`, text, required): The employee's Zoho id: record_id from 'List records' on the Employee form.
- As of (`to_date`, date): Optional. Count up to this day; the end of the leave year by default.

**Outputs**: An employee's leave types with what is taken and available.

- `count` (number): How many leave types were returned.
- `employee_id` (text): The employee's Employee ID.
- `employee_name` (text): The employee's name.
- `employee_zoho_id` (text): The employee's Zoho id.
- `leave_types` (list): The leave types.

**Example output**

```json
{
  "count": 1,
  "employee_id": "EMP001",
  "employee_name": "Ada Lovelace",
  "employee_zoho_id": "412762000000123456",
  "leave_types": [
    {
      "available": 10,
      "color": "#3fbd54",
      "leave_type_id": "412762000000011111",
      "name": "Casual Leave",
      "taken": 2,
      "type": "Paid",
      "unit": "Day"
    }
  ]
}
```

### Get form fields

Get a form's fields: each one's label name (the key to use when adding or updating), type, whether it is mandatory, and the choice ids of lookup fields.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').

**Outputs**: The fields of a form.

- `count` (number): How many fields were returned (outside tabular sections).
- `fields` (list): The fields.
- `form_link_name` (text): The form's link name.
- `tabular_sections` (list): The tabular sections.

**Example output**

```json
{
  "count": 1,
  "fields": [
    {
      "comptype": "Text",
      "displayname": "First Name",
      "ismandatory": true,
      "labelname": "FirstName",
      "maxLength": 100
    }
  ],
  "form_link_name": "employee",
  "tabular_sections": []
}
```

### Get organization details

Get the organization's name, contact details, address, time zone and date format. Needs a Zoho People administrator.

**Inputs**: None.

**Outputs**: The Zoho People organization.

- `Address` (object): The organization's address.
- `Company` (text): The organization's name.
- `ContactMailId` (text): The contact email address.
- `ContactNumber` (text): The contact phone number.
- `ContactPerson` (text): The contact person.
- `DateFormat` (text): How dates are written, for example dd-MMM-yyyy.
- `TimeFormat` (text): How times are written.
- `TimeZone` (text): The organization's time zone.
- `Website` (text): The organization's website.

**Example output**

```json
{
  "Address": {
    "City": "London",
    "Country": "United Kingdom"
  },
  "Company": "Lodol Demo",
  "ContactMailId": "hr@example.com",
  "ContactNumber": "",
  "ContactPerson": "Ada Lovelace",
  "DateFormat": "dd-MMM-yyyy",
  "TimeFormat": "hh:mm a",
  "TimeZone": "Europe/London",
  "Website": "https://example.com"
}
```

### Get the leave balance report

Get booked leave and balances per employee and leave type for a period, up to 30 employees a page.

**Inputs**

- From (`from_date`, date, required): The first day.
- To (`to_date`, date, required): The last day.
- Unit (`unit`, text): Optional. Count in days or hours; days by default. One of: `Day` (Days), `Hour` (Hours).
- Employees (`employee_ids`, list): Optional. Zoho ids of up to 30 employees to include.
- Leave types (`leave_type_ids`, list): Optional. Ids of leave types to include (leave_type_id from 'Get an employee's leave summary').
- Employee status (`employee_statuses`, list): Optional. Only employees with these statuses. One or more of: `ACTIVE_USERS` (Active users), `ACTIVE_EMPLOYEE_PROFILES` (Active employee profiles), `EX_EMPLOYEES` (Former employees), `LOGIN_DISABLED` (Login disabled).
- Start at (`start_index`, number): Optional. The position of the first employee, from 0. At least 0.
- Page size (`limit`, number): Optional. How many employees, 1 to 30 (default 30). From 1 to 30.

**Outputs**: Booked and balance per employee and leave type.

- `count` (number): How many employee rows were returned.
- `employees` (list): The employee rows.
- `leave_types` (list): The leave types.

**Example output**

```json
{
  "count": 1,
  "employees": [
    {
      "balances": [
        {
          "balance": 10,
          "booked": 2,
          "leave_type_id": "412762000000011111",
          "name": "Casual Leave"
        }
      ],
      "employee_id": "EMP001",
      "employee_zoho_id": "412762000000123456",
      "name": "Ada Lovelace",
      "totals": {
        "paidBalance": 10,
        "paidBooked": 2
      }
    }
  ],
  "leave_types": [
    {
      "code": "CL",
      "leave_type_id": "412762000000011111",
      "name": "Casual Leave",
      "type": "Paid",
      "unit": "Day"
    }
  ]
}
```

### List announcements

List the organization's announcements, ten a page, newest first.

**Inputs**

- Start at (`start_index`, number): Optional. The position of the first announcement, from 1. At least 1.
- Pinned only (`pinned_only`, true/false): Optional. Only pinned announcements. Default: `false`.
- Search (`search`, text): Optional. Only announcements containing this text.

**Outputs**: One page (ten) of announcements.

- `announcements` (list): The announcements.
- `count` (number): How many are on this page.
- `has_next` (true/false): Whether another page follows.

**Example output**

```json
{
  "announcements": [
    {
      "announcementId": "412762000000777777",
      "emailList": "",
      "isActive": true,
      "isCommentDisable": false,
      "isNotify": false,
      "isSticky": false,
      "messageText": "The office is closed this Friday.",
      "notifyOthersEmailIds": "",
      "owner": "Ada Lovelace",
      "publishDate": "1790000000000",
      "subject": "Office closed Friday"
    }
  ],
  "count": 1,
  "has_next": false
}
```

### List forms

List the organization's forms (Employee, Department, custom forms and so on) with the link name used to address each.

**Inputs**: None.

**Outputs**: The organization's forms.

- `count` (number): How many forms were returned.
- `forms` (list): The forms.

**Example output**

```json
{
  "count": 1,
  "forms": [
    {
      "componentId": "412762000000035001",
      "displayName": "Employee",
      "formLinkName": "employee",
      "isVisible": true,
      "iscustom": false
    }
  ]
}
```

### List holidays

List the organization's holidays, optionally between two dates or for chosen locations.

**Inputs**

- From (`from_date`, date): Optional. The first day.
- To (`to_date`, date): Optional. The last day.
- Locations (`location_ids`, list): Optional. Ids of locations whose holidays to list.
- Shifts (`shift_ids`, list): Optional. Ids of shifts whose holidays to list.
- Holiday classifications (`classification_ids`, list): Optional. Ids of holiday classifications to include.
- Start at (`offset`, number): Optional. The position of the first result to return, from 1. At least 1.
- Page size (`limit`, number): Optional. How many to return, 1 to 200. From 1 to 200.

**Outputs**: Holidays in the date range.

- `count` (number): How many were returned.
- `holidays` (list): The holidays.

**Example output**

```json
{
  "count": 1,
  "holidays": [
    {
      "from_date": "01-Jan-2027",
      "holiday_id": "412762000000333333",
      "holiday_name": "New Year's Day",
      "is_restricted_holiday": false,
      "to_date": "01-Jan-2027"
    }
  ]
}
```

### List leave requests

List leave requests between two dates, optionally for chosen employees, leave types or approval status.

**Inputs**

- From (`from_date`, date, required): The first day.
- To (`to_date`, date, required): The last day.
- Employees (`employee_ids`, list): Optional. Zoho ids of employees to include (record_id from 'List records' on the Employee form).
- Leave types (`leave_type_ids`, list): Optional. Ids of leave types to include (leave_type_id from 'Get an employee's leave summary').
- Kind of leave (`leave_kinds`, list): Optional. Only these kinds of leave. One or more of: `PAID`, `UNPAID`, `ON_DUTY` (On duty), `RESTRICTED_HOLIDAY` (Restricted holiday), `COMPENSATORY_OFF` (Compensatory off).
- Employee status (`employee_statuses`, list): Optional. Only employees with these statuses. One or more of: `ACTIVE_USERS` (Active users), `ACTIVE_EMPLOYEE_PROFILES` (Active employee profiles), `EX_EMPLOYEES` (Former employees), `LOGIN_DISABLED` (Login disabled).
- Approval status (`approval_status`, text): Optional. Only requests in this state; all by default. One of: `ALL`, `APPROVED`, `PENDING`, `REJECTED`, `CANCELLED`, `CANCEL_PENDING` (Cancellation pending).
- Whose requests (`data_select`, text): Optional. Whose requests to include; everyone's by default. One of: `ALL` (Everyone), `MINE`, `SUBORDINATES` (My reportees), `DIRECT_SUBORDINATES` (My direct reportees), `MINE,SUBORDINATES` (Mine and my reportees).
- Sort by (`sort`, text): Optional. The order of the results. One of: `from_date` (Start date, oldest first), `-from_date` (Start date, newest first), `to_date` (End date, oldest first), `-to_date` (End date, newest first), `employee` (Employee, A-Z), `-employee` (Employee, Z-A), `leave_type` (Leave type, A-Z), `-leave_type` (Leave type, Z-A).
- Start at (`offset`, number): Optional. The position of the first result to return, from 1. At least 1.
- Page size (`limit`, number): Optional. How many to return, 1 to 200. From 1 to 200.

**Outputs**: Leave requests in the date range.

- `count` (number): How many were returned.
- `leave_requests` (list): The leave requests.

**Example output**

```json
{
  "count": 1,
  "leave_requests": [
    {
      "approval_status": "PENDING",
      "date_of_request": "30-Sep-2026",
      "days": {
        "07-Oct-2026": {
          "leave_count": 1
        }
      },
      "employee": {
        "avatar": "",
        "id": "EMP001",
        "name": "Ada Lovelace",
        "zoho_id": "412762000000123456"
      },
      "from_date": "07-Oct-2026",
      "leave_id": "412762000000456789",
      "leave_type": {
        "id": "412762000000011111",
        "name": "Casual Leave",
        "type": "PAID",
        "unit": "Days"
      },
      "to_date": "07-Oct-2026"
    }
  ]
}
```

### List records

List a form's records, optionally only one employee's (by Employee ID or email) or only those changed since a time.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').
- Find employee by (`search_column`, text): Optional. Look up one employee by this column. One of: `EMPLOYEEID` (Employee ID), `EMPLOYEEMAILALIAS` (Email address).
- Employee ID or email (`search_value`, text): Optional. The value to look for in the chosen column.
- Changed since (`modified_since`, date and time): Optional. Only records added or changed after this.
- Start at (`start_index`, number): Optional. The position of the first record to return, from 1. At least 1.
- Page size (`limit`, number): Optional. How many records to return, 1 to 200 (default 200). From 1 to 200.

**Outputs**: One page of records.

- `count` (number): How many records are on this page.
- `has_more` (true/false): Whether this page was full, so another may follow.
- `records` (list): The records.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "records": [
    {
      "AddedTime": "01-Mar-2026 09:00:00",
      "EmailID": "ada@example.com",
      "EmployeeID": "EMP001",
      "Employeestatus": "Active",
      "FirstName": "Ada",
      "LastName": "Lovelace",
      "ModifiedTime": "02-Mar-2026 10:00:00",
      "Zoho_ID": "412762000000123456",
      "record_id": "412762000000123456"
    }
  ]
}
```

### Post an announcement

Post an announcement to the organization's feed.

**Inputs**

- Subject (`subject`, text, required): The subject.
- Message (`message`, text, required): The announcement.
- Notify everyone (`notify`, true/false): Optional. Also email it to the organization. Default: `false`.
- Also email (`notify_emails`, list): Optional. Other email addresses to send it to.
- Pin it (`pinned`, true/false): Optional. Keep it at the top of the feed. Default: `false`.
- Turn off comments (`disable_comments`, true/false): Optional. Stop people commenting on it. Default: `false`.

**Outputs**: An announcement.

- `announcementId` (text): The announcement's id.
- `emailList` (text): Addresses notified.
- `empName` (text): The poster's name.
- `expireDate` (text): When it expires.
- `isActive` (true/false): Whether it is active.
- `isCommentDisable` (true/false): Whether comments are turned off.
- `isNotify` (true/false): Whether people were notified.
- `isSticky` (true/false): Whether it is pinned.
- `message` (text): The message (list).
- `messageText` (text): The message (when posted).
- `modifiedTime` (text): When it was last modified.
- `notifyOthersEmailIds` (text): Other addresses notified.
- `owner` (text): Who posted it.
- `publishDate` (text): When it was published (milliseconds since 1970).
- `subject` (text): The subject.

**Example output**

```json
{
  "announcementId": "412762000000777777",
  "emailList": "",
  "isActive": true,
  "isCommentDisable": false,
  "isNotify": false,
  "isSticky": false,
  "messageText": "The office is closed this Friday.",
  "notifyOthersEmailIds": "",
  "owner": "Ada Lovelace",
  "publishDate": "1790000000000",
  "subject": "Office closed Friday"
}
```

### Search records

Find a form's records where a field matches a condition, for example Employeestatus is Active.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').
- Field (`search_field`, text, required): The field's label name, from 'Get form fields'.
- Condition (`search_operator`, text): Optional. How to compare; Contains by default. One of: `Is`, `Is_Not` (Is not), `Contains`, `Not_Contains` (Not contains), `Starts_With` (Starts with), `Ends_With` (Ends with), `Like`, `Is_Empty` (Is empty), `Is_Not_Empty` (Is not empty), `True`, and 33 more.
- Value (`search_text`, text): The value to compare with. Not needed for conditions such as Is empty or Today. For Between, separate the two values with a semicolon.
- Start at (`start_index`, number): Optional. The position of the first record to return, from 1. At least 1.
- Page size (`limit`, number): Optional. How many records to return, 1 to 200 (default 200). From 1 to 200.

**Outputs**: One page of records.

- `count` (number): How many records are on this page.
- `has_more` (true/false): Whether this page was full, so another may follow.
- `records` (list): The records.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "records": [
    {
      "AddedTime": "01-Mar-2026 09:00:00",
      "EmailID": "ada@example.com",
      "EmployeeID": "EMP001",
      "Employeestatus": "Active",
      "FirstName": "Ada",
      "LastName": "Lovelace",
      "ModifiedTime": "02-Mar-2026 10:00:00",
      "Zoho_ID": "412762000000123456",
      "record_id": "412762000000123456"
    }
  ]
}
```

### Update a record

Change fields of a record in any form. Only the fields given are changed.

**Inputs**

- Form (`form_link_name`, text, required): The form, for example Employee or Department. Pick it from the list or type its link name (formLinkName from 'List forms').
- Record ID (`record_id`, text, required): The record's id: record_id from 'List records' or 'Search records', or a Zoho People address that contains it.
- Fields (`fields`, object, required): Field values keyed by the field's label name from 'Get form fields' (for example FirstName). For a lookup or pick-list field, send the choice's id. Dates are written in your organization's date format.
- Save as draft (`is_draft`, true/false): Optional. Save the record as a draft instead of submitting it. Default: `false`.

**Outputs**: The record that was saved.

- `message` (text): Zoho's confirmation message.
- `record_id` (text): The record's id (Zoho's pkId).

**Example output**

```json
{
  "message": "Successfully Updated",
  "record_id": "412762000000123456"
}
```
