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
  1. Four parties and one Allow button
  2. The ten families a contractor's website actually touches
  3. Bookings, not jobs: what a website should send
  4. No webhooks yet, so the clock does the asking
  5. Every open estimate on one screen: the HomeService WebApp sync
  6. How we build it so a failure is a log line, not a lost lead
  7. 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. 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. 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. 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. 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. 5

    Go live

    Keep the app key, swap in the production client ID and secret, and call api.servicetitan.io with tokens from auth.servicetitan.io/connect/token instead 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.

ServiceTitan API families most relevant to a contractor website, with base paths from ServiceTitan's OpenAPI documents
Base pathResources ServiceTitan listsWhat a website build uses it for
CRM/crm/v2Bookings, booking provider tags, contacts, customers, leads, locations, tagsBooking requests and lead forms from the site
Dispatch/dispatch/v2Arrival windows, business hours, capacity, zones and moreRealistic times before a customer picks one
Job Planning and Management/jpm/v2Appointments, jobs, projects and moreOffice dashboards, and jobs where the office wants them
Marketing/marketing/v2Campaigns, campaign categories, campaign costs, campaign cost summary, email channel costMatching ad campaigns and spend to ServiceTitan campaigns
Marketing Ads/marketingads/v2Attributed leads, web booking attributions, web lead form attributions, external call attributions, job attributions and moreTying each booking, form and call to the visit behind it
Marketing Reputation/marketingreputation/v2Marketing reviewsReading reviews to show on matching pages
Memberships/memberships/v2Customer memberships, membership types, recurring services and moreShowing and selling club plans
Sales & Estimates/sales/v2Contracts, estimates and moreOffice tools, not estimates created from a public site
Accounting/accounting/v2Invoices, payments and moreRead-only history in a branded portal
Telecom/telecom, with v2 and v3 call endpointsCallsCall history and recordings for reporting
Gloved hands snapping two puzzle pieces together, one shaped like a house and one like a server rack, collage on purple
Two pieces, one fit. The gloves are there because production data deserves gloves.

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.

1

The customer books

A form, a booking flow or the site's assistant, on the contractor's own website.

2

The site checks and sends

The server validates the request and hands it to ServiceTitan through its API.

3

ServiceTitan gets a booking

Name, address, phone, the problem and the source, waiting for a dispatcher.

4

A dispatcher makes it a job

No retyping, no lost sticky note, and the lead keeps its source all the way to the invoice.

A request leaves the website, clears the site's server checks, lands as a ServiceTitan booking and becomes a job once a dispatcher books it, source attached.

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

Free · No obligation

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.

CallGet a quote