Supergood | ServiceTitan API
Programmatically access ServiceTitan field service data, scheduling, and financials with a stable REST API. Supergood builds and operates production-grade, unofficial ServiceTitan integrations so your team can automate field and office workflows without heavy custom engineering.
Plain English: ServiceTitan is field service management software used by HVAC, plumbing, electrical, and other home and commercial service companies to run their business end-to-end. An unofficial API lets you pull customers and locations, jobs and appointments, technician statuses, pricebook items, estimates, invoices, payments, memberships, and attachments—and push new jobs, dispatch updates, invoices, and more back into ServiceTitan.
For a tech company integrating with ServiceTitan, this means you can ingest real-time job and dispatch data to power logistics and capacity planning, sync invoices and payments into your accounting stack, automate estimate-to-invoice workflows from your product, or enrich your platform with customer history, installed equipment, and membership data. You can also create jobs from your app, assign technicians, set arrival windows, send documentation, and keep downstream systems (ERP, analytics, messaging) in lockstep.
What is ServiceTitan?
ServiceTitan (https://www.servicetitan.com/) is a cloud platform for field service management that centralizes call booking, CRM, dispatching, mobile field workflows, pricebook and estimating, job costing, invoicing and payments, memberships/service agreements, and reporting. Trades contractors use ServiceTitan to schedule and dispatch technicians, manage customer communications, generate proposals, process payments, and track performance across business units.
Core product areas include:
- CRM & Call Booking (customers, locations, contacts, lead sources)
- Dispatch & Scheduling (jobs, appointments, routes, capacity, technician statuses)
- Mobile Field Operations (forms, photos, signatures, equipment, job notes)
- Pricebook, Estimates & Proposals (services, materials, equipment, options)
- Invoicing & Payments (work orders, invoices, taxes, discounts, card/ACH)
- Memberships & Recurring Services (service agreements, visits, renewals)
- Timesheets & Payroll (clock-in/out, job time, travel time)
- Inventory & Purchasing (items, warehouses, purchase orders)
Common data entities:
- Customers, Locations, Contacts, and Business Units
- Technicians/Users and Roles
- Jobs, Appointments/Visits, Dispatch Board, Statuses
- Pricebook Items (services, materials, equipment), Categories
- Estimates/Proposals, Options, Approvals
- Invoices, Line Items, Taxes, Discounts, Payments/Refunds
- Memberships/Agreements, Recurring Service Events
- Equipment/Assets at Locations, Install Dates, Serial Numbers
- Timesheets, Shifts, Payroll Codes
- Forms, Photos, Attachments, Tags
The ServiceTitan Integration Challenge
Field service teams rely on ServiceTitan daily, but turning portal-based workflows into API-driven automation is non-trivial:
- Dispatch complexity: Technician statuses (scheduled, en route, arrived, working, completed) and arrival windows must be updated carefully to avoid double-booking
- Business units and permissions: Data visibility, job types, and pricebook catalogs vary by BU and role
- Mobile-first behaviors: Many workflows (e.g., on-my-way, forms, signatures) are optimized for the tech app, not headless automation
- Financial rigor: Taxes, discounts, and payment reconciliation require accuracy and auditability
- Data sprawl: Customers, locations, jobs, estimates, invoices, memberships, and equipment are interrelated and spread across multiple screens
- Security: SSO/MFA and strong role-based access controls complicate unattended sessions
How Supergood Creates ServiceTitan APIs
Supergood reverse-engineers authenticated browser and mobile app flows to deliver a resilient API endpoint layer for your ServiceTitan tenant.
- Handles username/password, SSO/OAuth, and MFA (SMS, email, TOTP) securely
- Maintains session continuity with automated refresh and change detection
- Normalizes responses so you can integrate once and rely on consistent objects across modules
- Aligns with customer entitlements, business units, and role-based permissions to ensure compliant access
- Provides signed upload/download handling for documents, photos, and signatures
- Enforces idempotency and conflict checks to prevent double-booking or duplicate invoices
Use Cases
Customer and Job Data Sync
- Mirror customers, locations, and installed equipment into your internal systems
- Keep job metadata current for analytics and real-time dashboards
- Normalize addresses, statuses, and BUs for multi-branch operations
Dispatch and Scheduling Automation
- Create jobs from your product and set arrival windows based on capacity
- Assign/reassign technicians programmatically when conditions change
- Trigger notifications when techs go en route, arrive, or complete
Estimate-to-Invoice Workflows
- Push approved estimates to jobs and generate invoices with tax/discount logic
- Capture payments (card/ACH) and reconcile to your accounting system (e.g., QuickBooks, NetSuite)
- Attach work orders, photos, and signed approvals to invoices
Memberships and Recurring Service Management
- Sync memberships and schedule recurring visits automatically
- Track renewals and upsell opportunities in your CRM
- Ensure contract entitlements are reflected in jobs and invoices
Available Endpoints
Authentication
POST /sessions: Establish a session using credentials. Supergood manages MFA (SMS, email, TOTP) and SSO/OAuth when enabled. Returns a short-lived auth token maintained by the platform.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/sessions \
--header 'Authorization: Basic <Base64 encoded token>' \
--header 'Content-Type: application/json' \
--data '{
"username": "[email protected]",
"password": "<password>",
"mfa": { "type": "totp", "code": "123456" }
}'
Example response
{
"authToken": "eyJhbGciOi...",
"expiresIn": 3600,
"user": {
"id": "u_f1a92c",
"name": "Dispatcher",
"entitlements": ["customers", "jobs", "dispatch", "invoices"]
}
}
POST /sessions/refresh: Refresh an existing token to keep sessions uninterrupted.
Customers
GET /customers: List customers with optional nested locations and membership summaries.
Query parameters
- search: string (name, email, phone)
- updatedFrom, updatedTo: ISO 8601 timestamps
- hasMembership: boolean
- businessUnitId: string
- page, pageSize: integers for pagination
Example response
{
"items": [
{
"customerId": "cus_91a0e7",
"name": "Samantha Lee",
"emails": ["[email protected]"],
"phones": [
{"type": "mobile", "number": "+1-310-555-0199"}
],
"tags": ["vip"],
"createdAt": "2025-10-02T15:21:00Z",
"updatedAt": "2026-01-20T12:04:55Z",
"locations": [
{
"locationId": "loc_5b23fe",
"address": {
"line1": "1420 Maple Ave",
"city": "Pasadena",
"region": "CA",
"postalCode": "91104",
"country": "US"
},
"coordinates": {"lat": 34.169, "lng": -118.132},
"equipment": [
{"type": "hvac", "make": "Carrier", "model": "24ABC6", "serial": "CARR-78421", "installedAt": "2023-06-15"}
],
"memberships": [
{"membershipId": "mbr_120fe1", "plan": "Gold HVAC", "status": "active", "renewalDate": "2026-06-15"}
]
}
]
}
],
"page": 1,
"pageSize": 50,
"total": 1
}
Jobs
POST /jobs: Create a new job for a customer/location with an initial appointment window.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/jobs \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"customerId": "cus_91a0e7",
"locationId": "loc_5b23fe",
"jobType": "service",
"businessUnitId": "bu_hvac_west",
"summary": "No cooling - upstairs unit",
"description": "AC not cooling, started after heatwave. Check condenser and thermostat.",
"priority": "high",
"tags": ["warranty"],
"appointment": {
"date": "2026-01-22",
"arrivalWindowStart": "08:00",
"arrivalWindowEnd": "10:00",
"preferredTechnicianIds": ["tech_01a9"]
},
"referenceId": "crm-req-78421"
}'
Example response
{
"jobId": "job_7c91f0",
"appointmentId": "apt_b2a1d4",
"status": "scheduled",
"createdAt": "2026-01-21T09:32:10Z",
"referenceId": "crm-req-78421"
}
Dispatch
PATCH /jobs/{jobId}/dispatch: Assign or reassign technicians and set/update the scheduled window and dispatch status.
curl --request PATCH \
--url https://api.supergood.ai/integrations/<integration_id>/jobs/job_7c91f0/dispatch \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"primaryTechnicianId": "tech_01a9",
"helperTechnicianIds": ["tech_03b2"],
"scheduledStart": "2026-01-22T08:00:00-08:00",
"scheduledEnd": "2026-01-22T10:00:00-08:00",
"dispatchStatus": "dispatched",
"notes": "Tech assigned based on proximity and skill set"
}'
Example response
{
"jobId": "job_7c91f0",
"dispatch": {
"primaryTechnicianId": "tech_01a9",
"helperTechnicianIds": ["tech_03b2"],
"status": "dispatched",
"updatedAt": "2026-01-21T09:45:02Z"
}
}
Invoices
POST /jobs/{jobId}/invoices: Create an invoice for a completed job with line items, taxes, discounts, and optional payment capture.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/jobs/job_7c91f0/invoices \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"referenceNumber": "INV-2026-000812",
"lineItems": [
{
"pricebookItemId": "pb_srv_ac_tuneup",
"description": "AC diagnostic and tune-up",
"quantity": 1,
"unitPrice": 159.00,
"taxRate": 0.0875
},
{
"pricebookItemId": "pb_mat_capacitor_45uf",
"description": "Run capacitor 45 uf",
"quantity": 1,
"unitPrice": 48.00,
"taxRate": 0.0875
}
],
"discounts": [
{"type": "percent", "value": 10.0, "reason": "Membership discount"}
],
"payments": [
{"amount": 200.00, "method": "card", "externalTransactionId": "ch_1P0abC"}
],
"notes": "Member pricing applied."
}'
Example response
{
"invoiceId": "inv_5f31a0",
"status": "paid",
"jobId": "job_7c91f0",
"subtotal": 207.00,
"tax": 18.11,
"discountTotal": 22.51,
"total": 202.60,
"paid": 200.00,
"balance": 2.60,
"createdAt": "2026-01-21T10:10:37Z"
}
Technical Specifications
- Authentication: Username/password with MFA (SMS, email, TOTP) and SSO/OAuth where enabled; supports service accounts or customer-managed credentials
- Response format: JSON with consistent resource schemas and pagination across modules
- Rate limits: Tuned for enterprise throughput while honoring customer entitlements and usage controls
- Session management: Automatic reauth and cookie/session rotation with health checks
- Data freshness: Near real-time retrieval of customers, jobs, dispatch updates, and financial objects
- Security: Encrypted transport, scoped tokens, and audit logging; respects ServiceTitan role-based permissions and business units
- Webhooks: Optional asynchronous delivery for long-running workflows (e.g., job status changes, invoice payments)
Performance Characteristics
- Latency: Sub-second responses for list/detail queries under normal load
- Throughput: Designed for high-volume customer/job sync and invoice processing
- Reliability: Retry logic, backoff, and idempotency keys minimize duplicate actions
- Adaptation: Continuous monitoring for UI/API changes with rapid adapter updates
Getting Started
- Schedule Integration Assessment
Book a 30-minute session to confirm your modules, licensing, and authentication model.
- Supergood Builds and Validates Your API
We deliver a hardened ServiceTitan adapter tailored to your workflows and entitlements.
- Deploy with Monitoring
Go live with continuous monitoring and automatic adjustments as ServiceTitan evolves.
Frequently Asked Questions
Q: Which ServiceTitan modules can this integration cover?
Supergood supports workflows across commonly used modules such as CRM (customers, locations), Dispatch & Scheduling (jobs, appointments, technician statuses), Pricebook & Estimates, and Invoicing & Payments, plus Memberships/Recurring Services—subject to your licensing and entitlements. We scope coverage during integration assessment.
Q: How are MFA and SSO handled for automation?
We support username/password + MFA (SMS, email, TOTP) and can operate behind SSO/OAuth when enabled. Sessions are refreshed automatically with secure challenge handling.
Q: Can you sync invoices and payments to our ERP?
Yes. We can normalize invoices and payments to match your ERP schema (e.g., tax, discounts, line items) and deliver updates via webhooks or polling while complying with rate and permission constraints. We commonly integrate with QuickBooks and NetSuite.
Q: Can you push jobs and manage dispatch programmatically?
Yes. We can create jobs, set arrival windows, assign/reassign technicians, and track en route/arrived/completed statuses while preventing scheduling conflicts and respecting capacity constraints.
Q: Are attachments supported for jobs and invoices?
Yes. We support downloading artifacts (photos, PDFs, signed approvals) and uploading attachments via signed uploads, with checksum validation and time-limited URLs.
Related Integrations
Intralinks API - Programmatically access the Intralinks VDR with Supergood
Ready to automate your ServiceTitan workflows?
Supergood can have your ServiceTitan integration live in days with no ongoing engineering maintenance.