<!-- BusyBot node reference — https://busybot.net/tools/freshdesk/ -->

> Node: Freshdesk (`freshdesk`) · Action · v1
> Category: Communication · Credentials: Freshdesk API (`freshdeskApi`)
> Updated: 2026-08-16

# Freshdesk

> Manage Freshdesk tickets and contacts

## Overview

Freshdesk is a cloud-based helpdesk platform. This tool provides full CRUD operations for tickets and contacts. Tickets can be created with flexible requester identification (email, phone, Facebook ID, Twitter ID, requester ID, or external ID), configurable status, priority, and source. Contacts support custom fields and filtering. Freshdesk API uses Basic auth with the API key as username.

**Category:** Communication  
**Tool Name:** `freshdesk`  
**Version:** 1

**Appearance:** Icon: `lucide-Headphones` | Color: `#25c16f`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Freshdesk API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/freshdesk-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Contact | `contact` |
| Ticket | `ticket` |

### Operations

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new ticket (Ticket resource) |
| Delete | `delete` | Delete a ticket (Ticket resource) |
| Get | `get` | Get a ticket (Ticket resource) |
| Get Many | `getAll` | Get many tickets (Ticket resource) |
| Update | `update` | Update a ticket (Ticket resource) |
| Create | `create` | Create a new contact (Contact resource) |
| Delete | `delete` | Delete a contact (Contact resource) |
| Get | `get` | Get a contact (Contact resource) |
| Get Many | `getAll` | Get many contacts (Contact resource) |
| Update | `update` | Update a contact (Contact resource) |

### Parameters

#### Ticket: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Requester Identification | `options` | Yes | `requesterId` | How to identify the requester for the ticket. |
| | | | | Options: `email`, `facebookId`, `phone`, `requesterId` (the Freshdesk user ID), `twitterId`, `uniqueExternalId` |
| Requester Value | `string` | Yes | — | Value of the requester identification selected above. Supports expressions like {{ $json.email }}. |
| Status | `options` | Yes | `pending` | Status of the ticket. |
| | | | | Options: `closed`, `open`, `pending`, `resolved` |
| Priority | `options` | Yes | `low` | Priority of the ticket. |
| | | | | Options: `low`, `medium`, `high`, `urgent` |
| Source | `options` | Yes | `portal` | The channel through which the ticket was created. |
| | | | | Options: `chat`, `email`, `feedbackWidget`, `mobileHelp` (Mobihelp), `OutboundEmail`, `phone`, `portal` |
| Options | `collection` | No | `{}` | Optional ticket fields. Add only the ones you need. |
| — Agent ID (`agent`) | `string` | No | — | ID of the agent to whom the ticket has been assigned. Find agent IDs via Freshdesk Admin > Agents. |
| — CC Emails (`ccEmails`) | `string` | No | — | Comma-separated email addresses to CC on the ticket. |
| — Company ID (`company`) | `string` | No | — | Company ID of the requester. Find company IDs via Freshdesk Admin > Companies. |
| — Description | `string` | No | — | HTML content of the ticket. |
| — Due By (`dueBy`) | `dateTime` | No | — | Timestamp that denotes when the ticket is due to be resolved. |
| — Email Config ID (`emailConfigId`) | `number` | No | — | ID of email config which is used for this ticket. |
| — FR Due By (`frDueBy`) | `dateTime` | No | — | Timestamp that denotes when the first response is due. |
| — Group ID (`group`) | `string` | No | — | ID of the group to which the ticket has been assigned. Find group IDs via Freshdesk Admin > Groups. |
| — Name | `string` | No | — | Name of the requester. |
| — Product ID (`product`) | `string` | No | — | ID of the product to which the ticket is associated. Find product IDs via Freshdesk Admin > Products. |
| — Subject | `string` | No | — | Subject of the ticket. |
| — Tags | `string` | No | — | Comma-separated tags associated with the ticket. Tags containing commas are not supported. |
| — Type | `options` | No | `Question` | Helps categorize the ticket according to different kinds of issues. |
| | | | | Options: `Feature Request`, `Incident`, `Problem`, `Question`, `Refund` |

