Skip to main content

Freshdesk

Search, read, create, update, reply to and annotate Freshdesk tickets; read contacts, agents, groups, companies and knowledge-base articles.

Connect a Freshdesk helpdesk with an agent API key to work its tickets end to end: search with Freshdesk's filter syntax, read tickets and their full conversation, open new tickets, reassign, reprioritise and retag them, send a public reply the requester receives by email, or leave an internal note only agents can see. Also reads contacts, agents, groups, companies and the knowledge base, and creates or updates contacts. Statuses and priorities are given as NAMES and converted to Freshdesk's integers for you, because Freshdesk stores them as numbers on two different scales - status 4 means resolved while priority 4 means urgent, and transposing them resolves a live ticket.

Connect

Credential fieldRequiredWhere it comes from
API key (API_KEY)YesFrom the agent's Profile settings page in Freshdesk ('Your API Key'). It carries the full permissions of that agent, so pick whose key to use deliberately.
SettingRequiredWhat it is
Helpdesk URL (HELPDESK_URL)YesThe helpdesk's full base address, e.g. https://acme.freshdesk.com or a vanity https://support.acme.com - every request stays on this host. Not a bare subdomain.

Tools

ToolAccessWhat it does
Who am I (yekar.freshdesk.me)ReadThe Freshdesk agent this API key belongs to, and the helpdesk it points at. Because an API key carries exactly that agent's role, EVERY action is taken as this person - tickets are created and replies authored under their name, and their role is the permission ceiling. Call this first to verify a connection: a 403 later is about this agent's role or the account's plan, not about the key.
List tickets (yekar.freshdesk.list-tickets)ReadA page of the helpdesk's tickets - subject, status, priority, requester, assignee, tags and dates (no description; use Get ticket for that). TWO limits that are easy to mistake for "there is nothing there": without updatedSince Freshdesk returns only tickets updated in the LAST 30 DAYS, and paging stops at page 300. Freshdesk reports no match count here, so this returns whether more pages exist rather than a total - use Search tickets when you need a real count. Status and priority come back as both the stored number and its label, because Freshdesk's numbers are not guessable (status 4 is "resolved", priority 4 is "urgent").
Get ticket (yekar.freshdesk.get-ticket)ReadOne ticket in full - subject, status, priority, source, requester, assignee, company, tags, SLA due dates, custom fields, and its opening description as plain text (capped, with a truncated flag). Status, priority and source come back as both the stored number and its label: Freshdesk stores them as integers on two different scales, so status 4 means "resolved" while priority 4 means "urgent". Use List ticket conversations for the replies and notes that followed.
Search tickets (yekar.freshdesk.search-tickets)ReadFind tickets with Freshdesk's filter syntax - status, priority, group, agent, tags, company, dates and custom fields. Unlike List tickets this searches ALL tickets, not just the last 30 days, and total is Freshdesk's own count of every match rather than this page's length. Two things to state plainly: status and priority are NUMBERS in the query language (status 4 is "resolved", priority 4 is "urgent" - different scales), and the API returns at most 300 results however you paginate (30 per page, 10 pages), so when ceilingReached is true the real number of matches is unknown and larger - narrow the query rather than believing you have seen everything.
List ticket conversations (yekar.freshdesk.list-ticket-conversations)ReadThe replies and notes on a ticket, oldest first. EVERY entry carries an explicit private flag: false means the requester received those words by email, TRUE means it is an agent-only internal note that must never be repeated back to them. incoming says which direction it travelled - true is the customer writing in, false is the helpdesk writing out. Freshdesk reports no total here, so this returns whether more pages exist rather than a count.
Create ticket (yekar.freshdesk.create-ticket)WriteOpen a new ticket. The description is the opening message the requester sees. Identify them with requesterId when they already exist: passing an email Freshdesk does not recognise CREATES a new contact, which is how duplicate people accumulate. Status, priority and source are given as NAMES here and converted to Freshdesk's integers, so there is no way to write "4" meaning urgent and silently resolve the ticket instead.
Update ticket (yekar.freshdesk.update-ticket)WriteChange a ticket's status, priority, assignee, group, type, subject, tags or custom fields. Only the fields you set are sent, so an untouched field is never blanked - with one exception that is Freshdesk's own behaviour: tags REPLACES the entire tag list, so send the complete set you want. Status and priority are given as NAMES and converted to Freshdesk's integers here, which is what stops a 4 meant as "urgent" from resolving the ticket instead. This does not notify the requester; use Reply to ticket for that.
Reply to ticket (yekar.freshdesk.reply-to-ticket)WriteSend a PUBLIC reply on a ticket - the requester receives it by email. This tool is customer-facing by construction: Freshdesk's reply endpoint has no private mode, so there is no flag here that could be set wrong. For an agent-only comment use Add ticket note instead. A sent reply cannot be recalled, and re-running this sends a second one, so do not retry it blindly. It is authored by the agent whose API key this connection holds.
Add ticket note (yekar.freshdesk.add-ticket-note)WriteAdd a note to a ticket. private is a REQUIRED argument with no default, because it decides whether the requester can read these words: true is an agent-only internal note, false is a public note visible to them in the support portal. Freshdesk's own default is private, but defaulting it here would be a decision about customer visibility that is not ours to guess. Use Reply to ticket when you want to actually email the requester.
List contacts (yekar.freshdesk.list-contacts)ReadA page of the helpdesk's contacts (the customers), filterable by email, phone, company, state or last change. Freshdesk reports no match count here, so this returns whether more pages exist rather than a total. Note the default state filter excludes deleted contacts - pass state explicitly to see them.
Get contact (yekar.freshdesk.get-contact)ReadOne contact in full - name, email and other emails, phone, job title, company, timezone, tags and custom fields. To find someone by email instead of id, use List contacts with the email filter.
Create contact (yekar.freshdesk.create-contact)WriteCreate a customer contact. Freshdesk needs at least one of email, phone, mobile or uniqueExternalId to identify them. This does NOT deduplicate: an email that already exists is a 409 conflict, and a slightly different one produces a second person for the same human - search with List contacts first.
Update contact (yekar.freshdesk.update-contact)WriteUpdate a contact's details. Only the fields you set are sent, so an untouched field is never blanked - except the two list fields, tags and otherEmails, which Freshdesk REPLACES wholesale, so send the complete set you want for those.
List agents (yekar.freshdesk.list-agents)ReadA page of the helpdesk's agents, with the ids that Create ticket and Update ticket take as responderId. Note Freshdesk's naming: the person assigned to a ticket is its RESPONDER, and an agent's name and email live on their nested contact record rather than on the agent itself.
List groups (yekar.freshdesk.list-groups)ReadA page of the helpdesk's agent groups, with the ids that Create ticket and Update ticket take as groupId. Assigning a ticket to a group routes it to a queue rather than to one person, which is usually the right move when no specific agent owns the issue.
List companies (yekar.freshdesk.list-companies)ReadA page of the helpdesk's companies - name, email domains, account tier, health score, renewal date and custom fields. Freshdesk reports no total here, so this returns whether more pages exist rather than a count. Use the company id to filter tickets and contacts.
Get company (yekar.freshdesk.get-company)ReadOne company in full - name, description, email domains, note, health score, account tier, renewal date, industry and custom fields. Useful context before answering a ticket: the account tier and renewal date are often what decides how an issue should be handled.
Search solution articles (yekar.freshdesk.search-solution-articles)ReadSearch the knowledge base by keyword and get back matching articles - titles, status and ids (no body; use Get solution article for that). Freshdesk returns a capped, unpaginated list here and reports no match count, so this deliberately does not claim a total: a full-looking result set may be a trimmed one, and capped says when that is likely. Always check an article's status before pointing a customer at it - a draft is not published and its link will not work for them.
Get solution article (yekar.freshdesk.get-solution-article)ReadOne knowledge-base article with its body as plain text (capped, with a truncated flag), plus its hit count and thumbs up/down. Check status before quoting or linking it to a customer: Freshdesk stores it as a number where 1 is "draft" and 2 is "published", and a draft is invisible to them.

Notes

  • In Freshdesk, sign in as the agent whose permissions Yekar.AI should have - an API key inherits that agent's role exactly, and there are no per-key scopes to narrow later.
  • Open the avatar menu (top right) → Profile settings, and copy the value under 'Your API Key'. Paste it here; the password field is handled for you.
  • Set the Helpdesk URL to the full base address - https://acme.freshdesk.com, or your vanity https://support.acme.com. A bare subdomain will not work.
  • Call Who am I to confirm which agent the key resolves to. A later 403 is about that agent's role or about the account's plan, not about the key.
  • Replying and noting are separate actions with different audiences: Reply to ticket EMAILS the requester and cannot be recalled, while Add ticket note takes an explicit private flag - true is agent-only, false is readable by the requester in the portal.
  • Beware two silent windows on List tickets: without updatedSince it returns only the last 30 days, and paging stops at page 300. Search tickets covers all tickets and reports a real match count, but caps at 300 reachable results.