Contact
Stored in the contacts collection. createdAt and updatedAt are maintained automatically.
Returned by GET /contact, POST /contact, PUT /contact/:id, POST /enrich/contact.
Example
One real Contact as returned by GET /contact, taken from the data array. Recorded from a live response, so the defaults, denormalised snapshots and populated fields are the actual ones:
{
"_id": "6a957378859eafb47bf22752",
"company": "6a9572df859eafb47bf225d7",
"tags": [
{
"_id": "6a957377859eafb47bf2268e",
"name": "Enterprise",
"color": "oklch(0.985 0 0)"
}
],
"tagsSnapshot": [
{
"tag": "6a957377859eafb47bf2268e",
"name": "Enterprise",
"color": "oklch(0.985 0 0)"
}
],
"contactcategories": {
"_id": "6a957377859eafb47bf226c1",
"name": "Prospect"
},
"contactCategorySnapshot": {
"contactCategory": "6a957377859eafb47bf226c1",
"name": "Prospect"
},
"name": "Sara Iqbal",
"email": "sara.iqbal@fabrikam.example",
"enrichmentLeadId": null,
"enrichmentCount": 0,
"importId": [],
"assignedMembers": [],
"leadsCreatedByMembers": [],
"createdBy": {
"name": "Docs Test User"
},
"createdBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"updatedBy": {
"name": "Docs Test User"
},
"updatedBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"isDeleted": false,
"isRestored": false,
"aiGenerated": false,
"services": [],
"enrichMetaData": {
"contactUpdatedByEnrichment": false,
"nothingFoundToEnrich": false,
"foundToEnrichButContactAlreadyHasFields": false,
"foundFieldsToEnrich": false,
"lastEnrichedAt": null,
"lastEnrichmentUrl": "",
"lastEnrichmentSchedule": null,
"changedFields": []
},
"enrichmentHistory": [],
"importSnapshot": [],
"createdAt": "2026-08-31T12:28:40.144Z",
"updatedAt": "2026-08-31T12:28:40.144Z",
"searchText": "sara iqbal sara.iqbal@fabrikam.example enterprise prospect docs test user test@test.test",
"__v": 0
}
:::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 |
|---|---|---|
company | ObjectId -> Company | |
fields | object[] | default [] |
fields._id | ObjectId -> CustomField | required |
fields.value | any | |
customFieldsMap | map | default {} |
tags | ObjectId[] -> Tag | default [] |
tagsSnapshot | object[] | default [] |
tagsSnapshot.tag | ObjectId | |
tagsSnapshot.name | string | |
tagsSnapshot.color | string | |
contactcategories | ObjectId -> ContactCategory | |
contactCategorySnapshot | object | |
contactCategorySnapshot.contactCategory | ObjectId | |
contactCategorySnapshot.name | string | |
name | string | |
email | string | |
instagramUserId | string | |
services | object[] | default [] |
services.serviceType | string | |
services.description | string | |
services.link | string | |
services._id | ObjectId | |
contactNumber.countryCode | string | |
contactNumber.number | string | |
work_phone_number.countryCode | string | |
work_phone_number.number | string | |
whatsapp_contact_number.countryCode | string | |
whatsapp_contact_number.number | string | |
jobTitle | string | |
companyData.name | string | |
companyData.website | string | |
companyData.industry | string | one of Information Technology (IT), Healthcare, Financial Services, E-commerce, Manufacturing, Education, Real Estate, Logistics and 7 more |
companyData.otherIndustry | string | |
companyData.size | string | one of Self-employed, 0-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000 and 1 more |
companyData.location | string | |
address | string | |
country | string | |
state | string | |
city | string | |
postalCode | string | |
description | string | |
social.facebook | string | |
social.twitter | string | |
social.linkedin | string | |
social.instagram | string | |
social.youtube | string | |
social.tiktok | string | |
social.personalWebsite | string | |
enrichMetaData | object | default {} |
enrichMetaData.contactUpdatedByEnrichment | boolean | default false |
enrichMetaData.nothingFoundToEnrich | boolean | default false |
enrichMetaData.foundToEnrichButContactAlreadyHasFields | boolean | default false |
enrichMetaData.foundFieldsToEnrich | boolean | default false |
enrichMetaData.lastEnrichedAt | date | default null |
enrichMetaData.lastEnrichmentUrl | string | default "" |
enrichMetaData.lastEnrichmentSchedule | ObjectId -> EnrichmentSchedule | default null |
enrichMetaData.changedFields | string[] | default [] |
enrichmentStatus | string | one of queued, processing, completed, failed |
enrichmentRequestedAt | date | |
enrichmentDoneAt | date | |
enrichmentLeadId | ObjectId -> Lead | default null |
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.lead | ObjectId -> Lead | default null |
enrichmentHistory.source | string | default manual |
enrichmentHistory.genieScheduler | ObjectId -> GenieScheduler | default null |
enrichmentHistory.callbackUrl | string | default "" |
enrichmentHistory.fieldThreshold | number | default 4 |
enrichmentHistory.changedFields | string[] | default [] |
enrichmentHistory.error | string | default "" |
enrichmentHistory._id | ObjectId | |
enrichmentHistory.createdAt | date | set once |
enrichmentHistory.updatedAt | date | |
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 | |
fullContactNumber | string | |
searchText | string | |
assignedMembers | ObjectId[] -> Member | default [] |
leadsCreatedByMembers | ObjectId[] -> Member | default [] |
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 | |
aiGenerated | boolean | default false |
leadGeneratorConfigId | ObjectId -> LeadGeneratorConfig | |
genieSchedulerId | ObjectId -> GenieScheduler | |
_id | ObjectId | |
createdAt | date | set once |
updatedAt | date |