# Zoho Desk

> Customer service help desk. Create, update, search and reply to tickets, add comments, and manage contacts and accounts.

App · Help Desk · 20 actions. Web page: https://docs.lodol.com/docs/integrations/zoho-desk

## Actions

### Add ticket comment

Add a comment to a ticket: a private note for agents by default, or a public one the customer can see.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Comment (`content`, text, required): The comment, up to 32,000 characters.
- Public (`is_public`, true/false): Optional. Let the customer see it. Private by default. Default: `false`.
- Format (`content_type`, text): Optional. Plain text (the default) or HTML. One of: `plainText` (Plain text), `html`.

**Outputs**: A comment on a ticket.

- `commentedTime` (text): An ISO 8601 UTC timestamp.
- `commenter` (object): Who wrote it.
- `commenterId` (text): The commenter's id.
- `content` (text): The comment.
- `contentType` (text): html or plainText.
- `id` (text): The comment's id.
- `isPublic` (true/false): Whether the customer can see it.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.

**Example output**

```json
{
  "commentedTime": "2026-03-02T11:05:00.000Z",
  "commenterId": "1892000000056007",
  "content": "Customer called; replacement approved.",
  "contentType": "plainText",
  "id": "1892000000367001",
  "isPublic": false
}
```

### Create account

Create an account (a customer company) to group contacts.

**Inputs**

- Account name (`account_name`, text, required): The company's name, up to 200 characters.
- Email (`email`, text): Optional. Email.
- Website (`website`, text): Optional. Website.
- Phone (`phone`, text): Optional. Phone.
- Industry (`industry`, text): Optional. Industry.
- Description (`description`, text): Optional. Notes about the account.
- Street (`street`, text): Optional. Street.
- City (`city`, text): Optional. City.
- State (`state`, text): Optional. State.
- Country (`country`, text): Optional. Country.
- Zip code (`zip_code`, text): Optional. Zip or postal code.
- Custom fields (`custom_fields`, object): Optional. Custom field values by API name, such as {"cf_order_number": "A-100"}. Find API names in Zoho Desk under Setup > Customization > Layouts and Fields.

**Outputs**: An account (a customer company).

- `accountName` (text): The account's name.
- `cf` (object): Custom field values, by API name (cf_...).
- `city` (text): City.
- `code` (text): Zip code.
- `country` (text): Country.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `description` (text): Notes.
- `email` (text): Email address.
- `id` (text): The account's id; use it on a contact.
- `industry` (text): Industry.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `ownerId` (text): The owning agent's id.
- `phone` (text): Phone.
- `state` (text): State.
- `street` (text): Street.
- `webUrl` (text): The account's address in Zoho Desk.
- `website` (text): Website.

**Example output**

```json
{
  "accountName": "Acme Corp",
  "createdTime": "2026-01-20T08:00:00.000Z",
  "id": "1892000000975382",
  "industry": "Retail",
  "website": "https://acme.example.com"
}
```

### Create contact

Create a contact (a customer). Only the last name is required.

**Inputs**

- Last name (`last_name`, text, required): The contact's last name, up to 200 characters.
- First name (`first_name`, text): Optional. First name, up to 40 characters.
- Email (`email`, text): Optional. Email address.
- Secondary email (`secondary_email`, text): Optional. A second email address.
- Phone (`phone`, text): Optional. Phone.
- Mobile (`mobile`, text): Optional. Mobile.
- Title (`title`, text): Optional. Job title.
- Description (`description`, text): Optional. Notes about the contact.
- Account ID (`account_id`, text): Optional. The account's id, from 'List accounts' or 'Create account'.
- Street (`street`, text): Optional. Street.
- City (`city`, text): Optional. City.
- State (`state`, text): Optional. State.
- Country (`country`, text): Optional. Country.
- Zip code (`zip_code`, text): Optional. Zip or postal code.
- Custom fields (`custom_fields`, object): Optional. Custom field values by API name, such as {"cf_order_number": "A-100"}. Find API names in Zoho Desk under Setup > Customization > Layouts and Fields.

