The developer program
Before Any Website Touches the ServiceTitan API, Someone in Your Office Clicks Allow
The ServiceTitan API is not a door with a key under the mat. It is a door with a sign-in sheet, a list of scopes and an admin who has to click Allow. That is good news for a contractor, and it shapes every integration worth building.
October 26, 2026 · 11 min read
The short answer
ServiceTitan's API is reached through its Developer Portal. A developer registers an app with Read or Write scopes, the contractor's admin approves it under Settings > Integrations > API Application Access, and every call uses OAuth 2.0 client credentials plus an app key. Work starts in an integration environment, and access depends on the contractor's ServiceTitan package.
On this page
- Four parties and one Allow button
- The ten families a contractor's website actually touches
- Bookings, not jobs: what a website should send
- No webhooks yet, so the clock does the asking
- Every open estimate on one screen: the HomeService WebApp sync
- How we build it so a failure is a log line, not a lost lead
- What it costs and how long it takes
Four parties and one Allow button
ServiceTitan describes its Developer Portal as the place to "discover ServiceTitan APIs, browse technical documentation, and manage your application keys." It names three kinds of user: ServiceTitan customers, who build private apps for their own organization; integration developers; and app developers, who build public apps and market them to ServiceTitan customers.
A third-party developer starts on the portal's Request Access tab. ServiceTitan verifies the details and replies with integration environment credentials. That environment comes with "standard sample demo data," one instance per organization and unlimited users. Customers have it differently: production access is the default, and a customer's admin can ask for an integration environment by emailing integrations@servicetitan.com. Theirs holds a copy of their own production data.
- 1
Grant the two permissions
"Generate API Application Key" lets a user sign in to the Developer Portal and register apps. "Manage API Application Access" lets a user open Settings > Integrations > API Application Access and create client IDs and secrets.
- 2
Register the app
"Register New App" takes an application name, organization name, home page URL, tenant IDs and API scopes, Read and/or Write. It generates the app key, which ServiceTitan says is "not environment specific."
- 3
The tenant's admin approves
The admin clicks "Connect New App," reviews the scopes and chooses Allow or Decline. Until then the developer sees "Not Connected Yet." Each tenant gets its own client ID and secret, and those, like the access token, belong to one environment.
- 4
Scope changes come back for approval
Changing scopes creates a new app version, and new scopes take effect only after the tenant admin accepts it. Public apps also need a one-time ServiceTitan review; ServiceTitan says it "performs this approval once a week."
- 5
Go live
Keep the app key, swap in the production client ID and secret, and call
api.servicetitan.iowith tokens fromauth.servicetitan.io/connect/tokeninstead of the integration domains.
One rule gets its own paragraph. ServiceTitan says third parties are "strictly prohibited" from "customer tunneling": asking a customer to create a user and register an app inside the customer's own environment. Its Customer Integration Paths page allows certified apps and customer-built apps and rules out tunneled ones. Which allowed path fits depends on the contractor's package and on who owns the app, and we settle that before code.
The ten families a contractor's website actually touches
The API reference lists 25 families, alphabetically from Accounting to Timesheets. A website or an office dashboard touches maybe ten. Every path is scoped to one tenant as /tenant/{tenant}/..., and the names below are ServiceTitan's own, as listed on October 26, 2026.
| Base path | Resources ServiceTitan lists | What a website build uses it for | |
|---|---|---|---|
| CRM | /crm/v2 | Bookings, booking provider tags, contacts, customers, leads, locations, tags | Booking requests and lead forms from the site |
| Dispatch | /dispatch/v2 | Arrival windows, business hours, capacity, zones and more | Realistic times before a customer picks one |
| Job Planning and Management | /jpm/v2 | Appointments, jobs, projects and more | Office dashboards, and jobs where the office wants them |
| Marketing | /marketing/v2 | Campaigns, campaign categories, campaign costs, campaign cost summary, email channel cost | Matching ad campaigns and spend to ServiceTitan campaigns |
| Marketing Ads | /marketingads/v2 | Attributed leads, web booking attributions, web lead form attributions, external call attributions, job attributions and more | Tying each booking, form and call to the visit behind it |
| Marketing Reputation | /marketingreputation/v2 | Marketing reviews | Reading reviews to show on matching pages |
| Memberships | /memberships/v2 | Customer memberships, membership types, recurring services and more | Showing and selling club plans |
| Sales & Estimates | /sales/v2 | Contracts, estimates and more | Office tools, not estimates created from a public site |
| Accounting | /accounting/v2 | Invoices, payments and more | Read-only history in a branded portal |
| Telecom | /telecom, with v2 and v3 call endpoints | Calls | Call history and recordings for reporting |

