Freshdesk
Customer support desk. Create and work tickets, reply and add private notes, and manage contacts, companies, and agents.
| Property | Value |
|---|---|
| Slug | freshdesk |
| Definition version | 0.2.0 |
| Base URL | https://{{account.domain}}.freshdesk.com/api/v2 |
| Auth schemes | api_key |
| Action tools | 39 |
| By class | 18 read, 13 write, 8 destructive |
| Triggers | 0 |
| Provider rate limit | not declared, so outbound calls are unpaced |
Measured routing accuracy
79 golden cases replayed through the router over the whole index: measured over corpus ea4f12ad2948 (65 toolkits, 2283 tools indexed and 13 declared uncallable), 39 cases written by hand and 37 cases from the paraphrase pass, plus 3 context cases whose intent names no app and is decided by the session. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.
| Measure | Cases | Share |
|---|---|---|
| top-1 | 29/79 | 36.7% |
| top-8 | 65/79 | 82.3% |
The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. just eval-live measures the same cases through the live reranker.
Authentication
Connect an entity with ConnectionsService.InitiateConnection, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.
api_key
| Property | Value |
|---|---|
| Placement | header |
| Name | Authorization |
| Rendered as | Basic {key} |
Submit the key with ConnectionsService rather than putting it in a request; it is sealed at rest and never returned.
Tools
39 action tools. The catalog-wide slug is freshdesk.<tool>, which is what search_tools returns and call_tool takes.
freshdesk.create_ticket
Open a new support ticket in Freshdesk. Use when the user wants to file, log, or create a ticket, case, or support request. Requires a subject, description, and requester email, plus a priority and status; assign a group or agent, or attach tags, optionally.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tickets.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
cc_emails | array of string | no | Emails to CC on the ticket. |
description | string | yes | Ticket body, HTML allowed. |
email | string | yes | Requester's email. Freshdesk creates the contact if none exists. |
group_id | integer | no | Group id to assign the ticket to, from list_groups. |
priority | integer, one of 1, 2, 3, 4 | yes | 1 Low, 2 Medium, 3 High, 4 Urgent. |
requester_id | integer | no | Requester's contact id, from search_contacts, instead of email. |
responder_id | integer | no | Agent id to assign the ticket to, from list_agents. |
source | integer, one of 1, 2, 3, 7, 9, 10 | no | 1 Email, 2 Portal, 3 Phone, 7 Chat, 9 Feedback Widget, 10 Outbound Email. |
status | integer, one of 2, 3, 4, 5 | yes | 2 Open, 3 Pending, 4 Resolved, 5 Closed. |
subject | string | yes | Ticket subject line. |
tags | array of string | no | Tags to apply. |
type | string | no | Ticket type, e.g. "Question", "Incident", "Problem", "Feature Request". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
id | integer | |
priority | integer | |
requester_id | integer | |
status | integer | |
subject | string |
Also retrieved by: "open a support case for this customer", "log a new helpdesk request", "file a ticket for this problem", "a customer needs help, start a case", "raise a case in the helpdesk".
freshdesk.get_ticket
Get one Freshdesk ticket's full detail by id: subject, description, status, priority, requester, and dates. Use when the user names a specific ticket number. For many tickets at once use list_tickets or search_tickets.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /tickets/{{params.ticket_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
include | string | no | Comma-separated extra data to embed, e.g. "conversations,requester,company,stats". Omit for the base fields. |
ticket_id | integer | yes | Ticket id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
company_id | integer | |
created_at | string | |
description_text | string | |
due_by | string | |
group_id | integer | |
id | integer | |
priority | integer | |
requester_id | integer | |
responder_id | integer | |
source | integer | |
status | integer | |
subject | string | |
tags | array of string | |
type | string | |
updated_at | string |
Also retrieved by: "pull up case number 4021", "what does this support case say", "show me the details on this case", "look up a specific helpdesk ticket".
freshdesk.update_ticket
Edit an existing Freshdesk ticket's subject, description, priority, status, assignee, group, or tags. Use when the user wants to change, update, reassign, or reprioritize a ticket. For adding a reply or a note instead, use create_reply or create_note.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /tickets/{{params.ticket_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
description | string | no | New ticket body, HTML allowed. |
group_id | integer | no | Group id to reassign the ticket to. |
priority | integer, one of 1, 2, 3, 4 | no | 1 Low, 2 Medium, 3 High, 4 Urgent. |
responder_id | integer | no | Agent id to reassign the ticket to. |
status | integer, one of 2, 3, 4, 5 | no | 2 Open, 3 Pending, 4 Resolved, 5 Closed. |
subject | string | no | New subject line. |
tags | array of string | no | Replaces the ticket's full tag set. |
ticket_id | integer | yes | Ticket id to edit. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | integer | |
priority | integer | |
status | integer | |
updated_at | string |
Also retrieved by: "change the priority on this case", "reassign this support case to someone else", "bump this to urgent", "move this case to a different queue", "edit the subject of this case".
freshdesk.delete_ticket
Permanently delete a Freshdesk ticket. Use when the user wants to delete, remove, or trash a ticket or support request. Moves the ticket to the trash, purged automatically after 30 days.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /tickets/{{params.ticket_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
ticket_id | integer | yes | Ticket id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "trash this support case", "remove this helpdesk request for good", "get rid of this case entirely", "wipe this ticket from the helpdesk".
freshdesk.list_tickets
List Freshdesk tickets, optionally filtered by requester, company, or a preset like new-and-my-open or spam. Use for a broad view across tickets rather than one ticket. For a text or field query use search_tickets instead.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /tickets.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | no | Restrict to one company's tickets. |
email | string | no | Restrict to tickets from this requester email. |
filter | string, one of new_and_my_open, watching, spam, deleted | no | Preset ticket view. Omit for all tickets. |
page | integer | no | Page number, default 1. |
per_page | integer | no | Page size, default 30, max 100. |
requester_id | integer | no | Restrict to one requester's tickets. |
updated_since | string (date-time) | no | Only tickets updated at or after this ISO 8601 time. |
Also retrieved by: "show me every open case for this customer", "what's sitting in the spam view", "find all cases from this requester", "what's still outstanding for this account".
freshdesk.search_tickets
Search Freshdesk tickets with a field query, e.g. '"priority:3 AND status:2"' for high-priority open tickets. Use for any ticket lookup by field value rather than free text across subjects. For a known ticket number use get_ticket instead.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /search/tickets.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
page | integer | no | Page number, default 1. |
query | string | yes | Quoted Freshdesk query string, e.g. '"priority:4 AND status:2"' or '"requester_id:23"'. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
results | array of object | |
results[].id | integer | |
results[].priority | integer | |
results[].status | integer | |
results[].subject | string | |
total | integer |
Also retrieved by: "find every urgent case that's still open", "look up cases by priority and status", "run a query across the helpdesk", "filter support cases by field".
freshdesk.merge_tickets
Merge one or more secondary Freshdesk tickets into a primary ticket. Use when the user wants to merge, combine, or consolidate duplicate tickets. Secondary tickets are closed and their content rolled into the primary. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls PUT /tickets/merge.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
convert_recipients_to_cc | boolean | no | Add the secondary tickets' requesters as CC on the primary. Default false. |
primary_id | integer | yes | Ticket id to keep as the primary. |
ticket_ids | array of integer | yes | Secondary ticket ids to merge into the primary. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
merged | boolean |
Also retrieved by: "combine these duplicate cases into one", "fold this case into the other one", "consolidate these two support requests".
freshdesk.list_ticket_fields
List the ticket fields configured on this Freshdesk account, standard and custom, with their valid choices. Use before create_ticket or update_ticket to find the exact status, priority, type, or custom field values the account allows.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /ticket_fields.
Takes no arguments.
Also retrieved by: "what statuses can a case have", "show me the priority options for a case", "what custom fields does this helpdesk use", "list the valid values for ticket type".
freshdesk.list_conversations
List the replies and notes on a Freshdesk ticket, oldest first. Use when the user wants to read the conversation, discussion, or history on a ticket. For posting a new reply or note use create_reply or create_note.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /tickets/{{params.ticket_id}}/conversations.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
page | integer | no | Page number, default 1. |
ticket_id | integer | yes | Ticket id. |
Also retrieved by: "what's the back and forth on this case", "read the thread on this support ticket", "show the history of replies on this case".
freshdesk.create_reply
Send a customer-facing reply on a Freshdesk ticket. Use when the user wants to reply, respond, or answer the requester on a ticket. For an internal note the requester never sees, use create_note instead.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tickets/{{params.ticket_id}}/reply.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
bcc_emails | array of string | no | Emails to BCC on the reply. |
body | string | yes | Reply body, HTML allowed. |
cc_emails | array of string | no | Emails to CC on the reply. |
from_email | string | no | Send-as email, if the ticket's group has more than one. |
ticket_id | integer | yes | Ticket id to reply on. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
body_text | string | |
created_at | string | |
id | integer |
Also retrieved by: "answer the customer on this case", "respond to the requester", "send a message back on this ticket", "write the customer an update".
freshdesk.create_note
Add an internal note to a Freshdesk ticket, visible to agents only by default. Use when the user wants to note, comment, or leave an internal update on a ticket for the team. Set private false to make it visible to the requester too.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /tickets/{{params.ticket_id}}/notes.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
body | string | yes | Note body, HTML allowed. |
notify_emails | array of string | no | Agent emails to notify about this note. |
private | boolean | no | Visible to agents only. Default true. |
ticket_id | integer | yes | Ticket id to note on. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
body_text | string | |
created_at | string | |
id | integer | |
private | boolean |
Also retrieved by: "leave an internal note for the team", "flag this for another agent privately", "jot down a note only agents can see", "tell the team what's going on here".
freshdesk.update_conversation
Edit the body text of a reply or note already posted on a Freshdesk ticket. Use when the user wants to fix, correct, or update something already posted in the conversation.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /conversations/{{params.conversation_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
body | string | yes | Replacement body text, HTML allowed. |
conversation_id | integer | yes | Conversation (reply or note) id, from list_conversations. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
body_text | string | |
id | integer | |
updated_at | string |
Also retrieved by: "fix a typo in my last reply", "correct what I wrote on that case", "edit my earlier note on this ticket".
freshdesk.delete_conversation
Permanently delete one reply or note from a Freshdesk ticket. Use when the user wants to delete or remove a single conversation entry, not the whole ticket. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /conversations/{{params.conversation_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
conversation_id | integer | yes | Conversation (reply or note) id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "remove that reply I posted by mistake", "delete a note on this case", "take down something I sent by accident".
freshdesk.create_contact
Create a new Freshdesk contact (customer). Use when the user wants to add, register, or create a customer or requester. Requires a name plus at least one of email, phone, or twitter_id.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /contacts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | no | Company id to associate, from search_companies. |
email | string | no | Contact's primary email. |
job_title | string | no | Contact's job title. |
mobile | string | no | Contact's mobile number. |
name | string | yes | Contact's full name. |
phone | string | no | Contact's work phone. |
tags | array of string | no | Tags to apply. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
company_id | integer | |
created_at | string | |
email | string | |
id | integer | |
name | string |
Also retrieved by: "add a new customer record", "register this person as a requester", "create a profile for this customer".
freshdesk.get_contact
Get one Freshdesk contact's full detail by id: name, email, phone, company, and tags. Use when the user names a specific customer. For finding a contact by name or email use search_contacts.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | integer | yes | Contact id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
active | boolean | |
company_id | integer | |
created_at | string | |
email | string | |
id | integer | |
job_title | string | |
mobile | string | |
name | string | |
phone | string | |
tags | array of string |
Also retrieved by: "pull up this customer's profile", "what do we have on file for this person", "show me this requester's details".
freshdesk.update_contact
Edit an existing Freshdesk contact's name, email, phone, company, or tags. Use when the user wants to change, update, or edit a customer's details.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | no | New company id to associate. |
contact_id | integer | yes | Contact id to edit. |
email | string | no | New primary email. |
name | string | no | New full name. |
phone | string | no | New work phone. |
tags | array of string | no | Replaces the contact's full tag set. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
email | string | |
id | integer | |
name | string | |
updated_at | string |
Also retrieved by: "change this customer's email on file", "edit this person's phone number", "update the company for this requester".
freshdesk.delete_contact
Permanently delete a Freshdesk contact. Use when the user wants to delete, remove, or trash a customer record. Soft-deletes first; calling it on an already soft-deleted contact deletes it for good.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /contacts/{{params.contact_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
contact_id | integer | yes | Contact id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "remove this customer's record", "trash this requester profile", "get rid of this person's record for good".
freshdesk.list_contacts
List Freshdesk contacts, optionally filtered by email, phone, or company. Use for a broad view across customers rather than one contact. For a name lookup use search_contacts.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | no | Restrict to one company's contacts. |
email | string | no | Restrict to this exact email. |
page | integer | no | Page number, default 1. |
per_page | integer | no | Page size, default 30, max 100. |
phone | string | no | Restrict to this exact phone number. |
Also retrieved by: "show every customer at this company", "find requesters with this phone number", "list the people tied to this account".
freshdesk.search_contacts
Look up Freshdesk contacts by partial name, email, or phone as the user types. Use before create_ticket or assigning a company when the user names a customer rather than giving a contact id directly.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /contacts/autocomplete.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
term | string | yes | Name, email, or phone substring to match. |
Also retrieved by: "find a customer named priya", "look up someone by email as I type", "who matches this name in the helpdesk".
freshdesk.create_company
Create a new Freshdesk company (account) that contacts belong to. Use when the user wants to add, register, or create a customer's company or organization.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /companies.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
description | string | no | Company description or notes. |
domains | array of string | no | Email domains associated with this company, e.g. ["acme.com"]. |
name | string | yes | Company name. |
note | string | no | Internal note about the company. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
domains | array of string | |
id | integer | |
name | string |
Also retrieved by: "add a new customer account", "register this organization", "set up a company record for this client".
freshdesk.get_company
Get one Freshdesk company's detail by id: name, domains, description, and notes. Use when the user names a specific customer's company. For finding a company by name use search_companies.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /companies/{{params.company_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | yes | Company id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
description | string | |
domains | array of string | |
id | integer | |
name | string | |
note | string | |
updated_at | string |
Also retrieved by: "tell me about this customer's organization", "what domains belong to this account", "pull up the company profile".
freshdesk.update_company
Edit an existing Freshdesk company's name, domains, description, or notes. Use when the user wants to change, update, or edit a customer's company details, not the contacts inside it.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /companies/{{params.company_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | yes | Company id to edit. |
description | string | no | New company description. |
domains | array of string | no | Replaces the company's full domain list. |
name | string | no | New company name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | integer | |
name | string | |
updated_at | string |
Also retrieved by: "rename this customer's organization", "add a new domain to this account", "edit the notes on this company".
freshdesk.delete_company
Permanently delete a Freshdesk company. Use when the user wants to delete, remove, or trash a customer's company or organization. Its contacts are not deleted; they are left with no company. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /companies/{{params.company_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
company_id | integer | yes | Company id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "remove this customer organization", "trash this account record", "get rid of this company for good".
freshdesk.list_companies
List every Freshdesk company on the account. Use when the user wants to see what companies or organizations exist. For a name lookup use search_companies.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /companies.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
page | integer | no | Page number, default 1. |
per_page | integer | no | Page size, default 30, max 100. |
Also retrieved by: "what organizations do we support", "show every customer account we have", "list the companies in the helpdesk".
freshdesk.search_companies
Look up Freshdesk companies by partial name as the user types. Use before create_contact or update_contact when the user names a customer's company rather than giving a company id directly.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /companies/autocomplete.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
name | string | yes | Company name substring to match. |
Also retrieved by: "find a customer company by name in the helpdesk", "look up a company by partial name", "which account matches this text".
freshdesk.get_agent
Get one Freshdesk agent's detail by id: name, email, role, group membership, and availability. Use when the user names a specific support agent or teammate.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /agents/{{params.agent_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agent_id | integer | yes | Agent id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
available | boolean | |
contact | object | |
contact.email | string | |
contact.job_title | string | |
contact.name | string | |
group_ids | array of integer | |
id | integer | |
role_ids | array of integer | |
ticket_scope | integer |
Also retrieved by: "tell me about this support rep", "what groups is this teammate in", "pull up this agent's profile".
freshdesk.list_agents
List the support agents on this Freshdesk account, optionally filtered by email or availability. Use when the user wants to see who is on the support team or find an agent's id.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /agents.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
email | string | no | Restrict to this exact agent email. |
page | integer | no | Page number, default 1. |
per_page | integer | no | Page size, default 30, max 100. |
state | string, one of fulltime, occasional | no | Restrict to fulltime or occasional agents. |
Also retrieved by: "show me the support team", "who's available to take tickets right now", "list every rep on the helpdesk".
freshdesk.update_agent
Edit an existing Freshdesk agent's ticket scope, group membership, role, or availability. Use when the user wants to change an agent's permissions, groups, or mark them available or unavailable.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /agents/{{params.agent_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agent_id | integer | yes | Agent id to edit. |
available | boolean | no | Whether the agent shows as available for new tickets. |
group_ids | array of integer | no | Replaces the agent's full group membership. |
occasional | boolean | no | True for an occasional (part-time seat) agent. |
role_ids | array of integer | no | Replaces the agent's full role set. |
ticket_scope | integer, one of 1, 2, 3 | no | 1 Global access, 2 Group access, 3 Restricted access. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
available | boolean | |
id | integer | |
updated_at | string |
Also retrieved by: "change this rep's permissions", "add this teammate to another group", "mark this agent as unavailable".
freshdesk.delete_agent
Permanently remove an agent from this Freshdesk account, freeing their seat. Use when the user wants to delete, remove, or offboard a support agent. The underlying contact record is not deleted. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /agents/{{params.agent_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agent_id | integer | yes | Agent id to remove. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "remove this rep from the helpdesk", "offboard this support teammate", "free up this agent's seat".
freshdesk.get_current_agent
Get the profile of the connected Freshdesk agent itself: name, email, groups, and role. Use to answer "who am I" or to get the caller's own agent id for update_ticket or create_reply.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /agents/me.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
contact | object | |
contact.email | string | |
contact.name | string | |
group_ids | array of integer | |
id | integer | |
role_ids | array of integer |
Also retrieved by: "who am I logged in as", "what's my own agent id", "show my support rep profile".
freshdesk.create_group
Create a new Freshdesk group that tickets and agents can be assigned to. Use when the user wants to set up or add a support team or queue. Assign agents to it with update_group afterward.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /groups.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agent_ids | array of integer | no | Agent ids to add to the group. |
auto_ticket_assign | boolean | no | Automatically round-robin new tickets to the group's agents. |
description | string | no | Group description. |
name | string | yes | Group name, e.g. "Billing", "Tier 2". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
id | integer | |
name | string |
Also retrieved by: "set up a new support queue", "start a billing team", "add a group for tier two support".
freshdesk.get_group
Get one Freshdesk group's detail by id: name, description, and its agents. Use when the user names a specific support team or queue. For the whole list use list_groups.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /groups/{{params.group_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
group_id | integer | yes | Group id. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
agent_ids | array of integer | |
auto_ticket_assign | boolean | |
created_at | string | |
description | string | |
id | integer | |
name | string |
Also retrieved by: "who's on this support team", "tell me about this queue", "pull up this group's details".
freshdesk.update_group
Edit an existing Freshdesk group's name, description, or agent membership. Use when the user wants to rename a team, or add or remove agents from a group or queue.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls PUT /groups/{{params.group_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agent_ids | array of integer | no | Replaces the group's full agent membership. |
description | string | no | New group description. |
group_id | integer | yes | Group id to edit. |
name | string | no | New group name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | integer | |
name | string | |
updated_at | string |
Also retrieved by: "add someone to this support team", "rename this queue", "change who's in this group".
freshdesk.delete_group
Permanently delete a Freshdesk group. Use when the user wants to delete, remove, or disband a support team or queue. Tickets assigned to it are not deleted; they are left unassigned. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /groups/{{params.group_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
group_id | integer | yes | Group id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "disband this support team", "remove this queue entirely", "get rid of this group for good".
freshdesk.list_groups
List every Freshdesk group on the account. Use when the user wants to see what support teams or queues exist, or find a group's id for assigning tickets or agents.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /groups.
Takes no arguments.
Also retrieved by: "what support teams do we have", "show every queue in the helpdesk", "find the group id for billing".
freshdesk.list_canned_response_folders
List the canned response folders on this Freshdesk account. Use to find a folder_id for list_canned_responses, or to see how saved replies are organized.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /canned_response_folders.
Takes no arguments.
Also retrieved by: "what saved reply folders exist", "show me how templates are organized", "list the canned response categories".
freshdesk.list_canned_responses
List the canned responses (saved replies, templates) in one Freshdesk folder. Use when the user asks what canned responses or saved replies exist. Requires a folder_id from list_canned_response_folders.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /canned_response_folders/{{params.folder_id}}/responses.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | integer | yes | Canned response folder id, from list_canned_response_folders. |
Also retrieved by: "show the saved replies in this folder", "what templates are in this category", "list the canned answers agents can use".
freshdesk.create_canned_response
Create a new canned response (saved reply, template) in Freshdesk. Use when the user wants to save, template, or add a reusable reply for agents to reuse on tickets.
Class write (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls POST /canned_responses.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
content_html | string | yes | Reply body, HTML allowed. |
folder_id | integer | yes | Folder id to file it under, from list_canned_response_folders. |
group_ids | array of integer | no | Group ids that may use it, when visibility is 3. |
title | string | yes | Canned response title, shown in the picker. |
visibility | integer, one of 1, 2, 3 | no | 1 All agents, 2 Personal (author only), 3 Select groups. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
id | integer | |
title | string |
Also retrieved by: "save this as a template reply", "add a reusable answer for the team", "template this response for agents".
freshdesk.delete_canned_response
Permanently delete a Freshdesk canned response. Use when the user wants to delete or remove a saved reply or template. Irreversible.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). No scopes beyond the connection's defaults. Calls DELETE /canned_responses/{{params.canned_response_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
canned_response_id | integer | yes | Canned response id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "remove this saved reply", "delete a canned answer template", "get rid of this template for good".