**Outputs**: A contact (a customer).

- `accountId` (text): The account's id.
- `cf` (object): Custom field values, by API name (cf_...).
- `city` (text): City.
- `country` (text): Country.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `description` (text): Notes.
- `email` (text): Email address.
- `firstName` (text): First name.
- `id` (text): The contact's id; use it on a ticket.
- `isSpam` (true/false): Whether it is marked as spam.
- `lastName` (text): Last name.
- `mobile` (text): Mobile.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `ownerId` (text): The owning agent's id.
- `phone` (text): Phone.
- `secondaryEmail` (text): Second email address.
- `state` (text): State.
- `street` (text): Street.
- `title` (text): Job title.
- `type` (text): The contact type.
- `webUrl` (text): The contact's address in Zoho Desk.
- `zip` (text): Zip code.

**Example output**

```json
{
  "accountId": "1892000000975382",
  "createdTime": "2026-02-01T08:00:00.000Z",
  "email": "carol@example.com",
  "firstName": "Carol",
  "id": "1892000000042001",
  "lastName": "Smith",
  "phone": "+1 555 0100"
}
```

### Create ticket

Create a ticket. Choose an existing contact by id, or give an email address: Zoho Desk reuses the contact with that email or creates one.

**Inputs**

- Subject (`subject`, text, required): The ticket's subject, up to 255 characters.
- Department (`department_id`, text, required): The department.
- Contact ID (`contact_id`, text): Optional. An existing contact's id. Leave blank and fill in the contact's email or last name instead.
- Contact email (`contact_email`, text): Optional. The customer's email, when no contact id is given.
- Contact last name (`contact_last_name`, text): Optional. Used when Zoho Desk creates the contact.
- Contact first name (`contact_first_name`, text): Optional. Used when Zoho Desk creates the contact.
- Description (`description`, text): Optional. The ticket's description. HTML is allowed.
- Priority (`priority`, text): Optional. The priority; a priority your portal defines also works. One of: `High`, `Medium`, `Low`.
- Status (`status`, text): Optional. The status; a status your portal defines also works. One of: `Open`, `On Hold`, `Escalated`, `Closed`.
- Classification (`classification`, text): Optional. The classification; one your portal defines also works. One of: `Problem`, `Request`, `Question`.
- Channel (`channel`, text): Optional. Where the ticket came from. One of: `Email`, `Phone`, `Web`, `Chat`, `Forums`.
- Category (`category`, text): Optional. The ticket's category.
- Assignee (`assignee_id`, text): Optional. The agent to assign the ticket to.
- Due date (`due_date`, date and time): Optional. When the ticket is due.
- Phone (`phone`, text): Optional. A phone number for the ticket.
- Custom fields (`custom_fields`, object): Optional. Custom field values by API name, such as {"cf_order_number": "A-100"}. Find API names in Zoho Desk under Setup > Customization > Layouts and Fields.

**Outputs**: A ticket.

- `accountId` (text): The account's id.
- `assignee` (object): A person.
- `assigneeId` (text): The assigned agent's id.
- `category` (text): The category.
- `cf` (object): Custom field values, by API name (cf_...).
- `channel` (text): Where the ticket came from, such as Email or Web.
- `classification` (text): The classification.
- `closedTime` (text): An ISO 8601 UTC timestamp.
- `commentCount` (text): How many comments it has.
- `contact` (object): A person.
- `contactId` (text): The contact's id.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `department` (object): The department.
- `departmentId` (text): The department's id.
- `description` (text): The description (HTML).
- `dueDate` (text): An ISO 8601 UTC timestamp.
- `email` (text): The ticket's email address.
- `id` (text): The ticket's id; use it in other ticket actions.
- `isOverDue` (true/false): Whether it is past its due date.
- `isSpam` (true/false): Whether it is marked as spam.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `phone` (text): The ticket's phone number.
- `priority` (text): The priority.
- `status` (text): The status, such as Open or Closed.
- `statusType` (text): Open, On Hold or Closed.
- `subject` (text): The subject.
- `threadCount` (text): How many conversation messages it has.
- `ticketNumber` (text): The ticket number people see, such as 101.
- `webUrl` (text): The ticket's address in Zoho Desk.

