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).
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; 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) | 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 withtemplate and metadata) from the broker, then deploy the connector:
mosquitto_pub -t '$SYS/Coreflux/Command' -m "-routeCode SERVICETITAN"
BASE_ADDRESS already filled in:
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}"
-addRoute (do not include ADD METADATA).
Usage example
CallListJobs by publishing a JSON payload to its request topic, and read the reply on the response topic:
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>"}'

