Build on Conduyt.
Ship faster.
Guides, API references, and SDKs for integrating with Conduyt CRM. Written by the engineers who built it.
Overview
Conduyt's API lets you programmatically manage contacts, deals, pipelines, tasks, and more. Build integrations, automate workflows, and extend your CRM with a REST API that mirrors every action available in the Conduyt web app.
The API uses standard HTTP verbs, returns JSON responses, and authenticates via Bearer tokens. If you can make HTTP requests, you can use Conduyt's API. No SDK required (though we publish official ones for Node.js and Python).
Authentication
All API requests require a Bearer token sent in the Authorization header. Tokens are scoped to a workspace and can be granted read-only, read-write, or admin permissions.
Creating an API Key
- Navigate to Settings → API in your Conduyt workspace
- Click Generate Key
- Choose a scope:
read,read-write, oradmin - Copy the key immediately; it will only be shown once
All API keys are prefixed with cdy_ for easy identification in logs and config files. Workspace API keys do not expire. User-scoped tokens expire after 90 days of inactivity.
curl https://conduyt.app/api/v1/contacts \ -H "Authorization: Bearer cdy_your_api_key_here" \ -H "Content-Type: application/json" # 200 OK
CONDUYT_API_KEY). Never commit keys to version control or expose them in client-side code.Base URL
All API requests are made to the following base URL:
https://conduyt.app/api/v1
All endpoints documented in this guide are relative to this base. For example, the contacts list endpoint is GET https://conduyt.app/api/v1/contacts.
Rate Limits
Rate limits are enforced per API key and vary by plan tier. When you exceed the limit, the API returns 429 Too Many Requests with a Retry-After header indicating when you can retry.
| Plan | Rate Limit | Burst |
|---|---|---|
| Starter | 100 req/min | 20 req/sec |
| Standard | 500 req/min | 50 req/sec |
| Premium | 2,500 req/min | 100 req/sec |
| Enterprise | Custom | Custom |
Rate limit information is included in every response via these headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the current window resets |
Retry-After | Seconds to wait before retrying (only on 429) |
Accounts & Workspaces
Conduyt uses a multi-tenant architecture where all data is scoped to a workspace. Each workspace belongs to an account and is fully isolated: contacts, deals, pipelines, and settings in one workspace are invisible to another.
API keys are workspace-scoped. A single account can have multiple workspaces (e.g., one per department or region), each with its own API keys, pipelines, and team members.
Pagination
All list endpoints return paginated results. Conduyt uses page-based pagination with page and limit query parameters.
GET /api/v1/contacts?page=2&limit=25
# Response includes pagination metadata
{
"data": [...],
"meta": {
"page": 2,
"limit": 25,
"total": 342,
"totalPages": 14
}
}| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number to retrieve |
limit | integer | 50 | Items per page (max: 100) |
Filtering
Most list endpoints support filtering via query parameters. Filters are specific to each resource. See the API Reference for available filters per endpoint.
Common filter patterns:
- Exact match:
?status=active - Search:
?search=sarah(searches across name, email, phone) - Date range:
?created_after=2026-01-01&created_before=2026-03-31 - Relationship:
?assigned_to=uuid
Error Handling
All error responses follow a consistent JSON structure with a stable code enum, a human-readable message, and optional details for validation errors.
{
"error": {
"code": "validation_failed",
"message": "The request body contains invalid fields.",
"details": [
{
"field": "email",
"message": "Must be a valid email address"
}
]
}
}| HTTP Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed request body or query parameters |
| 401 | unauthenticated | Missing, invalid, or expired API key |
| 403 | permission_denied | API key lacks the required scope for this action |
| 404 | not_found | Resource does not exist or is not accessible |
| 422 | validation_failed | Request is well-formed but semantically invalid. Check details array. |
| 429 | rate_limited | Rate limit exceeded. Check Retry-After header. |
| 500 | internal_error | Something went wrong on our end. Retry after a moment. |
| 503 | unavailable | Service temporarily unavailable. Check status page. |
Webhooks
Webhooks let you receive real-time HTTP notifications when events occur in your workspace. Instead of polling the API, register a webhook URL and Conduyt will POST event payloads to it.
Signing & Verification
Every webhook request is signed with HMAC-SHA256 using your workspace's webhook secret. The signature is sent in the X-Conduyt-Signature header. Always verify signatures before processing webhooks.
import crypto from 'crypto';
function verifyWebhook(req, secret) {
const signature = req.headers['x-conduyt-signature'];
const computed = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(req.body))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(computed)
);
}Retry Policy
If your endpoint returns a non-2xx status code, Conduyt retries with exponential backoff for up to 72 hours. After 72 hours of failures, the webhook is automatically disabled and you'll receive an email notification.
Available Events
contact.created,contact.updated,contact.deleteddeal.created,deal.updated,deal.stage_changedtask.created,task.completedmessage.sent,message.receivednote.createdpipeline.updated
See Webhooks API Reference for the full event catalog and payload schemas.
API Resources
Below is a summary of every resource available in the Conduyt API. Each links to its full endpoint documentation in the API Reference.
Contacts
Create, read, update, delete contacts. Tag contacts, import from CSV, and perform bulk operations.
CRUDCompanies
Manage companies and link them to contacts. Track company-level data and relationships.
CRUDDeals
Create and manage deals. Move deals through pipeline stages, assign owners, and track values.
CRUDPipelines
Configure pipelines and stages. Define stage order, probabilities, and multi-pipeline workflows.
CRUDTasks
Create tasks, assign to team members, set due dates, and mark complete. Link to contacts or deals.
CRUDNotes
Add notes to contacts and deals. Rich text supported. Notes appear in the activity timeline.
CRUDTags
Create and manage tags. Apply tags to contacts for segmentation and filtering.
SEND + LISTMessages
Send SMS and email messages to contacts. View message history and delivery status.
READConversations
View threaded conversation history for any contact, across SMS and email channels.
CRUD + TRIGGERAutomations
Register n8n webhook triggers, list automations, and fire custom events into your workflows.
CRUDCalendars
Manage calendars and appointments. Create booking links, schedule meetings, and track availability.
CRUDCustom Fields
Define custom fields for contacts, deals, and companies. Supports text, number, date, select, and multi-select types.
CRUD + TESTWebhooks
Register webhook endpoints, choose events to subscribe to, and send test payloads for verification.
CRUD + INVITEUsers
List team members, send invitations, update roles, and remove users from the workspace.
MANAGEBilling
Create checkout sessions, access the billing portal, and check subscription status.
SEARCHSearch
Cross-entity search across contacts, deals, companies, and notes with a single query.
AUDITActivities
View the audit trail of all actions taken in the workspace. Filter by entity, user, or action type.
BATCHBulk Operations
Batch update, delete, or tag contacts and deals. Process up to 1,000 records per request.
CRUD + PUBLICForms
Lead capture forms and submission tracking. Public submission endpoint auto-creates contacts by email.
CRUDProducts
Product catalog for invoicing. Manage SKUs, pricing, tax settings, and units.
CRUD + PAYMENTSInvoices
Create, send, and track invoices with line items. Record payments and auto-calculate totals.
MANAGEPayments
Record and manage payments against invoices. Auto-updates paid amounts and invoice status.
CRUDEmail Templates
Create and manage reusable email templates with merge fields for personalized outreach.
CRUD + ENROLLEmail Sequences
Automated multi-step email sequences. Enroll contacts, track opens, and manage drip campaigns.
CRUDCalls
Log and track calls with contacts. Filter by direction, status, user, and date range.
CRUD + TRIGGERWorkflows
Advanced workflow automation with triggers, actions, and run history. Activate, deactivate, and monitor executions.
SDKs
Official SDKs wrap the REST API with typed methods, automatic pagination, and built-in retry logic. Any language with HTTP support works. The SDKs are a convenience, not a requirement.
Node.js / TypeScript
import { Conduyt } from '@conduyt/sdk';
const client = new Conduyt({
apiKey: process.env.CONDUYT_API_KEY,
});
// List contacts
const { data, meta } = await client.contacts.list({
search: 'sarah',
limit: 25,
});
// Create a deal
const deal = await client.deals.create({
name: 'Acme Corp Renewal',
value: 24000,
pipelineId: 'pipe_abc123',
stageId: 'stage_qualified',
});
// => "deal_01HX7Q5CA..."Python
from conduyt import Conduyt
client = Conduyt(api_key=os.environ["CONDUYT_API_KEY"])
# List contacts
contacts = client.contacts.list(search="sarah", limit=25)
# Create a deal
deal = client.deals.create(
name="Acme Corp Renewal",
value=24000,
pipeline_id="pipe_abc123",
stage_id="stage_qualified",
)
print(deal.id)
# => "deal_01HX7Q5CA..."Both SDKs are open source. Contributions welcome.
- Node.js: github.com/conduyt/sdk-node · npm
- Python: github.com/conduyt/sdk-python · PyPI
Quickstart
Go from zero to your first API call in under 5 minutes.
Create an API key
Go to Settings → API in your Conduyt workspace. Click Generate Key, select read-write scope, and copy the key. It starts with
cdy_.List your contacts
Make your first API call to fetch contacts from your workspace.
curlcurl -s https://conduyt.app/api/v1/contacts?limit=5 \ -H "Authorization: Bearer cdy_your_api_key" | jq . # Returns your first 5 contacts with pagination metadata
Create a deal
Create a new deal in your default pipeline.
curlcurl -X POST https://conduyt.app/api/v1/deals \ -H "Authorization: Bearer cdy_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "name": "Northwind Logistics", "value": 42000, "pipelineId": "pipe_default", "stageId": "stage_qualified" }' # Returns the newly created deal objectSet up a webhook
Subscribe to deal events so you get notified when deals are created or updated.
curlcurl -X POST https://conduyt.app/api/v1/webhooks \ -H "Authorization: Bearer cdy_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.com/webhooks/conduyt", "events": ["deal.created", "deal.stage_changed"], "active": true }' # Returns the webhook object with your signing secretNext steps
You're up and running. Explore the full API Reference for all available endpoints, or install an SDK for typed access in your language of choice.
Ready to integrate?
The API Reference documents every endpoint with parameters, response schemas, and curl examples.