Identity
What this key is.
get/public/whoami
Requires a valid key but no particular scope. Carries no lead data and costs no rows — make it the first node of every workflow so a bad key fails loudly and early.
Response 200
The key’s identity and today’s usage. Returns Whoami.
Errors: 400, 401, 403, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/whoami" \
-H "X-API-Key: $CRM_KEY"
Leads
People.
get/public/leads
Scope: LEADS_READ. Ordered by id ascending.
Query
updatedSincestring (date-time)
Incremental sync: only rows changed at or after this instant.
createdSincestring (date-time)
Only rows created at or after this instant.
primaryStatusstring
The lead badge, which mirrors the person’s NEWEST inquiry.
One of: NEW, IN_PROGRESS, CONVERTED, LOST, DORMANT
campaignIdstring
Leads holding at least one inquiry in this campaign.
assignedToUserIdstring
A user id from GET /public/reference, or the literal unassigned.
phonestring
Digit-tail match on phone and alternatePhone, so "+91 98765 43210" and "9876543210" find the same person.
limitinteger
Rows per page.
1 to 200. Default 50
cursorstring
Opaque keyset cursor. Pass back the previous response’s nextCursor; stop when it is null.
Response 200
A page of leads.
Errors: 400, 401, 403, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/leads" \
-H "X-API-Key: $CRM_KEY"
get/public/leads/{id}
Scope: LEADS_READ. Costs 1 row.
Response 200
The lead, newest inquiry first. Returns any.
Errors: 400, 401, 403, 404, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/leads/clx1lead0001" \
-H "X-API-Key: $CRM_KEY"
Inquiries
A person’s interest in one campaign.
get/public/inquiries
Scope: INQUIRIES_READ. This is where segmentation lives — lifecycle is resolved from the stage’s closes/converts flags, so it keeps working when an organization renames its stages.
Query
updatedSincestring (date-time)
Incremental sync: only rows changed at or after this instant.
createdSincestring (date-time)
Only rows created at or after this instant.
campaignIdstring
Campaign id.
campaignCodestring
Campaign code from GET /public/reference.
stageCodestring
Stage code from GET /public/reference.
lifecyclestring
Derived from the stage flags, never from a hardcoded code.
One of: open, closed, converted, lost
dispositionCodestring
The last call outcome applied.
assignedToUserIdstring
A user id from GET /public/reference, or the literal unassigned.
hasBalanceboolean
true = a fee is set and not fully paid.
includeNurtureboolean
Include the long-term Nurture pool. Off by default — a consumer asking for open work almost never means the parked rows.
Default false
limitinteger
Rows per page.
1 to 200. Default 50
cursorstring
Opaque keyset cursor. Pass back the previous response’s nextCursor; stop when it is null.
Response 200
A page of inquiries.
Errors: 400, 401, 403, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/inquiries" \
-H "X-API-Key: $CRM_KEY"
get/public/inquiries/{id}
Scope: INQUIRIES_READ. Costs 1 row.
Path
idstringrequired
Inquiry id.
Response 200
The inquiry. Returns InquiryDetail.
Errors: 400, 401, 403, 404, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/inquiries/clx1inq0001" \
-H "X-API-Key: $CRM_KEY"
Follow-ups
Scheduled callbacks.
get/public/follow-ups
Scope: FOLLOWUPS_READ. Only live rows (PENDING or OVERDUE) on inquiries that are still open, so a closed lead’s stray callback never reaches an automation.
Query
windowstring
due = scheduled at or before now. overdue = the sweep has already flagged it (a subset of due). today = the IST calendar day. upcoming = still in the future.
One of: due, overdue, today, upcoming. Default "due"
assignedToUserIdstring
A user id from GET /public/reference, or the literal unassigned.
includeNurtureboolean
Include the long-term Nurture pool. Off by default — a consumer asking for open work almost never means the parked rows.
Default false
limitinteger
Rows per page.
1 to 200. Default 50
cursorstring
Opaque keyset cursor. Pass back the previous response’s nextCursor; stop when it is null.
Response 200
A page of follow-ups.
Errors: 400, 401, 403, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/follow-ups" \
-H "X-API-Key: $CRM_KEY"
Events
The append-only change feed.
get/public/events
Scope: EVENTS_READ. Store nextCursor and send it back as since on the next poll.
The feed holds events back by a couple of seconds: a sequence number is allocated when a transaction inserts, not when it commits, so reading right up to "now" would let a poller step over an event that had not become visible yet — permanently.
An unrecognised eventType is not an error; it simply matches nothing.
Query
sinceinteger
Exclusive: the last seq you processed.
At least 0
sinceMinutesinteger
Used ONLY when since is absent, so a first manual run needs no stored cursor.
1 to 1440. Default 60
eventTypestring
CSV, at most 20 entries. Published vocabulary: lead.created, lead.updated, lead.merged, lead.deleted, inquiry.created, inquiry.deleted, inquiry.stage_changed, inquiry.won, inquiry.lost, payment.recorded, followup.due, import.completed, leads.bulk_updated, org.leads_wiped.
includeSuppressedboolean
Include bulk/machine rows (a CSV import, the dormancy sweep) so a mirror stays correct.
Default false
limitinteger
Rows per page.
1 to 500. Default 100
Response 200
A page of events, oldest first.
Errors: 400, 401, 403, 410, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/events" \
-H "X-API-Key: $CRM_KEY"
Reference
Per-organization codes.
get/public/reference
Scope: REFERENCE_READ. Stages, dispositions, sources and courses are editable rows with free-form codes — not enums — so branching on admitted without reading this first is how a workflow silently stops matching. Costs no rows.
Response 200
The organization’s vocabulary. Returns Reference.
Errors: 400, 401, 403, 429, 500
curl "https://api.crm.diginetacademy.in/api/v1/public/reference" \
-H "X-API-Key: $CRM_KEY"
get/public/openapi.json
Response 200
This OpenAPI document.
curl "https://api.crm.diginetacademy.in/api/v1/public/openapi.json" \
-H "X-API-Key: $CRM_KEY"
Objects
The shapes the API returns.
Lead
idstringrequired
namestring | null
phonestringrequired
As stored, which is NOT guaranteed dialable — imports and ad forms wrote raw strings. Send to phoneE164 and skip the row when it is null.
phoneE164string | null
alternatePhonestring | null
emailstring | null
primaryStatusstringrequired
Mirrors the person’s NEWEST inquiry, so a lead can read NEW while holding a CONVERTED inquiry. Message the wrong one and you contact an admitted student.
One of: NEW, IN_PROGRESS, CONVERTED, LOST, DORMANT
assignedToobject | null
tagsstring[]required
firstInquiryAtstring (date-time) | null
lastInquiryAtstring (date-time) | null
lastCalledAtstring (date-time) | null
nextFollowupAtstring (date-time) | null
createdAtstring (date-time)required
updatedAtstring (date-time)required
Inquiry
idstringrequired
leadIdstringrequired
campaignIdstringrequired
campaignCodestring | null
campaignNamestring | null
stageCodestring | null
stageNamestring | null
lifecyclestringrequired
Derived from the stage’s closes/converts flags.
One of: open, converted, lost
dispositionCodestring | null
sourceCodestring | null
courseCodestring | null
assignedToobject | null
attemptCountintegerrequired
totalFeeinteger | null
Whole rupees. null = not captured yet.
paidAmountintegerrequired
balanceinteger | null
null when no fee is set — which is not the same as nothing owed.
nextFollowupAtstring (date-time) | null
closedAtstring (date-time) | null
closedReasonstring | null
createdAtstring (date-time)required
updatedAtstring (date-time)required
InquiryDetail
idstringrequired
leadIdstringrequired
campaignIdstringrequired
campaignCodestring | null
campaignNamestring | null
stageCodestring | null
stageNamestring | null
lifecyclestringrequired
Derived from the stage’s closes/converts flags.
One of: open, converted, lost
dispositionCodestring | null
sourceCodestring | null
courseCodestring | null
assignedToobject | null
attemptCountintegerrequired
totalFeeinteger | null
Whole rupees. null = not captured yet.
paidAmountintegerrequired
balanceinteger | null
null when no fee is set — which is not the same as nothing owed.
nextFollowupAtstring (date-time) | null
closedAtstring (date-time) | null
closedReasonstring | null
createdAtstring (date-time)required
updatedAtstring (date-time)required
tagsstring[]
campaignCustomFieldsobject
formAnswersobject[]
Facebook Lead Ads question/answer pairs, in display order.
paymentsobject[]
FollowUp
Event
seqintegerrequired
Your cursor. Strictly increasing.
apiVersionstringrequired
eventTypestringrequired
leadIdstring | null
A plain id with no foreign key — a delete event outlives its row.
inquiryIdstring | null
dataobjectrequired
Ids, codes and before/after values only — never a snapshot of the person. Hydrate the person from GET /public/leads/{id}, which is always current.
suppressedbooleanrequired
occurredAtstring (date-time)required
Reference
organizationobject
idstring
namestring
timezonestring
stagesobject[]
dispositionsobject[]
campaignsobject[]
sourcesobject[]
coursesobject[]
tagsobject[]
usersobject[]
Whoami