Lead
Stored in the leads collection. createdAt and updatedAt are maintained automatically.
Returned by GET /lead, POST /lead, GET /lead/:id, PUT /lead/:id.
Example
One real Lead as returned by GET /lead, taken from the data array. Recorded from a live response, so the defaults, denormalised snapshots and populated fields are the actual ones:
{
"_id": "6a957378859eafb47bf227a7",
"importId": [],
"contact": {
"_id": "6a957378859eafb47bf22752",
"name": "Sara Iqbal",
"email": "sara.iqbal@fabrikam.example"
},
"contactSnapshot": {
"contact": "6a957378859eafb47bf22752",
"name": "Sara Iqbal",
"email": "sara.iqbal@fabrikam.example"
},
"productServices": [],
"productServicesSnapshot": [],
"status": "Warm",
"stage": "New",
"priority": "Low",
"company": "6a9572df859eafb47bf225d7",
"contactCreatedBy": "6a9572df859eafb47bf225d9",
"createdBy": {
"_id": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"createdBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"updatedBy": {
"_id": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"updatedBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"isDeleted": false,
"isRestored": false,
"seperateDeleted": false,
"aiGenerated": false,
"enrichmentCount": 0,
"importSnapshot": [],
"enquiryAt": "2026-08-31T12:28:40.294Z",
"enrichmentHistory": [],
"createdAt": "2026-08-31T12:28:40.295Z",
"updatedAt": "2026-08-31T12:28:40.295Z",
"searchText": "warm new low sara iqbal sara.iqbal@fabrikam.example docs test user test@test.test",
"__v": 0,
"team": {},
"teamMember": {}
}
:::note Trimmed for reading A populated reference is shown by the fields that identify it rather than in full — it arrives as the entire referenced document. Long arrays are cut to the first two entries and marked, long strings are truncated, and any field that could carry a credential is dropped rather than masked. :::
Fields
| Field | Type | Notes |
|---|---|---|
fields | object[] | default [] |
fields._id | ObjectId -> CustomField | required |
fields.value | any | |
customFieldsMap | map | default {} |
formId | ObjectId | |
pageId | ObjectId | |
leadId | string | |
source | string | one of Bulk Import, Offline, Facebook, Website, AI Generated, Instagram, Whatsapp, SMS and 5 more |
sourceId | ObjectId | |
importId | ObjectId[] -> Import | default [] |
importSnapshot | object[] | default [] |
importSnapshot.import | ObjectId | |
importSnapshot.fileName | string | |
contact | ObjectId -> Contact | required |
contactSnapshot | object | |
contactSnapshot.contact | ObjectId | |
contactSnapshot.name | string | |
contactSnapshot.email | string | |
contactSnapshot.contactNumber.countryCode | string | |
contactSnapshot.contactNumber.number | string | |
contactSnapshot.fullContactNumber | string | |
productServices | ObjectId[] -> ProductService | default [] |
productServicesSnapshot | object[] | default [] |
productServicesSnapshot.productService | ObjectId | |
productServicesSnapshot.name | string | |
status | string | default Warm · one of Hot, Warm, Cold |
stage | string | default New · one of New, Contacted, Follow-up Required, Qualified, Interested, Proposal Sent, Negotiation, Won and 3 more |
priority | string | default Low · one of High, Medium, Low |
enquiryAt | date | default now |
company | ObjectId -> Company | |
ad_id | string | |
ad_name | string | |
adset_id | string | |
adset_name | string | |
campaignName | string | |
campaignId | string | |
utmUrl | string | |
utmCampaignId | string | |
utmCampaignName | string | |
utmSource | string | |
utmMedium | string | |
utmCampaign | string | |
utmTerm | string | |
utmContent | string | |
notes | string | |
searchText | string | |
team | ObjectId -> Team | |
teamSnapshot | object | |
teamSnapshot.team | ObjectId | |
teamSnapshot.name | string | |
teamSnapshot.color | string | |
teamMember | ObjectId -> Member | |
teamMemberSnapshot | object | |
teamMemberSnapshot.member | ObjectId | |
teamMemberSnapshot.name | string | |
teamMemberSnapshot.email | string | |
contactCreatedBy | ObjectId -> Member | |
createdBy | ObjectId -> Member | |
createdBySnapshot | object | |
createdBySnapshot.member | ObjectId | |
createdBySnapshot.name | string | |
createdBySnapshot.email | string | |
updatedBy | ObjectId -> Member | |
updatedBySnapshot | object | |
updatedBySnapshot.member | ObjectId | |
updatedBySnapshot.name | string | |
updatedBySnapshot.email | string | |
isDeleted | boolean | default false |
isRestored | boolean | default false |
restoredAt | date | |
seperateDeleted | boolean | default false |
aiGenerated | boolean | default false |
leadGeneratorConfigId | ObjectId -> LeadGeneratorConfig | |
genieSchedulerId | ObjectId -> GenieScheduler | |
enrichmentStatus | string | one of queued, processing, completed, failed |
enrichmentRequestedAt | date | |
enrichmentDoneAt | date | |
enrichmentCount | number | default 0 |
enrichmentHistory | object[] | default [] |
enrichmentHistory.status | string | default queued · one of queued, processing, completed, failed |
enrichmentHistory.requestedAt | date | default now |
enrichmentHistory.startedAt | date | default null |
enrichmentHistory.doneAt | date | default null |
enrichmentHistory.contact | ObjectId -> Contact | default null |
enrichmentHistory.source | string | default manual |
enrichmentHistory.changedFields | string[] | default [] |
enrichmentHistory.error | string | default "" |
enrichmentHistory._id | ObjectId | |
enrichmentHistory.createdAt | date | set once |
enrichmentHistory.updatedAt | date | |
_id | ObjectId | |
createdAt | date | set once |
updatedAt | date |