Skip to main content

Contacts

A contact is a person. Leads are enquiries attached to contacts, so one contact can carry many leads over time.

Create

curl -X POST https://api.leadx.in/api/key/protected/contact \
-H "apikey: $KEY" -H "Content-Type: application/json" \
-d '{
"formData": {
"name": "Alan Turing",
"email": "alan@example.com",
"contactNumber": { "countryCode": "44", "number": "7700900123" },
"jobTitle": "Chief Scientist",
"companyData": { "name": "Bletchley Ltd", "website": "bletchley.example", "size": "51-200" },
"social": { "linkedin": "https://linkedin.com/in/example" },
"city": "London",
"country": "United Kingdom"
},
"tags": ["665a..."],
"category": "665b..."
}'

Unlike leads, everything goes inside formData — including nested groups. tags and category sit at the top level. contactcategories is accepted as an alias for category.

Nested paths can be written either way: {"companyData": {"name": "Acme"}} or {"companyData.name": "Acme"}.

See Custom fields for the full system field list and the allowed values for companyData.size and companyData.industry.

Duplicates

Contacts are matched on your company's configured unique key — email by default. Creating a contact that already exists returns ContactAlreadyExists_400. In a bulk create that failure is per-row, so the rest of the batch still lands.

Create many

curl -X POST https://api.leadx.in/api/key/protected/contact/bulk \
-H "apikey: $KEY" -H "Content-Type: application/json" \
-d '{ "items": [ { "formData": { "email": "a@example.com" } },
{ "formData": { "email": "b@example.com" } } ] }'

Up to 500 per request, partial success, per-row errors indexed to your input array. For larger loads use imports.

The same enrich / genie automation block works here, read once from the top level and applied to the batch.

List

curl -G https://api.leadx.in/api/key/protected/contact \
-H "apikey: $KEY" \
--data-urlencode 'p=1' --data-urlencode 'n=100' \
--data-urlencode 'searchBy=name,email' \
--data-urlencode 'searchValue=turing'

Update and delete

  • PUT /contact/:id — one contact.
  • PUT /contactbulk update with ids / selectAll.
  • DELETE /contact{ "ids": [...] }. Soft delete, same as leads.

Enrichment

curl -X POST https://api.leadx.in/api/key/protected/enrich/contact \
-H "apikey: $KEY" -H "Content-Type: application/json" \
-d '{ "ids": ["665f..."] }'

Scrapes the contact's company website for firmographics and social profiles, filling companyData, social and description where they are empty. Existing values are not overwritten.

Poll enrichmentStatus on the contact to follow progress.

Organising contacts

ConceptEndpointsNotes
Tags/tag, /tag/:idMany-to-many labels. Free-form.
Categories/contact-category, /contact-category/:idOne category per contact.
Teams/team, /team/:idOwnership and lead visibility.
Segments/segmentSaved filters; the unit campaigns target.

Tags and categories have no bulk DELETE on the collection — the routes are present in source but commented out. Delete them one at a time through the app, or reassign contacts instead.

Call logs

Telephony activity attaches to contacts:

MethodEndpoint
GET / POST / DELETE/calllog
POST/calllog/bulk
GET / PUT/calllog/:id

POST /calllog/bulk is the endpoint to use when syncing a call history export from a dialer.