Skip to content

Invoice Data Model

🏗️ Primary Entities

Invoices: Work orders and invoices with totals, status, and dates

Services: Individual service line items performed on the invoice

Labor / Parts / Sublets / Hazmats: Detailed breakdown within each service

Inspections / Declined Services: Inspection results and customer-declined recommendations

Recommended Services: Services recommended for future visits

🔗 Key Relationships

Many-to-One: Invoice → Shop (each invoice belongs to one shop)

Many-to-One: Invoice → Customer (each invoice belongs to one customer)

Many-to-One: Invoice → Vehicle (each invoice is for one vehicle)

One-to-Many: Invoice → Services (JSON array with nested details)

One-to-Many: Invoice → Recommended Services (JSON array)

Core identification fields linking invoices to tenants, shops, customers, and vehicles.

Field NameData TypeDescriptionRequired
STEER_TENANT_IDString (UUID)Unique tenant identifier (parent organization)Yes
STEER_SHOP_IDString (UUID)Shop location where the work was performed. Links to Shop Data Model STEER_SHOP_IDYes
STEER_CUSTOMER_IDString (UUID)Customer who owns the invoice. Links to Customer Data Model STEER_CUSTOMER_IDYes
STEER_VEHICLE_IDString (UUID)Vehicle serviced on this invoice. Links to Vehicle Data Model STEER_VEHICLE_IDNo
STEER_INVOICE_IDString (UUID)Unique invoice identifier (primary key)Yes

Core invoice information including work order number, type, and status.

Field NameData TypeDescriptionRequired
INVOICE_VEHICLE_NAMEStringDisplay name of the vehicle on the invoice (e.g., 2021 Toyota Camry)No
INVOICE_WORK_ORDER_NUMBERStringWork order or repair order number from the shop management systemNo
INVOICE_SERVICE_WRITER_IDString (UUID)Employee who created or manages the invoiceNo
INVOICE_TYPEStringInvoice type classification (see enum values below)Yes
INVOICE_WIP_EXTERNAL_STATUSStringWork-in-progress status from the external shop management system (free-text, see enum values)No
INVOICE_WIP_STEER_STATUSStringNormalized work-in-progress status within Steer (see enum values)No

Vehicle mileage recorded at the time of service.

Field NameData TypeDescriptionRequired
INVOICE_ODOMETER_INNumberOdometer reading when vehicle was checked inNo
INVOICE_ODOMETER_OUTNumberOdometer reading when vehicle was picked upNo

External system reference identifiers.

Field NameData TypeDescriptionRequired
INVOICE_EXTERNAL_REFERENCESStringExternal system reference identifiersNo

Invoice lifecycle dates in both UTC and local timezone.

Field NameData TypeDescriptionRequired
INVOICE_CREATED_ATTimestampInvoice creation date (UTC)No
INVOICE_PAID_ATTimestampPayment completion date (UTC)No
INVOICE_DUE_ATTimestampPayment due date (UTC)No
INVOICE_PAID_AT_LOCALTimestampPayment completion date (shop’s local timezone)No
INVOICE_DUE_AT_LOCALTimestampPayment due date (shop’s local timezone)No

Links to the invoice in external systems.

Field NameData TypeDescriptionRequired
INVOICE_EXTERNAL_URL_ESTIMATEStringURL to the estimate in the external systemNo
INVOICE_EXTERNAL_URL_INSPECTIONStringURL to the inspection report in the external systemNo
INVOICE_EXTERNAL_URL_INVOICEStringURL to the invoice in the external systemNo
INVOICE_EXTERNAL_URL_STEERStringURL to the invoice in the Steer platformNo

Invoice-level financial summary. All amounts are in the tenant’s configured currency.

Field NameData TypeDescriptionRequired
INVOICE_TOTAL_DISCOUNTFloatTotal discount amount appliedNo
INVOICE_TOTAL_GRANDFloatGrand total (final amount including tax)No
INVOICE_TOTAL_HAZMATFloatTotal hazardous materials feesNo
INVOICE_TOTAL_LABORFloatTotal labor chargesNo
INVOICE_TOTAL_NETFloatNet total before taxNo
INVOICE_TOTAL_OTHER_CHARGEFloatTotal miscellaneous chargesNo
INVOICE_TOTAL_PARTFloatTotal parts costNo
INVOICE_TOTAL_SUBLETFloatTotal sublet/outsourced work costNo
INVOICE_TOTAL_TAXFloatTotal tax amountNo
INVOICE_TOTAL_OUTSTANDINGFloatOutstanding balance remainingNo
Field NameData TypeDescriptionRequired
INVOICE_NOTESStringAll invoice-level notes concatenated into a single string. Individual notes are joined without a delimiterNo

Services performed on the invoice, returned as a JSON array. Each invoice may have zero or more services.

Field NameData TypeDescriptionRequired
INVOICE_SERVICESJSON ArrayArray of service objects (see structure below)No

Service Object Structure:

PropertyData TypeDescription
serviceIndexNumberZero-based index identifying the service within the invoice
categoryStringService category (e.g., Oil Change, Brake Service)
descriptionStringDetailed service description
commentStringTechnician or service writer comments
employeeIdString (UUID)Employee assigned to this service
serviceDescriptionStringConcatenated description from service details
serviceSummaryStringCombined category, description, and comment text
partBrandsStringConcatenated part brands used in this service
partNumbersStringConcatenated part numbers used in this service
totalDiscountFloatDiscount applied to this service
totalHazmatFloatHazmat fees for this service
totalLaborFloatLabor cost for this service
totalNetFloatNet total for this service
totalOtherChargeFloatOther charges for this service
totalPartFloatParts cost for this service
totalSubletFloatSublet cost for this service
totalTaxFloatTax for this service
laborJSON ArrayArray of labor line items (see below)
partsJSON ArrayArray of part line items (see below)
subletsJSON ArrayArray of sublet line items (see below)
hazmatsJSON ArrayArray of hazmat line items (see below)
inspectionsJSON ArrayArray of inspection records (see below)
declinedServicesJSON ArrayArray of declined service recommendations (see below)

Labor Item Structure:

PropertyData TypeDescription
nameStringLabor description
employeeIdString (UUID)Technician who performed the labor
hoursFloatHours spent
rateFloatHourly rate
taxableBooleanWhether the labor is taxable
completedBooleanWhether the labor has been completed

Part Item Structure:

PropertyData TypeDescription
brandStringPart manufacturer brand
descriptionStringPart description
numberStringPart number
partInventoryIdStringInventory system identifier
quantityFloatQuantity used
costFloatUnit cost
taxableBooleanWhether the part is taxable

Sublet Item Structure:

PropertyData TypeDescription
nameStringSublet service description
quantityFloatQuantity
costFloatUnit cost
taxableBooleanWhether the sublet is taxable

Hazmat Item Structure:

PropertyData TypeDescription
nameStringHazardous material description
quantityFloatQuantity
costFloatUnit cost
taxableBooleanWhether the hazmat fee is taxable

Inspection Item Structure:

PropertyData TypeDescription
descriptionStringInspection item description
approvedBooleanWhether the inspection item was approved
approvalTypeStringHow the approval was obtained
approverIdString (UUID)Person who approved the inspection

Declined Service Structure:

PropertyData TypeDescription
descriptionStringDescription of the declined service recommendation

Services recommended for future visits, returned as a JSON array of service name strings.

Field NameData TypeDescriptionRequired
INVOICE_RECOMMENDED_SERVICESJSON ArrayArray of recommended service name strings (e.g., ["Transmission Flush", "Coolant Replacement"])No
Field NameData TypeDescriptionRequired
STEER_UPDATED_ATTimestampLast modification timestamp for this invoice record (UTC)Yes
  • Invoice: A completed or in-progress repair order with charges
  • Quote: An estimate or quote provided to the customer
  • Void: An invoice that has been voided/cancelled
  • Unknown: Type could not be determined from the source system

Complete API response example with an invoice record:

