ScaleNova CRM

Public API

Last updated: 24 July 2026

Push leads into ScaleNova CRM from any external tool — Pabbly Connect, AiSensy, JustDial (where a custom webhook is available on your plan), a Google Sheets Apps Script, or your own code.

Getting a key

Go to Settings → API Keys in the dashboard (org ADMIN role required) and click Generate. The full key is shown exactly once — copy it immediately, it can't be retrieved again. If you lose it, revoke it and generate a new one.

Ingest / update a lead

POST https://crm.scalenova.co.in/api/public/v1/leads/{your-api-key}
Content-Type: application/json

The key is embedded directly in the URL path, not sent as a header — most no-code webhook senders can only POST to a URL and can't set custom headers. Treat the full URL, including the key, as a secret.

Request body

FieldTypeRequiredNotes
namestringYesLead's name.
phonestringNoUsed to match an existing lead.
emailstringNoMust be a valid email if provided.
companyNamestringNo
sourcestringYesWhere the lead came from, e.g. "justdial", "pabbly", "website".
actionNamestringNoActivity title logged when the same phone number hits again.
notesstringNo
customFieldsobjectNoKeyed by each field's API name (Settings → Lead Fields). Merge semantics on update.
customActionsarrayNoLogs Custom Actions in the same request: [{ "type": "ACTION_1001", "fields": {...} }]. Max 10.

Leads created this way always start in the FRESH stage, unassigned. If a lead with the same phone already exists in your organization, the endpoint updates it instead of creating a duplicate and logs a new activity entry.

Example

curl -X POST \
  https://crm.scalenova.co.in/api/public/v1/leads/sk_live_xxxxxxxxxxxxxxxxxxxxxxxx \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Rahul Sharma",
    "phone": "9876543210",
    "email": "rahul.sharma@example.com",
    "source": "justdial",
    "actionName": "Lead Created",
    "notes": "Asked about weekend batch",
    "customFields": {
      "budget_range": "50k-1L"
    }
  }'

Custom Actions

Log a structured, org-defined activity (Settings → Custom Actions) against the lead in the same request. Each entry in customActions needs a type and a fields object:

FieldTypeRequiredNotes
typestringYesThe action's code, prefixed with "ACTION_" — e.g. "ACTION_1001". Find the bare code ("Code 1001") next to the action's name in Settings → Custom Actions.
fieldsobjectNoKeyed by each field's key (shown when you open the action in Settings → Custom Actions). Unknown keys, wrong types, or a missing mandatory field are rejected with a 400.

Each field's expected value depends on its type:

FieldTypeRequiredNotes
TEXTstringRejected if shorter/longer than the field's configured min/max length.
NUMBERnumberSend a JSON number, not a quoted string — e.g. 42, not "42".
DATEstringAny value JavaScript's Date.parse() accepts, e.g. "2026-07-24".
DROPDOWNstringMust exactly match one of the field's configured options.

A field can be omitted or sent as null — that's only rejected if the field is marked mandatory on the definition.

curl -X POST \
  https://crm.scalenova.co.in/api/public/v1/leads/sk_live_xxxxxxxxxxxxxxxxxxxxxxxx \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Rahul Sharma",
    "phone": "9876543210",
    "source": "website",
    "customActions": [
      {
        "type": "ACTION_1001",
        "fields": { "course_name": "SUPER_30", "batch": "Weekend" }
      }
    ]
  }'

A bad field value comes back as a 400, with the offending key(s) named in fieldErrors:

{
  "error": "One or more custom field values are invalid.",
  "fieldErrors": {
    "fieldValues.batch": ["\"Batch\" must be one of: Weekend, Weekday."]
  }
}

An unknown or archived type code returns a plain 400: { "error": "No active custom action with code 1001." }.

Success response — 201 Created

{
  "lead": {
    "id": "clx...",
    "name": "Rahul Sharma",
    "phone": "9876543210",
    "source": "justdial",
    "stage": "FRESH",
    "assignee": null,
    "actions": [],
    "createdAt": "2026-07-22T...",
    "updatedAt": "2026-07-22T..."
  }
}

Errors

FieldTypeRequiredNotes
400Validation failed — check error/fieldErrors in the response body.
401The key in the URL is missing, invalid, or has been revoked.
429Rate limit exceeded for this key — wait and retry.

Rate limit: 60 requests per minute per key, fixed window.

Triggering a workflow directly

If a Workflow's trigger node is set to API Trigger, fire it directly with the same org API key:

POST https://crm.scalenova.co.in/api/public/v1/workflows/{workflowId}/trigger/{your-api-key}
Content-Type: application/json

Body: either { "leadId": "..." } for an existing lead, or { "name": "...", "phone": "...", "email": "..." } to match-or-create one. Returns { "ok": true, "leadId": "..." }.

Public API | ScaleNova CRM