If you want to drive a “call pop” from an incoming phone number, you can resolve the number to a client (company) UUID via the API by querying Company Contacts (GET /companycontact.json), which includes phone, mobile, and returns company_uuid.
Company Contacts supports filtering using the $filter={field} {operator} {value} format, and filtering only supports and (not or), so checking both phone and mobile usually means making separate filtered requests.
Once you’ve got the company_uuid, you can list Jobs via GET /job.json (it supports filtering) and then open a chosen job in the browser using the openjob/{uuid} link above.
If you prefer to create a new job for the incoming call, you can create one via POST /job.json (UUID is optional on create, and the UUID of the new Job is returned in the x-record-uuid response header).
If you already know the client UUID, you can retrieve the client record via GET /company/{uuid}.json.
Reply here with whether you’re trying to pop the ServiceM8 web app or the iOS app, and we’ll suggest the cleanest pattern for your phone system.
Chris is on the right track: caller phone numbers live on Company Contacts, so the usual flow is (1) look up the incoming number in companycontact, then (2) use what you find to open the relevant record in ServiceM8.
Find the matching Company Contact (by phone/mobile)
Use API filtering to match the incoming number (you’ll typically check both phone and mobile).
Basic filter format: GET /api_1.0/{resource}.json?$filter={field} {operator} {value}
Company contacts endpoint supports filtering.
Get the company_uuid, then find a Job UUID for that client
The Company Contact record includes company_uuid (the client UUID).
You can then list jobs filtered by that company_uuid (and optionally active eq 1) to identify the job you want to pop.
Pop ServiceM8 in the browser (documented deep-link)
We currently document a web deep link for opening a specific Job by UUID: https://go.servicem8.com/openjob/{uuid}.
When opened in a browser where the user is already logged in, it takes them straight to that job’s details page.
If you’re aiming for caller identification on iPhone (separate to opening a specific record via URL), ServiceM8’s built-in Caller ID can display client info for incoming calls from clients associated with current jobs once enabled in iOS settings.
Once you’ve tried popping a job via the openjob link, reply here with what happens so we can confirm it’s behaving as expected.
Our developer FAQ documents a “deep link” URL format for opening an existing Job in the browser using the Job UUID: https://go.servicem8.com/openjob/{uuid}.
When that link is opened in a browser where the user is already logged in to ServiceM8, it’ll take them straight to the job details page for that UUID.
So the usual pattern for an incoming call is:
Look up the caller’s number in Company Contacts (since contacts include phone, mobile, and the related company_uuid).
Use the company_uuid to find a relevant job (for example, the most recent active job), then send the user to the job via the openjob link above.
Example API calls (unencoded for readability):
GET /api_1.0/companycontact.json?$filter=active eq 1 and phone eq ‘…’
(Filters only support AND, so you’d typically run a second request against mobile as well.)
GET /api_1.0/job.json?$filter=active eq 1 and company_uuid eq ‘…’
If you’re specifically trying to open a Client Card directly by company UUID (rather than a Job), email support@servicem8.com and we can confirm what URL options are supported for that workflow.