@todoforai/freshdesk-api
v1.0.0
Published
JSON-first CLI for the Freshdesk REST API v2 (tickets, contacts, companies, agents, search)
Readme
Freshdesk CLI
Independent CLI over the official Freshdesk REST API v2. It is not an official Freshworks product. Built for scripts and agents: JSON output, API field names unchanged, explicit write confirmation.
Run locally
cd api-apps/freshdesk-api
npm install --workspaces=false
bun run build
node dist/index.js --helpAuthentication
Each agent has an API key: profile picture → Profile settings → View API Key. If the button is missing, an admin must turn on API Key access for that agent (Admin → Agents → edit agent).
<secret-manager-command> | freshdesk-api auth --domain acme --key-stdin
freshdesk-api whoamiOr set FRESHDESK_API_KEY and FRESHDESK_DOMAIN (acme or acme.freshdesk.com). Credentials are saved to ~/.config/freshdesk-api/credentials.json (mode 0600). Environment variables override the saved file.
Plans: Freshdesk discontinued its free plan. The API works on trials and paid plans, and rate limits depend on the plan.
Official MCP: Freshdesk runs a remote MCP server at https://<domain>/mcp, authenticated with the header Authorization: <api key>. It is available on Growth and higher plans (early access). This CLI uses plain REST, so it works on every plan.
Coverage
| Group | Commands |
|---|---|
| tickets | list, get, create, update, delete, restore, reply, note, conversations, forward, bulk-update, fields |
| conversations | update, delete |
| contacts | list, get, create, update, delete, restore, hard-delete, autocomplete, fields |
| companies | list, get, create, update, delete |
| agents / groups | list, get, me |
| search | tickets, contacts, companies (query language, max 300 results) |
| canned-responses, solutions | folders, responses, categories, articles, search |
| api | raw request to any /api/v2 path |
Writes need --yes. Use --dry-run to preview a write and --all to paginate a list.
Examples
freshdesk-api tickets create --data '{"email":"[email protected]","subject":"Login issue","description":"…","status":2,"priority":2}' --yes
freshdesk-api tickets reply 42 --data '{"body":"Fixed, please retry."}' --yes
freshdesk-api tickets update 42 --data '{"status":4}' --yes
freshdesk-api search tickets --query '"status:2 AND priority:4"' --all
freshdesk-api contacts list --email [email protected]
freshdesk-api api GET /tickets/42/time_entriesDevelopment
bun test
bun run test:node