**Example output**

```json
{
  "assigneeId": "1892000000056007",
  "channel": "Email",
  "commentCount": "0",
  "contactId": "1892000000042001",
  "createdTime": "2026-03-02T10:15:00.000Z",
  "departmentId": "1892000000006907",
  "email": "carol@example.com",
  "id": "1892000000042034",
  "priority": "High",
  "status": "Open",
  "statusType": "Open",
  "subject": "Order arrived damaged",
  "threadCount": "1",
  "ticketNumber": "101",
  "webUrl": "https://desk.zoho.com/support/acme/ShowHomePage.do#Cases/dv/1892000000042034"
}
```

### Delete tickets

Move tickets to the Recycle Bin. Zoho Desk keeps them there for 60 days, where they can be restored.

**Inputs**

- Ticket IDs (`ticket_ids`, list, required): The ids of the tickets to delete.

**Outputs**

- `count` (number): How many tickets were moved.
- `deleted` (true/false): True once Zoho Desk moved them to the Recycle Bin.
- `ticket_ids` (list): The tickets moved.

**Example output**

```json
{
  "count": 1,
  "deleted": true,
  "ticket_ids": [
    "1892000000042034"
  ]
}
```

### Get contact

Get one contact with their account.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's id, from 'Search contacts' or 'List contacts', or the contact's address in Zoho Desk.

**Outputs**: A contact (a customer).

- `accountId` (text): The account's id.
- `cf` (object): Custom field values, by API name (cf_...).
- `city` (text): City.
- `country` (text): Country.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `description` (text): Notes.
- `email` (text): Email address.
- `firstName` (text): First name.
- `id` (text): The contact's id; use it on a ticket.
- `isSpam` (true/false): Whether it is marked as spam.
- `lastName` (text): Last name.
- `mobile` (text): Mobile.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `ownerId` (text): The owning agent's id.
- `phone` (text): Phone.
- `secondaryEmail` (text): Second email address.
- `state` (text): State.
- `street` (text): Street.
- `title` (text): Job title.
- `type` (text): The contact type.
- `webUrl` (text): The contact's address in Zoho Desk.
- `zip` (text): Zip code.

**Example output**

```json
{
  "accountId": "1892000000975382",
  "createdTime": "2026-02-01T08:00:00.000Z",
  "email": "carol@example.com",
  "firstName": "Carol",
  "id": "1892000000042001",
  "lastName": "Smith",
  "phone": "+1 555 0100"
}
```

### Get conversation message

Get one message on a ticket in full, as HTML and plain text.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Message ID (`thread_id`, text, required): The message's id, from 'List ticket conversation'.

**Outputs**: A conversation message on a ticket.

- `author` (object): Who wrote it.
- `cc` (text): The cc recipients.
- `channel` (text): The channel, such as EMAIL.
- `content` (text): The full message (only when getting one message).
- `contentType` (text): text/html or text/plain.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `direction` (text): in (from the customer) or out (from an agent).
- `fromEmailAddress` (text): The sender's address.
- `fullContentURL` (text): Where the full content is, when shortened.
- `hasAttach` (true/false): Whether it has attachments.
- `id` (text): The message's id.
- `isContentTruncated` (true/false): Whether Zoho shortened the content.
- `note` (text): Set when the content was shortened.
- `plainText` (text): The message as plain text (only when getting one message).
- `status` (text): The delivery status, such as SUCCESS.
- `summary` (text): The first part of the message.
- `to` (text): The recipients.
- `visibility` (text): public or private.

**Example output**

