# ServiceM8 API Updates - May 2026

**URL:** <https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089>\
**Category:** General\
**Created:** [May 3, 2026, 8:21am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089 "2026-05-03T08:21:01Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![developer](https://avatars.discourse-cdn.com/v4/letter/d/bcef8e/32.png) [@developer](https://community.servicem8.com/u/developer)\
**Post date:** [May 3, 2026, 8:21am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/1 "2026-05-03T08:21:01Z")

</div>

May adds new REST API resources for service templates and job communication history, plus webhook diagnostics improvements for API integrations.

## New: ServiceTemplate API

A new `ServiceTemplate` REST resource is available for accounts using Services:

- `GET /api_1.0/ServiceTemplate.json`
- `GET /api_1.0/ServiceTemplate/{uuid}.json`
- `POST /api_1.0/ServiceTemplate/{uuid}.json`
- `DELETE /api_1.0/ServiceTemplate/{uuid}.json`

The API returns a curated service template shape including questions, choices, variations, and staff capabilities. Reads require `read_service_templates`; create/update/delete requires `manage_service_templates`.

`POST` performs sparse updates on editable service rows only. Publishing via the API is not supported in this version. `DELETE` soft-deletes the service.

## New: Job SMS And Email History

Two new read-only resources expose job-related communication history:

- `GET /api_1.0/sms.json`
- `GET /api_1.0/sms/{uuid}.json`
- `GET /api_1.0/email.json`
- `GET /api_1.0/email/{uuid}.json`

The SMS API requires `read_sms`; the Email API requires `read_email`.

Both resources return merged inbound and outbound job history, support cursor pagination via `x-next-cursor`, and support `$filter` for `direction`, `related_object`, and `related_object_uuid`.

Use `$filter`, for example:

```plaintext
/api_1.0/sms.json?$filter=direction eq inbound and related_object_uuid eq {job_uuid}

```

Direct query filters such as `?direction=inbound` are not supported for these endpoints.

## Webhook Subscription Diagnostics

`GET /webhook_subscriptions` now supports:

```plaintext
status=active
status=inactive
status=all

```

Responses include `last_failure_reason` and `last_failure_at`, making it easier to diagnose subscriptions that were automatically deactivated after repeated delivery failures.

Webhook documentation now also clarifies that callback URLs must return a successful `2xx` response within 10 seconds. Repeated failures or timeouts can cause automatic deactivation.

---

<div class="post-metadata">

**Author:** ![chris\_pianto](https://avatars.discourse-cdn.com/v4/letter/c/d2c977/32.png) [@chris\_pianto](https://community.servicem8.com/u/chris_pianto)\
**Post date:** [May 7, 2026, 12:26pm UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/3 "2026-05-07T12:26:49Z")

</div>

Hello.  
Thanks for the update.

When I call the SMS path, I get this error:  
`{`  
`“errorCode”: 400,`  
`“message”: “sms is not an authorised object type”,`  
`“documentation”: “Please refer to ``https://developer.servicem8.com/llms.txt`` for developer documentation.”`  
`}`

This happens to all of the new paths in this update.

I have set the correct scope for all of them.

---

<div class="post-metadata">

**Author:** ![Cody](https://sea2.discourse-cdn.com/flex002/user_avatar/community.servicem8.com/cody/32/52_2.png) [@Cody](https://community.servicem8.com/u/Cody)\
**Post date:** [May 10, 2026, 12:55pm UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/4 "2026-05-10T12:55:56Z")

</div>

Hi Chris,

That “sms is not an authorised object type” error means the May 2026 API update hasn’t rolled out to your account yet.

If you log a Support ticket via the Help menu in the Online Dashboard, our team can prioritise the rollout to your account.

Also, don’t post any API keys/tokens/app secrets publicly.

Thanks,  
Cody

---

<div class="post-metadata">

**Author:** ![jason\_gebert](https://avatars.discourse-cdn.com/v4/letter/j/b782af/32.png) [@jason\_gebert](https://community.servicem8.com/u/jason_gebert)\
**Post date:** [May 13, 2026, 1:38am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/5 "2026-05-13T01:38:25Z")

</div>

Hi Cody,

This is great thanks. I’ve emailed support for the read email and sms and the read service templates but they advised only read sms and email available. I did link this and the other thread. Any idea when we will have access to the service template?

Also is there any chance of getting a sent by staff UUID in the outbound endpoints for sms and email?

---

<div class="post-metadata">

**Author:** ![Cody](https://sea2.discourse-cdn.com/flex002/user_avatar/community.servicem8.com/cody/32/52_2.png) [@Cody](https://community.servicem8.com/u/Cody)\
**Post date:** [May 16, 2026, 1:42am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/6 "2026-05-16T01:42:37Z")

</div>

Hi Jason,

At the moment, what our Support team can enable via the current private preview is limited to the new read-only SMS and Email endpoints, and it doesn’t include ServiceTemplate access yet.

On the scopes side, Support have confirmed `read_sms` isn’t a valid OAuth scope right now, and advised using `read_inbox` for reading SMS/email message data via the API.

It’s best to reply to your Support email and ask to be included in the ServiceTemplate API preview as soon as it becomes available.

Thanks,  
Cody

---

<div class="post-metadata">

**Author:** ![chad\_befus](https://avatars.discourse-cdn.com/v4/letter/c/b5a626/32.png) [@chad\_befus](https://community.servicem8.com/u/chad_befus)\
**Post date:** [May 16, 2026, 8:26pm UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/7 "2026-05-16T20:26:16Z")

</div>

Didn’t have a lot of luck with this request via support but still trying…

-Chad

---

<div class="post-metadata">

**Author:** ![jason\_gebert](https://avatars.discourse-cdn.com/v4/letter/j/b782af/32.png) [@jason\_gebert](https://community.servicem8.com/u/jason_gebert)\
**Post date:** [May 21, 2026, 12:29am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/8 "2026-05-21T00:29:28Z")

</div>

> [@jason\_gebert](#):
>
> Also is there any chance of getting a sent by staff UUID in the outbound endpoints for sms and email?

Hi Cody,  
No worries, is there any chance of getting a sent by staff UUID in the outbound endpoints for sms and email ?

---

<div class="post-metadata">

**Author:** ![Cody](https://sea2.discourse-cdn.com/flex002/user_avatar/community.servicem8.com/cody/32/52_2.png) [@Cody](https://community.servicem8.com/u/Cody)\
**Post date:** [May 21, 2026, 12:50am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/9 "2026-05-21T00:50:57Z")

</div>

Hi Jason,

Good news, we’re rolling out an update to the endpoint to include `sent_by_staff_uuid`.

Thanks,  
Cody

---

<div class="post-metadata">

**Author:** ![jason\_gebert](https://avatars.discourse-cdn.com/v4/letter/j/b782af/32.png) [@jason\_gebert](https://community.servicem8.com/u/jason_gebert)\
**Post date:** [May 24, 2026, 11:10pm UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/10 "2026-05-24T23:10:11Z")

</div>

Thanks Cody,

Is there also a way we can “reply to” based on read\_email. So we aren’t sending new emails each time?  
The read side — expose the RFC Message-ID header on /email.json rows (so we have something to thread against)

The send side — accept an inReplyTo parameter on platform\_service\_email (so the outgoing email carries proper In-Reply-To / References headers)

---

<div class="post-metadata">

**Author:** ![Cody](https://sea2.discourse-cdn.com/flex002/user_avatar/community.servicem8.com/cody/32/52_2.png) [@Cody](https://community.servicem8.com/u/Cody)\
**Post date:** [May 27, 2026, 11:11pm UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/11 "2026-05-27T23:11:35Z")

</div>

Hi Jason,

At the moment there isn’t a documented way to send a true “reply” email (with RFC threading headers like In-Reply-To / References) via POST /platform\_service\_email because the request schema supports replyTo but doesn’t include an inReplyTo (or similar) parameter.

If you’d like Message-ID exposed on the read side and an inReplyTo parameter supported on the send side, the best path is to email that as a feature suggestion to [support@servicem8.com](mailto:support@servicem8.com) (including example payloads/field names).

Thanks,  
Cody

---

<div class="post-metadata">

**Author:** ![jason\_gebert](https://avatars.discourse-cdn.com/v4/letter/j/b782af/32.png) [@jason\_gebert](https://community.servicem8.com/u/jason_gebert)\
**Post date:** [May 30, 2026, 1:58am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/12 "2026-05-30T01:58:49Z")

</div>

> [@developer](#):
>
> ## New: ServiceTemplate API
> 
> A new `ServiceTemplate` REST resource is available for accounts using Services:
> 
> - `GET /api_1.0/ServiceTemplate.json`
> - `GET /api_1.0/ServiceTemplate/{uuid}.json`
> - `POST /api_1.0/ServiceTemplate/{uuid}.json`
> - `DELETE /api_1.0/ServiceTemplate/{uuid}.json`
> 
> The API returns a curated service template shape including questions, choices, variations, and staff capabilities. Reads require `read_service_templates`; create/update/delete requires `manage_service_templates`.
> 
> `POST` performs sparse updates on editable service rows only. Publishing via the API is not supported in this version. `DELETE` soft-deletes the service.

Hey Cody,

Do you know when these will be available?  
A new `ServiceTemplate` REST resource is available for accounts using Services:

- `GET /api_1.0/ServiceTemplate.json`

- `GET /api_1.0/ServiceTemplate/{uuid}.json`

- `POST /api_1.0/ServiceTemplate/{uuid}.json`

- `DELETE /api_1.0/ServiceTemplate/{uuid}.json`

---

<div class="post-metadata">

**Author:** ![chris\_pianto](https://avatars.discourse-cdn.com/v4/letter/c/d2c977/32.png) [@chris\_pianto](https://community.servicem8.com/u/chris_pianto)\
**Post date:** [June 2, 2026, 1:33am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/13 "2026-06-02T01:33:08Z")

</div>

Hi Cody.  
Just wondering if there is pagination for the Email list path /api\_1.0/email.json ?

I’ve tried using the usual pagination method (cursor = ‘-1’) but no luck.

It works on the new path /api\_1.0/sms.json

If the email path has pagination, is it done differently?

Also, it would be nice to have a field for email\_has\_been\_opened for the new email paths?

Cheers 🙂

---

<div class="post-metadata">

**Author:** ![Cody](https://sea2.discourse-cdn.com/flex002/user_avatar/community.servicem8.com/cody/32/52_2.png) [@Cody](https://community.servicem8.com/u/Cody)\
**Post date:** [June 5, 2026, 1:34am UTC](https://community.servicem8.com/t/servicem8-api-updates-may-2026/1089/14 "2026-06-05T01:34:16Z")

</div>

Hi Chris,

Where an API list endpoint supports pagination, it uses cursor-based pagination via a `cursor` query param and the `x-next-cursor` response header (rather than just `cursor=-1` on its own).

What to try:

1. First page: `GET /api_1.0/sms.json?cursor=-1` (or `/api_1.0/email.json?cursor=-1`).
2. Check the response headers for `x-next-cursor` and, if it’s present, call the next page using that value: `GET /api_1.0/sms.json?cursor={x-next-cursor}`.
3. When you reach the last page, `x-next-cursor` will be absent.

If you’re also filtering, `$filter` can be combined with pagination like `...?$filter=...&cursor=-1` (note the `&cursor=-1`).

Once you’ve tried that, if you’re still not seeing an `x-next-cursor` header when you expect more data, email [support@servicem8.com](mailto:support@servicem8.com) with an example request and the response headers so we can check what’s happening on your account.

Thanks,  
Cody