#### Ticket: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Ticket ID | `string` | Yes | — | ID of the ticket to retrieve. Supports expressions. |

#### Ticket: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filtering, sorting and expansion settings. Add only the ones you need. |
| — Company ID (`companyId`) | `string` | No | — | Filter tickets by company ID. |
| — Include | `multiOptions` | No | `[]` | Additional data to include in the response. |
| | | | | Options: `company`, `description`, `requester`, `stats` |
| — Order | `options` | No | `desc` | Sort order ascending or descending. |
| | | | | Options: `asc`, `desc` |
| — Order By (`orderBy`) | `options` | No | — | Sort collection by object attribute. |
| | | | | Options: `createdAt`, `dueBy`, `updatedAt` |
| — Requester Email (`requesterEmail`) | `string` | No | — | Filter tickets by requester email address. |
| — Requester ID (`requesterId`) | `string` | No | — | Filter tickets by requester ID. |
| — Updated Since (`updatedSince`) | `dateTime` | No | — | Filter tickets updated since this date. |

#### Ticket: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Ticket ID | `string` | Yes | — | ID of the ticket to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Fields to change on the ticket. Add only the ones you need. |
| — Agent ID (`agent`) | `string` | No | — | ID of the agent to whom the ticket has been assigned. |
| — CC Emails (`ccEmails`) | `string` | No | — | Comma-separated email addresses to CC. |
| — Company ID (`company`) | `string` | No | — | Company ID of the requester. |
| — Due By (`dueBy`) | `dateTime` | No | — | Timestamp that denotes when the ticket is due to be resolved. |
| — Email Config ID (`emailConfigId`) | `number` | No | — | ID of email config which is used for this ticket. |
| — FR Due By (`frDueBy`) | `dateTime` | No | — | Timestamp that denotes when the first response is due. |
| — Group ID (`group`) | `string` | No | — | ID of the group to which the ticket has been assigned. |
| — Name | `string` | No | — | Name of the requester. |
| — Priority | `options` | No | `low` | Priority of the ticket. |
| | | | | Options: `low`, `medium`, `high`, `urgent` |
| — Product ID (`product`) | `string` | No | — | ID of the product to which the ticket is associated. |
| — Requester Identification (`requester`) | `options` | No | `requesterId` | How to identify the requester for the ticket. |
| | | | | Options: `email`, `facebookId`, `phone`, `requesterId`, `twitterId`, `uniqueExternalId` |
| — Requester Value (`requesterIdentificationValue`) | `string` | No | — | Value of the requester identification selected. |
| — Source | `options` | No | `portal` | The channel through which the ticket was created. |
| | | | | Options: `chat`, `email`, `feedbackWidget`, `mobileHelp` (Mobihelp), `OutboundEmail`, `phone`, `portal` |
| — Status | `options` | No | `pending` | Status of the ticket. |
| | | | | Options: `open`, `pending`, `resolved`, `closed` |
| — Tags | `string` | No | — | Comma-separated tags associated with the ticket. Tags containing commas are not supported. |
| — Type | `options` | No | `Question` | Helps categorize the ticket. |
| | | | | Options: `Feature Request`, `Incident`, `Problem`, `Question`, `Refund` |

#### Ticket: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Ticket ID | `string` | Yes | — | ID of the ticket to delete. Supports expressions. |

