> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Freshdesk

**Authentication:** Basic Auth
**Categories:** Customer Support
## What you can do

Connect this agent connector to let your agent:

- **Reply tickets** — Add a public reply to a ticket conversation
- **Get ticket** — Retrieve details of a specific ticket by ID
- **Update ticket** — Update an existing ticket in Freshdesk
- **Create ticket, agent, contact** — Create a new ticket in Freshdesk
- **List tickets, roles, agents** — Retrieve a list of tickets with filtering and pagination
- **Delete agent** — Delete an agent from Freshdesk

## Authentication

This connector uses **Basic Auth** authentication.

## Code examples

Connect a user's Freshdesk account and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

**Don't worry about your Freshdesk domain in the path.** Scalekit automatically resolves `{{domain}}` from the connected account's configuration and constructs the full URL for you. For example, if your Freshdesk domain is `mycompany.freshdesk.com`, a request with `path="/v2/agents/me"` will be sent to `https://mycompany.freshdesk.com/api/v2/agents/me` automatically.

## Proxy API Calls

  ### Node.js

```typescript

const connectionName = 'freshdesk'; // get your connection name from connection configurations
const identifier = 'user_123';  // your unique user identifier

// Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
  process.env.SCALEKIT_ENV_URL,
  process.env.SCALEKIT_CLIENT_ID,
  process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;

// Authenticate the user
const { link } = await actions.getAuthorizationLink({
  connectionName,
  identifier,
});
console.log('🔗 Authorize Freshdesk:', link);
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));

// Make a request via Scalekit proxy
const result = await actions.request({
  connectionName,
  identifier,
  path: '/v2/agents/me',
  method: 'GET',
});
console.log(result);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

connection_name = "freshdesk"  # get your connection name from connection configurations
identifier = "user_123"     # your unique user identifier

# Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
scalekit_client = scalekit.client.ScalekitClient(
    client_id=os.getenv("SCALEKIT_CLIENT_ID"),
    client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
    env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions

# Authenticate the user
link_response = actions.get_authorization_link(
    connection_name=connection_name,
    identifier=identifier
)
# present this link to your user for authorization, or click it yourself for testing
print("🔗 Authorize Freshdesk:", link_response.link)
input("Press Enter after authorizing...")

# Make a request via Scalekit proxy
result = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/v2/agents/me",
    method="GET"
)
print(result)
```

Before calling this connector from your code, create the Freshdesk connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `freshdesk_agent_create`

Create a new agent in Freshdesk. Email is required and must be unique. Agent will receive invitation email to set up account. At least one role must be assigned.

Parameters:

- `email` (`string`, required): Email address of the agent (must be unique)
- `role_ids` (`array`, required): Array of role IDs to assign to the agent (at least one required)
- `ticket_scope` (`number`, required): Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access)
- `agent_type` (`number`, optional): Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator)
- `focus_mode` (`boolean`, optional): Focus mode setting for the agent
- `group_ids` (`array`, optional): Array of group IDs to assign the agent to
- `language` (`string`, optional): Language preference of the agent
- `name` (`string`, optional): Full name of the agent
- `occasional` (`boolean`, optional): Whether the agent is occasional (true) or full-time (false)
- `signature` (`string`, optional): Agent email signature in HTML format
- `skill_ids` (`array`, optional): Array of skill IDs to assign to the agent
- `time_zone` (`string`, optional): Time zone of the agent

### `freshdesk_agent_delete`

Delete an agent from Freshdesk. This action is irreversible and will remove the agent from the system. The agent will no longer have access to the helpdesk and all associated data will be permanently deleted.

Parameters:

- `agent_id` (`number`, required): ID of the agent to delete

### `freshdesk_agents_list`

Retrieve a list of agents from Freshdesk with filtering options. Returns agent details including IDs, contact information, roles, and availability status. Supports pagination with up to 100 agents per page.

Parameters:

- `email` (`string`, optional): Filter agents by email address
- `mobile` (`string`, optional): Filter agents by mobile number
- `page` (`number`, optional): Page number for pagination (starts from 1)
- `per_page` (`number`, optional): Number of agents per page (max 100)
- `phone` (`string`, optional): Filter agents by phone number
- `state` (`string`, optional): Filter agents by state (fulltime or occasional)

### `freshdesk_contact_create`

Create a new contact in Freshdesk. Email and name are required. Supports custom fields, company assignment, and contact segmentation.

Parameters:

- `email` (`string`, required): Email address of the contact
- `name` (`string`, required): Full name of the contact
- `address` (`string`, optional): Address of the contact
- `company_id` (`number`, optional): Company ID to associate with the contact
- `custom_fields` (`object`, optional): Key-value pairs for custom field values
- `description` (`string`, optional): Description about the contact
- `job_title` (`string`, optional): Job title of the contact
- `language` (`string`, optional): Language preference of the contact
- `mobile` (`string`, optional): Mobile number of the contact
- `phone` (`string`, optional): Phone number of the contact
- `tags` (`array`, optional): Array of tags to associate with the contact
- `time_zone` (`string`, optional): Time zone of the contact

### `freshdesk_roles_list`

Retrieve a list of all roles from Freshdesk. Returns role details including IDs, names, descriptions, default status, and timestamps. This endpoint provides information about the different permission levels and access controls available in the Freshdesk system.

### `freshdesk_ticket_create`

Create a new ticket in Freshdesk. Requires either requester_id, email, facebook_id, phone, twitter_id, or unique_external_id to identify the requester.

Parameters:

- `cc_emails` (`array`, optional): Array of email addresses to be added in CC
- `custom_fields` (`object`, optional): Key-value pairs containing custom field names and values
- `description` (`string`, optional): HTML content of the ticket describing the issue
- `email` (`string`, optional): Email address of the requester. If no contact exists, will be added as new contact.
- `group_id` (`number`, optional): ID of the group to which the ticket has been assigned
- `name` (`string`, optional): Name of the requester
- `priority` (`number`, optional): Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent
- `requester_id` (`number`, optional): User ID of the requester. For existing contacts, can be passed instead of email.
- `responder_id` (`number`, optional): ID of the agent to whom the ticket has been assigned
- `source` (`number`, optional): Channel through which ticket was created. 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedback Widget, 10=Outbound Email
- `status` (`number`, optional): Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed
- `subject` (`string`, optional): Subject of the ticket
- `tags` (`array`, optional): Array of tags to be associated with the ticket
- `type` (`string`, optional): Helps categorize the ticket according to different kinds of issues

### `freshdesk_ticket_get`

Retrieve details of a specific ticket by ID. Includes ticket properties, conversations, and metadata.

Parameters:

- `ticket_id` (`number`, required): ID of the ticket to retrieve
- `include` (`string`, optional): Additional resources to include (stats, requester, company, conversations)

### `freshdesk_ticket_update`

Update an existing ticket in Freshdesk. Note: Subject and description of outbound tickets cannot be updated.

Parameters:

- `ticket_id` (`number`, required): ID of the ticket to update
- `custom_fields` (`object`, optional): Key-value pairs containing custom field names and values
- `description` (`string`, optional): HTML content of the ticket (cannot be updated for outbound tickets)
- `group_id` (`number`, optional): ID of the group to which the ticket has been assigned
- `name` (`string`, optional): Name of the requester
- `priority` (`number`, optional): Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent
- `responder_id` (`number`, optional): ID of the agent to whom the ticket has been assigned
- `status` (`number`, optional): Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed
- `subject` (`string`, optional): Subject of the ticket (cannot be updated for outbound tickets)
- `tags` (`array`, optional): Array of tags to be associated with the ticket

### `freshdesk_tickets_list`

Retrieve a list of tickets with filtering and pagination. Supports filtering by status, priority, requester, and more. Returns 30 tickets per page by default.

Parameters:

- `company_id` (`number`, optional): Filter by company ID
- `email` (`string`, optional): Filter by requester email
- `filter` (`string`, optional): Filter name (new_and_my_open, watching, spam, deleted)
- `include` (`string`, optional): Additional resources to include (description, requester, company, stats)
- `page` (`number`, optional): Page number for pagination (starts from 1)
- `per_page` (`number`, optional): Number of tickets per page (max 100)
- `requester_id` (`number`, optional): Filter by requester ID
- `updated_since` (`string`, optional): Filter tickets updated since this timestamp (ISO 8601)

### `freshdesk_tickets_reply`

Add a public reply to a ticket conversation. The reply will be visible to the customer and will update the ticket status if specified.

Parameters:

- `body` (`string`, required): HTML content of the reply
- `ticket_id` (`number`, required): ID of the ticket to reply to
- `bcc_emails` (`array`, optional): Array of email addresses to BCC on the reply
- `cc_emails` (`array`, optional): Array of email addresses to CC on the reply
- `from_email` (`string`, optional): Email address to send the reply from
- `user_id` (`number`, optional): ID of the agent sending the reply


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