```json
{
  "channel": "EMAIL",
  "content": "Thanks for letting us know. A replacement is on its way.",
  "contentType": "text/plain",
  "createdTime": "2026-03-02T11:00:00.000Z",
  "direction": "out",
  "fromEmailAddress": "support@acme.zohodesk.com",
  "id": "1892000000094004",
  "status": "SUCCESS",
  "summary": "Thanks for letting us know. A replacement is on its way.",
  "to": "carol@example.com",
  "visibility": "public"
}
```

### Get ticket

Get one ticket with its contact, assignee and department.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.

**Outputs**: A ticket.

- `accountId` (text): The account's id.
- `assignee` (object): A person.
- `assigneeId` (text): The assigned agent's id.
- `category` (text): The category.
- `cf` (object): Custom field values, by API name (cf_...).
- `channel` (text): Where the ticket came from, such as Email or Web.
- `classification` (text): The classification.
- `closedTime` (text): An ISO 8601 UTC timestamp.
- `commentCount` (text): How many comments it has.
- `contact` (object): A person.
- `contactId` (text): The contact's id.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `department` (object): The department.
- `departmentId` (text): The department's id.
- `description` (text): The description (HTML).
- `dueDate` (text): An ISO 8601 UTC timestamp.
- `email` (text): The ticket's email address.
- `id` (text): The ticket's id; use it in other ticket actions.
- `isOverDue` (true/false): Whether it is past its due date.
- `isSpam` (true/false): Whether it is marked as spam.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `phone` (text): The ticket's phone number.
- `priority` (text): The priority.
- `status` (text): The status, such as Open or Closed.
- `statusType` (text): Open, On Hold or Closed.
- `subject` (text): The subject.
- `threadCount` (text): How many conversation messages it has.
- `ticketNumber` (text): The ticket number people see, such as 101.
- `webUrl` (text): The ticket's address in Zoho Desk.

**Example output**

```json
{
  "assigneeId": "1892000000056007",
  "channel": "Email",
  "commentCount": "0",
  "contactId": "1892000000042001",
  "createdTime": "2026-03-02T10:15:00.000Z",
  "departmentId": "1892000000006907",
  "email": "carol@example.com",
  "id": "1892000000042034",
  "priority": "High",
  "status": "Open",
  "statusType": "Open",
  "subject": "Order arrived damaged",
  "threadCount": "1",
  "ticketNumber": "101",
  "webUrl": "https://desk.zoho.com/support/acme/ShowHomePage.do#Cases/dv/1892000000042034"
}
```

### List accounts

List accounts (customer companies).

**Inputs**

- Sort by (`sort_by`, text): Optional. The order of the accounts. One of: `accountName` (Name), `-createdTime` (Newest first), `createdTime` (Oldest first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many accounts are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The accounts.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "accountName": "Acme Corp",
      "createdTime": "2026-01-20T08:00:00.000Z",
      "id": "1892000000975382",
      "industry": "Retail",
      "website": "https://acme.example.com"
    }
  ],
  "next_offset": null
}
```

### List agents

List the help desk's agents, the people tickets are assigned to.

**Inputs**

- Status (`status`, text): Optional. Which agents to list; active ones by default. One of: `ACTIVE`, `DISABLED`, `DELETED`, `IMPORTED`.
- Department (`department_id`, text): Optional. Only this department.
- Page size (`limit`, number): Optional. How many to return, 1 to 200. Default 50. From 1 to 200.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many agents are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The agents.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "associatedDepartmentIds": [
        "1892000000006907"
      ],
      "emailId": "jade@example.com",
      "firstName": "Jade",
      "id": "1892000000056007",
      "isConfirmed": true,
      "lastName": "Tywin",
      "name": "Jade Tywin",
      "status": "ACTIVE"
    }
  ],
  "next_offset": null
}
```

### List contacts

List contacts (customers).

**Inputs**

