MySQLEXSPEEDITE CHECKPOINT — Schema Reference

checkpoint_db  ·  visibility schema reference  ·  Updated 2026-07-03  ·  CheckPoint v1.31+ Asset GPS

Logical load key — application-level, not a declared FK

(company_id, load_number)

The application treats this two-column pair as the primary join key across the entire load lifecycle. It is not enforced as a foreign key at the database level — the app does not rely on declared FKs in PHP. Instead, every relevant SQL query uses both columns as a compound WHERE / JOIN condition.

This is confirmed by the repository's own dashboard documentation and repeated in every load-init, ping, close-load, and reminder-cron code path.

track_load_snapshots track_load_stops track_tokens track_location_pings track_event_log track_messages track_driver_assignment_tokens

Private driver assignment addendum

Purpose: allows a load to be created without exposing the driver's phone number to the broker or dispatcher. track_driver_assignment_tokens stores the tokenized assignment link and masked phone display. track_load_snapshots.driver_assignment_status shows whether the load is still waiting for private assignment or has an assigned driver.

Privacy rule: full phone is used only for SMS dispatch. Dashboard and reports should show driver_phone_masked, Phone on file, or last four digits only.

2026 visibility feature addendum

ETA Intelligence: track_eta_settings stores per-tenant reminder configuration used by EtaService and cron/send_eta_reminders.php. Stop records now include eta_at, reminder_at, and eta_reminder_sent_at.

POD capture: track_pod_photos stores delivery proof metadata uploaded via /v1/tracking/pod-upload.php. Delivery stop fields include pod_submitted and pod_submitted_at. Company POD requirement is in app_credentials service pod key required_on_delivery.

Share tracking: track_share_tokens stores public-link scope controls consumed by ShareTokenService and /v1/share/data.php. Public page /share.php is branded "Powered by Exspeedite CheckPoint".

Arrival Zone and exceptions: track_geofence_events records automatic arrival-zone hits from driver GPS pings. track_exception_alerts stores missed ETA, no-update, geofence, and POD follow-up alerts raised by ExceptionService and cron/detect_exceptions.php.

Integration Events: track_webhook_subscriptions stores dispatcher-configured 214-style email and JSON webhook outputs. track_webhook_delivery_log records delivery attempts. IntegrationEventService fires soft-fail events for dispatch, pickup, arrival, delivery, POD, ETA, geofence, and exception milestones.

Rich load details: track_load_snapshots now stores optional reference, commodity, freight, equipment, operational, documentation, special-instruction, broker context fields, and stable tenant custom fields user1 through user10. track_load_stops stores optional appointment windows, facility hours, dock/access rules, load/unload type, and driver-safe stop instructions.

Custom field labels: per-company display names for user1 through user10 live in app_credentials service custom_fields keys user1_label through user10_label. Blank labels default to User 1 through User 10.

Asset GPS / ELD providers: per-company Samsara and Motive API keys live in app_credentials services gps_samsara and gps_motive (key api_token). Active provider selection uses service gps_provider key active_provider (samsara | motive). Connection settings and refresh cadence live in gps_provider_connections. Admin UI: /gps-integrations.php. Developer docs: /developers.php#asset-gps.

