---
title: "ServiceTitan"
url: https://docs.light-ai.app/integrations/servicetitan.md
canonical_url: https://docs.light-ai.app/integrations/servicetitan
last_updated: 2026-10-13
summary: "Through ServiceTitan's Zapier app: Light AI leads and approvals become bookings for the call center to accept. Direct API work needs the contractor's own app or a certified partner."
api_status: beta
related:
  - https://docs.light-ai.app/integrations
  - https://docs.light-ai.app/inbound
  - https://docs.light-ai.app/webhooks
  - https://docs.light-ai.app/external-refs
---

# ServiceTitan

> Through ServiceTitan's Zapier app: Light AI leads and approvals become bookings for the call center to accept. Direct API work needs the contractor's own app or a certified partner.

| Direction | Path | How |
| --- | --- | --- |
| Leads → Light AI | **via Zapier** | ServiceTitan **New Lead** or **New Booking** trigger → Webhooks by Zapier → `POST /v1/leads` with `source: other`, `source_detail: "ServiceTitan"` and the ServiceTitan id as `external_ref`. |
| Light AI → ServiceTitan | **via Zapier** | `lead.created` or `quote.approved` → Zapier **Catch Hook** → ServiceTitan **Create Booking** under a Light AI booking provider. Bookings appear in ServiceTitan for a CSR to accept into a job or dismiss. |

## Set up

1. ServiceTitan: Settings → Integrations → API Application Access → Connect New App → **Zapier**. Copy the tenant id, client id and a new client secret into Zapier.
2. ServiceTitan: Settings → Integrations → Booking Providers → Add Tag (e.g. "Light AI"). Pick it in the Create Booking action.
3. Light AI: an endpoint to the Catch Hook URL for `lead.created` (and `quote.approved` if the office wants a booking per approval).

## Light AI → booking

| ServiceTitan (Create Booking) | Light AI |
| --- | --- |
| Name, contacts (phone, e-mail) | `contact.*` (or `client.*` on quotes) |
| Address: street, unit, city, state, zip | `address.line1`, `line2`, `city`, `region`, `postal_code` |
| Source, external id | `"Light AI"`, the lead or project id |
| Summary | `message`, `service_interest`, form answers (`lead.form_answers`, see [Website request forms](https://docs.light-ai.app/forms)) and `project.app_url`; on approvals `totals.total.decimal` and `line_items[]` as text |

## Notes

- ServiceTitan does not allow a third party to use a contractor's app keys ("tunneling"). A contractor can build its own app on the Works or Ent Plus package; an agency serving many contractors needs to become a ServiceTitan partner.
- Field names in Create Booking follow the Zapier action. Some booking workflows need account configuration by ServiceTitan support.
- Photos and instant previews: webhook payloads carry only asset ids (`assets.photos[]`, `assets.mockups[]` with `url: null`). Fetch `GET /v1/leads/{id}` for links that expire after 60 minutes and download the files if the CRM can store them; otherwise store `project.app_url` (sign-in required). Never save a 60-minute link in a CRM.

## Sources

- [Customer integration paths](https://developer.servicetitan.io/integration-paths)
- [ServiceTitan Zapier integration](https://help.servicetitan.com/how-to/zapier)
- [ServiceTitan on Zapier](https://zapier.com/apps/servicetitan/integrations)