- Sort by (`sort_by`, text): Optional. The order of the contacts. One of: `firstName` (First name), `lastName` (Last name), `-createdTime` (Newest first), `createdTime` (Oldest first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many contacts are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The contacts.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "accountId": "1892000000975382",
      "createdTime": "2026-02-01T08:00:00.000Z",
      "email": "carol@example.com",
      "firstName": "Carol",
      "id": "1892000000042001",
      "lastName": "Smith",
      "phone": "+1 555 0100"
    }
  ],
  "next_offset": null
}
```

### List departments

List the help desk's departments. A ticket belongs to one.

**Inputs**

- Search (`search`, text): Optional. Only departments whose name matches; * is a wildcard.
- Include disabled (`include_disabled`, true/false): Optional. Also list disabled departments. Default: `false`.
- Page size (`limit`, number): Optional. How many to return, 1 to 200. Default 50. From 1 to 200.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many departments are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The departments.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "createdTime": "2026-01-10T09:00:00.000Z",
      "description": "Customer support",
      "id": "1892000000006907",
      "isDefault": true,
      "isEnabled": true,
      "name": "Support"
    }
  ],
  "next_offset": null
}
```

### List ticket comments

List the comments on a ticket.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Order (`sort_by`, text): Optional. Newest or oldest first. One of: `-commentedTime` (Newest first), `commentedTime` (Oldest first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many comments are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The comments.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "commentedTime": "2026-03-02T11:05:00.000Z",
      "commenterId": "1892000000056007",
      "content": "Customer called; replacement approved.",
      "contentType": "plainText",
      "id": "1892000000367001",
      "isPublic": false
    }
  ],
  "next_offset": null
}
```

### List ticket conversation

List the emails and other messages on a ticket, each with a summary. Use 'Get conversation message' for a full message.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Order (`sort_by`, text): Optional. Newest first (the default) or oldest first. One of: `-sendDateTime` (Newest first), `sendDateTime` (Oldest first).
- Page size (`limit`, number): Optional. How many to return, 1 to 200. Default 100. From 1 to 200.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many conversation messages are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The conversation messages.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "channel": "EMAIL",
      "contentType": "text/plain",
      "createdTime": "2026-03-02T11:00:00.000Z",
      "direction": "out",
      "fromEmailAddress": "support@acme.zohodesk.com",
      "id": "1892000000094004",
      "status": "SUCCESS",
      "summary": "Thanks for letting us know. A replacement is on its way.",
      "to": "carol@example.com",
      "visibility": "public"
    }
  ],
  "next_offset": null
}
```

### List tickets

List tickets, newest first by default, optionally filtered.

**Inputs**

- Department (`department_id`, text): Optional. Only this department.
- Status (`status`, list): Optional. Only tickets with these statuses. One or more of: `Open`, `On Hold`, `Escalated`, `Closed`.
- Priority (`priority`, list): Optional. Only tickets with these priorities. One or more of: `High`, `Medium`, `Low`.
- Assignee (`assignee_id`, text): Optional. Only tickets assigned to this agent.
- Unassigned only (`unassigned_only`, true/false): Optional. Only tickets nobody is assigned to. Default: `false`.
- Received in the last (`received_in_days`, text): Optional. Only tickets received in this many days. One of: `15` (15 days), `30` (30 days), `90` (90 days).
- Sort by (`sort_by`, text): Optional. Newest or oldest first. One of: `-createdTime` (Newest first), `createdTime` (Oldest first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page. At least 0.

**Outputs**

- `count` (number): How many tickets are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The tickets.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "assigneeId": "1892000000056007",
      "channel": "Email",
      "commentCount": "0",
      "contactId": "1892000000042001",
      "createdTime": "2026-03-02T10:15:00.000Z",
      "departmentId": "1892000000006907",
      "email": "carol@example.com",
      "id": "1892000000042034",
      "priority": "High",
      "status": "Open",
      "statusType": "Open",
      "subject": "Order arrived damaged",
      "threadCount": "1",
      "ticketNumber": "101",
      "webUrl": "https://desk.zoho.com/support/acme/ShowHomePage.do#Cases/dv/1892000000042034"
    }
  ],
  "next_offset": null
}
```

### Search contacts

Find contacts by email, name, phone or account. Text accepts * as a wildcard. Useful to find a contact before creating a ticket.

**Inputs**

- Email (`email`, text): Optional. The email address, such as *@acme.com.
- Name (`full_name`, text): Optional. The contact's full name.
- Phone (`phone`, text): Optional. The phone number.
- Account name (`account_name`, text): Optional. The contact's account.
- Any field contains (`text`, text): Optional. Search every field.
- Sort by (`sort_by`, text): Optional. The order of the results. One of: `relevance` (Best match), `-createdTime` (Newest first), `createdTime` (Oldest first), `-modifiedTime` (Recently changed first), `modifiedTime` (Least recently changed first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page (up to 999). From 0 to 999.

**Outputs**

- `count` (number): How many contacts are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The contacts.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.
- `total` (number): How many contacts match in all.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "accountId": "1892000000975382",
      "createdTime": "2026-02-01T08:00:00.000Z",
      "email": "carol@example.com",
      "firstName": "Carol",
      "id": "1892000000042001",
      "lastName": "Smith",
      "phone": "+1 555 0100"
    }
  ],
  "next_offset": null,
  "total": 1
}
```

