Authenticate using HTTP Basic auth with your Freshdesk API key as the username and any string as the password, against your subdomain base URL (https://{your-domain}.freshdesk.com).
Create a ticket by POSTing to https://{your-domain}.freshdesk.com/api/v2/tickets with Content-Type: application/json and a body containing at minimum email (or requester_id), subject, description, and status (integer: 2=Open, 3=Pending, 4=Resolved, 5=Closed).
Retrieve tickets by GETting /api/v2/tickets with optional filter parameters; use the include query parameter to embed associations like requester or stats in a single call.
Update a ticket by PUTting to /api/v2/tickets/{ticket_id} with the fields to change.
Add a reply or note by POSTing to /api/v2/tickets/{ticket_id}/reply (sends email to requester) or /api/v2/tickets/{ticket_id}/notes (internal or public note without email).
Known gotchas
Freshdesk enforces API rate limits based on your plan tier (typically expressed as requests per minute); when exceeded, the API returns 429 and includes a Retry-After header — not all HTTP clients handle this automatically.
The status and priority fields use integer codes, not strings; sending status: 'open' instead of status: 2 will cause a validation error, and the mapping is not always obvious from error messages alone.
Attachments cannot be sent via the standard JSON body; tickets or replies with attachments must be sent as multipart/form-data, which requires a different serialization approach than the typical JSON API pattern.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp