Skip to main content

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​

FieldTypeNotes
companyObjectId -> Company
fieldsobject[]default []
fields._idObjectId -> CustomFieldrequired
fields.valueany
customFieldsMapmapdefault {}
tagsObjectId[] -> Tagdefault []
tagsSnapshotobject[]default []
tagsSnapshot.tagObjectId
tagsSnapshot.namestring
tagsSnapshot.colorstring
contactcategoriesObjectId -> ContactCategory
contactCategorySnapshotobject
contactCategorySnapshot.contactCategoryObjectId
contactCategorySnapshot.namestring
namestring
emailstring
instagramUserIdstring
servicesobject[]default []
services.serviceTypestring
services.descriptionstring
services.linkstring
services._idObjectId
contactNumber.countryCodestring
contactNumber.numberstring
work_phone_number.countryCodestring
work_phone_number.numberstring
whatsapp_contact_number.countryCodestring
whatsapp_contact_number.numberstring
jobTitlestring
companyData.namestring
companyData.websitestring
companyData.industrystringone of Information Technology (IT), Healthcare, Financial Services, E-commerce, Manufacturing, Education, Real Estate, Logistics and 7 more
companyData.otherIndustrystring
companyData.sizestringone of Self-employed, 0-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000 and 1 more
companyData.locationstring
addressstring
countrystring
statestring
citystring
postalCodestring
descriptionstring
social.facebookstring
social.twitterstring
social.linkedinstring
social.instagramstring
social.youtubestring
social.tiktokstring
social.personalWebsitestring
enrichMetaDataobjectdefault {}
enrichMetaData.contactUpdatedByEnrichmentbooleandefault false
enrichMetaData.nothingFoundToEnrichbooleandefault false
enrichMetaData.foundToEnrichButContactAlreadyHasFieldsbooleandefault false
enrichMetaData.foundFieldsToEnrichbooleandefault false
enrichMetaData.lastEnrichedAtdatedefault null
enrichMetaData.lastEnrichmentUrlstringdefault ""
enrichMetaData.lastEnrichmentScheduleObjectId -> EnrichmentScheduledefault null
enrichMetaData.changedFieldsstring[]default []
enrichmentStatusstringone of queued, processing, completed, failed
enrichmentRequestedAtdate
enrichmentDoneAtdate
enrichmentLeadIdObjectId -> Leaddefault null
enrichmentCountnumberdefault 0
enrichmentHistoryobject[]default []
enrichmentHistory.statusstringdefault queued · one of queued, processing, completed, failed
enrichmentHistory.requestedAtdatedefault now
enrichmentHistory.startedAtdatedefault null
enrichmentHistory.doneAtdatedefault null
enrichmentHistory.leadObjectId -> Leaddefault null
enrichmentHistory.sourcestringdefault manual
enrichmentHistory.genieSchedulerObjectId -> GenieSchedulerdefault null
enrichmentHistory.callbackUrlstringdefault ""
enrichmentHistory.fieldThresholdnumberdefault 4
enrichmentHistory.changedFieldsstring[]default []
enrichmentHistory.errorstringdefault ""
enrichmentHistory._idObjectId
enrichmentHistory.createdAtdateset once
enrichmentHistory.updatedAtdate
sourcestringone of Bulk Import, Offline, Facebook, Website, AI Generated, Instagram, Whatsapp, SMS and 5 more
sourceIdObjectId
importIdObjectId[] -> Importdefault []
importSnapshotobject[]default []
importSnapshot.importObjectId
importSnapshot.fileNamestring
fullContactNumberstring
searchTextstring
assignedMembersObjectId[] -> Memberdefault []
leadsCreatedByMembersObjectId[] -> Memberdefault []
createdByObjectId -> Member
createdBySnapshotobject
createdBySnapshot.memberObjectId
createdBySnapshot.namestring
createdBySnapshot.emailstring
updatedByObjectId -> Member
updatedBySnapshotobject
updatedBySnapshot.memberObjectId
updatedBySnapshot.namestring
updatedBySnapshot.emailstring
isDeletedbooleandefault false
isRestoredbooleandefault false
restoredAtdate
aiGeneratedbooleandefault false
leadGeneratorConfigIdObjectId -> LeadGeneratorConfig
genieSchedulerIdObjectId -> GenieScheduler
_idObjectId
createdAtdateset once
updatedAtdate