Skip to content

Contacts

Contacts are the people in your SMBcrm account, including leads and customers, along with their details, tags, custom fields, notes, and tasks.

Base URL: https://services.smbcrm.com · Version header: v3 · Scopes: contacts.readonly (read), contacts.write (create/update/delete). See Scopes.

POST/contacts/

Create a contact in your SMBcrm account/location.

scope contacts.writeauth Location token or PIT

locationId is required. Send any subset of the standard fields plus customFields for your account’s custom fields.

Terminal window
curl -X POST https://services.smbcrm.com/contacts/ \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"locationId": "<location_id>",
"firstName": "Jordan",
"lastName": "Lee",
"email": "jordan@example.com",
"phone": "+15125550142",
"tags": ["website-lead"],
"source": "public-api"
}'
201 Created
{
"contact": {
"id": "<contact_id>",
"locationId": "<location_id>",
"firstName": "Jordan",
"lastName": "Lee",
"email": "jordan@example.com",
"phone": "+15125550142",
"tags": ["website-lead"],
"dateAdded": "2026-07-08T15:04:00.000Z"
}
}
POST/contacts/upsert

Create a contact, or update the existing one that matches by email or phone.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/contacts/upsert \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"locationId": "<location_id>",
"email": "jordan@example.com",
"firstName": "Jordan",
"tags": ["newsletter"]
}'
GET/contacts/{contactId}

Fetch a single contact by ID.

scope contacts.readonlyauth Location token or PIT
Terminal window
curl https://services.smbcrm.com/contacts/<contact_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"contact": {
"id": "<contact_id>",
"locationId": "<location_id>",
"firstName": "Jordan",
"lastName": "Lee",
"email": "jordan@example.com",
"phone": "+15125550142",
"tags": ["website-lead"],
"customFields": [{ "id": "<field_id>", "fieldValue": "Referral" }],
"dateAdded": "2026-07-08T15:04:00.000Z"
}
}
POST/contacts/search

Query contacts with filters, sorting, and pagination. This is the recommended way to list contacts.

scope contacts.readonlyauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/contacts/search \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"locationId": "<location_id>",
"page": 1,
"pageLimit": 20,
"filters": [
{ "field": "tags", "operator": "contains", "value": "website-lead" }
]
}'
200 OK
{
"contacts": [{ "id": "<contact_id>", "firstName": "Jordan", "email": "jordan@example.com" }],
"total": 1
}

To check for an existing match before creating a contact:

GET/contacts/search/duplicate

Check whether a contact already exists, matching by phone number or email.

scope contacts.readonlyauth Location token or PIT
Terminal window
curl "https://services.smbcrm.com/contacts/search/duplicate?locationId=<location_id>&email=jordan@example.com" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
PUT/contacts/{contactId}

Update fields on an existing contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X PUT https://services.smbcrm.com/contacts/<contact_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{ "firstName": "Jordan", "tags": ["customer"] }'
DELETE/contacts/{contactId}

Permanently delete a contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X DELETE https://services.smbcrm.com/contacts/<contact_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
POST/contacts/{contactId}/tags

Add one or more tags to a contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/contacts/<contact_id>/tags \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{ "tags": ["vip", "webinar-2026"] }'
DELETE/contacts/{contactId}/tags

Remove one or more tags from a contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X DELETE https://services.smbcrm.com/contacts/<contact_id>/tags \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{ "tags": ["webinar-2026"] }'
GET/contacts/{contactId}/notes

List notes on a contact.

scope contacts.readonlyauth Location token or PIT
POST/contacts/{contactId}/notes

Add a note to a contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/contacts/<contact_id>/notes \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{ "body": "Called and left a voicemail." }'
GET/contacts/{contactId}/tasks

List tasks on a contact.

scope contacts.readonlyauth Location token or PIT
POST/contacts/{contactId}/tasks

Create a task for a contact.

scope contacts.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/contacts/<contact_id>/tasks \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{ "title": "Follow up", "dueDate": "2026-07-15T17:00:00.000Z", "completed": false }'

Add a contact to one of your account’s workflows or campaigns to trigger follow-up.

POST/contacts/{contactId}/workflow/{workflowId}

Add a contact to a workflow.

scope contacts.writeauth Location token or PIT
POST/contacts/{contactId}/campaigns/{campaignId}

Add a contact to a campaign.

scope contacts.writeauth Location token or PIT

See Workflows for how to list the workflow IDs available in your account.