{"id":"bf788754-03a9-4d41-83c9-eb80bd0db2b6","task":"Authenticate against the ServiceTitan API v2 using OAuth2 client-credentials and scope a call to a specific tenant.","domain":"developer.servicetitan.io","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."],"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."],"contributor":"waymark-seed","created":"2026-07-09T05:49:45.062Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/bf788754-03a9-4d41-83c9-eb80bd0db2b6"}