Locations
Your account/location record holds your SMBcrm account’s name, address, contact details, and timezone. These endpoints read that record and list the timezone identifiers available for it. They also list your SMS and email providers and your saved templates, search tasks across your account, and manage recurring tasks.
Base URL: https://services.smbcrm.com · Version header: v3 ·
Scopes: locations.readonly (location details, search, timezones, conversation
channels), locations/templates.readonly (saved templates), locations/tasks.readonly
(task search), recurring-tasks.readonly and recurring-tasks.write (recurring tasks).
See Scopes.
Get your location
Section titled “Get your location”curl https://services.smbcrm.com/locations/<location_id> \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "location": { "id": "<location_id>", "name": "Riverside Plumbing Co.", "firstName": "Jordan", "lastName": "Lee", "email": "hello@example.com", "phone": "+15125550100", "address": "412 Main St", "city": "Austin", "state": "TX", "country": "US", "postalCode": "78701", "website": "https://example.com", "timezone": "America/Chicago", "logoUrl": "https://example.com/logo.png", "business": { "name": "Riverside Plumbing Co.", "address": "412 Main St", "city": "Austin", "state": "TX", "country": "US", "postalCode": "78701", "website": "https://example.com", "timezone": "America/Chicago", "logoUrl": "https://example.com/logo.png" }, "social": { "facebookUrl": "https://www.facebook.com/example", "googlePlus": "https://plus.google.com/example", "linkedIn": "https://www.linkedin.com/company/example", "foursquare": "https://foursquare.com/v/example", "twitter": "https://twitter.com/example", "yelp": "https://www.yelp.com/biz/example", "instagram": "https://www.instagram.com/example", "youtube": "https://www.youtube.com/@example", "pinterest": "https://www.pinterest.com/example", "blogRss": "https://example.com/blog/rss", "googlePlacesId": "<google_places_id>" }, "settings": { "allowDuplicateContact": false, "allowDuplicateOpportunity": false, "allowFacebookNameMerge": false, "disableContactTimezone": false } }}Every field in location is optional, so any of them can be missing. business holds the business’s own
name, address, city, state, country, postal code, website, timezone, and logo URL. social holds profile URLs, plus
googlePlacesId for the Google Business Places ID. settings holds four boolean flags:
allowDuplicateContact, allowDuplicateOpportunity, allowFacebookNameMerge, and
disableContactTimezone.
Search locations
Section titled “Search locations”| Query parameter | Type | Required | Description |
|---|---|---|---|
companyId |
string | No | ID of the company to search within. |
email |
string | No | Email address to search for. |
skip |
string | No | Number of results to skip. Default 0. |
limit |
string | No | Maximum number of results to return. Default 10. |
order |
string | No | asc or desc. Default asc. |
curl "https://services.smbcrm.com/locations/search?limit=10&skip=0&order=asc" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "locations": [ { "id": "<location_id>", "name": "Riverside Plumbing Co.", "phone": "+15125550100", "email": "hello@example.com", "address": "412 Main St", "city": "Austin", "state": "TX", "country": "US", "postalCode": "78701", "website": "https://example.com", "timezone": "America/Chicago" } ]}Each location also carries settings and social objects in the same shape as
Get your location.
List available timezones
Section titled “List available timezones”Returns valid timezone identifiers, which you can use for the timezone field when you
create or update a contact. Your account/location’s own
timezone is read-only with a Location token or PIT.
curl https://services.smbcrm.com/locations/<location_id>/timezones \ -H "Authorization: Bearer <token>" \ -H "Version: v3"The example below is shortened.
{ "timezones": [ "America/Chicago", "America/Denver", "America/Los_Angeles", "America/New_York", "UTC" ]}Conversation channel providers
Section titled “Conversation channel providers”type is SMS or Email. Each provider has an _id, a name, a type (SMS or
Email), and a default flag that is true for the default provider. To read or send
messages, see Conversations & Messages.
curl https://services.smbcrm.com/locations/<location_id>/conversationChannels/SMS \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "conversationChannel": { "SMS": [ { "conversationProvider": { "_id": "<provider_id>", "name": "<provider_name>", "type": "SMS", "default": true } } ] }}Saved templates
Section titled “Saved templates”Saved templates are the SMS, email, and WhatsApp templates stored on your account/location. The email builder has its own template endpoints, documented on Email & Templates.
List saved templates
Section titled “List saved templates”| Query parameter | Type | Required | Description |
|---|---|---|---|
originId |
string | Yes | Origin ID. |
type |
string | No | Filter by template type: sms, email, or whatsapp. |
deleted |
boolean | No | Set to true to list deleted templates. Default false. |
skip |
string | No | Number of templates to skip. Default 0. |
limit |
string | No | Maximum number of templates to return. Default 25. |
curl "https://services.smbcrm.com/locations/<location_id>/templates?originId=<origin_id>&type=sms&limit=25" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"An SMS template has template.body and urlAttachments. An email template has
template.subject and template.html. totalCount is the number of templates available.
{ "templates": [ { "id": "<template_id>", "name": "Appointment reminder", "type": "sms", "template": { "body": "Reminder: your appointment is tomorrow at 10 AM.", "attachments": [] }, "dateAdded": "2026-10-01T14:30:00.000Z", "locationId": "<location_id>", "urlAttachments": [] }, { "id": "<template_id>", "name": "Welcome email", "type": "email", "template": { "subject": "Welcome aboard", "html": "<p>Thanks for signing up.</p>", "attachments": [] }, "dateAdded": "2026-10-02T09:15:00.000Z", "locationId": "<location_id>" } ], "totalCount": 2}Search tasks
Section titled “Search tasks”All body fields are optional. For the tasks on a single contact, see Contacts.
| Body field | Type | Description |
|---|---|---|
contactId |
array of strings | Limit results to tasks on these contacts. |
completed |
boolean | true for completed tasks, false for pending tasks. |
assignedTo |
array of strings | Limit results to tasks assigned to these user IDs. |
query |
string | Search value, for example a task name. |
limit |
number | Maximum number of tasks to return. Default 25. |
skip |
number | Number of tasks to skip. Default 0. |
businessId |
string | Limit results to one business. |
curl -X POST https://services.smbcrm.com/locations/<location_id>/tasks/search \ -H "Authorization: Bearer <token>" \ -H "Version: v3" \ -H "Content-Type: application/json" \ -d '{ "completed": false, "assignedTo": ["<user_id>"], "limit": 25, "skip": 0 }'The response wraps the matching tasks in a tasks array. An empty array means nothing
matched.
{ "tasks": []}Recurring tasks
Section titled “Recurring tasks”A recurring task creates tasks on a schedule. The schedule goes in rruleOptions, which
uses these fields:
rruleOptions field |
Type | Required | Description |
|---|---|---|---|
intervalType |
string | Yes | yearly, monthly, weekly, daily, or hourly. |
interval |
number | Yes | Number of intervalType units between occurrences. 2 with monthly repeats every two months. |
startDate |
string | Yes | Start date and time, as an ISO 8601 string. |
dueAfterSeconds |
number | Yes | Seconds from each task’s creation until it is due. |
endDate |
string | No | End date and time, as an ISO 8601 string. |
dayOfMonth |
number | No | Day of the month to repeat on. |
dayOfWeek |
string | No | MO, TU, WE, TH, FR, SA, or SU. |
monthOfYear |
number | No | Month of the year, 1 to 12. |
count |
number | No | Maximum number of task runs. |
createTaskIfOverDue |
boolean | No | Whether to create a task that is already overdue. |
Create a recurring task
Section titled “Create a recurring task”| Body field | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Name of the task. |
rruleOptions |
object | Yes | The schedule, as described above. |
description |
string | No | Description of the task. |
contactIds |
array of strings | No | IDs of the contacts the task is for. |
owners |
array of strings | No | IDs of the users the task is assigned to. |
ignoreTaskCreation |
boolean | No | Set to true to skip creating the first task when you create the recurring task. |
curl -X POST https://services.smbcrm.com/locations/<location_id>/recurring-tasks \ -H "Authorization: Bearer <token>" \ -H "Version: v3" \ -H "Content-Type: application/json" \ -d '{ "title": "Weekly check-in", "description": "Call the customer and confirm next steps.", "contactIds": ["<contact_id>"], "owners": ["<user_id>"], "rruleOptions": { "intervalType": "weekly", "interval": 1, "dayOfWeek": "MO", "startDate": "2026-10-12T09:00:00.000Z", "dueAfterSeconds": 86400 } }'The response reports assignedTo and contactId as single ID strings.
{ "recurringTask": { "id": "<recurring_task_id>", "title": "Weekly check-in", "description": "Call the customer and confirm next steps.", "locationId": "<location_id>", "createdAt": "2026-10-08T15:04:00.000Z", "updatedAt": "2026-10-08T15:04:00.000Z", "rruleOptions": { "intervalType": "weekly", "interval": 1, "dayOfWeek": "MO", "startDate": "2026-10-12T09:00:00.000Z", "dueAfterSeconds": 86400 }, "totalOccurrence": 1, "deleted": false, "assignedTo": "<user_id>", "contactId": "<contact_id>" }}Get a recurring task
Section titled “Get a recurring task”curl https://services.smbcrm.com/locations/<location_id>/recurring-tasks/<recurring_task_id> \ -H "Authorization: Bearer <token>" \ -H "Version: v3"Returns the same recurringTask object as create.
Update a recurring task
Section titled “Update a recurring task”The body takes the same fields as create, and none is required. If you send rruleOptions,
include intervalType, interval, startDate, and dueAfterSeconds in it.
curl -X PUT https://services.smbcrm.com/locations/<location_id>/recurring-tasks/<recurring_task_id> \ -H "Authorization: Bearer <token>" \ -H "Version: v3" \ -H "Content-Type: application/json" \ -d '{ "title": "Monthly check-in", "rruleOptions": { "intervalType": "monthly", "interval": 1, "dayOfMonth": 1, "startDate": "2026-11-01T09:00:00.000Z", "dueAfterSeconds": 86400 } }'Returns the updated recurringTask object with 200 OK.
Delete a recurring task
Section titled “Delete a recurring task”curl -X DELETE https://services.smbcrm.com/locations/<location_id>/recurring-tasks/<recurring_task_id> \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "id": "<recurring_task_id>", "success": true}Related
Section titled “Related”- Custom Fields, Values & Tags: define custom
fields and manage custom values and tags. Custom values and tags are scoped under
/locations/{locationId}. - Contacts: the people that belong to your location, and the tasks on each contact.
- Conversations & Messages: read conversations and send SMS and email messages.
- Email & Templates: templates built in the email builder.
- Scopes: the permissions your token needs for each endpoint.
