Reference · Tools
Freshdesk
Manage support tickets and contacts in the Freshdesk helpdesk platform
The Freshdesk node lets you create, retrieve, update, and delete both support tickets and contacts directly from a workflow. You can build things like an automated intake pipeline that converts form submissions into tickets with the right priority and agent assignment. Contacts support custom fields and company filtering for CRM-style operations alongside your helpdesk.
- Node type
- Action
- Parameters
- 27
- Outputs
- Output, Error
- Credentials
- Freshdesk API
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 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. |
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. |
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. |
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:
{
"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:
{
"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:
{
"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:
{
"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:
{
"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:
{
"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
- Create ticket from email: use
requester: "email"with the customer’s email - Assign to agent: use the
options.agentfield - Set priority and status: based on issue severity
- Update with resolution: change
statustoresolvedwhen fixed
Contact management
- Import contacts: use the
createoperation withadditionalFieldsfor bulk data - Update customer info: use the
updateoperation with the relevant fields - Filter by company: use
filters.company_idto get a company’s contacts - Custom field tracking: use
customFieldsfor organization-specific data
Data retrieval
- Use pagination: set
returnAll: falseand an appropriatelimit - Filter results: use date ranges and specific criteria to reduce load
- Include related data: use
options.includefor comprehensive ticket data - Sort appropriately: use
orderandorderByfor 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.
Frequently asked questions
How do I authenticate with Freshdesk?
Freshdesk uses HTTP Basic Auth with your API key as the username and any string as the password. In BusyBot, select or create a Freshdesk API credential and paste your API key — the node handles the rest. You can find your API key in Freshdesk under your profile settings.
When creating a ticket, which requester field should I use?
You have six options: email, phone, Facebook ID, Twitter ID, requester ID, or external ID. If you are building a workflow triggered by an inbound email or web form, 'email' is the most straightforward. If you're syncing from an external system that has its own user IDs, use 'external ID' so you can correlate records later without a lookup.
I want to assign a ticket to a specific agent or group — what value do I pass?
Agent, group, product, and company fields all expect numeric IDs, not names or email addresses. You need to look these up in Freshdesk under Admin before building the workflow. Passing a name string will not work and will likely cause a silent failure or API error.
What happens when I use tags, Other Emails, or Other Companies fields?
These fields are comma-separated strings that the node splits into lists before sending to the Freshdesk API. That means a comma inside a single value — for example, a company name like 'Smith, Jones & Co' — will be treated as two separate items. Keep individual values free of commas or the data will be split incorrectly.
How do custom fields work for contacts?
When you add custom field rows, each row becomes a key-value entry in the contact's custom fields object sent to Freshdesk. The Name you provide must exactly match the field's API key as configured in your Freshdesk account — capitalisation and underscores matter. If the key doesn't match, Freshdesk will ignore or reject that field silently.
Build with the Freshdesk node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Freshdesk API credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.