#### Contact: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the contact. Supports expressions. |
| Email | `string` | No | — | Primary email address of the contact. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional contact attributes. Add only the ones you need. |
| — Address | `string` | No | — | Address of the contact. |
| — Company ID (`company_id`) | `number` | No | — | ID of the primary company to which this contact belongs. |
| — Custom Fields (`customFields`) | `fixedCollection` | No | `[]` | Key value pairs containing custom field names and values. Dates must be in YYYY-MM-DD format. |
| — — Name | `string` | No | — | Custom field name. |
| — — Value | `string` | No | — | Custom field value. |
| — Description | `string` | No | — | A short description of the contact. |
| — Job Title (`job_title`) | `string` | No | — | Job title of the contact. |
| — Language | `string` | No | — | Language of the contact (default "en"). Requires Multiple Language feature. |
| — Mobile | `string` | No | — | Mobile number of the contact. |
| — Other Companies (`other_companies`) | `string` | No | — | Comma-separated additional company IDs. Requires Multiple Companies feature (Estate plan and above). |
| — Other Emails (`other_emails`) | `string` | No | — | Comma-separated additional email addresses. |
| — Phone | `string` | No | — | Telephone number of the contact. |
| — Tags | `string` | No | — | Comma-separated tags associated with the contact. Tags containing commas are not supported. |
| — Time Zone (`time_zone`) | `string` | No | — | Time zone of the contact. Requires Multiple Time Zone feature. |
| — Twitter ID (`twitter_id`) | `string` | No | — | Twitter handle of the contact. |
| — Unique External ID (`unique_external_id`) | `string` | No | — | External ID of the contact. |
| — View All Tickets (`view_all_tickets`) | `boolean` | No | `false` | Whether the contact can see all tickets of their company. |

#### Contact: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to retrieve. Supports expressions. |

#### Contact: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the contact list. Add only the filters you need. |
| — Company ID (`company_id`) | `number` | No | — | Filter by company ID. |
| — Email | `string` | No | — | Filter by email address. |
| — Mobile | `string` | No | — | Filter by mobile number. |
| — Phone | `string` | No | — | Filter by phone number. |
| — State | `options` | No | — | Filter by contact state. |
| | | | | Options: `blocked`, `deleted`, `unverified`, `verified` |
| — Updated Since (`updated_since`) | `dateTime` | No | — | Filter contacts updated since this date. |

#### Contact: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to update. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Fields to change on the contact. Add only the ones you need. |
| — Address | `string` | No | — | Address of the contact. |
| — Company ID (`company_id`) | `number` | No | — | ID of the primary company to which this contact belongs. |
| — Custom Fields (`customFields`) | `fixedCollection` | No | `[]` | Key value pairs containing custom field names and values. |
| — — Name | `string` | No | — | Custom field name. |
| — — Value | `string` | No | — | Custom field value. |
| — Description | `string` | No | — | A short description of the contact. |
| — Email | `string` | No | — | Primary email address of the contact. |
| — Job Title (`job_title`) | `string` | No | — | Job title of the contact. |
| — Language | `string` | No | — | Language of the contact. |
| — Mobile | `string` | No | — | Mobile number of the contact. |
| — Name | `string` | No | — | Name of the contact. |
| — Other Companies (`other_companies`) | `string` | No | — | Comma-separated additional company IDs. |
| — Other Emails (`other_emails`) | `string` | No | — | Comma-separated additional email addresses. |
| — Phone | `string` | No | — | Telephone number of the contact. |
| — Tags | `string` | No | — | Comma-separated tags associated with the contact. Tags containing commas are not supported. |
| — Time Zone (`time_zone`) | `string` | No | — | Time zone of the contact. |
| — Twitter ID (`twitter_id`) | `string` | No | — | Twitter handle of the contact. |
| — Unique External ID (`unique_external_id`) | `string` | No | — | External ID of the contact. |
| — View All Tickets (`view_all_tickets`) | `boolean` | No | `false` | Whether the contact can see all tickets of their company. |

#### Contact: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to delete. Supports expressions. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The Freshdesk record is merged into the incoming item JSON at the top level, so the fields you sent in pass through and binary data is forwarded.