### Search tickets

Find tickets by text, subject, number, email, status, people or creation date. Text fields accept * as a wildcard.

**Inputs**

- Any field contains (`text`, text): Optional. Search every field, such as refund*.
- Subject (`subject`, text): Optional. Match the subject, such as *damaged*.
- Ticket number (`ticket_number`, text): Optional. The exact ticket number, such as 101.
- Email (`email`, text): Optional. Match the ticket's email address.
- Status (`status`, list): Optional. Only tickets with these statuses. One or more of: `Open`, `On Hold`, `Escalated`, `Closed`.
- Priority (`priority`, list): Optional. Only tickets with these priorities. One or more of: `High`, `Medium`, `Low`.
- Department (`department_id`, text): Optional. Only this department.
- Contact ID (`contact_id`, text): Optional. Only this contact's tickets.
- Assignee (`assignee_id`, text): Optional. Only tickets assigned to this agent.
- Created after (`created_from`, date and time): Optional. Only tickets created at or after this time.
- Created before (`created_to`, date and time): Optional. Only tickets created at or before this time.
- Sort by (`sort_by`, text): Optional. The order of the results. One of: `relevance` (Best match), `-createdTime` (Newest first), `createdTime` (Oldest first), `-modifiedTime` (Recently changed first), `modifiedTime` (Least recently changed first).
- Page size (`limit`, number): Optional. How many to return, 1 to 100. Default 50. From 1 to 100.
- Offset (`offset`, number): Optional. How many to skip: the next_offset of the previous page (up to 999). From 0 to 999.

**Outputs**

