Who am I (yekar.freshdesk.me) | Read | The 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) | Read | A 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) | Read | One 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) | Read | Find 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) | Read | The 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) | Write | Open 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) | Write | Change 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) | Write | Send 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) | Write | Add 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) | Read | A 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) | Read | One 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) | Write | Create 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) | Write | Update 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) | Read | A 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) | Read | A 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) | Read | A 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) | Read | One 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) | Read | Search 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) | Read | One 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. |