Build on Conduyt.
Ship faster.
Guides, API references, and OpenAPI tooling 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 — any language with HTTP support works.
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. API keys support optional expiry dates configured at creation. 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. The default rate limit is 100 requests per minute, configurable per key at creation up to 10,000 per minute. Security-critical endpoints such as login and password reset are limited to 5 requests per minute regardless of key configuration.
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 through the 72-hour retry window. After the final failed attempt, the delivery is marked failed and can be replayed from delivery history.
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, phone, email, URL, formatted number, date, dropdown, radio, multi-select, checkbox, and optional URL/email domain rules.
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 are coming soon. In the meantime, any language with HTTP support works — the REST API is fully documented and requires no wrapper library.
Node.js / TypeScript
Python
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/manage \ -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"], "isActive": 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 download the OpenAPI spec to generate typed clients in your language of choice.
For AI Agents
Conduyt is an AI-native CRM. Every feature is accessible to AI agents via REST API. Three files ship with the platform so AI tools auto-discover capabilities without reading docs.
llms.txt
Served at conduyt.app/llms.txt — a machine-readable discovery file, like robots.txt for AI. Any agent can fetch this to learn what Conduyt does: capabilities, key endpoints, auth requirements, and getting-started steps.
curl https://conduyt.app/llms.txt
CLAUDE.md
Project-level instructions for Claude Code (Anthropic's CLI). When a developer opens the Conduyt repo in Claude Code, it automatically reads this file and learns every API entry point, the tech stack, coding standards, and key file paths. Claude can then build workflows, create endpoints, and debug issues with full context.
AGENTS.md
Same content as CLAUDE.md, formatted for Codex (OpenAI's coding agent) and other AI development tools. Identical API instructions ensure every AI assistant — regardless of provider — gets the same context when working on the codebase.
API Catalog
Call GET /api/v1/schema/api-catalog to discover all 370+ endpoints across 30 domains in one machine-readable JSON response. This is the AI agent's front door to the CRM.
curl https://conduyt.app/api/v1/schema/api-catalog \ -H "Authorization: Bearer cdy_your_api_key" | jq .domains | jq keys # ["activities", "admin", "apiKeys", "auth", "automations", # "billing", "bulk", "calendars", "calls", "companies", # "contacts", "conversations", ...]
Scoped API Keys
Control exactly what each AI agent can do with tier-based access:
| Feature | Description |
|---|---|
| Tiers | read, write, admin — method-level enforcement |
| Domain Scopes | Restrict keys to specific domains (e.g., ["contacts", "deals"]) |
| IP Allowlisting | CIDR notation — lock a key to specific server IPs |
| Per-Key Rate Limits | Custom rate limits per key |
| Self-Discovery | GET /api/v1/api-keys/check — agents discover their own permissions |
Ready to integrate?
The API Reference documents every endpoint with parameters, response schemas, and curl examples.