Contacts API
CRM contacts — list, create, update, delete, bulk-action, import, segments, and stats. api.misar.io/reach/api/contacts.
Contacts are the people in your CRM. MisarReach contacts sync to the central Misar contacts store, so a contact created here is visible across the workspace.
Base URL: https://api.misar.io/reach/api · Auth: Authorization: Bearer mrk_…
Response bodies on the developer contract are open-form — the examples below show representative fields.
List contacts
/api/contactsReturns a paginated list of contacts. Required scope: contacts:read.
Query parameters
pagenumberquerydefault: 1limitnumberquerydefault: 50qstringquerycurl "https://api.misar.io/reach/api/contacts?page=1&limit=50" \
-H "Authorization: Bearer mrk_your_key_here"{
"data": [
{ "id": "uuid", "email": "priya@example.com", "firstName": "Priya", "company": "Acme", "status": "subscribed" }
],
"pagination": { "total": 240, "page": 1, "limit": 50, "totalPages": 5 }
}Create a contact
/api/contactsCreates (or upserts) a single contact. Required scope: contacts:write.
Request body
emailstringbodyrequiredfirstNamestringbodylastNamestringbodyphonestringbodycompanystringbodyjobTitlestringbodystatusstringbodysubscribed | unsubscribed | bounced | complained.sourcestringbodysocialProfilesobjectbodylinkedin, twitter, instagram, telegram, whatsapp, … (each ≤500 chars).curl -X POST https://api.misar.io/reach/api/contacts \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"email": "priya@example.com",
"firstName": "Priya",
"company": "Acme",
"status": "subscribed"
}'{ "ok": true, "contact": { "id": "uuid", "email": "priya@example.com" } }Get, update, delete a contact
/api/contacts/:idFetch (GET, scope contacts:read), update (PATCH, scope contacts:write), or delete (DELETE, scope contacts:write) a single contact by id.
Path parameters
idstringpathrequiredPATCH body — any subset of the create fields.
curl -X PATCH https://api.misar.io/reach/api/contacts/CONTACT_ID \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "phone": "+911234567890", "socialProfiles": { "telegram": "@priya" } }'curl -X DELETE https://api.misar.io/reach/api/contacts/CONTACT_ID \
-H "Authorization: Bearer mrk_your_key_here"{ "ok": true }Bulk action
/api/contacts/bulkDelete, unsubscribe, or resubscribe up to 500 contacts in one call. Required scope: contacts:write.
Request body
actionstringbodyrequireddelete | unsubscribe | resubscribe.idsArray<string>bodyrequiredcurl -X POST https://api.misar.io/reach/api/contacts/bulk \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "action": "unsubscribe", "ids": ["uuid1", "uuid2"] }'{ "ok": true, "affected": 2 }Import contacts
/api/contacts/importImport up to 5,000 contacts. Setting status: "subscribed" requires consent evidence — supply consent per contact or a defaultConsent for the batch. Required scope: contacts:write.
Request body
contactsArray<ContactInput>bodyrequiredUp to 5,000 rows. Each row: email (required), plus firstName, lastName, phone, company, jobTitle, status, source, socialProfiles, consent.
defaultConsentConsentEvidencebodyConsent record applied to rows that omit their own consent. See Consent.
curl -X POST https://api.misar.io/reach/api/contacts/import \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"contacts": [
{ "email": "a@acme.com", "firstName": "Al", "company": "Acme" }
],
"defaultConsent": { "source": "signup_form", "consentedAt": "2026-07-01T00:00:00Z" }
}'{ "ok": true, "imported": 1, "skipped": 0 }Segments & stats
/api/contacts/segmentsList saved contact segments (GET /api/contacts/segments, rate-limited api tier) or aggregate counts (GET /api/contacts/stats). Required scope: contacts:read.
curl https://api.misar.io/reach/api/contacts/stats \
-H "Authorization: Bearer mrk_your_key_here"{ "total": 240, "subscribed": 210, "unsubscribed": 25, "bounced": 5 }Status codes
| Code | Meaning |
|---|---|
200 | Contacts / stats returned, updated, or deleted |
201 | Contact created, bulk action applied, or import accepted |
403 | Missing contacts:read / contacts:write scope |
404 | Contact not found |
422 | Validation error (e.g. subscribed status without consent) |
429 | Rate limit exceeded on segments — retry after Retry-After |
See Rate limits and Errors.