| Operation | Output items |
|-----------|--------------|
| `ticket` / `create`, `get`, `update` | One item — the ticket record, including the ID Freshdesk assigned. |
| `ticket` / `getAll` | **Fans out** — one output item per ticket. Return All pages through the whole result set; otherwise up to Limit tickets. |
| `ticket` / `delete` | One item carrying `success: true` — Freshdesk returns no body for a delete. |
| `contact` / `create`, `get`, `update` | One item — the contact record. |
| `contact` / `getAll` | **Fans out** — one output item per contact, with the same Return All / Limit behavior. |
| `contact` / `delete` | One item carrying `success: true`. |

Because list operations fan out, downstream nodes see one item per ticket or contact and need no Split Out node.

## Usage Examples

- Create a support ticket in Freshdesk
- List all open tickets from Freshdesk
- Update ticket priority to urgent
- Create a new contact in Freshdesk
- Get all contacts filtered by company

## Example Configuration

Create a ticket for a requester identified by email:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "ticket",
    "operation": "create",
    "requester": "email",
    "requesterIdentificationValue": "{{ $json.email }}",
    "status": "open",
    "priority": "high",
    "source": "email",
    "options": {
      "subject": "Login Issues",
      "description": "User cannot log into the system",
      "tags": "login,urgent",
      "type": "Incident"
    }
  }
}
```

Resolve a ticket and reassign it:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "ticket",
    "operation": "update",
    "ticketId": "12345",
    "updateFields": {
      "status": "resolved",
      "priority": "medium",
      "agent": "80012345678",
      "tags": "resolved,tested"
    }
  }
}
```

List tickets for one requester, newest first:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "ticket",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "requesterEmail": "customer@example.com",
      "order": "desc",
      "orderBy": "createdAt",
      "updatedSince": "2024-01-01T00:00:00Z"
    }
  }
}
```

Create a contact with custom fields:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "name": "Jane Doe",
    "email": "jane.doe@example.com",
    "additionalFields": {
      "job_title": "Software Engineer",
      "mobile": "+1-555-0123",
      "customFields": {
        "customField": [
          { "name": "Department", "value": "Engineering" }
        ]
      }
    }
  }
}
```

Update a contact:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "contactId": "67890",
    "additionalFields": {
      "job_title": "Senior Software Engineer",
      "mobile": "+1-555-0124",
      "description": "Lead developer for mobile applications"
    }
  }
}
```

List verified contacts for one company:

```json
{
  "type": "freshdesk",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "filters": {
      "company_id": 456,
      "state": "verified",
      "updated_since": "2024-01-01T00:00:00Z"
    }
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage Freshdesk helpdesk tickets and contacts with full CRUD operations, flexible requester identification, and configurable status/priority/source.

### Common Patterns

**Customer support workflow**

1. **Create ticket from email:** use `requester: "email"` with the customer's email
2. **Assign to agent:** use the `options.agent` field
3. **Set priority and status:** based on issue severity
4. **Update with resolution:** change `status` to `resolved` when fixed

**Contact management**

1. **Import contacts:** use the `create` operation with `additionalFields` for bulk data
2. **Update customer info:** use the `update` operation with the relevant fields
3. **Filter by company:** use `filters.company_id` to get a company's contacts
4. **Custom field tracking:** use `customFields` for organization-specific data

**Data retrieval**

1. **Use pagination:** set `returnAll: false` and an appropriate `limit`
2. **Filter results:** use date ranges and specific criteria to reduce load
3. **Include related data:** use `options.include` for comprehensive ticket data
4. **Sort appropriately:** use `order` and `orderBy` for consistent results

### Notes

- **Agent, group, product and company are IDs, not names or emails.** Look them up under Freshdesk Admin and pass the numeric ID.
- **The comma-separated fields do not accept commas inside a value.** Tags, Other Emails and Other Companies are split on commas before being sent as lists.
- **Custom Fields become a name-keyed object.** Each Name/Value row you add is sent as one entry of the contact's custom fields, so the Name must match the field's key in Freshdesk exactly.