{
"data": [
[
"f2e3d4c5-b6a7-8901-2345-6789abcdef01",
"2dc598c3-1e9e-408e-82df-b8d7acff380b",
"d07a1282-b6c4-4527-ad8f-981b57660856",
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"c9d8e7f6-5432-1098-abcd-ef0123456789",
"2021 Toyota Camry",
"WO-2024-00542",
"e5f6a7b8-c9d0-1234-5678-9abcdef01234",
"Invoice",
"cashed_out",
"Completed",
45230,
45245,
null,
"2026-01-15T09:00:00.000Z",
"2026-01-15T17:30:00.000Z",
null,
"2026-01-15T11:30:00.000Z",
null,
"https://shop.example.com/estimates/542",
"https://shop.example.com/inspections/542",
"https://shop.example.com/invoices/542",
"https://app.steer.com/invoices/c9d8e7f6",
15.00,
487.50,
5.00,
180.00,
425.00,
0.00,
195.50,
50.00,
37.00,
0.00,
"Customer requested oil change and brake inspection. Waiting on brake pads.",
[
{
"serviceIndex": 0,
"category": "Oil Change",
"description": "Full synthetic oil change",
"comment": "Used 5W-30 synthetic",
"employeeId": "tech-uuid-001",
"serviceDescription": "Full synthetic oil change - 5W-30",
"serviceSummary": "Oil Change: Full synthetic oil change (Used 5W-30 synthetic)",
"partBrands": "Mobil 1",
"partNumbers": "M1-110A",
"totalDiscount": 5.00,
"totalHazmat": 2.50,
"totalLabor": 60.00,
"totalNet": 110.00,
"totalOtherCharge": 0.00,
"totalPart": 45.50,
"totalSublet": 0.00,
"totalTax": 8.50,
"labor": [
{
"name": "Oil Change Labor",
"employeeId": "tech-uuid-001",
"hours": 0.5,
"rate": 120.00,
"taxable": false,
"completed": true
}
],
"parts": [
{
"brand": "Mobil 1",
"description": "Full Synthetic Motor Oil 5W-30",
"number": "M1-110A",
"partInventoryId": "inv-001",
"quantity": 5.0,
"cost": 9.10,
"taxable": true
}
],
"sublets": [],
"hazmats": [
{
"name": "Oil disposal fee",
"quantity": 1.0,
"cost": 2.50,
"taxable": false
}
],
"inspections": [],
"declinedServices": []
},
{
"serviceIndex": 1,
"category": "Brake Service",
"description": "Front brake pad replacement",
"comment": null,
"employeeId": "tech-uuid-002",
"serviceDescription": "Front brake pad replacement",
"serviceSummary": "Brake Service: Front brake pad replacement",
"partBrands": "Wagner",
"partNumbers": "QC1044",
"totalDiscount": 10.00,
"totalHazmat": 2.50,
"totalLabor": 120.00,
"totalNet": 315.00,
"totalOtherCharge": 0.00,
"totalPart": 150.00,
"totalSublet": 50.00,
"totalTax": 28.50,
"labor": [
{
"name": "Brake Pad Replacement",
"employeeId": "tech-uuid-002",
"hours": 1.0,
"rate": 120.00,
"taxable": false,
"completed": true
}
],
"parts": [
{
"brand": "Wagner",
"description": "QuickStop Ceramic Disc Brake Pad Set",
"number": "QC1044",
"partInventoryId": "inv-002",
"quantity": 1.0,
"cost": 150.00,
"taxable": true
}
],
"sublets": [
{
"name": "Rotor resurfacing",
"quantity": 2.0,
"cost": 25.00,
"taxable": true
}
],
"hazmats": [
{
"name": "Brake dust disposal",
"quantity": 1.0,
"cost": 2.50,
"taxable": false
}
],
"inspections": [],
"declinedServices": [
{
"description": "Rear brake pad replacement - customer deferred to next visit"
}
]
}
],
["Transmission Flush", "Coolant Replacement"],
"2026-03-10T05:00:01.701Z"
]
],
"metadata": {
"rowType": [
{"name": "STEER_TENANT_ID", "type": "text"},
{"name": "STEER_SHOP_ID", "type": "text"},
{"name": "STEER_CUSTOMER_ID", "type": "text"},
{"name": "STEER_VEHICLE_ID", "type": "text"},
{"name": "STEER_INVOICE_ID", "type": "text"},
{"name": "INVOICE_VEHICLE_NAME", "type": "text"},
{"name": "INVOICE_WORK_ORDER_NUMBER", "type": "text"},
{"name": "INVOICE_SERVICE_WRITER_ID", "type": "text"},
{"name": "INVOICE_TYPE", "type": "text"},
{"name": "INVOICE_WIP_EXTERNAL_STATUS", "type": "text"},
{"name": "INVOICE_WIP_STEER_STATUS", "type": "text"},
{"name": "INVOICE_ODOMETER_IN", "type": "fixed"},
{"name": "INVOICE_ODOMETER_OUT", "type": "fixed"},
{"name": "INVOICE_EXTERNAL_REFERENCES", "type": "text"},
{"name": "INVOICE_CREATED_AT", "type": "timestamp_ntz"},
{"name": "INVOICE_PAID_AT", "type": "timestamp_ntz"},
{"name": "INVOICE_DUE_AT", "type": "timestamp_ntz"},
{"name": "INVOICE_PAID_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "INVOICE_DUE_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "INVOICE_EXTERNAL_URL_ESTIMATE", "type": "text"},
{"name": "INVOICE_EXTERNAL_URL_INSPECTION", "type": "text"},
{"name": "INVOICE_EXTERNAL_URL_INVOICE", "type": "text"},
{"name": "INVOICE_EXTERNAL_URL_STEER", "type": "text"},
{"name": "INVOICE_TOTAL_DISCOUNT", "type": "real"},
{"name": "INVOICE_TOTAL_GRAND", "type": "real"},
{"name": "INVOICE_TOTAL_HAZMAT", "type": "real"},
{"name": "INVOICE_TOTAL_LABOR", "type": "real"},
{"name": "INVOICE_TOTAL_NET", "type": "real"},
{"name": "INVOICE_TOTAL_OTHER_CHARGE", "type": "real"},
{"name": "INVOICE_TOTAL_PART", "type": "real"},
{"name": "INVOICE_TOTAL_SUBLET", "type": "real"},
{"name": "INVOICE_TOTAL_TAX", "type": "real"},
{"name": "INVOICE_TOTAL_OUTSTANDING", "type": "real"},
{"name": "INVOICE_NOTES", "type": "text"},
{"name": "INVOICE_SERVICES", "type": "array"},
{"name": "INVOICE_RECOMMENDED_SERVICES", "type": "array"},
{"name": "STEER_UPDATED_AT", "type": "timestamp_ntz"}
]
}
}