SK CRM is the suite's most battle-hardened API: Zod validators generate the OpenAPI spec, CI fails on drift, every mutation takes an idempotency key, and the voice ingestion contract that powers SK Voice is the same public surface you get.
Bearer keys, prefixed ULIDs, cursor pagination, and an idempotency key on every mutation — the platform conventions, everywhere.
curl -X POST https://api.softknack.com/crm/v1/leads \ -H "Authorization: Bearer sk_test_..." \ -H "Idempotency-Key: 9f2c-...-d41a" \ -H "Content-Type: application/json" \ -d '{ "contact": { "name": "Priya Raghavan", "phone": "+91XXXXXXXXXX" }, "source": "website", "interests": [{ "catalog_item_id": "itm_01J9X...", "note": "1.5T split AC" }] }' # → 201 · { "id": "ld_01J9X...", "contact_id": "ctc_01J9X...", "stage": "new" }
lead.createdFrom any door — agent finalize, API, manual. Source attribution included.
lead.stage_changedGuarded transition committed — from, to, actor, and whether it was a revival.
call.finalizedThe atomic write completed: lead, interest, call and appointment IDs in one payload.
contact.updatedField-level diff — what changed, by whom. Append-only on the timeline.
sequence.step_executedWhich step, which channel, delivery outcome from SK Notifications.
deal.won / deal.lostStage, value, owner — the events your dashboards and bonuses run on.
HMAC-SHA256At-least-once with the platform retry schedule (1s → 4s → 16s → 1m → 5m → 30m → 2h) and dead-letter replay.
24h replaySame key + same body replays the original result; same key + different body is rejected with 409.
ld_ · ctc_ · apt_Sortable, copy-paste-debuggable IDs, consistent across the entire suite.
mcp.softknack.comLeads, contacts, context bundles and pipeline moves exposed as scoped MCP tools — your agents, same powers as ours.
Auth, errors, pagination, tenancy and the complete schemas — written once for the platform, linked from every product.
Test keys are free — and the spec can't lie to you.
Start free