Quick Start
This guide takes you from zero to a working, authenticated request against your own SMBcrm account/location: a token, a base URL, and one API call. It takes about five minutes.
Step 1: Get a token
Section titled “Step 1: Get a token”The fastest path is a Private Integration Token (PIT), created from your SMBcrm
account’s settings. Choose only the scopes you need. For this guide, a read-only scope
like contacts.readonly is enough.
See Private Integration Tokens for exactly where to generate one and how to store it.
Step 2: Set the base URL and headers
Section titled “Step 2: Set the base URL and headers”Every request goes to the same base URL and needs the same two headers:
https://services.smbcrm.com| Header | Value |
|---|---|
Authorization |
Bearer <token> |
Version |
v3 |
Add Content-Type: application/json on any request that sends a body. That’s the whole
contract. See Base URL & Headers for versioning, pagination, and
rate-limit details.
Step 3: Make a call
Section titled “Step 3: Make a call”Searching contacts is a good first call: it only needs your token and your account/location ID, and it doesn’t change any data.
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>", "pageLimit": 5 }'const res = await fetch('https://services.smbcrm.com/contacts/search', { method: 'POST', headers: { Authorization: `Bearer ${token}`, Version: 'v3', 'Content-Type': 'application/json', }, body: JSON.stringify({ locationId: '<location_id>', pageLimit: 5, }),});
const data = await res.json();console.log(data);{ "contacts": [ { "id": "<contact_id>", "firstName": "Jordan", "email": "jordan@example.com" } ], "total": 1}A contacts array back, even an empty one, means your token, headers, and base URL are
all correct.