PK Primary key
FK Foreign key (single column)
FK* Composite FK — part of a two-column key
SOFT Soft reference — no constraint enforced
NN NOT NULL
HIGH Relationship confidence (code-proven)
MED Relationship confidence (partial evidence)
Core — multi-tenant anchor
track_users Hub — every other track_ table FK's here via company_id
ColumnTypeFlagsNotes
idint
PKNN
Auto-increment
company_namevarchar(150)
NN
passwordvarchar(255)
NN
Hashed
is_activetinyintDefault 1
timezonevarchar(60)
NN
IANA string, e.g. America/Chicago. For alert formatting only — never for storage
contact_emailvarchar(150)Dispatcher email — required for driver-silent alerts
contact_phonevarchar(30)Reserved for future SMS alert feature
created_atdatetimeDefault CURRENT_TIMESTAMP
Carrier & driver roster
track_carriers
ColumnTypeFlagsNotes
idint
PKNN
company_idint
FKNN
→ track_users.id
carrier_namevarchar(150)
NN
legal_namevarchar(150)
dot_numbervarchar(20)Indexed
mc_numbervarchar(20)Indexed
cityvarchar(100)
statevarchar(10)
sourceenum(manual,fmcsa,exspeedite,mcleod)Default: manual
external_idvarchar(100)TMS reference ID
is_activetinyintDefault 1
created_atdatetimeDefault CURRENT_TIMESTAMP
track_carrier_drivers
ColumnTypeFlagsNotes
idint
PKNN
carrier_idint
FKNN
→ track_carriers.id
company_idint
FKNN
→ track_users.id
driver_namevarchar(150)
NN
driver_phonevarchar(30)Nullable for private-link loads until the carrier/driver submits the private assignment page. Full value is send-only.
driver_phone_maskedvarchar(30)Dispatcher-safe display value, for example Phone on file or ***-***-1234.
driver_assignment_statusvarchar(40)
NN
Default assigned. Private flow uses pending_assignment until assign-driver.php completes.
driver_assignment_token_idint
SOFT
Soft reference to track_driver_assignment_tokens.id for private-link loads.
driver_emailvarchar(150)
is_activetinyintDefault 1
created_atdatetimeDefault CURRENT_TIMESTAMP
track_driver_assignment_tokens Private carrier/driver assignment links. Soft joins by company_id + load_number.
ColumnTypeFlagsNotes
idint
PKNN
company_idint
FK*NN
Tenant scope. Used with load_number for soft load join.
load_numbervarchar(80)
FK*NN
Soft join to track_load_snapshots(company_id, load_number).
tokenvarchar(128)
NN
Unique public token for /carrier/assign.php.
carrier_namevarchar(180)Display context on assignment page.
assignment_statusvarchar(40)
NN
pending_assignment or assigned.
assigned_byvarchar(40)private_link for carrier/driver submitted assignments.
driver_namevarchar(120)Captured on private assignment submit.
driver_phone_encryptedtextSend-only storage. Never display raw phone in dashboard/report UI.
driver_phone_maskedvarchar(30)Safe display value.
driver_emailvarchar(180)Optional reference only.
assigned_atdatetimeUTC submit time.
activetinyint
NN
Default 1. Completed/cancelled loads should no longer accept assignment.
created_atdatetimeDefault CURRENT_TIMESTAMP
updated_atdatetimeSet when assignment is submitted.
Load lifecycle — snapshots → stops → tokens → pings
track_load_snapshots Load header/master row. Unique key on (company_id, load_number) — the logical load key root
ColumnTypeFlagsNotes
idint
PKNN
company_idint
FKNN
→ track_users.id  ·  join proven: u.id = s.company_id in reminder cron
load_numbervarchar(50)
NN
Unique key with company_id. One snapshot per (company_id, load_number). Load-init checks this before insert/update.
carrier_namevarchar(150)Denormalized snapshot — not a live FK to track_carriers
driver_namevarchar(150)Denormalized snapshot
driver_phonevarchar(30)
NN
driver_emailvarchar(150)
reference_numberstextBOL, PO, shipment, or customer reference numbers
commodity_descriptiontextFreight description
total_weight_lbsdecimal(10,2)Total weight in pounds
piece_countintPiece count
pallet_countintPallet or skid count
freight_dimensionstextDimensions, cube, or stackability context
freight_classvarchar(40)LTL freight class
nmfc_numbervarchar(80)NMFC reference
special_propertiestextHazmat, reefer, fragile, odor-sensitive, no-stack, or other properties
trailer_typevarchar(80)Dry van, reefer, flatbed, length, or similar equipment type
equipment_specstextAir-ride, liftgate, trailer specs, or equipment notes
driver_assisttextDriver assist requirements
securement_requirementstextTarping, chains, straps, blocking, or other securement
onboard_toolstextPallet jack, PPE, load bars, straps, or other tools
detention_layover_termstextFree time and layover terms
tracking_expectationstextPing, photo, or update expectations
routing_hos_notestextRouting, HOS, or team-driver notes
team_driver_requiredtinyint(1)
NN
Default 0
required_paperworktextBOL, POD, seals, weight tickets, signatures, photos
special_instructionstextCustomer/site-specific rules and security protocols
broker_namevarchar(180)Dispatcher/internal broker context; excluded from driver, public share, and customer-facing Integration Events payloads
broker_contactvarchar(255)Dispatcher/internal primary contact for load questions; excluded from customer-facing visibility outputs
user1 ... user10textTenant-configurable load-level custom fields for customer-safe business context. Payload keys remain stable; labels are stored in app_credentials/custom_fields.
statusenum(active,completed,cancelled)Default: active
sms_fallback_usedtinyintDefault 0
last_reminder_sent_atdatetime
created_atdatetimeDefault CURRENT_TIMESTAMP
track_load_stops CASCADE DELETE from track_load_snapshots
ColumnTypeFlagsNotes
idint
PKNN
load_numbervarchar(50)
FK*NN
Composite FK with company_id → track_load_snapshots(company_id, load_number)
company_idint
FK*FKNN
Also standalone FK → track_users.id
stop_sequenceint
NN
1-based ordering within the load; controls driver workflow order and supports multiple pickups/deliveries/stop-offs
milestone_typeenum(pickup,transit,delivery)
NN
Use transit for Stop / Stop-off, crossdock, partial delivery, or other intermediate stops
location_namevarchar(150)
address1varchar(200)
cityvarchar(100)
NN
statevarchar(50)
NN
zipvarchar(20)
scheduled_atdatetimeAppointment window start
time_window_startdatetimeExact appointment or FCFS window start
time_window_enddatetimeExact appointment or FCFS window end
appointment_typevarchar(80)Appointment, FCFS, call-for-appointment, or other process
load_unload_typevarchar(80)Live load/unload, drop, preloaded, or similar handling type
facility_hoursvarchar(255)Facility receiving/shipping hours
appointment_processtextCall-ahead or scheduling process
dock_instructionstextDock and check-in details
access_rulestextGate, access, parking, PPE, or security rules
stop_restrictionstextStop-specific restrictions
driver_instructionstextDriver-safe stop instructions
sms_sent_atdatetimeTimestamp of advance SMS for this stop
track_tokens Driver tracking link tokens. Unique on token varchar(64). No DB uniqueness enforced on (company_id, load_number) — app may create multiple tokens per load.
ColumnTypeFlagsNotes
idint
PKNN
tokenvarchar(64)
NN
Unique. SHA-256 hex. Sent to driver via SMS link. Ping endpoint selects this to get token.id for pings.
load_snapshot_idintOptional soft ref to track_load_snapshots.id — not used by primary join path
load_numbervarchar(50)
FK*NN
Composite FK with company_id → track_load_snapshots(company_id, load_number). Index on (company_id, load_number, status) used by dashboard join and close-load expiry.
company_idint
FK*FKNN
Also standalone FK → track_users.id
expires_atdatetime
NN
Hard expiry — app_credentials.token_expiry_days controls generation
statusenum(active,expired)Default: active
created_atdatetimeDefault CURRENT_TIMESTAMP
track_location_pings Append-only GPS trail. bigint PK — high volume expected
ColumnTypeFlagsNotes
idbigint
PKNN
token_idint
FKNN
→ track_tokens.id — inserted directly from token lookup in ping endpoint. Index confirmed. No declared DB FK constraint found.
load_numbervarchar(50)
NN
Denormalized for query performance. Indexes on (company_id, load_number, timestamp) and (company_id, load_number, id) used by dashboard, map trail, and ping-count queries.
company_idint
FKNN
→ track_users.id
stop_sequenceint
NN
Which stop this ping is headed toward
milestone_typeenum(pickup,transit,delivery)
NN
transit means Stop / Stop-off in dispatcher/API docs
latdecimal(10,7)
NN
lngdecimal(10,7)
NN
accuracydecimal(8,2)Meters
accuracy_qualityenum(good,fair,poor)
ip_addressvarchar(45)IPv4 or IPv6
user_agenttext
timestampdatetime
NN
Device time — may differ from received_at
received_atdatetimeDefault CURRENT_TIMESTAMP — server receipt time
addresstextReverse-geocoded via Nominatim
raw_payloadjson
NN
Full browser Geolocation API payload
Messaging & event log
track_messagesNo DDL found in repo — relationship proven by cron insert behavior only
ColumnTypeFlagsNotes
idbigint
PKNN
load_numbervarchar(50)Written from track_load_snapshots.load_number by reminder cron. No FK constraint — messages survive load deletion.
company_idint
FKNN
→ track_users.id
stop_sequenceint
message_typeenum(initial,advance,reminder,manual_reminder,
completion,email_fallback,dispatcher_alert)
NN
channelenum(sms,email)
NN
recipientvarchar(150)
NN
Phone number or email address
providervarchar(50)twilio / sendgrid
provider_message_idvarchar(150)External ID for delivery status lookup
statusvarchar(50)Provider delivery status
bodytextFull message text sent
sent_atdatetimeDefault CURRENT_TIMESTAMP
track_event_log Audit log — NO FK constraints. Index on (company_id, load_number, created_at). Survives load/company cleanup by design.
ColumnTypeFlagsNotes
idbigint
PKNN
load_numbervarchar(50)
SOFT
Soft ref — written by load-init, ping endpoint (ping_received, load_completed, sms_sent), and close-load (manual_close) using token-derived value
company_idint
SOFT
Soft ref — no FK enforced. Scoped by session company_id at insert time.
event_typevarchar(50)
NN
event_channelvarchar(30)
event_statusvarchar(30)
messagetext
actorvarchar(100)User or system that triggered the event
ip_addressvarchar(45)
user_agenttext
raw_payloadjson
created_atdatetimeDefault CURRENT_TIMESTAMP
API access
track_api_clients
ColumnTypeFlagsNotes
idint
PKNN
company_idint
FKNN
→ track_users.id — proven by setup script: inserts track_users row, uses returned ID here. No declared DB FK found in repo.
client_namevarchar(150)
NN
bearer_token_hashvarchar(255)
NN
Hashed bearer token for webhook ingest
is_activetinyintDefault 1
created_atdatetimeDefault CURRENT_TIMESTAMP
last_used_atdatetimeUpdated on each authenticated request
GPS Provider Integrations — asset / ELD (company-scoped)
gps_provider_connections Unique on (company_id, provider). One row per company per provider (samsara, motive). Admin UI: /gps-integrations.php
ColumnTypeFlagsNotes
idint
PK
company_idint
FKNN
→ companies.company_id
providervarchar(50)
NN
samsara | motive (peoplenet planned)
enabledtinyint(1)Provider connection on/off
auth_modevarchar(40)api_token (Samsara) | api_key (Motive)
api_base_urlvarchar(255)Region/base URL for provider API
regionvarchar(20)us | eu | ca | custom (Samsara)
refresh_modevarchar(20)manual | scheduled
refresh_interval_minutesint10, 15, 30, or 60 when scheduled
statusvarchar(40)not_tested | saved | verified | connected | error
last_poll_atdatetimeLast scheduled ELD poll
last_manual_refresh_atdatetimeLast manual Refresh ELD GPS
gps_vehicle_mappings Unique on (company_id, provider, provider_vehicle_id). Maps TMS tractor to provider vehicle.
ColumnTypeFlagsNotes
company_idint
FK
Tenant scope
providervarchar(50)samsara | motive
tms_vehicle_idvarchar(100)Matches initialize tms_vehicle_id / power_unit
provider_vehicle_idvarchar(100)Provider fleet vehicle ID
provider_vehicle_namevarchar(190)Display name from provider sync
license_platevarchar(60)Optional match aid
gps_vehicle_telemetry Unique on (company_id, provider, provider_vehicle_id). Latest lat/lng snapshot per provider vehicle.
ColumnTypeFlagsNotes
company_idintTenant scope
providervarchar(50)samsara | motive
lat / lngdecimalMap marker coordinates
freshness_statusvarchar(30)current | stale | offline flags
provider_event_timedatetimeProvider-reported GPS time (UTC)
gps_poll_cursors Unique on (company_id, provider, feed_name). Feed cursor state for scheduled polling.
ColumnTypeFlagsNotes
company_idintTenant scope
providervarchar(50)samsara (V1 cron)
feed_namevarchar(80)e.g. vehicle_stats_gps
cursor_valuevarchar(500)Provider feed pagination cursor
admin_user_company_access Unique on (admin_user_id, company_id). Controls workspace switcher + GPS Integrations multi-tenant overview visibility. Admin UI: /user-access.php
ColumnTypeFlagsNotes
admin_user_idint
FK
→ admin_users.id
company_idint
FK
→ companies.company_id
rolevarchar(40)admin | dispatcher per company
can_dispatchtinyint(1)Dispatch permission for that company
Configuration — no FK relationships
app_credentials Unique on (company_id, service_name, credential_key) — scoped per tenant. No direct FK join to track_users found in credential queries.
ColumnTypeFlagsNotes
idint
PKNN
company_idint
FKNN
→ companies.company_id — tenant scope for every row
service_namevarchar(100)
NN
pod, custom_fields, continuous_tracking, routing, gps_samsara, gps_motive, gps_provider, dot_layers
credential_keyvarchar(255)
NN
credential_valuetext
NN
descriptiontext
is_activetinyint(1)Default 1
created_atdatetimeDefault CURRENT_TIMESTAMP
updated_atdatetimeON UPDATE CURRENT_TIMESTAMP
system_credentials Unique on (service_name, credential_key)
ColumnTypeFlagsNotes
idint
PKNN
service_namevarchar(50)
NN
twilio, sendgrid
credential_keyvarchar(255)
NN
credential_valuetext
NN
updated_atdatetimeDefault + ON UPDATE CURRENT_TIMESTAMP
Relationship summary — code-proven
track_users → everything (company_id hub)  ·  No declared DB FK found; relationships proven by code joins and setup scripts
track_userstrack_load_snapshotstrack_users.id = s.company_idHIGH
Proven: reminder cron LEFT JOIN track_users u ON u.id = s.company_id. Dashboard docs confirm track_users has no company_id column — track_users.id IS the company identifier.
track_userstrack_api_clientscompany_id = track_users.idHIGH
Proven: setup script inserts track_users, uses returned ID as track_api_clients.company_id. No declared DB FK found in repo.
track_userstrack_carriers / track_carrier_drivers / track_tokens / track_location_pings / track_messagescompany_idHIGH
All tables scoped to company_id matching track_users.id. No declared DB FK constraints confirmed in repo — app relies on application-level enforcement.
Load lifecycle chain — (company_id, load_number) logical key
track_load_snapshotstrack_load_stopscompany_id + load_number — CASCADE DELETEHIGH
Load-init deletes existing stops then reinserts by same (company_id, load_number). Ping endpoint validates stops by (company_id, load_number, stop_sequence, milestone_type). Unique key on (company_id, load_number, stop_sequence) confirmed in schema.
track_load_snapshotstrack_tokenscompany_id + load_numberHIGH
Dashboard joins active tokens to snapshots on both load_number and company_id with status = 'active'. Token-expiration cron and close-load endpoint both expire tokens by (company_id, load_number). DB uniqueness not enforced on (company_id, load_number) — multiple tokens per load are possible.
track_tokenstrack_location_pingstoken_id = track_tokens.idHIGH
Clearest ID-based join in the codebase. Ping endpoint: SELECT id FROM track_tokens WHERE token = ?, then inserts that id into track_location_pings.token_id. Index on token_id confirmed. No declared DB FK constraint found.
track_load_snapshotstrack_location_pingscompany_id + load_numberHIGH
Dashboard counts pings per snapshot by (company_id, load_number). Map-data endpoint builds latest-ping subquery grouped by (company_id, load_number), joined to snapshots on both fields. Trail query filters track_location_pings by (company_id, load_number) directly.Note: dashboard/data.php joins only on load_number in outer join; company scoping is parameter-driven in that specific query. map-data.php joins explicitly on both columns.
track_load_snapshotstrack_event_logcompany_id + load_number (soft)HIGH
Load-init, ping endpoint (ping_received, load_completed, sms_sent), and close-load (manual_close) all insert event rows using the same token-derived (company_id, load_number). Index on (company_id, load_number, created_at) confirmed in schema.
track_load_snapshotstrack_messagescompany_id + load_numberMED
Reminder cron inserts into track_messages using (company_id, load_number) sourced from track_load_snapshots. Insert usage confirmed. track_messages DDL not found in repo — no schema-level relationship can be stated.
track_load_snapshotstrack_driver_assignment_tokenscompany_id + load_number and optional token idHIGH
run_initialize() creates assignment tokens for private-link loads. assign-driver.php joins token rows to snapshots, masks phone display, creates a driver tracking token, and updates driver_assignment_status.
Carrier roster
track_carrierstrack_carrier_driverscarrier_id + company_idMED
Carrier-drivers endpoint filters by carrier_id and company_id from session. Parent table for carrier_id not found in repo — cannot confirm carrier_id references track_carriers.id from schema alone.
Configuration scoping
app_credentialstrack_users (implicit)company_id scopeHIGH
Unique key on (company_id, service_name, credential_key). Admin settings, track-init webhook lookup, and settings-save all filter by company_id. No direct SQL join to track_users found in credential queries — relationship is by convention, not enforced.
system_credentialsnoneglobal — no company scopeHIGH
Global Twilio / SendGrid credentials keyed only by (service_name, credential_key). No company scoping in any credential query found.