Skip to content

Appointment Data Model

🏗️ Primary Entities

Appointments: Scheduled shop visits with status, type, and scheduling window

Scheduling Times: Start/end window, missed timestamp in UTC and local timezone

Source Attribution: How the appointment was created (widget, SMS integration, Google, etc.)

Campaign Attribution: Optional link to the marketing campaign that drove the booking

🔗 Key Relationships

Many-to-One: Appointment → Shop (each appointment belongs to one shop)

Many-to-One: Appointment → Customer (each appointment may belong to one customer)

Many-to-One: Appointment → Vehicle (each appointment may be for one vehicle)

Many-to-One: Appointment → Campaign (optional marketing attribution)

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

Field NameData TypeDescriptionRequired
STEER_TENANT_IDString (UUID)Unique tenant identifier (parent organization)Yes
STEER_SHOP_IDString (UUID)Shop location where the appointment is scheduled. Links to Shop Data Model STEER_SHOP_IDYes
STEER_CUSTOMER_IDString (UUID)Customer who booked the appointment. Links to Customer Data Model STEER_CUSTOMER_IDNo
STEER_VEHICLE_IDString (UUID)Vehicle the appointment is for. Links to Vehicle Data Model STEER_VEHICLE_IDNo
STEER_APPOINTMENT_IDString (UUID)Unique appointment identifier (primary key)Yes
STEER_CAMPAIGN_IDString (UUID)Marketing campaign that drove the booking. Links to Campaign Data Model STEER_CAMPAIGN_IDNo
STEER_MARKETING_TYPE_IDString (UUID)Marketing type associated with the campaign attributionNo

Core appointment information including title, status, type, and source.

Field NameData TypeDescriptionRequired
APPOINTMENT_TITLEStringAppointment subject/heading (e.g., Oil Change, or integration-generated titles)No
APPOINTMENT_DESCRIPTIONStringDetailed notes or service request details, often free text including requested services and commentsNo
APPOINTMENT_STATUSStringCurrent appointment status (see enum values below)Yes
APPOINTMENT_TYPEStringVisit type — drop-off, wait, or pick-up (see enum values below)No
APPOINTMENT_SOURCE_TYPEStringHow the appointment was created (see enum values below)No
APPOINTMENT_LEAD_SOURCEStringFree-text lead source tracking value entered by the shop (e.g., Text Marketing, Social Media)No

Denormalized vehicle display names captured on the appointment.

Field NameData TypeDescriptionRequired
APPOINTMENT_VEHICLE_NAMEStringDisplay name of the vehicle (e.g., 2021 Toyota Camry)No
APPOINTMENT_VEHICLE_FULL_NAMEStringFull vehicle description including model detailsNo

Appointment lifecycle dates in both UTC and the shop’s local timezone.

Field NameData TypeDescriptionRequired
APPOINTMENT_CREATED_ATTimestampAppointment creation time as reported by the source system (UTC). For appointments imported from a shop management system this reflects the source/integration timestamp, which during a bulk import or migration is the import time rather than the original booking time. See the caution below.Yes
APPOINTMENT_STARTED_ATTimestampScheduled appointment window start (UTC)No
APPOINTMENT_ENDED_ATTimestampScheduled appointment window end (UTC)No
APPOINTMENT_MISSED_ATTimestampWhen the appointment was marked as missed (UTC)No
APPOINTMENT_STARTED_AT_LOCALTimestampScheduled window start (shop’s local timezone)No
APPOINTMENT_ENDED_AT_LOCALTimestampScheduled window end (shop’s local timezone)No
APPOINTMENT_MISSED_AT_LOCALTimestampMissed timestamp (shop’s local timezone)No
Field NameData TypeDescriptionRequired
APPOINTMENT_IS_DELETEDBooleanSoft-delete flag. true when the appointment was deleted from the platform, removed by an integration sync, or removed as a duplicate. Deleted appointments are included so consumers can propagate deletionsYes
Field NameData TypeDescriptionRequired
STEER_CREATED_ATTimestampWhen the record was first written into Steer (UTC). This is a Steer-side ingest timestamp, independent of the source system — for imported appointments it reflects the moment Steer ingested the record (e.g. the onboarding/migration time), not the original booking time. Use this to distinguish genuine real-time bookings from bulk-imported history.No
STEER_UPDATED_ATTimestampLast modification timestamp for this appointment record (UTC)No
  • RequestMade: Booking request submitted, awaiting shop approval
  • Booked: Confirmed and scheduled
  • InProgress: Vehicle currently being serviced
  • Finished: Appointment completed
  • Missed: Customer did not show up
  • Declined: Appointment request declined
  • CheckedIn / Unknown: Rare legacy values that may appear in historical data

Complete API response example with an appointment record:

{
"data": [
[
"d119bb99-0645-43e3-8274-247362e5432e",
"385620aa-685f-43b6-bbcf-2d59ce25edc8",
"08d6f284-ff43-4475-8a35-31ed2b379794",
"403b8b7e-534e-4772-b450-b96673c2341f",
"e2ca36ab-4f4f-45eb-9168-20403e8ef1da",
null,
null,
"Oil Change Appointment",
"SERVICE: EMISSIONS INSPECTION\r\nCOMMENT: SAFETY AND EMISSIONS INSPECTION",
"Finished",
"Wait",
"Website",
null,
"2011 Honda Fit",
"2011 Honda Fit Fit",
"2026-03-20T17:41:41.003Z",
"2026-03-27T15:00:00.000Z",
"2026-03-27T15:30:00.000Z",
null,
"2026-03-27T10:00:00.000Z",
"2026-03-27T10:30:00.000Z",
null,
false,
"2026-03-20T17:45:02.118Z",
"2026-03-27T16:02:11.451Z"
]
],
"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_APPOINTMENT_ID", "type": "text"},
{"name": "STEER_CAMPAIGN_ID", "type": "text"},
{"name": "STEER_MARKETING_TYPE_ID", "type": "text"},
{"name": "APPOINTMENT_TITLE", "type": "text"},
{"name": "APPOINTMENT_DESCRIPTION", "type": "text"},
{"name": "APPOINTMENT_STATUS", "type": "text"},
{"name": "APPOINTMENT_TYPE", "type": "text"},
{"name": "APPOINTMENT_SOURCE_TYPE", "type": "text"},
{"name": "APPOINTMENT_LEAD_SOURCE", "type": "text"},
{"name": "APPOINTMENT_VEHICLE_NAME", "type": "text"},
{"name": "APPOINTMENT_VEHICLE_FULL_NAME", "type": "text"},
{"name": "APPOINTMENT_CREATED_AT", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_STARTED_AT", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_ENDED_AT", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_MISSED_AT", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_STARTED_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_ENDED_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_MISSED_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "APPOINTMENT_IS_DELETED", "type": "boolean"},
{"name": "STEER_CREATED_AT", "type": "timestamp_ntz"},
{"name": "STEER_UPDATED_AT", "type": "timestamp_ntz"}
]
}
}