Unified CRM API
Knit's Unified CRM API gives you a single integration to read and write contact, company, deal, and activity data across Salesforce, HubSpot, Pipedrive, Zoho CRM, Microsoft Dynamics 365, and more. Build once - support every CRM your customers use.
What Is a Unified CRM API?
A unified CRM API is a single, standardized programming interface that lets your product read and write customer relationship data β contacts, companies, deals, and activities β across multiple CRM platforms without building a separate integration for each one.
CRM platforms each have their own APIs with different authentication methods, object models, and rate limits. Knit normalizes these differences so your engineering team integrates once, and Knit handles the translation layer for every CRM your customers use.
Knit normalizes four things across all providers:
| Layer | What Knit handles |
|---|---|
| Data Models / APIs | Consistent field names and structures β contacts Accounts, Deals, Leads , andEngagement data from Salesforce, HubSpot, and Pipedrive return the same schema across all CRM apps |
| Authentication | OAuth, API keys, and tokens managed per-provider; you pass a single X-Integration-Id header |
| Pagination | Cursor-based pagination works identically regardless of how the provider implements it β Salesforce allows up to 2,000 records per query while HubSpot caps at 100; Knit abstracts that difference away |
| Error formats | Standardized error responses with provider context where available |
Building AI agents?Knit is MCP-compatible (Model Context Protocol). Your agents can perform authenticated read and write actions across every connected CRM with zero per-provider logic. Try MCP Hub β
How It Works
1. Your customer connects their CRM
Knit's pre-built embedded auth UI handles OAuth, API keys, and token management per provider. Your team writes zero auth code.
2. Knit normalizes the data
Contacts, companies, deals, and activities are all mapped to Knit's unified schema β regardless of how each CRM stores or names them internally.
3. Your product calls one API
Use a single set of endpoints and data models across your entire product. Add a new CRM later? No code changes on your side.
4. Stay in sync with real-time webhooks
Native and virtual webhooks fire on record changes β new leads, deal-stage moves, contact updates β with a consistent event schema across all providers.
CRM Data Objects
The following objects are available through the unified schema. All fields are normalized across providers.
Individual people records β name, email, phone, and the company they're associated with.
id, first_name, last_name, emails[], phones[], addresses[],
company_id, owner_id, created_at, updated_atβ Contact data model Β· Create contact Β· Update contact Β· List contacts Β· Delete Contact Β· Get Contact by ID Β· Get Contacts (Batch API)
The organizations your contacts belong to β the CRM equivalent of an account record.
id, name, domain, industry, employee_count, addresses[],
owner_id, created_at, updated_atβ Company data model Β· Create company Β· Update company Β· List companies Β· Delete Company Β· Get Company Batch API
Sales opportunities with stage, value, and pipeline position β called "Deals" in HubSpot/Pipedrive and "Opportunities" in Salesforce; Knit normalizes both to one schema.
id, name, amount, currency, stage, pipeline_id, close_date,
owner_id, company_id, contact_ids[], status, created_at, updated_atβ Deal data model Β· Create deal Β· Update deal Β· Get deal stagesΒ· Delete a Deal Β· List Deals Β· Get Deals by ID Β· Get Deals Batch API
Unqualified or pre-pipeline records, where the underlying CRM distinguishes leads from contacts (e.g. Salesforce, Zoho CRM).
id, first_name, last_name, email, company_name, status,
source, owner_id, created_at, converted_atβ Lead data model Β· Create lead Β· Update lead Β· Delete A leadΒ· List LeadsΒ· Get leads by IDΒ· Get Leads Batch API
Calls, emails, meetings, and notes logged against a contact, company, or deal β the interaction history layer.
id, type, subject, content, direction, status, owner_id,
start_time, end_time, contact_ids[], company_ids[], deal_ids[]β Engagement data model Β· Create an Engagement Β· Update Engagement Β· Delete An EngagementΒ· List EngagementsΒ· Get Engagement by IDΒ· Get Engagements Batch API
Custom fieldsFields outside the unified schema are accessible via custom fields that you could map to the unified model, or the Passthrough API that lets you make direct calls to the underlying CRM using Knit's auth layer without giving up the unified platform.
API Reference
All CRM endpoints are organized by category. Each endpoint works identically regardless of the underlying CRM β pass your API key and the customer's X-Integration-Id, and the response schema is consistent across all providers.
Contact APIs
| Endpoint | Description |
|---|---|
| Contact data model | Full field reference for the normalized contact object |
| Create contact | Add a new contact record to the connected CRM |
| Update contact | Update name, email, phone, or company association |
| List contacts | Retrieve contacts with filtering and pagination |
Company APIs
| Endpoint | Description |
|---|---|
| Company data model | Full field reference for the normalized company object |
| Create company | Add a new company/account record |
| Update company | Update firmographic or ownership fields |
| List companies | Retrieve companies with filtering and pagination |
Deal APIs
| Endpoint | Description |
|---|---|
| Deal data model | Field reference for the normalized deal/opportunity object |
| Create deal | Add a new deal to a pipeline |
| Update deal stage | Move a deal through the pipeline or update amount/close date |
| List deals by pipeline | Retrieve deals filtered by pipeline or stage |
Lead APIs
| Endpoint | Description |
|---|---|
| Lead data model | Field reference for the normalized lead object |
| Create lead | Add a new unqualified lead record |
| Convert lead | Convert a lead into a contact, company, and deal |
Engagement APIs
| Endpoint | Description |
|---|---|
| Engagement data model | Field reference for calls, emails, meetings, and notes |
| Log engagement | Write a new activity against a contact, company, or deal |
| List engagements | Retrieve activity history for a record |
Supported Platforms
Knit connects to every major CRM platform. A single integration gives you access to all of them.
| Category | Platforms |
|---|---|
| Enterprise CRM | Salesforce, Microsoft Dynamics 365 |
| Sales & marketing CRM | HubSpot, Pipedrive, Zoho CRM |
| Growth & SMB CRM | Freshsales, Close |
Don't see a platform? Use the Connector Builder / Integration Agent to add it yourself in hours, not weeks.
Key Capabilities
Real-Time Sync & Webhooks
Knit supports both native webhooks (forwarded directly from platforms that emit them) and virtual webhooks (Knit polls the source, detects changes, and emits events). Both use the same subscription interface and event schema β your integration code is identical either way.
Supported event types include: record.new, record.modified, record.deleted, deal.stage_changed, and more.
Zero Data Storage
Knit never stores your customers' CRM data at rest. Every API request passes through to the source CRM in real time. This reduces your GDPR, CCPA, and SOC 2 compliance scope β there are no replicated contact or deal records sitting in a third-party system.
AI Connector Builder / Integration Agent
When a customer's CRM isn't in Knit's library, the AI Connector Builder lets your team define a new connector in hours. Specify the platform's API structure and data mapping; Knit's AI generates the connector.
Passthrough API
Need an object outside the unified APIs β a custom object in Salesforce, a custom pipeline field in HubSpot? Passthrough lets you make direct calls to the underlying CRM using Knit's authentication layer.
MCP Compatibility
Knit runs CRM-specific MCP servers (including a dedicated HubSpot MCP Server), giving AI agents authenticated read/write access to contacts, companies, deals, and custom objects across every connected CRM through the same unified layer β no per-provider auth or endpoint logic in your agent code.
Quick Start
Authentication
All requests require two headers:
Authorization: Bearer YOUR_API_KEY
X-Integration-Id: YOUR_CUSTOMER_INTEGRATION_IDThe X-Integration-Id is the unique identifier for a specific customer's connected CRM, issued after they complete the Knit auth flow.
Fetch contacts
curl --request POST \
--url https://api.getknit.dev/v1.0/sync.start \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"dataType": "contact"
}Response β same schema whether the customer uses Salesforce, HubSpot, or Pipedrive:
{
"info": {
"id": "02d528f1-89f2-4086-bbf2-6becd6ec407a",
"firstName": "Jordan",
"lastName": "Lee",
"createdAt": "2026-05-23T12:42:34Z",
"updatedAt": "2026-05-23T12:42:34Z",
"ownerId": "407425865",
"companyId": "ac19c8f9-a901-4db3-bef1-5aaca2a7c15a"
},
"emails": [
{ "type": "WORK", "email": "[email protected]" }
],
"phones": [
{ "type": "WORK", "phoneNumber": "9838783908" }
],
"addresses": [
{
"addressLine1": "72/1A Church Street",
"city": "Austin",
"state": "TX",
"country": "USA",
"zipCode": "78701",
"addressType": "WORK"
}
],
"customFields": {
"fields": {
"unmappedFieldKey": "value"
}
}
}Create a deal
curl --request POST \
--url https://api.getknit.dev/v1.0/crm.deal.create \
--header 'accept: application/json' \
--header 'content-type: application/json'Log an activity
curl --request POST \
--url https://api.getknit.dev/v1.0/crm.engagement.create \
--header 'accept: application/json' \
--header 'content-type: application/json'
Rate limitsKnit applies per-provider rate limits based on the underlying CRM's constraints and manages it automatically if you've set up a sync. If you hit a limit, the API returns a
429response with aRetry-Afterheader.
Use Cases
Multi-CRM Lead Routing
Unify lead data from multiple CRMs into a single view β deduplicating, standardizing, and routing leads to the right owner in real time.
Typical flow: record.created webhook β normalize lead β dedupe against existing contacts β assign owner β sync back to source CRM
AI SDRs & Sales Agents
Power AI sales agents with unified, real-time access to CRM and calendar data for personalized outreach and accurate scheduling β without per-CRM logic in the agent.
Typical flow: sync contacts + deals β embed into vector store β ground LLM responses in live pipeline context β use MCP write tools to log activity back into the CRM
Deal Pipeline Sync
Keep deal stage, amount, and ownership consistent across a data warehouse, BI tool, or a second CRM used by a different team.
Typical flow: fetch deals by pipeline β normalize stage names across providers β sync to warehouse or downstream tool β write updates back on stage change
Multi-Channel Sales Sequencing
Orchestrate outreach sequences that read and write CRM state β contacts, companies, and engagement history β across whichever CRM the customer runs.
Typical flow: read contacts + engagement history β trigger sequence step β log engagement β update contact status
Customer 360 / Unified View
Combine CRM contact and deal data with support, product, and billing data to build a single customer view inside your product.
Typical flow: sync contacts + companies + deals β join with product usage/support data β render unified customer profile
Revenue Reporting & Forecasting
Pull deal and pipeline data across every CRM a customer's teams use into one consistent schema for forecasting and reporting.
Typical flow: fetch deals by stage and close date β normalize currency and stage naming β aggregate into reporting layer
FAQ
What is a unified CRM API?
A unified CRM API is a single, standardized interface that lets your product read and write contact, company, deal, and activity data across multiple CRM platforms without building a separate integration for each one. You integrate with Knit once; Knit normalizes the data models, authentication, and API differences between providers.
How long does it take to integrate?
Most teams go live in 1β3 days with Knit. Building a production-ready 1:1 native integration against a single CRM like Salesforce typically takes several weeks β but when you build with Knit, one integration unlocks every connected CRM, and Knit maintains all connectors as providers update their APIs.
Does Knit store CRM data?
No. Knit is a pass-through layer β requests hit the source CRM in real time and no data is stored at rest. This reduces your GDPR, CCPA, and SOC 2 compliance scope.
What's the difference between a Lead and a Contact in the unified schema?
Where the underlying CRM distinguishes them (Salesforce, Zoho CRM), Knit preserves that distinction β Leads are pre-pipeline, unqualified records; Contacts are associated with a Company and can be linked to Deals. Where a CRM doesn't distinguish them (HubSpot, Pipedrive), Knit maps records to the Contact object.
What if a customer's CRM isn't on the list?
Using the Connector Builder, we can add a new connector in hours.
Is Knit compatible with AI agents and MCP?
Yes. Knit runs CRM-specific MCP servers, including a dedicated HubSpot MCP Server, so agents in MCP-compatible frameworks can perform authenticated CRM read/write actions via Knit with no per-provider logic.
What's the passthrough API?
The passthrough API lets you make direct calls to the underlying CRM using Knit's authentication layer. Use it for custom objects or fields outside the unified schema.
Next Steps
| π Get your API key | Start building in minutes |
| π€ Contact data model | Full field reference for the core object |
| π° Deal data model | Deal/opportunity field reference |
| π’ Company data model | Account/company field reference |
| π Engagement data model | Calls, emails, meetings, and notes field reference |
| π Supported CRM integrations | Full list of connected platforms |
| Custom Objects | APIs to work with custom objects |
Updated about 3 hours ago

