ServiceTitan · Schema
ServiceTitan Invoice
Invoice schema for the ServiceTitan Accounting API. Invoices belong to a job or project.
Field Service ManagementTradesHVACPlumbingElectricalConstructionCRMDispatchAccountingPricebookMarketingMembershipsWebhook
Properties
| Name | Type | Description |
|---|---|---|
| id | integer | |
| number | string | |
| jobId | integernull | |
| projectId | integernull | |
| customerId | integer | |
| locationId | integer | |
| businessUnitId | integer | |
| invoiceDate | string | |
| dueDate | string | |
| subTotal | number | |
| salesTax | number | |
| salesTaxCode | stringnull | |
| total | number | |
| balance | number | |
| status | string | |
| depositedOn | stringnull | |
| items | array | |
| payments | array | |
| royalty | object | |
| modifiedOn | string |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/servicetitan/main/json-schema/servicetitan-invoice-schema.json",
"title": "ServiceTitan Invoice",
"description": "Invoice schema for the ServiceTitan Accounting API. Invoices belong to a job or project.",
"type": "object",
"required": ["id", "customerId", "invoiceDate", "total"],
"properties": {
"id": { "type": "integer", "format": "int64" },
"number": { "type": "string" },
"jobId": { "type": ["integer", "null"] },
"projectId": { "type": ["integer", "null"] },
"customerId": { "type": "integer", "format": "int64" },
"locationId": { "type": "integer", "format": "int64" },
"businessUnitId": { "type": "integer" },
"invoiceDate": { "type": "string", "format": "date" },
"dueDate": { "type": "string", "format": "date" },
"subTotal": { "type": "number" },
"salesTax": { "type": "number" },
"salesTaxCode": { "type": ["string", "null"] },
"total": { "type": "number" },
"balance": { "type": "number" },
"status": { "type": "string", "enum": ["Pending", "Posted", "Exported"] },
"depositedOn": { "type": ["string", "null"], "format": "date-time" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "integer" },
"skuId": { "type": ["integer", "null"] },
"skuName": { "type": "string" },
"skuType": { "type": "string", "enum": ["Service", "Material", "Equipment"] },
"description": { "type": "string" },
"quantity": { "type": "number" },
"cost": { "type": "number" },
"totalCost": { "type": "number" },
"price": { "type": "number" },
"total": { "type": "number" },
"generalLedgerAccountId": { "type": ["integer", "null"] },
"taxable": { "type": "boolean" },
"chargeable": { "type": "boolean" }
}
}
},
"payments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"paymentId": { "type": "integer" },
"amount": { "type": "number" },
"memo": { "type": ["string", "null"] }
}
}
},
"royalty": {
"type": "object",
"properties": {
"status": { "type": "string" },
"date": { "type": ["string", "null"], "format": "date-time" },
"sentOn": { "type": ["string", "null"], "format": "date-time" },
"memo": { "type": ["string", "null"] }
}
},
"modifiedOn": { "type": "string", "format": "date-time" }
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/servicetitan-invoice"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.