- `count` (number): How many tickets are on this page.
- `has_more` (true/false): Whether another page is probably available.
- `items` (list): The tickets.
- `next_offset` (number): Pass as 'Offset' to fetch the next page; empty on the last.
- `total` (number): How many tickets match in all.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "assigneeId": "1892000000056007",
      "channel": "Email",
      "commentCount": "0",
      "contactId": "1892000000042001",
      "createdTime": "2026-03-02T10:15:00.000Z",
      "departmentId": "1892000000006907",
      "email": "carol@example.com",
      "id": "1892000000042034",
      "priority": "High",
      "status": "Open",
      "statusType": "Open",
      "subject": "Order arrived damaged",
      "threadCount": "1",
      "ticketNumber": "101",
      "webUrl": "https://desk.zoho.com/support/acme/ShowHomePage.do#Cases/dv/1892000000042034"
    }
  ],
  "next_offset": null,
  "total": 1
}
```

### Send email reply

Email a reply to the customer on a ticket. It goes to the ticket's email address unless you give others, from the department's default From address unless you choose one.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Message (`content`, text, required): The reply.
- Format (`content_type`, text): Optional. Plain text (the default) or HTML. One of: `plainText` (Plain text), `html`.
- From address (`from_address`, text): Optional. A From address set up in Zoho Desk. Blank uses the ticket department's default.
- To (`to`, text): Optional. Recipients, comma-separated. Blank uses the ticket's email.
- CC (`cc`, text): Optional. Cc recipients.
- BCC (`bcc`, text): Optional. Bcc recipients.
- Then set status to (`ticket_status`, text): Optional. Change the ticket's status with the reply, such as Closed. One of: `Open`, `On Hold`, `Escalated`, `Closed`.

**Outputs**: A conversation message on a ticket.

- `author` (object): Who wrote it.
- `cc` (text): The cc recipients.
- `channel` (text): The channel, such as EMAIL.
- `content` (text): The full message (only when getting one message).
- `contentType` (text): text/html or text/plain.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `direction` (text): in (from the customer) or out (from an agent).
- `fromEmailAddress` (text): The sender's address.
- `fullContentURL` (text): Where the full content is, when shortened.
- `hasAttach` (true/false): Whether it has attachments.
- `id` (text): The message's id.
- `isContentTruncated` (true/false): Whether Zoho shortened the content.
- `note` (text): Set when the content was shortened.
- `plainText` (text): The message as plain text (only when getting one message).
- `status` (text): The delivery status, such as SUCCESS.
- `summary` (text): The first part of the message.
- `to` (text): The recipients.
- `visibility` (text): public or private.

**Example output**

```json
{
  "channel": "EMAIL",
  "contentType": "text/plain",
  "createdTime": "2026-03-02T11:00:00.000Z",
  "direction": "out",
  "fromEmailAddress": "support@acme.zohodesk.com",
  "id": "1892000000094004",
  "status": "SUCCESS",
  "summary": "Thanks for letting us know. A replacement is on its way.",
  "to": "carol@example.com",
  "visibility": "public"
}
```

### Update contact

Change a contact's details. Only the fields you fill in change.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's id, from 'Search contacts' or 'List contacts', or the contact's address in Zoho Desk.
- Last name (`last_name`, text): Optional. The new last name.
- First name (`first_name`, text): Optional. First name, up to 40 characters.
- Email (`email`, text): Optional. Email address.
- Secondary email (`secondary_email`, text): Optional. A second email address.
- Phone (`phone`, text): Optional. Phone.
- Mobile (`mobile`, text): Optional. Mobile.
- Title (`title`, text): Optional. Job title.
- Description (`description`, text): Optional. Notes about the contact.
- Account ID (`account_id`, text): Optional. The account's id, from 'List accounts' or 'Create account'.
- Street (`street`, text): Optional. Street.
- City (`city`, text): Optional. City.
- State (`state`, text): Optional. State.
- Country (`country`, text): Optional. Country.
- Zip code (`zip_code`, text): Optional. Zip or postal code.
- Custom fields (`custom_fields`, object): Optional. Custom field values by API name, such as {"cf_order_number": "A-100"}. Find API names in Zoho Desk under Setup > Customization > Layouts and Fields.

**Outputs**: A contact (a customer).

- `accountId` (text): The account's id.
- `cf` (object): Custom field values, by API name (cf_...).
- `city` (text): City.
- `country` (text): Country.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `description` (text): Notes.
- `email` (text): Email address.
- `firstName` (text): First name.
- `id` (text): The contact's id; use it on a ticket.
- `isSpam` (true/false): Whether it is marked as spam.
- `lastName` (text): Last name.
- `mobile` (text): Mobile.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `ownerId` (text): The owning agent's id.
- `phone` (text): Phone.
- `secondaryEmail` (text): Second email address.
- `state` (text): State.
- `street` (text): Street.
- `title` (text): Job title.
- `type` (text): The contact type.
- `webUrl` (text): The contact's address in Zoho Desk.
- `zip` (text): Zip code.

**Example output**

```json
{
  "accountId": "1892000000975382",
  "createdTime": "2026-02-01T08:00:00.000Z",
  "email": "carol@example.com",
  "firstName": "Carol",
  "id": "1892000000042001",
  "lastName": "Smith",
  "phone": "+1 555 0100"
}
```

### Update ticket

Change a ticket's fields. Only the fields you fill in change. Set the status to Closed to close it, or choose an assignee to assign it.

**Inputs**

- Ticket ID (`ticket_id`, text, required): The ticket's id: the long number from 'List tickets' or 'Search tickets', or the ticket's address in Zoho Desk. Not the ticket number.
- Subject (`subject`, text): Optional. The new subject.
- Department (`department_id`, text): Optional. Only this department.
- Contact ID (`contact_id`, text): Optional. Move the ticket to this contact.
- Description (`description`, text): Optional. The ticket's description. HTML is allowed.
- Priority (`priority`, text): Optional. The priority; a priority your portal defines also works. One of: `High`, `Medium`, `Low`.
- Status (`status`, text): Optional. The status; a status your portal defines also works. One of: `Open`, `On Hold`, `Escalated`, `Closed`.
- Classification (`classification`, text): Optional. The classification; one your portal defines also works. One of: `Problem`, `Request`, `Question`.
- Channel (`channel`, text): Optional. Where the ticket came from. One of: `Email`, `Phone`, `Web`, `Chat`, `Forums`.
- Category (`category`, text): Optional. The ticket's category.
- Assignee (`assignee_id`, text): Optional. The agent to assign the ticket to.
- Due date (`due_date`, date and time): Optional. When the ticket is due.
- Resolution (`resolution`, text): Optional. How the ticket was resolved.
- Custom fields (`custom_fields`, object): Optional. Custom field values by API name, such as {"cf_order_number": "A-100"}. Find API names in Zoho Desk under Setup > Customization > Layouts and Fields.
- Don't notify on close (`disable_closure_notification`, true/false): Optional. When closing, don't email the customer. Default: `false`.

**Outputs**: A ticket.

- `accountId` (text): The account's id.
- `assignee` (object): A person.
- `assigneeId` (text): The assigned agent's id.
- `category` (text): The category.
- `cf` (object): Custom field values, by API name (cf_...).
- `channel` (text): Where the ticket came from, such as Email or Web.
- `classification` (text): The classification.
- `closedTime` (text): An ISO 8601 UTC timestamp.
- `commentCount` (text): How many comments it has.
- `contact` (object): A person.
- `contactId` (text): The contact's id.
- `createdTime` (text): An ISO 8601 UTC timestamp.
- `department` (object): The department.
- `departmentId` (text): The department's id.
- `description` (text): The description (HTML).
- `dueDate` (text): An ISO 8601 UTC timestamp.
- `email` (text): The ticket's email address.
- `id` (text): The ticket's id; use it in other ticket actions.
- `isOverDue` (true/false): Whether it is past its due date.
- `isSpam` (true/false): Whether it is marked as spam.
- `modifiedTime` (text): An ISO 8601 UTC timestamp.
- `phone` (text): The ticket's phone number.
- `priority` (text): The priority.
- `status` (text): The status, such as Open or Closed.
- `statusType` (text): Open, On Hold or Closed.
- `subject` (text): The subject.
- `threadCount` (text): How many conversation messages it has.
- `ticketNumber` (text): The ticket number people see, such as 101.
- `webUrl` (text): The ticket's address in Zoho Desk.

**Example output**

```json
{
  "assigneeId": "1892000000056007",
  "channel": "Email",
  "commentCount": "0",
  "contactId": "1892000000042001",
  "createdTime": "2026-03-02T10:15:00.000Z",
  "departmentId": "1892000000006907",
  "email": "carol@example.com",
  "id": "1892000000042034",
  "priority": "High",
  "status": "Open",
  "statusType": "Open",
  "subject": "Order arrived damaged",
  "threadCount": "1",
  "ticketNumber": "101",
  "webUrl": "https://desk.zoho.com/support/acme/ShowHomePage.do#Cases/dv/1892000000042034"
}
```
