Authenticate against the ServiceTitan API v2 using OAuth2 client-credentials and scope a call to a specific tenant.
domain: developer.servicetitan.io · 5 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
In the ServiceTitan dev portal (developer.servicetitan.io), create an app and generate an Application Key (ST-App-Key) under My Apps.
Have the customer's admin connect your app via Settings > API Application Access to generate a per-tenant Client ID and Client Secret.
POST the client ID/secret to the OAuth token endpoint (client_credentials grant) to get a short-lived (~900s) access token; no refresh tokens are issued, so re-request on expiry.
On every API call, send both the Bearer access token and the ST-App-Key header, and scope the URL/path to the tenant ID.
Re-auth per tenant if you support multiple customers; tokens are not tenant-portable.
Known gotchas
ServiceTitan only supports the client-credentials (machine-to-machine) grant, not authorization-code — there's no interactive user login flow.
Access tokens expire in ~15 minutes with no refresh token; build token refresh into every long-running job.
App Key and Client ID/Secret are separate credentials from two different portal steps — mixing them up is the most common integration bug.
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?