Each family has its quirks. Every job needs a customer and a location first, and the API cannot merge, deactivate or reactivate either, so an integration that creates duplicates hands the cleanup to the office. Invoices and payments can be read, but there is no endpoint for customers to pay online; ServiceTitan's own portal handles that, as our customer portal guide explains. Memberships include POST /memberships/sale, "Creates membership sale invoice," which the memberships guide puts to work.
Bookings, not jobs: what a website should send
ServiceTitan calls bookings "incoming inquiries that are funneled to the Calls screen in ServiceTitan," and its own example fits a contractor site exactly: "if you've built a custom widget on your website … you can use the bookings endpoint." A customer service rep then books the inquiry into a job or dismisses it. The request is POST /tenant/{tenant}/booking-provider/{booking_provider}/bookings, operation Bookings_Create.
The customer books
A form, a booking flow or the site's assistant, on the contractor's own website.
The site checks and sends
The server validates the request and hands it to ServiceTitan through its API.
ServiceTitan gets a booking
Name, address, phone, the problem and the source, waiting for a dispatcher.
A dispatcher makes it a job
No retyping, no lost sticky note, and the lead keeps its source all the way to the invoice.
Setup comes first. The tenant creates Booking Provider Tags under Settings > Integrations, picks one when connecting the app, and, in ServiceTitan's words, "an account configuration must be turned on" for bookings to show on the Calls screen. The overview says "a name and either an address or phone number/email are required"; the schema also requires source, summary, isFirstTimeClient and externalId, with start and isSendConfirmationEmail among the optional fields.
The booking flow got better in late 2025. Release ST-75.2, on November 20, 2025, added booking dismissal fields and new lead fields "to preserve booking context." ST-75.3, on December 16, 2025, added bookingId and leadId on POST jobs for "booking/lead conversion to job via API." For request forms rather than bookings there is POST /leads/form, "Submits a lead form," which our web forms page maps field by field.
Estimates are the exception to watch. The Sales & Estimates family has POST /estimates, yet a ServiceTitan help article says "Estimates cannot be created or booked directly from an external website into ServiceTitan." A public site sends the booking; the estimate is made in the office.
No webhooks yet, so the clock does the asking
Many modern APIs call you when something changes. ServiceTitan's main API does not, today. Its developer FAQ says "V2 webhooks are currently being developed" and that it is "restricting new subscriptions to the current version of webhooks," with no release date. In the portal's catalog data, all 25 families show "hasWebhooks": false. Scheduling Pro has its own webhooks, in "Private Preview," for two events: a completed session and a qualified abandoned session.
So an integration that needs data back polls, and ServiceTitan gives it two tools. Transactional APIs move small amounts of data with GET, PUT, POST, DELETE and PATCH. Export APIs, with /export in the path, pull large volumes by GET only, paging with from and continueFrom tokens. Export data appears 15 minutes after a change unless includeRecentChanges is true. The rate limit is "600 calls per 10 seconds per application per tenant for all APIs except reporting APIs," which allow "1 of the same report per minute per tenant."
Every open estimate on one screen: the HomeService WebApp sync
The best proof we have is in production. HomeService WebApp is a contractor command center we redesigned. Its API layer "syncs jobs and estimates bidirectionally with ServiceTitan" and pulls every open estimate, customer and overdue follow-up onto one screen. It is an office tool, working inside the API's rules, not a public form trying to create estimates.
The problem it answers is common and a little absurd. A company pays a technician to drive out, measure, price and present. The estimate goes into a list. The list is long, the follow-up is nobody's job in particular, and the report that would show the gap is a dashboard nobody opens. Putting the open estimates and overdue follow-ups in one place turns a buried list into a call sheet.
An estimate nobody follows up on is a gift of your technician's afternoon.
On the public side, Bleuwave Home Services runs an on-page assistant that, in our portfolio's words, "books straight into ServiceTitan." Both projects are in our work. Neither is a promise about your numbers; they are proof the plumbing works.
How we build it so a failure is a log line, not a lost lead
- The field map comes before the code. Every field on both sides is named, typed and agreed with the office, including which ServiceTitan campaign each source maps to.
- Leads are validated on the server. Required fields, phone and email formats, service area and spam checks run before anything is sent to ServiceTitan.
- A failed send is queued and retried, never lost. If ServiceTitan is slow or a token has expired, the request waits and tries again, within the rate limit.
- Writes are idempotent. A retry never creates a second booking or customer, which matters more here because the API cannot merge duplicate customers.
- Logs a person can read. The office can see what was sent, when, and what came back, without asking a developer to translate.
- The client's own credentials, throughout. The connection is approved in the contractor's own ServiceTitan account and listed there under API Application Access.
Attribution is part of the same build. The Marketing Ads endpoints accept a web session with landingPageUrl, referrerUrl and click IDs such as gclid and fbclid, which is how the site's ad data reaches ServiceTitan. The downstream detail is on our Google Ads conversion tracking and call tracking pages, and the setup service is conversion tracking setup.
What it costs and how long it takes
Integration work on an existing site is quoted after a free review, because the scope depends on how many families are involved and how clean the data is. A connection between two systems "is typically one to three weeks," per our API integrations page. An office dashboard across several families is a larger project and is quoted on its own.
If the website itself needs replacing, custom builds are a fixed price from $1,750, and anything with a portal or web app starts at $3,500. A site with online booking or an estimate flow is about $9,000, per the web design pricing page, with 0% financing for websites at 25% down.
Free review
Start with a free site audit. We look at what you run and send a fixed quote.
A site built for it
Our Next.js builds keep credentials on the server and the click attached to every booking.
Booking first
If online booking is the priority, start with online booking.
Launch list
The website checklist covers what to test before you switch.
We work with home services companies across the US, from HVAC to plumbing and electrical, out of San Antonio, Texas. The ServiceTitan integration hub maps every page in this section, or call (210) 346-0848.
Questions contractors ask about ServiceTitan integration
ServiceTitan lets customers build private apps for their own organization, but the work still takes a developer's skills: OAuth tokens, field mapping, retries and logs. Access also depends on your ServiceTitan package, and a user needs the "Generate API Application Key" and "Manage API Application Access" permissions. If you hire the build out, the approval still happens in your own account.
Not for new apps on the main API today. ServiceTitan's developer FAQ says V2 webhooks are currently being developed, gives no date, and says new subscriptions to the current version are restricted. Every family in the API catalog lists no webhooks. Scheduling Pro has its own webhooks, in Private Preview. Integrations poll instead, within the rate limit.
ServiceTitan publishes 600 calls per 10 seconds per application per tenant for all APIs except reporting. Reporting APIs allow one of the same report per minute per tenant. Access tokens last 15 minutes with no refresh token, and ServiceTitan recommends caching them, which also keeps an integration well inside the limit.
Yes. ServiceTitan calls its integration environment the equivalent of a sandbox. Third-party developers get one with standard sample demo data. A ServiceTitan customer's admin can request integration access by emailing integrations@servicetitan.com, and that environment holds a copy of the customer's own production data. Client IDs, secrets and tokens are specific to each environment.
The API has an estimates resource, but a ServiceTitan help article says estimates cannot be created or booked directly from an external website into ServiceTitan. A website should create a booking or submit a lead form, and the office turns that into a job and an estimate. Office tools, like the HomeService WebApp command center, can work with estimates inside the API's rules.
A connection between two systems is typically one to three weeks, per our API integrations page, after the field map is agreed and the contractor's admin has approved the app. Dashboards that read several families take longer and are quoted separately. Every quote follows a free review of what you run today.
Keep reading
- Custom site, server-side linkIf a Visitor Can Read Your API Secret, So Can Everyone: Custom Next.js Sites That Book Into ServiceTitan From the ServerA custom Next.js site that sends bookings to ServiceTitan from its own server: credentials hidden, click IDs kept, pages fast. How it works, limits, prices.
- Web formsThe Lead Nobody Has to Retype: Website Forms That Arrive in ServiceTitan WholeSend estimate, callback, contact and emergency forms to ServiceTitan as bookings with the source attached. Field map, spam filtering, retries, prices.
- Attribution, case by caseThe Case of the Unattributed Furnace: Tracing Every ServiceTitan Job Back to What Paid for ItWhy "source: website" tells you nothing, how to tie every ServiceTitan lead to a campaign and its revenue, and a sample monthly report you can copy.
- Online bookingThe Customer Picked Thursday at 10. Does the Dispatch Board Know?ServiceTitan's Scheduling Pro or a custom booking flow on your own site: how each installs, tracks and shows availability, and when each one wins.
- Club plans, sold properlyMaintenance Agreements Sold Online: How Far a Website Gets Before ServiceTitan Takes OverWhat a website can sell, what ServiceTitan's memberships API supports, and where the office finishes the sale. Plus pricing pages that sell renewals.
- Reviews, asked and usedFive Stars Start at Job Complete: ServiceTitan Review Requests and Where the Reviews Go NextHow ServiceTitan and NiceJob ask for reviews when a job closes, what Google forbids, and how each review reaches the right service and town page.
- Everything in ServiceTitan IntegrationSee the section
Find out what your ServiceTitan account can connect
Tell us what you want the site or the office screen to do. We will check the API path, the approvals and the field map, then send a fixed quote.
Which of these sounds like you? (pick any)
Rather talk now? Call (210) 346-0848.