Getting Started
Using the app
Kordic brings your entire sales workflow into one place. Here's a tour of the core areas you'll use every day.
📋
Pipeline & stages
Drag and drop leads across custom stages on the Kanban board. Each card shows deal value, owner, and a stale-lead day counter so nothing goes cold.
👤
Leads
Open any lead to see contact details, notes, emails, documents, payments and integration tabs — the full history of the deal in one timeline.
🏢
Accounts & Contacts
Manage companies as Accounts, each with multiple Contacts. Pick an account when adding a deal and its contacts auto-fill instantly.
💳
Payments
Record payments with VAT, track outstanding balances, and route them through the accountant confirmation workflow for a clean audit trail.
📊
Analytics
See your pipeline funnel, win rates, revenue trends and per-user performance rankings — updated in real time.
👥
Team & roles
Invite Owners, Managers, Agents and Accountants. Role-based access controls exactly what each person can see and do.
📁
Documents
Upload contracts, proposals and invoices per lead, or save Google Drive links. Download anytime via secure presigned URLs.
🤖
AI pre-call briefings
Before each call, get a 3-part AI summary — situation, talking points, and risk flags — powered by Claude. Available on Growth & Business plans.
Schedule Zoom meetings from a lead and pull meeting transcripts back in as notes — all without leaving the CRM.
Adding the app
1
Log in to Kordic CRM at app.kordic.io and open any lead from the Pipeline view.
2
Click the Zoom tab inside the lead, then click Connect Zoom.
3
You'll be redirected to Zoom's OAuth page. Review the requested permissions and click Allow.
4
You'll return to Kordic with Zoom showing as Connected.
Troubleshooting
- If connection fails, click Disconnect then Connect again.
- Make sure you're logged into the correct Zoom account before authorising.
- Ensure your browser allows redirects from kordic.io.
Usage — Schedule a meeting
Zoom connected
Lead open
Open a lead → click the Zoom tab → + Schedule Meeting.
Fill in the topic, date, time and duration, then click Create.
The join link and details appear in the lead's Zoom tab.
Usage — Fetch a meeting transcript
Paid Zoom account
Cloud recording enabled
Meeting completed
Open the lead → Zoom tab → find the completed meeting → click Transcript.
The transcript is saved as a note on the lead record.
Removing the app
1
Open any lead → click the Zoom tab → click Disconnect.
2
You can also revoke access from Zoom under App Marketplace → Manage → Installed Apps.
Data deletion on disconnect
All stored OAuth tokens (access & refresh) are permanently deleted from our database immediately. Kordic can no longer access your Zoom account. Previously saved meeting records and transcripts remain in lead notes as historical data — remove them manually if you wish.
Send emails and view full conversation history per lead. Every message is logged automatically on the lead's timeline.
Adding the app
1
Log in to Kordic and open any lead, then click the Emails tab.
2
Click Connect Gmail, sign in with your Google account and click Allow.
3
Your Gmail is connected — email history now appears in lead records.
Usage
Gmail connected
See all emails exchanged with a lead's contact directly inside the lead record — no switching to Gmail.
Send emails to leads from Kordic. Sent emails are automatically linked to the lead record.
Removing the app
1
Open a lead → Emails tab → click Disconnect Gmail.
Data on disconnect — OAuth tokens are permanently deleted immediately upon disconnection. Kordic will no longer access your Gmail account.
Connect Microsoft Outlook to send emails and keep full conversation history attached to each lead.
Adding the app
1
Log in to Kordic and open any lead, then click the Emails tab.
2
Click Connect Outlook, sign in with your Microsoft account and click Accept.
3
Outlook is connected — email history now appears in lead records.
Usage
Outlook connected
See all emails exchanged with a lead's contact inside the lead record — no switching to Outlook.
Send emails to leads from Kordic. Sent emails are automatically linked to the lead record.
Removing the app
1
Open a lead → Emails tab → click Disconnect Outlook.
Data on disconnect — OAuth tokens are permanently deleted immediately upon disconnection. Kordic will no longer access your Outlook account.
Sync leads to a Mailchimp audience, run campaigns, and see subscriber status and email activity right on the lead.
Adding the app
1
As an Owner or Manager, open Workspace settings in Kordic.
2
Find the Mailchimp section and click Connect Mailchimp, then authorise on Mailchimp's OAuth page.
3
Back in Kordic, choose the audience (list) you want leads synced to.
4
Mailchimp shows as Connected and a Mailchimp tab appears on every lead.
Usage — Sync a lead & track activity
Mailchimp connected
Audience selected
Lead has an email
Open a lead → Mailchimp tab → click Sync to Mailchimp to add the contact to your audience.
The tab shows subscriber status (subscribed, unsubscribed, cleaned, pending) and the selected audience.
Email activity and real-time events (opens, campaigns sent, unsubscribes) appear as they happen via webhooks.
Managers can click Unsubscribe to remove a contact from the audience.
Removing the app
1
Open Workspace settings → Mailchimp and click Disconnect.
Data on disconnect — OAuth tokens are permanently deleted. Kordic will no longer access your Mailchimp account or sync new leads. Contacts already in your Mailchimp audience remain there — manage them from Mailchimp directly.
Send and receive WhatsApp messages directly from any lead profile via the WhatsApp Business API. Incoming messages are matched to leads by phone number, and your whole team works from one place — no one needs the WhatsApp Business app.
Prerequisites
🏢 Meta Business Account
📱 WhatsApp Business number
🔑 Owner or Manager role
Adding the app
1
Create a Meta Business Account — at business.facebook.com, sign in with Facebook, click Create Account and verify your email. Already have one? Skip ahead.
2
Prepare your number — Kordic's wizard creates your WhatsApp Business Account (WABA) automatically. Ensure your Meta Business Account is active and you can receive a verification SMS or call.
3
Connect inside Kordic — open any lead → WhatsApp tab → Connect WhatsApp Business. A Meta pop-up opens; log in with the Facebook account linked to your Meta Business Account.
4
Scan the QR code — on your phone open WhatsApp Business → ⋮ → Linked devices → Link a device → scan the on-screen code.
5
You're live — Kordic activates the connection automatically. All agents and managers can now message from any lead's WhatsApp tab.
Troubleshooting
- "Facebook SDK not loaded" — wait 5–10 seconds and retry; check your browser isn't blocking Facebook scripts.
- Verification code not arriving — make sure the number isn't already active on WhatsApp; try the voice-call option.
- Shows disconnected after setup — refresh the page; if it persists, disconnect and reconnect.
- Pop-up blocked — allow pop-ups for Kordic, then try again.
Usage
WhatsApp connected
Open a lead → WhatsApp tab to send and receive messages.
Full conversation history is kept per lead, in one place.
Incoming messages are automatically matched to leads by phone number.
Removing the app
1
Open a lead → WhatsApp tab → click Disconnect (Owner/Manager only).
Data on disconnect — Stored access tokens are permanently deleted immediately. Kordic will no longer send or receive WhatsApp messages on your behalf. Previously logged conversations remain on the lead as historical data.
Call your leads with one click, right from the CRM. Every call is saved on the lead's timeline, and you can optionally record and transcribe calls. You use your own Twilio account and pay Twilio directly — Kordic adds no markup.
Prerequisites
🔑 Owner or Manager role (to set up)
☎️ A Twilio account
What you get
One-click dialing — call any lead without leaving Kordic or copying numbers.
Automatic call log — every call is saved on the lead with its time, duration and outcome.
Optional recording — turn it on with one click and a consent tick.
Optional AI transcripts — see a written transcript under each recorded call.
Smarter AI Briefing — call outcomes and transcripts help the Briefing prep your next call.
Step 1 — Connect your Twilio account
1
Open any lead and click the Voice tab.
2
In the Twilio Console, create a new Standard API Key (name it "Kordic CRM") and copy the Secret right away — Twilio shows it only once.
3
Back in Kordic, paste your Account SID (starts with AC…), API Key SID (starts with SK…) and the Secret, then click Connect Twilio.
4
That's it — Kordic checks the details with Twilio and gets the dialer ready. Next, add a phone number.
Use a Standard API Key — it gives Kordic exactly what it needs to place calls, nothing more. If you miss copying the Secret, just delete that key in Twilio and create a new one.
Step 2 — Get a phone number
Buy a number through Kordic
1
Voice tab → Phone numbers → Buy a number.
2
Pick a country (e.g. US, AE, GB), optionally filter by area code or digits, then click Search.
3
Tick Set as workspace default if it's your first number, then click Buy. Twilio charges you at its normal rate.
Already own a number?
Numbers in your Twilio account show up under Not linked — click Link to Kordic to use one. Same number, no re-buying. For linked numbers you can Set default (the caller ID Kordic uses) or Release them back to Twilio.
Step 3 — Make a call
1
Open a lead that has a phone number and click the green 📞 Call button.
2
The dialer opens with the lead's name. Pick which number to call from if you like, then press the green button.
3
The first time, your browser asks to use the microphone — click Allow.
During a call you have a timer, a Mute button, and a red End button. Minimise shrinks the dialer to a small pill so you can keep working while you talk.
Recording & transcripts (optional)
Recording — in the Voice tab, turn on Record calls and accept the consent message. Choose retention (30 / 60 / 90 days, or keep until deleted). Applies to future calls only.
Transcripts — turn on Twilio Voice Intelligence in your Twilio console, then click Refresh setup in Kordic. New recorded calls then get a written transcript automatically.
After the call
Open the lead → Notes tab to see the call with its outcome, duration and numbers used.
If recording is on, click Play recording to listen right there.
If transcripts are on, click Show transcript a minute or so after the call to read it.
The AI Briefing tab uses recent calls to help prep your next conversation.
Who can do what
| Role | Set up & manage | Make calls | Play recordings |
| Owner & Manager | ✓ | ✓ | ✓ |
| Agent | — | ✓ (own leads) | ✓ (own leads) |
| Accountant | — | — | — |
Removing Twilio
1
Voice tab → Disconnect Twilio (Owner/Manager only).
Your Twilio details are removed from Kordic right away. Your phone numbers stay in your Twilio account — reconnect any time and they're ready to re-link. Calls already logged stay on the lead as history.
Public API · REST v1
API Reference
Read and write your CRM data from anywhere — your website forms, automation tools (Zapier, Make), a data warehouse or a custom integration. Authenticate with an API key you generate yourself; every key is scoped to a single workspace.
🔑 Owner or Manager role
🌐 Base URL: https://api.kordic.io/api/v1
Creating an API key
1
Sign in to Kordic as an Owner or Manager and open Developer from the sidebar.
2
Click Create key, give it a name (e.g. Zapier production), and tick the scopes it should have (read/write per resource).
3
Copy the key immediately — it's shown only once and cannot be retrieved again. It looks like kdc_live_…
Keep keys server-side — An API key is a full credential to your workspace — never embed it in a browser app, mobile app, or public repository. If a key leaks, revoke it from the Developer page — it stops working within about a minute.
Authentication
Send the key as a bearer token. Use GET /me to verify a key and see its scopes:
# Verify your key
curl https://api.kordic.io/api/v1/me \
-H "Authorization: Bearer kdc_live_your_key_here"
# → { "data": { "workspace_id": "…", "scopes": ["leads:read", "leads:write"] } }
Scopes
A key only works on endpoints its scopes allow — read endpoints need :read, writes need :write. A request missing the scope returns 403 permission_error.
| Scope | Allows |
| leads:read / leads:write | Create, read, update and delete leads |
| contacts:read / contacts:write | Manage contacts |
| accounts:read / accounts:write | Manage company accounts |
| stages:read / stages:write | Read and manage pipeline stages |
| payments:read / payments:write | Record and confirm payments |
| documents:read / documents:write | Attach and retrieve documents |
| notes:write | Log notes / activities onto a lead |
| activity:read | A lead's unified activity timeline |
Conventions
All responses are JSON. A single resource: {"data":{…}}; lists: {"data":[…],"meta":{…}} paginated with ?page= (default 1) and ?per_page= (default 20, max 100).
// Pagination meta (on list responses)
"meta": { "page": 1, "per_page": 20, "total": 137, "total_pages": 7 }
// Error envelope
{ "error": { "type": "invalid_request_error", "code": "validation_error",
"message": "stage_id: Required", "param": "stage_id" } }
API Reference
Endpoints
Every endpoint is relative to https://api.kordic.io/api/v1 and requires Authorization: Bearer <key>.
# List leads — filters: stage_id, assigned_to, search, created_after, created_before
GET /leads?stage_id=STAGE_UUID&search=acme&page=1&per_page=20
# → 200
{
"data": [{
"id": "9c1f7e20-…", "company_name": "Acme Inc",
"contact_name": "Jane Buyer", "email": "buyer@acme.com",
"stage_id": "…", "deal_value": 5000, "currency": "USD",
"created_at": "2026-06-23T10:00:00.000Z"
}],
"meta": { "page": 1, "per_page": 20, "total": 1, "total_pages": 1 }
}
# Create a lead — company_name + stage_id required
POST /leads
{ "company_name": "Acme Inc", "stage_id": "STAGE_UUID", "deal_value": 5000, "currency": "USD" }
# → 201 { "data": { "id": "9c1f7e20-…", "company_name": "Acme Inc", … } }
# Get / update / delete a single lead
GET /leads/9c1f7e20-… # → 200 { "data": { …lead… } }
PATCH /leads/9c1f7e20-… # body: any subset of fields → 200
DELETE /leads/9c1f7e20-… # → 200 { "data": { "id": "…", "deleted": true } }
GET /accounts?search=acme
# → 200
{ "data": [{ "id": "…", "company_name": "Acme Inc", "industry": "Manufacturing",
"website": "https://acme.example.com", "city": "San Francisco" }] }
# Create — company_name required
POST /accounts
{ "company_name": "Acme Inc", "industry": "Manufacturing", "city": "San Francisco" }
GET /accounts/:id # → 200
PATCH /accounts/:id # → 200
DELETE /accounts/:id # → 200
# List stages — not paginated (returns full ordered set)
GET /stages
# → 200
{ "data": [{ "id": "…", "name": "New", "position": 0,
"is_won": false, "color": "#3B82F6", "probability": 25 }] }
# Create — name + position required
POST /stages
{ "name": "Proposal Sent", "position": 3, "color": "#F59E0B", "probability": 60 }
GET /stages/:id # → 200
PATCH /stages/:id # → 200
DELETE /stages/:id # → 200, or 409 if leads still use it
# List payments — filters: lead_id, status=pending|confirmed
GET /payments?lead_id=LEAD_UUID&status=confirmed
# → 200
{ "data": [{ "id": "…", "lead_id": "…", "amount": 2500, "currency": "USD",
"payment_method": "bank_transfer", "status": "confirmed",
"confirmed_at": "2026-06-23T11:00:00.000Z" }] }
# Record — lead_id, amount, payment_method, payment_date required
POST /payments
{ "lead_id": "LEAD_UUID", "amount": 2500, "payment_method": "bank_transfer",
"payment_date": "2026-06-23T10:00:00Z", "notes": "Deposit" }
# → 201
GET /payments/:id # → 200
PATCH /payments/:id/confirm # → 200, sets confirmed_at + confirmed_by
DELETE /payments/:id # → 200
# Write-only: create/update/delete notes on a lead.
# Read them via the activity timeline.
POST /leads/LEAD_UUID/notes
{ "content": "Customer requested a callback next week." }
# → 201 { "data": { "id": "…", "lead_id": "…", "content": "…" } }
PATCH /leads/LEAD_UUID/notes/:id # body: { "content": "…" } → 200
DELETE /leads/LEAD_UUID/notes/:id # → 200 { "data": { "deleted": true } }
# List a lead's documents (not paginated)
GET /leads/LEAD_UUID/documents
# → 200 { "data": [{ "id": "…", "document_type": "quotation",
"name": "Quote Q-1001", "drive_url": "https://…" }] }
# Attach a link document — document_type, name, drive_url required
POST /leads/LEAD_UUID/documents
{ "document_type": "quotation", "name": "Quote Q-1001", "drive_url": "https://drive.example.com/q" }
# → 201
# Download target
GET /leads/LEAD_UUID/documents/:id/download
# → 200 { "data": { "type": "link", "url": "https://…", "name": "Quote Q-1001" } }
DELETE /leads/LEAD_UUID/documents/:id # → 200
# Unified, time-sorted feed for one lead (paginated)
GET /leads/LEAD_UUID/activity?page=1&per_page=50
# → 200 — type: note · email · call · payment · document · whatsapp_message
{
"data": [
{ "type": "call", "occurred_at": "2026-06-22T14:30:00.000Z",
"actor": { "name": "Jane Agent" },
"data": { "direction": "outbound", "status": "completed", "duration_seconds": 142 } },
{ "type": "payment", "occurred_at": "2026-06-22T11:00:00.000Z",
"actor": { "name": "Sam Owner" },
"data": { "amount": 2500, "currency": "USD" } }
],
"meta": { "page": 1, "per_page": 50, "total": 3, "total_pages": 1 }
}
1,000 requests per 15 minutes per key. Every response includes RateLimit-* headers showing your remaining budget; exceeding it returns 429.
Revoking a key
1
Open Developer in the sidebar → click Revoke next to the key (Owner/Manager only).
The key stops working within about a minute and cannot be reactivated. Your CRM data is untouched — only that credential is disabled.
Still need help?
Our team responds within one business day — critical issues within four business hours.
Contact support →