# Freshsales

```json
{
  "name": "Freshsales",
  "slug": "freshsales",
  "url": "https://composio.dev/toolkits/freshsales",
  "markdown_url": "https://composio.dev/toolkits/freshsales.md",
  "logo_url": "https://logos.composio.dev/api/freshsales",
  "categories": [
    "crm"
  ],
  "is_composio_managed": false,
  "updated_at": "2026-11-06T07:04:36.610Z"
}
```

![Freshsales logo](https://logos.composio.dev/api/freshsales)

## Description

Securely connect your AI agents and chatbots (Claude, ChatGPT, Cursor, etc) with Freshsales MCP or direct API to manage contacts, update deals, track sales activities, and search customer records through natural language.

## Summary

Freshsales is a CRM platform for managing contacts, accounts, deals, and sales activities.
It helps sales teams personalize engagement and shorten the sales cycle.

## Categories

- crm

## Toolkit Details

- Tools: 104

## Images

- Logo: https://logos.composio.dev/api/freshsales

## Authentication

- **Api Key**
  - Type: `api_key`
  - Description: Api Key authentication for Freshsales.
  - Setup:
    - Configure Api Key credentials for Freshsales.
    - Use the credentials when creating an auth config in Composio.
- **Oauth2**
  - Type: `oauth2`
  - Description: Oauth2 authentication for Freshsales.
  - Setup:
    - Configure Oauth2 credentials for Freshsales.
    - Use the credentials when creating an auth config in Composio.

## Suggested Prompts

- List open Freshsales deals closing this month
- Create contacts from this sales prospect list
- Update overdue Freshsales deals with follow-up notes

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `FRESHSALES_ADD_MARKETING_LIST_CONTACTS` | Add Marketing List Contacts | Add contacts to a Freshsales marketing list. The same official operation also copies contacts that already belong to another list. |
| `FRESHSALES_BULK_ASSIGN_CONTACT_OWNER` | Bulk Assign Contact Owner | Replace the owner of up to 100 Freshsales contacts using explicit contact and owner IDs. Freshsales is known to return a false-success 200 for this endpoint, so this action reads every contact after the write and fails unless every owner_id matches. |
| `FRESHSALES_BULK_ASSIGN_CPQ_RECORDS` | Bulk Assign CPQ Record Owners | Queue one owner assignment for selected CPQ products or documents; acknowledgment does not prove completion. Requires Freshsales CPQ to be licensed and enabled. Observed product bulk paths support OAuth; OAuth behavior for document and template paths remains unverified. https://developer.freshsales.io/api/#products |
| `FRESHSALES_BULK_DELETE_CPQ_RECORDS` | Bulk Delete CPQ Records | Queue soft deletion of selected CPQ products or documents so they remain restorable; acknowledgment does not prove completion. Requires Freshsales CPQ to be licensed and enabled. Observed product bulk paths support OAuth; OAuth behavior for document and template paths remains unverified. https://developer.freshsales.io/api/#products |
| `FRESHSALES_BULK_RESTORE_CPQ_RECORDS` | Bulk Restore CPQ Records | Queue restoration of selected soft-deleted CPQ products or documents using the PUT methods in Freshsales' official cURL examples; acknowledgment does not prove completion. Requires Freshsales CPQ to be licensed and enabled. Observed product bulk paths support OAuth; OAuth behavior for document and template paths remains unverified. https://developer.freshsales.io/api/#products |
| `FRESHSALES_BULK_UPDATE_CPQ_RECORDS` | Bulk Update CPQ Records | Queue one shared-field update for selected CPQ products or documents. Product pricing and document product-line mutations are not supported by these bulk endpoints; acknowledgment does not prove completion. Requires Freshsales CPQ to be licensed and enabled. Observed product bulk paths support OAuth; OAuth behavior for document and template paths remains unverified. https://developer.freshsales.io/api/#products |
| `FRESHSALES_CLONE_CONTACT` | Clone Contact | Create a new Freshsales contact by cloning an existing contact and applying field overrides. |
| `FRESHSALES_CLONE_CUSTOM_MODULE_RECORD` | Clone Custom Module Record | Create a new Freshsales custom-module record by cloning an existing record and applying field overrides. |
| `FRESHSALES_CLONE_DEAL` | Clone Deal | Clone a Freshsales deal, optionally overriding fields on the new deal. |
| `FRESHSALES_CLONE_SALES_ACCOUNT` | Clone Sales Account | Clone a Freshsales sales account, optionally overriding fields on the new account. |
| `FRESHSALES_CREATE_APPOINTMENT` | Create Appointment | Create a Freshsales appointment, optionally linked to a CRM record or attendees, and return its ID and related records. |
| `FRESHSALES_CREATE_CONTACT` | Create Contact | Create a Freshsales contact identified by email addresses, mobile number, Twitter username, or external ID and return its ID and contact fields. Tenant contact-field settings can impose additional requirements; inspect List Contact Fields first. |
| `FRESHSALES_CREATE_CPQ_DOCUMENT` | Create CPQ Document | Create a Freshsales quote or other CPQ document and return its confirmed ID. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_CREATE_CUSTOM_FIELD` | Create Custom Field | Create a persistent custom field on one explicit Freshsales entity form. This mutates tenant schema, may make future record writes require the field, and cannot be undone through any documented custom-field delete endpoint. Requires confirm_irreversible_schema_change=true. |
| `FRESHSALES_CREATE_CUSTOM_MODULE` | Create Custom Module | Create a tenant-wide Freshsales custom-module definition and return its ID and internal entity name. This changes the tenant's CRM schema, immediately creates five saved filters, and consumes one of the documented maximum of 10 custom modules per account. |
| `FRESHSALES_CREATE_CUSTOM_MODULE_RECORD` | Create Custom Module Record | Create one record in a named Freshsales custom module and return its record ID and fields. |
| `FRESHSALES_CREATE_DEAL` | Create Deal | Create a Freshsales deal associated with exactly one existing or new sales account. |
| `FRESHSALES_CREATE_DOCUMENT_LINK` | Create Document Link | Attach a web document URL to one explicit Freshsales CRM record. |
| `FRESHSALES_CREATE_MARKETING_LIST` | Create Marketing List | Create an empty Freshsales marketing list. |
| `FRESHSALES_CREATE_NOTE` | Create Note | Create a Freshsales note on one lead, contact, sales account, or deal. |
| `FRESHSALES_CREATE_PRODUCT` | Create CPQ Product | Create a Freshsales CPQ product and return the provider-confirmed product ID. Requires Freshsales CPQ to be licensed and enabled for the connected account. Product create, get, update, delete, and restore paths support OAuth. Official contract: https://developer.freshsales.io/api/#products |
| `FRESHSALES_CREATE_SALES_ACCOUNT` | Create Sales Account | Create a Freshsales sales account with standard, parent-account, or tenant-defined fields. |
| `FRESHSALES_CREATE_SALES_ACTIVITY` | Create Sales Activity | Create a Freshsales sales activity with all provider-mandatory time, owner, type, and CRM-target fields. |
| `FRESHSALES_CREATE_TASK` | Create Task | Create a Freshsales task with every provider-mandatory assignment, due-date, and CRM-target field. |
| `FRESHSALES_DELETE_APPOINTMENT` | Delete Appointment | Delete one Freshsales appointment by ID. |
| `FRESHSALES_DELETE_CONTACTS` | Delete Contacts | Delete one or more Freshsales contacts through ordinary deletion rather than permanent forget. Provide contact_id for one contact or contact_ids for a bulk request. This toolkit does not expose a restore operation. |
| `FRESHSALES_DELETE_CPQ_DOCUMENT` | Delete CPQ Document | Soft-delete one Freshsales CPQ document so it can be restored. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_DELETE_CUSTOM_MODULE` | Delete Custom Module | Delete a Freshsales custom-module definition and change the tenant's CRM schema. Remove all records from the custom module before calling this action. |
| `FRESHSALES_DELETE_CUSTOM_MODULE_RECORDS` | Delete Custom Module Records | Delete one or more records from a named Freshsales custom module through ordinary deletion. Provide record_id for one record or record_ids for a bulk request. This action never permanently forgets records or their data. |
| `FRESHSALES_DELETE_DEALS` | Delete Deals | Ordinarily delete one deal or bulk-delete multiple deals. This operation is separate from permanent forget. |
| `FRESHSALES_DELETE_NOTE` | Permanently Delete Note | Permanently delete one Freshsales note. Freshsales documents no restore operation; the response contains provider-confirmed deletion fields. |
| `FRESHSALES_DELETE_PRODUCT` | Delete CPQ Product | Soft-delete one Freshsales CPQ product so it can be restored. Requires Freshsales CPQ to be licensed and enabled for the connected account. Product create, get, update, delete, and restore paths support OAuth. Official contract: https://developer.freshsales.io/api/#products |
| `FRESHSALES_DELETE_SALES_ACCOUNTS` | Delete Sales Accounts | Ordinarily delete one account or bulk-delete multiple accounts. This is not permanent forget; associated contacts and deals are deleted only when explicitly requested. |
| `FRESHSALES_DELETE_SALES_ACTIVITY` | Delete Sales Activity | Delete one Freshsales sales activity after confirming the provider success code. |
| `FRESHSALES_DELETE_TASK` | Delete Task | Delete one Freshsales task and return provider-confirmed deletion fields. |
| `FRESHSALES_FORGET_CONTACT` | Permanently Forget Contact | Permanently and irreversibly erase one Freshsales contact and associated data. This is not ordinary deletion, cannot be undone by this toolkit, and requires confirm_permanent_erasure=true. |
| `FRESHSALES_FORGET_CPQ_DOCUMENT` | Permanently Forget CPQ Document | Permanently and irreversibly delete one CPQ document and all associated data. This cannot be restored and requires confirm_permanent_erasure=true. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_FORGET_CUSTOM_MODULE_RECORD` | Permanently Forget Custom Module Record | Permanently and irreversibly erase one Freshsales custom-module record and associated data. This is not ordinary deletion, cannot be undone by this toolkit, and requires confirm_permanent_erasure=true. |
| `FRESHSALES_FORGET_DEAL` | Permanently Forget Deal | IRREVERSIBLE: permanently erase one Freshsales deal and associated data. This cannot be restored and requires confirm_permanent_erasure=true. |
| `FRESHSALES_FORGET_SALES_ACCOUNT` | Permanently Forget Sales Account | IRREVERSIBLE: permanently erase one Freshsales sales account and associated data. This cannot be restored and requires confirm_permanent_erasure=true. |
| `FRESHSALES_GET_APPOINTMENT` | Get Appointment | Return one Freshsales appointment and its related attendees, users, conferences, and notes. |
| `FRESHSALES_GET_CONTACT` | Get Contact | Return one Freshsales contact by ID, optionally including related resources. |
| `FRESHSALES_GET_CPQ_DOCUMENT` | Get CPQ Document | Get one Freshsales CPQ document, optionally including product line items. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_GET_CUSTOM_MODULE` | Get Custom Module | Return one Freshsales custom-module definition by ID, including the entity name required by custom-module record tools. |
| `FRESHSALES_GET_CUSTOM_MODULE_RECORD` | Get Custom Module Record | Return one record by ID from a named Freshsales custom module. |
| `FRESHSALES_GET_DEAL` | Get Deal | Get one Freshsales deal by ID, optionally with related resources. |
| `FRESHSALES_GET_JOB_STATUS` | Get Bulk Upsert Job Status | Get bounded, single-request progress and failure details for one Freshsales bulk-upsert job; this does not poll. |
| `FRESHSALES_GET_PRODUCT` | Get CPQ Product | Get one Freshsales CPQ product, optionally including pricing. Requires Freshsales CPQ to be licensed and enabled for the connected account. Product create, get, update, delete, and restore paths support OAuth. Official contract: https://developer.freshsales.io/api/#products |
| `FRESHSALES_GET_SALES_ACCOUNT` | Get Sales Account | Get one Freshsales sales account by ID, optionally with related resources. |
| `FRESHSALES_GET_SALES_ACTIVITY` | Get Sales Activity | Get one Freshsales sales activity by ID. |
| `FRESHSALES_GET_TASK` | Get Task | Get one Freshsales task by ID, optionally with collaborators and its CRM target. |
| `FRESHSALES_LIST_APPOINTMENTS` | List Appointments | Return one page selected by Freshsales's required appointment filter. Open is documented for upcoming appointments; complete is a separate provider-named filter whose semantics are not further defined. Return the next page number only when Freshsales meta.total proves another page exists. Pages default to 25 appointments (maximum 100); larger pages increase response size and token cost. |
| `FRESHSALES_LIST_CONFIGURATION_OPTIONS` | List Configuration Options | List one Freshsales configuration option family for IDs needed by CRM operations. Covers all 21 official selectors without exposing arbitrary paths; each selector returns its complete provider-bounded option set and does not expose pagination. |
| `FRESHSALES_LIST_CONTACT_ACTIVITIES` | List Contact Activities | Return activity history for one Freshsales contact. The limit input is a provider result-size hint, not a guaranteed maximum. Inspect meta.has_next and meta.has_previous to determine whether the response is incomplete; this action does not expose an unproven continuation input. |
| `FRESHSALES_LIST_CONTACT_DOCUMENT_ASSOCIATIONS` | List Contact Document Associations | List the file and web-link associations attached to one Freshsales contact, including referenced links, users, and provider totals. This returns metadata only, not file bytes, and exposes no continuation because Freshsales documents none for this endpoint. |
| `FRESHSALES_LIST_CONTACT_FIELDS` | List Contact Fields | List Freshsales contact field definitions, internal names, types, choices, and tenant form metadata for use in contact create and update calls. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_CONTACTS_BY_VIEW` | List Contacts by View | Return one explicitly numbered page from a saved Freshsales contact view, including shaped page totals and the next page number when available. |
| `FRESHSALES_LIST_CONTACT_VIEWS` | List Contact Views | List saved Freshsales contact views and their IDs for use with contact listing tools. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_CPQ_DOCUMENT_RELATED_PRODUCTS` | List CPQ Document Related Products | List the typed product records associated with one Freshsales CPQ document. Freshsales documents no pagination or continuation parameter for this endpoint. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_LIST_CUSTOM_MODULE_RECORDS` | List Custom Module Records | Return one saved-view page of records from a named Freshsales custom module and a page cursor when more records are available. |
| `FRESHSALES_LIST_CUSTOM_MODULE_VIEWS` | List Custom Module Views | List saved views for a Freshsales custom module and return the view IDs needed to list its records. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_DEAL_FIELDS` | List Deal Fields | List standard and tenant-defined Freshsales deal field definitions. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_DEALS_BY_VIEW` | List Deals by View | Return one numbered page from a saved Freshsales deal view. |
| `FRESHSALES_LIST_DEAL_VIEWS` | List Deal Views | List saved Freshsales deal views and their IDs. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_ENTITY_FORMS` | List Entity Forms | List Freshsales forms for a standard or custom entity so callers can obtain an explicit form ID before creating a custom field. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_MARKETING_LIST_CONTACTS` | List Marketing List Contacts | Return one documented page of contacts in a Freshsales marketing list. Freshsales can reject this endpoint when the account plan lacks the feature. |
| `FRESHSALES_LIST_MARKETING_LISTS` | List Marketing Lists | Return one documented page of Freshsales marketing lists. |
| `FRESHSALES_LIST_SALES_ACCOUNT_FIELDS` | List Sales Account Fields | List standard and tenant-defined Freshsales sales-account field definitions. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_SALES_ACCOUNTS_BY_VIEW` | List Sales Accounts by View | Return one numbered page from a saved Freshsales sales-account view. |
| `FRESHSALES_LIST_SALES_ACCOUNT_VIEWS` | List Sales Account Views | List saved Freshsales sales-account views and their IDs. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_SALES_ACTIVITIES` | List Sales Activities | Return one bounded Freshsales sales-activity page (25 records by default, 100 maximum) and an explicit next page number. |
| `FRESHSALES_LIST_SALES_ACTIVITY_FIELDS` | List Sales Activity Fields | List standard and tenant-defined Freshsales sales-activity field definitions. Freshsales documents no pagination or continuation parameter for this endpoint. |
| `FRESHSALES_LIST_TASKS` | List Tasks | Return one page of Freshsales tasks for exactly one status or due-date filter. The returned next_page is calculated using a 25-record page size; pass it back as page to continue. |
| `FRESHSALES_LOG_PHONE_CALL_FOR_EXISTING_RECORD` | Log Phone Call for Existing Record | Create an irreversible manual call log for one existing Freshsales lead, contact, or sales account and optionally create a note. Freshsales documents no call-log delete operation; explicit confirmation is required. |
| `FRESHSALES_LOG_PHONE_CALL_FOR_NEW_RECORD` | Log Phone Call for New Record | Create a new Freshsales contact and an irreversible manual call log associated with it, optionally with a note. Contact-field requirements vary by tenant; provide emails when the tenant requires them, but email is not universally required. Neither effect has a documented call-log rollback; explicit confirmation is required. |
| `FRESHSALES_LOOKUP_RECORDS` | Lookup Records by Exact Field | Look up exact matches across one or more Freshsales lead, contact, sales-account, or deal types using one compatible standard or custom field. Freshsales returns a provider-bounded result set and exposes no pagination parameters. |
| `FRESHSALES_MOVE_MARKETING_LIST_CONTACTS` | Move Marketing List Contacts | Move selected contacts or every contact from one Freshsales marketing list to a different destination list. |
| `FRESHSALES_REMOVE_MARKETING_LIST_CONTACTS` | Remove Marketing List Contacts | Remove selected contacts or every contact from one Freshsales marketing list. This changes list membership, not the contact records. |
| `FRESHSALES_RESTORE_CPQ_DOCUMENT` | Restore CPQ Document | Restore one soft-deleted Freshsales CPQ document. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_RESTORE_PRODUCT` | Restore CPQ Product | Restore one soft-deleted Freshsales CPQ product. Requires Freshsales CPQ to be licensed and enabled for the connected account. Product create, get, update, delete, and restore paths support OAuth. Official contract: https://developer.freshsales.io/api/#products |
| `FRESHSALES_SEARCH_CONTACTS_FILTERED` | Search Contacts by Exact Filters | Find exact-match Freshsales contacts with explicit field/operator/value rules. |
| `FRESHSALES_SEARCH_RECORDS` | Search Records | Fuzzy-search Freshsales users, standard CRM records, and custom-module records in one bounded request. |
| `FRESHSALES_START_BULK_CONTACT_UPSERT` | Start Bulk Contact Upsert | Start an asynchronous upsert of up to 100 Freshsales contacts. Returns only the provider's job acknowledgment and status URL; this tool does not wait for or verify completion. |
| `FRESHSALES_START_BULK_DEAL_UPSERT` | Start Bulk Deal Upsert | Start an asynchronous upsert of up to 100 deals. Returns acceptance and a status URL but does not verify completion. |
| `FRESHSALES_START_BULK_SALES_ACCOUNT_UPSERT` | Start Bulk Sales Account Upsert | Start an asynchronous upsert of up to 100 sales accounts. Returns acceptance and a status URL but does not verify completion. |
| `FRESHSALES_UPDATE_APPOINTMENT` | Update Appointment | Update selected fields or attendees on an existing Freshsales appointment and return the updated appointment and related records. |
| `FRESHSALES_UPDATE_CONTACT` | Update Contact | Update selected fields on an existing Freshsales contact and return the updated contact. |
| `FRESHSALES_UPDATE_CONTACT_TEAM_MEMBERSHIPS` | Update Contact Team Memberships | Add, update, or remove Freshsales contact-team memberships using explicit contact, user, and designation IDs. Removing a membership changes that user's access to the contact; verify all tenant IDs before calling. |
| `FRESHSALES_UPDATE_CPQ_DOCUMENT` | Update CPQ Document | Update document fields or replace its complete product list through the one official PUT contract. Freshworks documents quantity as optional, though some tenants require a positive quantity for every supplied line; products=[] removes all lines. Requires Freshsales CPQ to be licensed and enabled for the connected account. OAuth behavior for CPQ document and template paths remains unverified. Official contract: https://developer.freshsales.io/api/#documents |
| `FRESHSALES_UPDATE_CUSTOM_MODULE` | Update Custom Module | Update selected display, icon, navigation, or description settings on an existing Freshsales custom-module definition. The internal entity name remains stable when display names change. |
| `FRESHSALES_UPDATE_CUSTOM_MODULE_RECORD` | Update Custom Module Record | Update selected fields on one record in a named Freshsales custom module and return the updated record. |
| `FRESHSALES_UPDATE_DEAL` | Update Deal | Update a Freshsales deal, its contact associations, or replace all deal products. Supplying an empty products list removes every line item. |
| `FRESHSALES_UPDATE_DEAL_TEAM_MEMBERSHIPS` | Update Deal Team Memberships | Add, update, or remove team memberships for one Freshsales deal. |
| `FRESHSALES_UPDATE_MARKETING_LIST` | Update Marketing List | Rename an existing Freshsales marketing list. |
| `FRESHSALES_UPDATE_NOTE` | Update Note | Replace the text and target association of an existing Freshsales note. |
| `FRESHSALES_UPDATE_PRODUCT` | Update CPQ Product | Update product fields or add, overwrite, and delete product prices through the one official PUT contract. Requires Freshsales CPQ to be licensed and enabled for the connected account. Product create, get, update, delete, and restore paths support OAuth. Official contract: https://developer.freshsales.io/api/#products |
| `FRESHSALES_UPDATE_SALES_ACCOUNT` | Update Sales Account | Update standard or tenant-defined fields on a Freshsales sales account. |
| `FRESHSALES_UPDATE_SALES_ACCOUNT_TEAM_MEMBERSHIPS` | Update Sales Account Team Memberships | Add, update, or remove team memberships for one Freshsales sales account. Requires an API-key connection; Freshworks does not authorize this operation through its available OAuth scopes. |
| `FRESHSALES_UPDATE_SALES_ACTIVITY` | Update Sales Activity | Update selected fields on one existing Freshsales sales activity. |
| `FRESHSALES_UPDATE_TASK` | Update or Mark Task Done | Update a Freshsales task through the single documented PUT path; set status=1 to mark it completed or status=0 to reopen it. |
| `FRESHSALES_UPLOAD_AND_ATTACH_FILE` | Upload and Attach Document | Upload a required file as multipart/form-data and attach it to one explicit Freshsales CRM record. |
| `FRESHSALES_UPSERT_CONTACT` | Upsert Contact | Create or update one Freshsales contact matched by a unique identifier and return the resulting contact. |
| `FRESHSALES_UPSERT_DEAL` | Upsert Deal | Create or update a deal by one unique standard or tenant-defined field. |
| `FRESHSALES_UPSERT_SALES_ACCOUNT` | Upsert Sales Account | Create or update a sales account by one unique standard or tenant-defined field. |

## Supported Triggers

None listed.

## Installation and MCP Setup

### Path 1: SDK Installation

#### Path 1, Step 1: Install Composio

Install the Composio SDK, the OpenAI provider, and the OpenAI SDK
```python
pip install composio composio_openai openai
```

```typescript
npm install @composio/core @composio/openai openai
```

#### Path 1, Step 2: Create a Composio session

Initialize Composio with the OpenAI Responses provider and create a session scoped to Freshsales
```python
import json
from openai import OpenAI
from composio import Composio
from composio_openai import OpenAIResponsesProvider

composio = Composio(provider=OpenAIResponsesProvider())
client = OpenAI()

session = composio.create(user_id="your-user-id", toolkits=["freshsales"])
tools = session.tools()
```

```typescript
import OpenAI from "openai";
import { Composio } from "@composio/core";
import { OpenAIResponsesProvider } from "@composio/openai";

const composio = new Composio({ provider: new OpenAIResponsesProvider() });
const client = new OpenAI();

const session = await composio.create("your-user-id", { toolkits: ["freshsales"] });
const tools = await session.tools();
```

#### Path 1, Step 3: Run Freshsales tools with your agent

Send a request, execute the Freshsales tool calls through the session, and print the final answer
```python
response = client.responses.create(
    model="gpt-5.6-sol",
    tools=tools,
    input=[{"role": "user", "content": "Create a new contact in Freshsales for Priya Shah at priya.shah@example.com."}],
)

while True:
    tool_calls = [o for o in response.output if o.type == "function_call"]
    if not tool_calls:
        break
    results = composio.provider.handle_tool_calls(response=response, session=session)
    response = client.responses.create(
        model="gpt-5.6-sol",
        tools=tools,
        previous_response_id=response.id,
        input=[
            {"type": "function_call_output", "call_id": call.call_id, "output": json.dumps(results[i])}
            for i, call in enumerate(tool_calls)
        ],
    )

print(response.output_text)
```

```typescript
let response = await client.responses.create({
  model: "gpt-5.6-sol",
  tools,
  input: [{ role: "user", content: "Create a new contact in Freshsales for Priya Shah at priya.shah@example.com." }],
});

while (response.output.some((o) => o.type === "function_call")) {
  const outputs = await composio.provider.handleToolCalls(session, response.output);
  response = await client.responses.create({
    model: "gpt-5.6-sol",
    tools,
    previous_response_id: response.id,
    input: outputs,
  });
}

console.log(response.output_text);
```

### Path 2: MCP Server Setup

#### Path 2, Step 1: Install Composio

Install the Composio SDK and your agent framework
```python
pip install composio claude-agent-sdk
```

```typescript
npm install @composio/core ai @ai-sdk/mcp @ai-sdk/openai
```

#### Path 2, Step 2: Create a session with MCP enabled

Create a session scoped to Freshsales and read its MCP URL and headers
```python
from composio import Composio

composio = Composio()
session = composio.create(user_id="your-user-id", toolkits=["freshsales"], mcp=True)
```

```typescript
import { Composio } from "@composio/core";

const composio = new Composio();
const { mcp } = await composio.create("your-user-id", {
  toolkits: ["freshsales"],
  mcp: true,
});
```

#### Path 2, Step 3: Connect your agent to the MCP server

Pass the session's MCP URL and headers to your agent and run a Freshsales request
```python
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock

options = ClaudeAgentOptions(
    mcp_servers={
        "composio": {
            "type": "http",
            "url": session.mcp.url,
            "headers": session.mcp.headers,
        }
    },
    system_prompt="You are a helpful assistant with access to Freshsales tools.",
    tools=[],
    allowed_tools=["mcp__composio__*"],
)

async def main():
    async with ClaudeSDKClient(options=options) as client:
        await client.query("Create a new contact in Freshsales for Priya Shah at priya.shah@example.com.")
        async for message in client.receive_response():
            if isinstance(message, AssistantMessage):
                for block in message.content:
                    if isinstance(block, TextBlock):
                        print(block.text)

asyncio.run(main())
```

```typescript
import { createMCPClient } from "@ai-sdk/mcp";
import { openai } from "@ai-sdk/openai";
import { generateText, stepCountIs } from "ai";

const client = await createMCPClient({
  transport: { type: "http", url: mcp.url, headers: mcp.headers },
});

const { text } = await generateText({
  model: openai("gpt-5.6-sol"),
  tools: await client.tools(),
  prompt: "Create a new contact in Freshsales for Priya Shah at priya.shah@example.com.",
  stopWhen: stepCountIs(10),
});

console.log(text);
await client.close();
```

## Why Use Composio?

### 1. AI Native Freshsales Integration

- Supports both Freshsales MCP and direct API based integrations
- Structured, LLM-friendly schemas for reliable tool execution
- Rich coverage for reading, writing, and querying your Freshsales data

### 2. Managed Auth

- Built-in OAuth handling with automatic token refresh and rotation
- Central place to manage, scope, and revoke Freshsales access
- Per user and per environment credentials instead of hard-coded keys

### 3. Agent Optimized Design

- Tools are tuned using real error and success rates to improve reliability over time
- Comprehensive execution logs so you always know what ran, when, and on whose behalf

### 4. Enterprise Grade Security

- Fine-grained RBAC so you control which agents and users can access Freshsales
- Scoped, least privilege access to Freshsales resources
- Full audit trail of agent actions to support review and compliance

## Use Freshsales with any AI Agent Framework

Choose a framework you want to connect Freshsales with:

- [ChatGPT](https://composio.dev/toolkits/freshsales/framework/chatgpt)
- [Claude Cowork](https://composio.dev/toolkits/freshsales/framework/claude-cowork)
- [Hermes](https://composio.dev/toolkits/freshsales/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/freshsales/framework/atomic-agent)

## Related Toolkits

- [HubSpot](https://composio.dev/toolkits/hubspot) - HubSpot is an all-in-one marketing, sales, and customer service platform. It lets teams nurture leads, automate outreach, and track every customer interaction in one place.
- [Pipedrive](https://composio.dev/toolkits/pipedrive) - Pipedrive is a sales management platform offering pipeline visualization, lead tracking, and workflow automation. It helps sales teams keep deals moving forward efficiently and never miss a follow-up.
- [Salesforce](https://composio.dev/toolkits/salesforce) - Salesforce is a leading CRM platform that helps businesses manage sales, service, and marketing. It centralizes customer data, enabling teams to drive growth and build strong relationships.
- [Apollo](https://composio.dev/toolkits/apollo) - Apollo is a CRM and lead generation platform that helps businesses discover contacts and manage sales pipelines. Use it to streamline customer outreach and track your deals from one place.
- [Attio](https://composio.dev/toolkits/attio) - Attio is a customizable CRM and workspace for managing your team's relationships and workflows. It helps teams organize contacts, automate tasks, and collaborate more efficiently.
- [Acculynx](https://composio.dev/toolkits/acculynx) - AccuLynx is a cloud-based roofing business management software for contractors. It streamlines project tracking, lead management, and document sharing.
- [Addressfinder](https://composio.dev/toolkits/addressfinder) - Addressfinder is a data quality platform for verifying addresses, emails, and phone numbers. It helps you ensure accurate customer and contact data every time.
- [Affinity](https://composio.dev/toolkits/affinity) - Affinity is a relationship intelligence CRM that helps private capital investors find, manage, and close more deals. It streamlines deal flow and surfaces key connections to help you win opportunities.
- [Agencyzoom](https://composio.dev/toolkits/agencyzoom) - AgencyZoom is a sales and performance platform built for P&C insurance agencies. It helps agents boost sales, retain clients, and analyze producer results in one place.
- [Agile CRM](https://composio.dev/toolkits/agile_crm) - Agile CRM is a unified customer management platform combining contacts, sales pipelines, marketing, and support. Use it to centralize customer data, automate campaigns, and manage deals and tickets in one place.
- [Aviato](https://composio.dev/toolkits/aviato) - Aviato is a company and person intelligence platform for search, enrichment, investments, relationships, and contact data. It helps teams research markets and prospects with native BYOK access to detailed business intelligence.
- [Bettercontact](https://composio.dev/toolkits/bettercontact) - Bettercontact is a smart contact enrichment tool for finding emails and phone numbers. It helps boost lead generation with automated, waterfall search across multiple sources.
- [Blackbaud](https://composio.dev/toolkits/blackbaud) - Blackbaud provides cloud-based software for nonprofits, schools, and healthcare institutions. It streamlines fundraising, donor management, and mission-driven operations.
- [Blitz API](https://composio.dev/toolkits/blitz_api) - Blitz API is a people, company, and job search API with contact and company enrichment. Use it to enrich leads and accelerate sales outreach with accurate contact and firmographic data.
- [Brilliant directories](https://composio.dev/toolkits/brilliant_directories) - Brilliant Directories is an all-in-one platform for building and managing online membership communities and business directories. It streamlines listings, member management, and engagement tools into a single, easy interface.
- [Capsule crm](https://composio.dev/toolkits/capsule_crm) - Capsule CRM is a user-friendly CRM platform for managing contacts and sales pipelines. It helps businesses organize relationships and streamline their sales process efficiently.
- [Centralstationcrm](https://composio.dev/toolkits/centralstationcrm) - CentralStationCRM is an easy-to-use CRM software focused on collaboration and long-term customer relationships. It helps teams manage contacts, deals, and communications all in one place.
- [Clay](https://composio.dev/toolkits/clay) - Clay is a go-to-market data enrichment and workflow automation platform for searching people and companies, running routines, and querying workspace tables. It helps teams enrich leads, automate GTM workflows, and keep workspace data synchronized.
- [Clay MCP](https://composio.dev/toolkits/clay_mcp) - Clay MCP is a prospect enrichment service for researching companies and contacts. It runs enrichment providers and Clay functions to return enriched prospect data.
- [Clientary](https://composio.dev/toolkits/clientary) - Clientary is a platform for managing clients, invoices, projects, proposals, and more. It streamlines client work and saves you serious admin time.

## Frequently Asked Questions

### Do I need my own developer credentials to use Freshsales with Composio?

Yes, Freshsales requires you to configure your own API key credentials. Once set up, Composio handles secure credential storage and API request handling for you.

### Can I use multiple toolkits together?

Yes! Composio's Tool Router enables agents to use multiple toolkits. [Learn more](https://docs.composio.dev/tool-router/overview).

### Is Composio secure?

Composio is SOC 2 and ISO 27001 compliant with all data encrypted in transit and at rest. [Learn more](https://trust.composio.dev).

### What if the API changes?

Composio maintains and updates all toolkit integrations automatically, so your agents always work with the latest API versions.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
