Authenticate using HTTP Basic auth with YOUR_KEY as the username and any string (e.g., X) as the password, or use the Authorization: Token token=YOUR_KEY header format
The base URL is https://{your-domain}.myfreshworks.com/crm/sales/api/contacts — replace {your-domain} with your Freshsales account subdomain
Create a contact by POSTing to /contacts with a JSON body containing contact fields such as first_name, last_name, and email
Search for contacts by email using GET /contacts/search?term={email}&include=owner
Update a contact with PUT /contacts/{id} providing the fields to change; retrieve a contact with GET /contacts/{id}
Known gotchas
Freshsales uses account-specific subdomains — the API URL will differ between accounts; do not hard-code a shared base URL
The API enforces rate limits per account and per user; batch operations should include delays and handle 429 responses with retry logic
Custom field API names in Freshsales follow an internal naming convention — inspect the contact schema via GET /contacts/filters or the field settings API to obtain the correct field keys before writing custom data
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