> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Service Titan Api

> Client-mode REST API connector for ServiceTitan field service: create jobs from connected-equipment faults, patch, note and cancel them, attach installed equipment, add appointments and assign technicians, track technicians, register and update installed equipment, and read locations and lookup lists, with OAuth 2.0 client credentials plus the ST-App-Key header

Technical Preview

## Overview

Client-mode REST API connector for ServiceTitan field service: create jobs from connected-equipment faults, patch, note and cancel them, attach installed equipment, add appointments and assign technicians, track technicians, register and update installed equipment, and read locations and lookup lists, with OAuth 2.0 client credentials plus the ST-App-Key header.

This is one of the templates in the ServiceTitan REST API app (`servicetitan`). Deploy it alongside the other connectors of that app when they depend on each other (for example a token connector plus an API connector).

> [!NOTE]
>
> Not yet verified against the live vendor API: No ServiceTitan tenant, app key or client credentials on the factory box (no SERVICETITAN\_\* variables); only static, mock, negative-control and fake-credential public probes ran.

## Auth

OAuth 2.0 client credentials: GetToken posts grant\_type=client\_credentials\&client\_id\&client\_secret (form) to [https://auth.servicetitan.io/connect/token](https://auth.servicetitan.io/connect/token); tokens last 900 s, no refresh token. API events: Authorization: \<access\_token> (raw, as in the portal's first-call sample) + ST-App-Key: \<app key> from payload; tenant id in the path. Every event also sends User-Agent: Coreflux-Broker.

Auth headers used by the template: `Authorization: {value.json.access_token}`, `ST-App-Key: {value.json.app_key}`.

## Template parameters

| Placeholder | Type | Description | Required |
| - | - | - | - |
| `RouteName` | string | Name of the Service Titan Api connector | no |
| `BaseUrl` | string | Service Titan Api base URL without trailing slash (e.g. [https://api.servicetitan.io](https://api.servicetitan.io)) | yes |

`BASE_ADDRESS` default: `https://api.servicetitan.io`.

## Events

| Event | Method | Endpoint | Request topic | Response topic | Payload fields |
| - | - | - | - | - | - |
| `ListJobs` | GET | `/jpm/v2/tenant/{value.json.tenant}/jobs?{value.json.query}` | `cmms/servicetitan/job/list` | `cmms/servicetitan/job/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `GetJob` | GET | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}` | `cmms/servicetitan/job/get` | `cmms/servicetitan/job/get/response` | `access_token`, `app_key`, `id`, `tenant` |
| `CreateJob` | POST | `/jpm/v2/tenant/{value.json.tenant}/jobs` | `cmms/servicetitan/job/create` | `cmms/servicetitan/job/create/response` | `access_token`, `app_key`, `body`, `tenant` |
| `UpdateJob` | PATCH | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}` | `cmms/servicetitan/job/update` | `cmms/servicetitan/job/update/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |
| `CancelJob` | PUT | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/cancel` | `cmms/servicetitan/job/cancel` | `cmms/servicetitan/job/cancel/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |
| `ListJobCancelReasons` | GET | `/jpm/v2/tenant/{value.json.tenant}/job-cancel-reasons?{value.json.query}` | `cmms/servicetitan/job-cancel-reason/list` | `cmms/servicetitan/job-cancel-reason/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListJobTypes` | GET | `/jpm/v2/tenant/{value.json.tenant}/job-types?{value.json.query}` | `cmms/servicetitan/job-type/list` | `cmms/servicetitan/job-type/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListJobNotes` | GET | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/notes?{value.json.query}` | `cmms/servicetitan/job-note/list` | `cmms/servicetitan/job-note/list/response` | `access_token`, `app_key`, `id`, `query`, `tenant` |
| `CreateJobNote` | POST | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/notes` | `cmms/servicetitan/job-note/create` | `cmms/servicetitan/job-note/create/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |
| `ListJobEquipment` | GET | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/equipment` | `cmms/servicetitan/job-equipment/list` | `cmms/servicetitan/job-equipment/list/response` | `access_token`, `app_key`, `id`, `tenant` |
| `AttachJobEquipment` | POST | `/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/equipment` | `cmms/servicetitan/job-equipment/attach` | `cmms/servicetitan/job-equipment/attach/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |
| `ExportJobs` | GET | `/jpm/v2/tenant/{value.json.tenant}/export/jobs?{value.json.query}` | `cmms/servicetitan/job/export` | `cmms/servicetitan/job/export/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListAppointments` | GET | `/jpm/v2/tenant/{value.json.tenant}/appointments?{value.json.query}` | `cmms/servicetitan/appointment/list` | `cmms/servicetitan/appointment/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `AddAppointment` | POST | `/jpm/v2/tenant/{value.json.tenant}/appointments` | `cmms/servicetitan/appointment/create` | `cmms/servicetitan/appointment/create/response` | `access_token`, `app_key`, `body`, `tenant` |
| `ListAppointmentAssignments` | GET | `/dispatch/v2/tenant/{value.json.tenant}/appointment-assignments?{value.json.query}` | `cmms/servicetitan/assignment/list` | `cmms/servicetitan/assignment/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `AssignTechnicians` | POST | `/dispatch/v2/tenant/{value.json.tenant}/appointment-assignments/assign-technicians` | `cmms/servicetitan/assignment/assign` | `cmms/servicetitan/assignment/assign/response` | `access_token`, `app_key`, `body`, `tenant` |
| `GetTechnicianTracking` | GET | `/dispatch/v2/tenant/{value.json.tenant}/technician-tracking?{value.json.query}` | `cmms/servicetitan/technician-tracking/get` | `cmms/servicetitan/technician-tracking/get/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListTechnicianShifts` | GET | `/dispatch/v2/tenant/{value.json.tenant}/technician-shifts?{value.json.query}` | `cmms/servicetitan/technician-shift/list` | `cmms/servicetitan/technician-shift/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListTechnicians` | GET | `/settings/v2/tenant/{value.json.tenant}/technicians?{value.json.query}` | `cmms/servicetitan/technician/list` | `cmms/servicetitan/technician/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListBusinessUnits` | GET | `/settings/v2/tenant/{value.json.tenant}/business-units?{value.json.query}` | `cmms/servicetitan/business-unit/list` | `cmms/servicetitan/business-unit/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListInstalledEquipment` | GET | `/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment?{value.json.query}` | `cmms/servicetitan/equipment/list` | `cmms/servicetitan/equipment/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `GetInstalledEquipment` | GET | `/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment/{value.json.id}` | `cmms/servicetitan/equipment/get` | `cmms/servicetitan/equipment/get/response` | `access_token`, `app_key`, `id`, `tenant` |
| `CreateInstalledEquipment` | POST | `/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment` | `cmms/servicetitan/equipment/create` | `cmms/servicetitan/equipment/create/response` | `access_token`, `app_key`, `body`, `tenant` |
| `UpdateInstalledEquipment` | PATCH | `/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment/{value.json.id}` | `cmms/servicetitan/equipment/update` | `cmms/servicetitan/equipment/update/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |
| `ListEquipmentTypes` | GET | `/equipmentsystems/v2/tenant/{value.json.tenant}/equipment-types?{value.json.query}` | `cmms/servicetitan/equipment-type/list` | `cmms/servicetitan/equipment-type/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListEquipmentSystems` | GET | `/equipmentsystems/v2/tenant/{value.json.tenant}/equipment-systems?{value.json.query}` | `cmms/servicetitan/equipment-system/list` | `cmms/servicetitan/equipment-system/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `ListLocations` | GET | `/crm/v2/tenant/{value.json.tenant}/locations?{value.json.query}` | `cmms/servicetitan/location/list` | `cmms/servicetitan/location/list/response` | `access_token`, `app_key`, `query`, `tenant` |
| `GetLocation` | GET | `/crm/v2/tenant/{value.json.tenant}/locations/{value.json.id}` | `cmms/servicetitan/location/get` | `cmms/servicetitan/location/get/response` | `access_token`, `app_key`, `id`, `tenant` |
| `CreateLocationNote` | POST | `/crm/v2/tenant/{value.json.tenant}/locations/{value.json.id}/notes` | `cmms/servicetitan/location-note/create` | `cmms/servicetitan/location-note/create/response` | `access_token`, `app_key`, `body`, `id`, `tenant` |

## Deploy

Get the template card (JSON with `template` and `metadata`) from the broker, then deploy the connector:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_pub -t '$SYS/Coreflux/Command' -m "-routeCode SERVICETITAN"
```

The deployable connector from the REST API app, with `BASE_ADDRESS` already filled in:

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
DEFINE ROUTE ServiceTitanApi WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://api.servicetitan.io"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '30'
        WITH DEFAULT_CONTENT_TYPE "application/json"
    ADD EVENT ListJobs
        WITH SOURCE_TOPIC "cmms/servicetitan/job/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT GetJob
        WITH SOURCE_TOPIC "cmms/servicetitan/job/get"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT CreateJob
        WITH SOURCE_TOPIC "cmms/servicetitan/job/create"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT UpdateJob
        WITH SOURCE_TOPIC "cmms/servicetitan/job/update"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT CancelJob
        WITH SOURCE_TOPIC "cmms/servicetitan/job/cancel"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/cancel/response"
        WITH METHOD "PUT"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/cancel"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListJobCancelReasons
        WITH SOURCE_TOPIC "cmms/servicetitan/job-cancel-reason/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-cancel-reason/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/job-cancel-reasons?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListJobTypes
        WITH SOURCE_TOPIC "cmms/servicetitan/job-type/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-type/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/job-types?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListJobNotes
        WITH SOURCE_TOPIC "cmms/servicetitan/job-note/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-note/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/notes?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT CreateJobNote
        WITH SOURCE_TOPIC "cmms/servicetitan/job-note/create"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-note/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/notes"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListJobEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/job-equipment/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-equipment/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/equipment"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT AttachJobEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/job-equipment/attach"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job-equipment/attach/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/jobs/{value.json.id}/equipment"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ExportJobs
        WITH SOURCE_TOPIC "cmms/servicetitan/job/export"
        WITH DESTINATION_TOPIC "cmms/servicetitan/job/export/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/export/jobs?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListAppointments
        WITH SOURCE_TOPIC "cmms/servicetitan/appointment/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/appointment/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/appointments?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT AddAppointment
        WITH SOURCE_TOPIC "cmms/servicetitan/appointment/create"
        WITH DESTINATION_TOPIC "cmms/servicetitan/appointment/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/jpm/v2/tenant/{value.json.tenant}/appointments"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListAppointmentAssignments
        WITH SOURCE_TOPIC "cmms/servicetitan/assignment/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/assignment/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/dispatch/v2/tenant/{value.json.tenant}/appointment-assignments?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT AssignTechnicians
        WITH SOURCE_TOPIC "cmms/servicetitan/assignment/assign"
        WITH DESTINATION_TOPIC "cmms/servicetitan/assignment/assign/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/dispatch/v2/tenant/{value.json.tenant}/appointment-assignments/assign-technicians"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT GetTechnicianTracking
        WITH SOURCE_TOPIC "cmms/servicetitan/technician-tracking/get"
        WITH DESTINATION_TOPIC "cmms/servicetitan/technician-tracking/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/dispatch/v2/tenant/{value.json.tenant}/technician-tracking?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListTechnicianShifts
        WITH SOURCE_TOPIC "cmms/servicetitan/technician-shift/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/technician-shift/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/dispatch/v2/tenant/{value.json.tenant}/technician-shifts?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListTechnicians
        WITH SOURCE_TOPIC "cmms/servicetitan/technician/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/technician/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/settings/v2/tenant/{value.json.tenant}/technicians?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListBusinessUnits
        WITH SOURCE_TOPIC "cmms/servicetitan/business-unit/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/business-unit/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/settings/v2/tenant/{value.json.tenant}/business-units?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListInstalledEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT GetInstalledEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment/get"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT CreateInstalledEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment/create"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT UpdateInstalledEquipment
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment/update"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/installed-equipment/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListEquipmentTypes
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment-type/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment-type/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/equipment-types?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListEquipmentSystems
        WITH SOURCE_TOPIC "cmms/servicetitan/equipment-system/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/equipment-system/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/equipmentsystems/v2/tenant/{value.json.tenant}/equipment-systems?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT ListLocations
        WITH SOURCE_TOPIC "cmms/servicetitan/location/list"
        WITH DESTINATION_TOPIC "cmms/servicetitan/location/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/crm/v2/tenant/{value.json.tenant}/locations?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT GetLocation
        WITH SOURCE_TOPIC "cmms/servicetitan/location/get"
        WITH DESTINATION_TOPIC "cmms/servicetitan/location/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/crm/v2/tenant/{value.json.tenant}/locations/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
    ADD EVENT CreateLocationNote
        WITH SOURCE_TOPIC "cmms/servicetitan/location-note/create"
        WITH DESTINATION_TOPIC "cmms/servicetitan/location-note/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/crm/v2/tenant/{value.json.tenant}/locations/{value.json.id}/notes"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "{value.json.access_token}"
            ADD "ST-App-Key" "{value.json.app_key}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
```

Deploy it with `-addRoute` (do not include `ADD METADATA`).

## Usage example

Call `ListJobs` by publishing a JSON payload to its request topic, and read the reply on the response topic:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_sub -t 'cmms/servicetitan/job/list/response' &
mosquitto_pub -t 'cmms/servicetitan/job/list' -m '{"access_token": "<access_token>", "app_key": "<app_key>", "query": "<query>", "tenant": "<tenant>"}'
```

## Related

* [REST API Connectors](/latest/lot-language/routes/rest-api-routes)
* [REST API Apps catalog](/latest/lot-language/routes/rest-api-apps)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.