# AI Features
Source: https://docs.tread.ai/ai/overview
Tread's AI reads ticket photos, reviews tickets, texts drivers for missing tickets, and answers questions about your data.
Tread's AI takes on the ticket work your team does by hand. It reads ticket photos, checks each ticket against its order, and texts drivers who forget to upload one. You set it up in **Settings → Agents**.
> **[AI Ticket Scanning](#ai-ticket-scanning)**
>
> Reads each uploaded ticket photo and fills in the ticket details.
> **[AI Reviews](#ai-reviews)**
>
> Approves tickets that match their order and flags the rest for a person.
> **[AI Ticket Chaser](/specialized/ai-ticket-chaser)**
>
> Texts a driver when a load finishes without its ticket.
> **[Ask Tread](#ask-tread)**
>
> Ask questions about your data, or ask for a change, in plain English.

## AI Ticket Scanning
AI Ticket Scanning reads each ticket photo that drivers or staff upload, and fills in the ticket details. It's always on.
Most companies leave it as is. If your tickets have an unusual layout, add **Custom Instructions** under **AI Ticket Scanning**, for example "Treat the number in the top-right corner as the ticket number." Instructions apply to every ticket your company scans from then on.
## AI Reviews
AI Reviews checks each finished load's ticket against its order. It approves tickets that look right and flags errors or duplicates, so a person only looks at the tickets that need it. It only reviews loads that have a ticket.
AI Reviews is off until you turn it on. Check **Automatically review tickets with AI to approve valid tickets and flag inaccuracies or duplicates**. Add **Custom Instructions** for rules specific to your company, such as "Always flag tickets where the quantity exceeds 30 tons."
Each reviewed ticket shows one of three statuses:
| Status | What it means |
| - | - |
| **AI Reviewed** | The ticket matches its order and is approved. |
| **Data mismatch** | Something on the ticket doesn't match the order, or it looks like a duplicate. |
| **Unreadable ticket** | The photo can't be read. |

Hover over the AI icon to see why a ticket was flagged. Use the **AI Review Statuses** filter to list flagged tickets. If a flag is wrong, click **Dismiss Review**.
## AI Ticket Chaser
When a load finishes without its ticket, the Driver Agent texts the driver and uploads the photo they send back. Contact Tread to set it up, then turn on **Ticket Chaser** on each project that needs it. See [AI Ticket Chaser](/specialized/ai-ticket-chaser).
## Ask Tread
> [!NOTE]
>
> Ask Tread is rolling out to select customers.
Click **Ask Tread** at the bottom right of any page. Ask a question, such as "How many drivers do I have?", or ask for a change, such as "Update a user's phone number." Tread shows each change it proposes, and nothing is saved until you confirm it.
## Related
* [Agent Configurations](/onboarding/agent-configurations) — set up the AI agents during onboarding
* [AI Ticket Chaser](/specialized/ai-ticket-chaser) — how drivers get texted for missing tickets
* [Approving Loads & Tickets](/workflow/approvals/loads) — where reviewed tickets show up
# Build a Report fields
Source: https://docs.tread.ai/concepts/build-a-report-fields
Every field in the Customer Reports topic of Build a Report, by view, with its type and what it means.
Find the right field before you build. This page lists every field in the **Customer Reports** topic of [Build a Report](/concepts/omni-reports#build-your-own-report), grouped by the view it sits in.
## How to read this page
* **Type** — Date, Number, Text, Yes / No, List, or ID. **Measure** is a count, sum, average, or percent calculated across the rows in your report.
* **ID and "Pk" fields** — Tread's internal IDs. Use them to count or match records, not to show in a report.
* **Grouped rows** — fields that repeat, like pickup, dropoff, and staging site fields, or Vendor 1 to 3, share one row.
> [!TIP]
>
> In the builder, click the three dots (**⋮**) on a field to read its **Description**.
## Customer Reports
One row per job. Timing, status, hours, quantities, the driver, vendors, truck, and sites.
| Field | Type | What it means |
| - | - | - |
| **Friendly Job Id** | Text | Short, readable job number shown in Tread. |
| **Job Id** | Text | The job's identifier. |
| **Job Pk** | ID | Tread's internal ID for the job. Use it to count or match jobs. |
| **Order Pk** | ID | Tread's internal ID for the order the job belongs to. |
| **Status** | Text | Current state of the job, such as scheduled, in progress, completed or canceled. |
| **Date Job Created** | Date | When the job was created. |
| **Scheduled Start At** | Date | Date and time the job is scheduled to start. |
| **Scheduled Start YYYY-MM-DD** | Date | Scheduled start date only (time set to midnight). Handy for grouping by day. |
| **First Sent At** | Date | The first time the job was sent out. |
| **Driver Co Assigned At** | Date | When the job was assigned to the driver's company. |
| **Vendor 1 Assigned At** | Date | When the job was assigned to the first vendor. |
| **Sent To Driver At** | Date | When the job was sent to the driver. |
| **Driver Accepted At** | Date | When the driver accepted the job. |
| **First Accepted At** | Date | The first time the job was accepted. |
| **Driver Declined At** | Date | When the driver declined the job. |
| **First Declined At** | Date | The first time the job was declined. |
| **Canceled At** | Date | When the job was canceled. |
| **First Canceled At** | Date | The first time the job was canceled. |
| **To Pickup At** | Date | When the driver started heading to the pickup site. |
| **Actual Arrival At** | Date | When the truck actually arrived for the job. |
| **First Geofence Entry At** | Date | The first time the truck entered a job site's geofence (its map boundary). |
| **Last Geofence Exit At** | Date | The last time the truck left a job site's geofence. |
| **First Ticket Time / Last Ticket Time** | Date | Time on the first and on the last ticket of the job. |
| **In Review At** | Date | When the job moved to In Review. |
| **Completed At** | Date | When the job was completed. |
| **Ended At** | Date | When the job ended. |
| **Auto Ended** | Yes / No | Yes if Tread ended the job automatically rather than the driver. |
| **Approved At** | Date | When an admin or biller from the job's company approved the job. |
| **Billing Approved At** | Date | When the job's company gave billing approval. |
| **Logging Started At / Logging Ended At** | Date | Actual times the driver started and stopped logging time. |
| **Adjusted Logging Started At / Adjusted Logging Ended At** | Date | Logging start and end after someone adjusted them. |
| **Final Logging Started At / Final Logging Ended At** | Date | Adjusted logging start and end if there are any, otherwise the actual times. |
| **Pre Clamp Logging Ended At** | Date | Logging end time before Tread capped it to the allowed limit. |
| **Clamped Logging Ended At** | Date | Logging end time after Tread capped it to the allowed limit. |
| **Final Work Time Minutes** | Number | Approved work minutes if set, otherwise actual work minutes. |
| **Approved Hours** | Number | Hours approved on the job. |
| **Total Hours (job time)** | Number | Total hours on the job. |
| **Total Minutes** | Number | Total minutes on the job. |
| **Ticket Time** | Number | Total ticket time on the job, in hours. |
| **Pause Time Minutes** | Number | Total paused minutes, from the driver's pause and resume taps. |
| **Pause Time Minutes (derived from actuals)** | Number | Actual logged time (start to end) minus work minutes. |
| **Pause Time Minutes (derived from final)** | Number | Final logged time (start to end) minus final work minutes. Never below zero. |
| **Adjusted Pause Time Minutes** | Number | Pause minutes after someone adjusted them. |
| **Break Time Minutes** | Number | Minutes of break taken during the job. |
| **Idle Time Seconds** | Number | Seconds the truck sat idle during the job. |
| **Load Cycle Avg** | Number | Average load cycle time on the job, in minutes. |
| **Completed Loads Count** | Number | Number of completed loads on the job. |
| **Loads With Tickets Count** | Number | Number of the job's loads that have a ticket. |
| **Quantity / Quantity Unit** | Number | Quantity on the job and its unit of measure. |
| **Delivered Quantities** | List | Delivered totals for each material and unit, across all loads on the job. |
| **First Delivered Quantity** | Text | Delivered quantity for the first material (A to Z) only. Not a job total. |
| **Material** | Text | Material on the job. |
| **Material Type Name** | Text | Type of the job's material, such as aggregate or asphalt. |
| **Service Name** | Text | Service performed on the job. |
| **Service Pk** | ID | Tread's internal ID for the service. |
| **Phase Code / Phase Name** | Text | Code and name of the project phase the work is billed to. |
| **Phase Combined** | Text | Phase code and name together in one field. |
| **Job Phase Code / Job Phase Name** | Text | Phase code and name set on the job. |
| **Shift Phase Code / Shift Phase Name** | Text | Phase code and name set on the truck for this shift. |
| **State Codes** | Text | State(s) taken from the dropoff site's address. |
| **Driver Assigned** | Text | Name of the driver on the job. |
| **Driver Company** | Text | Company the driver works for. |
| **Driver User Pk** | ID | Tread's internal ID for the driver. |
| **Driver Company Assignment Customer Account Pk / Company Pk** | ID | Internal IDs of the customer account and company on the driver's company assignment. |
| **Vendor 1 / Vendor 2 / Vendor 3** | Text | Vendors on the job in order: the vendor hired first, then any vendors they passed it to. |
| **Vendor 1 / 2 / 3 External Id** | Text | Those vendors' IDs in your own system. |
| **First / Second / Third Assignment Customer / Vendor Account Pk, Company Pk** | ID | Internal IDs of the customer and vendor account and company on the first, second, and third assignment. |
| **Truck Id** | Text | Name or number of the truck on the job. |
| **Truck Pk** | ID | Tread's internal ID for the truck. |
| **Equipment Name / Equipment License Number** | Text | The truck's name and license plate. |
| **Equipment Accounting Id / Equipment External Id** | Text | The truck's IDs in your accounting and other systems. |
| **Equipment Type** | Text | Type of truck, such as tri-axle or end dump. |
| **Equipment Type Accounting Id / Equipment Type External Id** | Text | The equipment type's IDs in your accounting and other systems. |
| **Equipment Type Gross Capacity / Equipment Type Gross Capacity Uom** | Number | How much that equipment type can carry, and the unit (for example 22 tons). |
| **Requested Equipment Type Name** | Text | Equipment type the order asked for. |
| **Requested Equipment Type Accounting Id** | Text | Accounting ID of the requested equipment type when the job was created. |
| **Addtl Eq 1 Name / License Number / Accounting Id / External Id** | Text | Name, license plate and IDs of the first additional piece of equipment, such as a trailer. |
| **Addtl Eq 1 Equipment Type (+ Accounting Id, External Id, Gross Capacity, Uom)** | Text | Type of that additional equipment, with its IDs and carrying capacity. |
| **Pickup / Dropoff / Staging Site Name** | Text | Name of the site where the truck picks up, drops off or waits (staging). |
| **Pickup / Dropoff / Staging Site Address** | Text | Street address of that site. |
| **Pickup / Dropoff / Staging Latitude, Longitude** | Number | Map coordinates of that site. |
| **Pickup / Dropoff External Id** | Text | The site's ID in your own system (for example your ERP or accounting software). |
| **Pickup / Dropoff / Staging Site Pk** | ID | Tread's internal ID for that site. Use it to count or match sites, not for display. |
| **Pickup Geofence Entry Count / Dropoff Geofence Entry Count** | Number | Number of times the truck entered the pickup or dropoff geofence. |
| **Has Gps Data** | Yes / No | Yes if the job has any GPS data. |
| **Gps Confidence Level** | Text | How complete the job's GPS data is: high, medium, low or none. |
| **Gps Total Pings / Gps Expected Pings / Gps Offline Pings** | Number | GPS location pings: recorded, expected for the job's length, and sent late from offline mode. |
| **Gps Active Period Minutes** | Number | Active work minutes used to judge GPS coverage, not counting pauses and breaks. |
| **Travelled Distance Meters** | Number | Distance the truck travelled on the job, in meters. |
| **Expected Primary Geofence Trigger Count / Actual Primary Geofence Trigger Count** | Number | Site geofence entries and exits Tread expected on the job's loads, and how many it recorded. |
| **Expected Secondary Geofence Trigger Count / Actual Secondary Geofence Trigger Count** | Number | The same for loading, unloading, check-in, scale and ticketing zones. |
| **Refreshed At** | Date | When this report data was last refreshed. |
| **Summary Created At / Summary Updated At** | Date | When Tread created and last updated the job's report row. |
| **Customer Reports Count** | Measure | Number of rows (jobs) in your result. |
| **Job ID Count / Job Pk Count Distinct** | Measure | Number of unique jobs. |
| **Jobs Completed** | Measure | Number of completed jobs. |
| **Completed Loads** | Measure | Total completed loads across the jobs. |
| **Loads With Tickets Count Sum** | Measure | Total loads that have a ticket. |
| **Quantity Sum** | Measure | Total quantity across the jobs. |
| **Approved Hours Sum** | Measure | Total approved hours. |
| **Final Hours** | Measure | Total final work hours (approved if set, otherwise actual). |
| **Final Work Time Minutes Sum** | Measure | Total final work minutes (approved if set, otherwise actual). |
| **Break Minutes Sum** | Measure | Total break minutes. |
| **Idle Time Seconds Sum** | Measure | Total idle seconds. |
| **Ticket Time Sum** | Measure | Total ticket time, in hours. |
| **Travelled Distance Meters Sum** | Measure | Total distance travelled, in meters. |
| **First Sent Count** | Measure | Number of jobs sent to a vendor. |
| **Sent To Driver Count** | Measure | Number of jobs sent to a driver. |
| **Jobs with GPS Data** | Measure | Number of jobs that have GPS data. |
| **High Fidelity / Medium Fidelity / Low Fidelity / No GPS Fidelity** | Measure | Percent of jobs at each GPS confidence level. |
| **Average Gps Total Pings / Average Gps Expected Pings / Average Gps Offline Pings** | Measure | Average recorded, expected and offline GPS pings per job. |
| **Average Gps Active Period Minutes** | Measure | Average active work minutes per job, not counting pauses and breaks. |
## Load Data
One row per load. Load timing, cycle times, material, sites, and ticket details.
| Field | Type | What it means |
| - | - | - |
| **Load Id** | Text | The load's ID, including any ID from your own system. |
| **Load Number** | Number | The load's number within its job (1, 2, 3…), renumbered in order. |
| **Ordinality** | Number | The load's position in the job's sequence. |
| **Load Pk / Id** | ID | Tread's internal ID for the load. Use it to count or match loads. |
| **Job Pk** | ID | Tread's internal ID for the job the load belongs to. |
| **Status** | Text | Current state of the load. |
| **Created At / Updated At** | Date | When the load was created and last changed. |
| **Deleted At** | Date | When the load was deleted. Deleted loads keep this date. |
| **To Pickup At** | Date | When the truck started heading to the pickup site. |
| **Arrived Pickup At** | Date | When the truck arrived at the pickup site. |
| **Loaded At** | Date | When the material was loaded. |
| **To Dropoff At** | Date | When the truck started heading to the dropoff site. |
| **Arrived Dropoff At** | Date | When the truck arrived at the dropoff site. |
| **Unloaded At** | Date | When the material was unloaded. |
| **Completed At / Load Completed At** | Date | When the load was completed. |
| **Field Approved At** | Date | When someone in the field approved the load. |
| **Billing Approved At** | Date | When billing approved the load. |
| **Time To Pickup Minutes** | Number | Travel time to the pickup site, in minutes. |
| **Time At Pickup Minutes** | Number | Time spent at the pickup site, in minutes. |
| **Pickup Time Minutes** | Number | Pickup time for the load, in minutes. |
| **Time To Dropoff Minutes** | Number | Travel time to the dropoff site, in minutes. |
| **Time At Dropoff Minutes** | Number | Time spent at the dropoff site, in minutes. |
| **Dropoff Time Minutes** | Number | Dropoff time for the load, in minutes. |
| **Unload To Complete Minutes** | Number | Minutes from unloading to completing the load. |
| **Cycle Time Minutes** | Number | Full cycle time in minutes, from pickup through dropoff completion. |
| **Duration Minutes** | Number | Total length of the load, in minutes. |
| **Gps Minutes / Total Gps Minutes** | Number | Minutes of GPS tracking on the load. |
| **Has Gps Data** | Yes / No | Yes if the load has GPS data. |
| **Idle Time Seconds** | Number | Seconds the truck sat idle during the load. |
| **Travelled Distance Meters** | Number | Distance travelled on the load, in meters. |
| **First Geofence … Entry At (Site, Pickup Site, Drop Off Site, Check In, Loading, Scaling, Ticketing, Unloading)** | Date | First time the truck entered each zone: any site, pickup, dropoff, check-in, loading, scale, ticketing, unloading. |
| **Last Geofence … Exit At (same 8 zones)** | Date | Last time the truck left each of those zones. |
| **Quantity / Quantity Unit** | Number | Quantity of material on the load and its unit of measure. |
| **Material** | Text | Material on the load. |
| **Material External Id** | Text | The material's ID in your own system (only when your company owns the material). |
| **Material Type Name** | Text | Type of the load's material, such as aggregate or asphalt. |
| **Phase Code / Phase Name** | Text | Code and name of the project phase for the load. |
| **Pickup / Dropoff / Staging Site Name** | Text | Name of the site where the truck picks up, drops off or waits (staging). |
| **Pickup / Dropoff / Staging Site Address** | Text | Street address of that site. |
| **Pickup / Dropoff / Staging Latitude, Longitude** | Number | Map coordinates of that site. |
| **Pickup / Dropoff External Id** | Text | The site's ID in your own system (for example your ERP or accounting software). |
| **Pickup / Dropoff / Staging Site Pk** | ID | Tread's internal ID for that site. Use it to count or match sites, not for display. |
| **Return Site Name** | Text | Pickup site of the next load in the same job. Empty on the job's last load. |
| **Ticket Exists** | Yes / No | Yes if a ticket is attached to the load. |
| **Ticket Number** | Text | Number on the ticket. |
| **Ticket Pk** | ID | Tread's internal ID for the ticket. |
| **Ticket Quantity / Ticket Unit Of Measure** | Number | Quantity on the ticket and its unit of measure. |
| **Ticket Quantity Adjusted** | Number | Ticket quantity after someone adjusted it. |
| **Ticket Service Date** | Date | Service date written on the ticket. |
| **Ticket Source** | Text | Where the ticket came from, such as the driver app or an integration. |
| **Ticket Uploaded At** | Date | When the ticket was uploaded. |
| **Ticket Flagged** | Yes / No | Yes if the ticket has been flagged for review. |
| **Ticket External Vendor Id** | Text | Vendor ID written on the ticket, from the supplier's system. |
| **Ticket Material Name / Ticket Material External Id** | Text | Material named on the ticket and its ID in your own system. |
| **Ticket Material Pk** | ID | Tread's internal ID for the ticket's material. |
| **Ticket Ocr Processed** | Yes / No | Yes if Tread has read the ticket image automatically (OCR). |
| **Ticket Ocr Ticket Number / Ticket Ocr Net Quantity Ton** | Text | Ticket number and net tons Tread read from the ticket image. |
| **Refreshed At** | Date | When this report data was last refreshed. |
| **Load Count** | Measure | Number of unique loads. |
| **Load Count Completed** | Measure | Number of completed loads. |
| **Dispatched Completed Loads** | Measure | Number of dispatched loads that are completed. |
| **Active Loads** | Measure | Loads in progress, on the way to the pickup site. |
| **Loads Dispatched** | Measure | Loads on the way to the dropoff site. |
| **Loads (Billing Approved)** | Measure | Number of loads with billing approval. |
| **% Load Approved** | Measure | Percent of loads with billing approval. |
| **Ticket Exists True Count** | Measure | Number of loads that have a ticket. |
| **% Ticket Uploaded** | Measure | Percent of loads that have a ticket. |
| **Count of unique ticket numbers** | Measure | Number of different ticket numbers. |
| **Ticket Numbers Aggregated** | Measure | All ticket numbers in the row, in one list. |
| **Ticket Numbers Aggregated Hourly** | Measure | Ticket numbers for hourly work only, in one list. |
| **Ticket Quantity Adjusted Sum** | Measure | Total adjusted ticket quantity. |
| **Last Load or Ticket Completed At** | Measure | Latest ticket service date, or latest load completion if there is no ticket. |
| **Cycle Time Minutes Average / Cycle Time Minutes Median** | Measure | Average and median cycle time, in minutes. |
| **Duration Minutes Sum** | Measure | Total load minutes. |
| **Time To Pickup Minutes Sum / Time To Dropoff Minutes Sum** | Measure | Total travel minutes to pickup and to dropoff. |
| **Time At Pickup Minutes Sum / Time At Dropoff Minutes Sum** | Measure | Total minutes spent at pickup and at dropoff. |
| **Time At Pickup Minutes Average / Time At Dropoff Minutes Average** | Measure | Average wait at the pickup and dropoff sites, in minutes. |
| **Time at Pickup / Dropoff Minutes Avg (Drill by project ID)** | Measure | The same averages, set up to drill down by project. |
| **Logging Count Distinct** | Measure | Number of unique time-logging records. |
## Order Reports
One row per order. Customer, material, ordered quantity, and sites.
| Field | Type | What it means |
| - | - | - |
| **Name** | Text | Order name. |
| **Order Id** | Text | The order's ID, including any ID from your own system. |
| **Order Pk** | ID | Tread's internal ID for the order. |
| **External Id** | Text | The order's ID in an integrated system. |
| **Status** | Text | Current state of the order. |
| **Date Order Created** | Date | When the order was created. |
| **Customer Account** | Text | Customer the order is for. |
| **Creating Company / Creating Company Pk** | Text | Company that created the order, and its internal ID. |
| **Department** | Text | Department the order belongs to. |
| **Dispatch Number** | Text | Dispatch number on the order. |
| **Po Job Number** | Text | Purchase order or job number. |
| **Zone** | Text | Zone set on the order. |
| **Project Pk** | ID | Tread's internal ID for the order's project. |
| **Requester Pk** | ID | Tread's internal ID for the person who requested the order. |
| **Foreman First / Second / Third / Fourth Pk** | ID | Internal IDs of up to four foremen on the order. |
| **Material Name** | Text | Material on the order. |
| **Order Material Pk** | ID | Tread's internal ID for the order's material. |
| **Material Rate Unit Of Measure** | Text | Unit the material rate is charged in, such as ton or yard. |
| **Quantity / Quantity Unit** | Number | Ordered quantity and its unit of measure. |
| **PG Inventory Flag** | Text | Inventory flag used by one customer's integration. |
| **Pickup / Dropoff / Staging Site Name** | Text | Name of the site where the truck picks up, drops off or waits (staging). |
| **Pickup / Dropoff / Staging Site Address** | Text | Street address of that site. |
| **Pickup / Dropoff / Staging Latitude, Longitude** | Number | Map coordinates of that site. |
| **Pickup / Dropoff External Id** | Text | The site's ID in your own system (for example your ERP or accounting software). |
| **Pickup / Dropoff / Staging Site Pk** | ID | Tread's internal ID for that site. Use it to count or match sites, not for display. |
| **Pickup To Dropoff Distance Meters** | Number | Distance from pickup to dropoff, in meters. |
| **Refreshed At** | Date | When this report data was last refreshed. |
| **Order Reports Count** | Measure | Number of rows (orders) in your result. |
| **Completed Order Count** | Measure | Number of completed orders. |
| **Customer Account Count Distinct** | Measure | Number of different customers. |
| **Sum of Quantity** | Measure | Total ordered quantity. |
## Project Reports
One row per project. Customer, billing, phases, materials, and the defaults new orders and jobs start with.
| Field | Type | What it means |
| - | - | - |
| **Name** | Text | Project name. |
| **Project Id** | Text | The project's ID, including any ID from your own system. |
| **Project Pk** | ID | Tread's internal ID for the project. |
| **External Id** | Text | The project's ID in an integrated system. |
| **External Id (4-8)** | Text | Project external IDs that start with 4 through 8. Used in construction reports. |
| **Status** | Text | Current state of the project. |
| **Effective At / Expires At** | Date | When the project starts and stops being active. |
| **Customer Account Name** | Text | Customer the project is for. |
| **Customer Account Pk** | ID | Tread's internal ID for that customer account. |
| **Creating Company / Company Id** | Text | Company that created the project, and its internal ID. |
| **Department / Department Pk** | Text | Department the project belongs to, and its internal ID. |
| **Dispatch Number / Dispatch Number Pk** | Text | Dispatch number on the project, and its internal ID. |
| **Po Job Number** | Text | Purchase order or job number. |
| **Charge To Account** | Text | Account the work is billed to. |
| **Service Class Name** | Text | Service class set on the project. |
| **Prevailing Wage** | Yes / No | Yes if the project follows prevailing-wage rules. Changing it does not update existing orders. |
| **Chase Missing Tickets** | Yes / No | Yes if Tread reminds drivers about missing tickets on this project's jobs. |
| **Phase Data** | List | The project's phases, each with a name, a code and whether it is the main phase. |
| **Material 1 / 2 / 3 Name** | Text | First, second and third materials on the project. |
| **Material 1 / 2 / 3 Quantity** | Number | Total quantity of each of those materials. |
| **Material 1 / 2 / 3 Unit Of Measure** | Text | Unit of measure for each of those materials. |
| **Default Pickup Sites / Default Dropoff Sites** | List | Sites that new orders on this project start with. |
| **Default Order Quantity / Default Order Unit Of Measure** | Number | Quantity and unit new orders start with. |
| **Default Job Quantity / Default Job Unit Of Measure** | Number | Quantity and unit new jobs start with. |
| **Default Job Time** | Number | Minutes new jobs start with. |
| **Default Truck Count** | Number | Number of trucks new orders start with. |
| **Default Truck Hours** | Number | Units per hour new orders start with. |
| **Default Equipment Type Name** | Text | Equipment type new orders start with. |
| **Default Equipment Type Gross Capacity (+ Unit Of Measure)** | Number | Carrying capacity of that equipment type, and its unit. |
| **Pickup / Dropoff / Staging Site Name** | Text | Most recent pickup, dropoff and staging sites used on the project. |
| **Pickup / Dropoff / Staging Site Address** | Text | Addresses of those sites. |
| **Pickup / Dropoff / Staging Site Pk** | ID | Tread's internal IDs for those sites. |
| **Refreshed At** | Date | When this report data was last refreshed. |
| **Project Reports Count** | Measure | Number of rows (projects) in your result. |
| **Completed Project Count** | Measure | Number of completed projects. |
## Company Job Assignments
The rate your company pays and the rate it receives on each job.
| Field | Type | What it means |
| - | - | - |
| **Payable Rate Type / Payable Rate Value** | Text | How the rate your company pays is charged (per hour, per ton…) and the rate. Uses the assignment rate if the job has no pricing. |
| **Receivable Rate Type / Receivable Rate Value** | Text | How the rate your company is paid is charged, and the rate. Uses the assignment rate if the job has no pricing. |
## Customer Pricing and Vendor Pricing
The same four pricing settings, once for the customer side of the job and once for the vendor side.
| Field | Type | What it means |
| - | - | - |
| **Currency** | Text | Currency for all money values on the customer or vendor pricing. |
| **Jurisdiction** | Text | Department of Labor prevailing-wage jurisdiction. |
| **Material Rate Unit Of Measure** | Text | Unit the material rate is charged in, such as ton, yard or bushel. |
| **Prevailing Wage** | Yes / No | Yes if this pricing follows prevailing-wage rules. |
## Driver Pay
How the Driver is paid on the job.
| Field | Type | What it means |
| - | - | - |
| **Rate Type / Rate Value** | Text | How the driver is paid on the job (per hour, per load…) and the pay rate. |
## Related
* [Reporting](/concepts/omni-reports) — open Build a Report and save a report for your team
* [Orders & Projects](/concepts/orders-projects) — how orders and projects relate
* [Tickets & Timesheets](/concepts/tickets-timesheets) — where ticket and time fields come from
# Companies & Hierarchy
Source: https://docs.tread.ai/concepts/companies-hierarchy
Single companies vs parent/child structures, and when to use each.
## What it is
A Tread account is a Company. Most Tread customers run as one company. A Company can also be a Parent with Child companies underneath — used when a company has true regional splits with separate dispatchers, fleets, or books.
## Why it matters
Hierarchy decides where your data lives. Drivers, equipment, customers, vendors, and rates all attach to one Company.
## How Tread models it
* **Flat company** — one record. Everything lives at this level. Default for \~90% of customers.
* **Parent / Child** — one Parent, two or more Child companies.
* Typically the Parent company will act as a "Holding Company", where the operations will live at individual child company levels.
* For example
* Hold Co 1 - Hold Co users, who should have access to all children, added here
* Regional Operating Co A
* Dispatch Data & regional Co A users live here
* Regional Operating Co B
* Dispatch Data & regional Co B users live here
* Users assigned to the parent can navigate "down" to every Child company.
* Users added directly to Child companies can not see the data at the parent company level.
* Child companies can be connected with each other, as vendors and customers to each other
* **Sharing** data across companies
* Operational Data should be added at the most relevant operational company level
* If Trucks and Equipment, Foreman, Drivers, and Sites are all used across child companies, it makes sense to create master data at the Parent level and shared down via [Company Shares](/concepts/connected-ecosystem).
* If Child companies are truly independent regions, with minimal to no overlap, data should be managed at each child co level
* Connected Vendors, Connected Customers can be shared across the hierarchy
* Sites should be shared from the Parent co down to child companies
* Drivers, Foreman, and Equipment can be shared to any connected company
| Use flat when | Use parent/child when |
| - | - |
| One office, one fleet, one set of books | Multiple regions with separate P\&Ls |
| Dispatchers cover all work | Each region has its own dispatcher |
| Single accounting export | Each region exports reports separately |
## Common pitfalls
> [!TIP]
>
> Hierarchy is hard to undo. Confirm the structure with your Tread implementation lead before creating master data.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem) — how shared entities flow between companies
* [Roles & Permissions](/concepts/roles-permissions) — who can see and edit data across the hierarchy
* [Onboarding: Company Hierarchy](/onboarding/company-hierarchy) — step-by-step setup
# Compliance Documents
Source: https://docs.tread.ai/concepts/compliance-documents
Document Types, expiration tracking, and how Dispatch Gating warns dispatchers at assignment.
Tread tracks every document's expiration and checks compliance when work is assigned. Dispatchers see Missing, Expiring, and Expired issues before the dispatch goes out — no manual expiration checks.
## What it is
A Compliance Document is a file kept on a [Driver](/onboarding/master-data/drivers) (the user who receives a dispatch and performs it), a [Vendor](/onboarding/master-data/vendors) (an account you send dispatches to), or [Equipment](/concepts/equipment) — for example an insurance certificate, a license, or a tax form. Tread tracks each document's status and checks it when you [assign a Job](/concepts/dispatching-drivers-vendors).
## How Tread models it
* **Document Type** — defined once in **Settings → Document Types**. Each type sets:
* **Has Expiration** — track an expiration date. Documents show Expiring/Expired status.
* **Dispatch Gating** — warn dispatchers when assigning Jobs where a document of this type is expired or missing.
* **Applies To** — which records must have it: Internal Drivers, Shared Drivers, Vendors, Equipment.
* **Field Type** — an optional value on each document: Text, Number, Date, or Yes/No.
* **Compliance Document** — one record per Document Type per Driver, Vendor, or Equipment. Holds the file, the expiration date, and the optional value. Upload it from the Driver, Vendor, or Equipment record.
| Status | What it means | At assignment (gated types) |
| - | - | - |
| Valid | On record, not expired | Passes |
| Expiring | Expires within 30 days | Warning shown |
| Expired | Past its expiration date | Issue shown |
| Missing | Required, no document on record | Issue shown |
| Optional | Type not required for this record | Passes |
## Dispatch Gating
When you assign a Job, Tread checks every gated Document Type that applies to the Vendor, Driver, and Equipment on the assignment. Issues appear in a dialog. The dispatcher can cancel or **Assign Anyway**; each override is logged with the user and time. Document uploads and edits are also logged.
When a document on a gated type is within 30 days of expiring, Tread emails your account's Admins once. Each Admin controls this with the **Compliance Expiration Warning** notification preference.
> [!WARNING]
>
> **Gating runs at assignment.** A document that expires after dispatch does not change Jobs already assigned. The issue appears on the next assignment.
## Related
* [Document Management & Dispatch Compliance](/specialized/document-management) — setup walkthrough
* [Drivers](/onboarding/master-data/drivers) — where Driver documents live
* [Vendors](/onboarding/master-data/vendors) — where Vendor documents live
* [Equipment & Equipment Types](/concepts/equipment) — where Equipment documents live
* [Roles & Permissions](/concepts/roles-permissions) — who can manage Document Types
# Tread's Connected Ecosystem
Source: https://docs.tread.ai/concepts/connected-ecosystem
How Tread connects you with Customers, Vendors, and Drivers
Tread gives every stakeholder real-time visibility and transparency into Dispatch Orders. That cuts phone calls and ETA checks and speeds up billing — every scale Ticket and report is available live, across connected accounts.
## What it is
Tread's Connected Ecosystem is the four stakeholders that connect on a Project and its Orders: the Connected Customer, the Tread Customer, the Vendor, and the Driver. Each has their own access in Tread.
## How Tread enables Cross Company Collaboration
* **Connected Customer** — a Customer with its own Tread account. On your Project and Order, it's the account requesting the work.
* **Tread Customer** — your own account. Creates the Projects and Orders, and sends the dispatches, and receives requests from Connected Customers.
* **Vendor** — an account you send dispatches to, instead of assigning your own Driver. Their Drivers reach your dispatch board through a Company Share, a one-way connection you accept. Directly dispatch to a Vendor's drivers, or enable a Vendor to dispatch to their drivers or Sub-Vendors.
* **Driver** — the user who receives a dispatch and performs it.
* **Owner-Operator (O\&O)** — a Vendor with a single Driver, so you dispatch that Driver directly as a Shared Driver.
## Visibility and access
* **Connected Customers** have full visibility into the Orders where they are the Customer — real-time truck data, Tickets as they post, reports, and invoices. They will not have any other access into a Tread Customer's account.
* **Vendors** get their own Tread access. They receive dispatches from the Tread Customer, invite and manage their own Drivers, and assign the work. They see data across accounts for the work assigned to them.
* Connected Customers and Vendors manage their own users and data. The Tread Customer can also manage it on their behalf.
## Related
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors) — Internal, Shared, and Vendor drivers
* [Companies & Hierarchy](/concepts/companies-hierarchy) — parent and child companies
* [Equipment & Equipment Types](/concepts/equipment) — how Equipment is shared
* [Roles & Permissions](/concepts/roles-permissions) — what each stakeholder sees
# Custom Labels
Source: https://docs.tread.ai/concepts/custom-labels
Tag Drivers, Users, Customers, Vendors, and Equipment with your own labels for filtering and search.
Filter your lists and reports by the categories your team already uses.
## What it is
A Label is a color-coded tag you define and apply to Drivers, Users, Customers, Vendors, and Equipment. Labels are your own categorization layer — Tread does not impose meaning on them.
## How Tread models it
* **Label** — a name and a color, owned by your account. Each record holds up to five of your Labels.
* **Setup** — create Labels in **Settings → Labels**.
* **Apply** — pick from the **Labels** field when you create or edit Drivers, Users, Customers, Vendors, or Equipment.
* **Filter** — filter Driver, User, Customer, Vendor, and Equipment lists by Label.
* **Private to your account** — on a record shared across accounts (a Shared Driver or shared Equipment), each account sees only the Labels it applied.
## Common use cases
| Label set | Example values |
| - | - |
| Driver crews | Night Crew, Day Crew |
| Vendor tiers | Preferred, Backup |
| Internal categorization | Seasonal, Training |
## Common pitfalls
> [!WARNING]
>
> **Don't use Labels for data that belongs in a structured field.** If you are labeling records with an Equipment Type, Department, or Service Class, use that field instead.
> [!TIP]
>
> Start with five to ten Labels. Add more only when a real filtering or reporting need shows up.
## Related
* [Departments & Service Classes](/onboarding/master-data/departments-labels-classes) — the structured fields Labels should not replace
* [Onboarding: Drivers](/onboarding/master-data/drivers) — setting up Drivers
* [OmniReports](/concepts/omni-reports) — build custom reports
# Dispatching to Drivers and Vendors
Source: https://docs.tread.ai/concepts/dispatching-drivers-vendors
The three ways to send a dispatch — an internal driver, a shared driver, or a vendor.
## What it is
* **Internal Driver** — your own driver, in your company.
* **Driver** — an owner operator driver who has their own entity.
* **Shared Driver** — a driver another company shares to you, so you assign them like your own.
* **Vendor** — a hauling company you dispatch to. Their dispatcher assigns the driver.
Each connects through a different stakeholder in the [Connected Ecosystem](/concepts/connected-ecosystem) — your own company, a vendor who shares a driver, or an owner operator.
## Why it matters
The driver configuration primarily determines who is responsible for assigning a driver to a dispatch.
## How Tread models it
| Assign to | Who it is | In the Assign panel | Billing path | When to use | Setup required |
| - | - | - | - | - | - |
| **Internal Driver** | Your own driver | **Driver** tab | Customer pays you, you pay your driver | Your own drivers and trucks | Internal User added under your company |
| **Driver** | Owner Operator / Driver with own Entity | **Driver** tab | Customer pays you, you pay the Owner Operator Entity | An owner operator who contracts with you through their own entity | Driver added under your company |
| **Shared Driver** | A driver a partner shares to you | **Driver** tab | Customer pays you, you pay the partner | A partner whose specific driver you assign yourself | Partner shares the driver to you |
| **Vendor** | A hauling company that sub-dispatches | **Vendor** tab | Customer pays you, you pay the vendor | You hired a hauling company and let their dispatcher pick the driver | Vendor invited and connected |
An Owner-Operator (O\&O) — a single-truck hauler who owns and drives — is the most common Shared Driver. For a Vendor, the driver's name appears on your board only after their dispatcher accepts and assigns one.
## Common pitfalls
> [!WARNING]
>
> **Vendor jobs need an active connection.** If the vendor has not accepted the connection, your dispatch will not send. Check **Settings → Vendors** first.
> [!WARNING]
>
> **A Shared Driver must be shared to you first.** Without the share, the driver does not appear in your Assign list. The partner shares from their side under **Settings → Drivers**.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem) — how the Customer, Tread Customer, Vendor, and Driver connect
* [Driver Lifecycle](/concepts/driver-lifecycle) — invite, vendor moves, deactivation
* [Create a Project, Order & Dispatch](/workflows/create-a-project) — where you assign the job
* [Roles & Permissions](/concepts/roles-permissions) — who can dispatch
# Driver Lifecycle
Source: https://docs.tread.ai/concepts/driver-lifecycle
How Drivers are invited, moved between Vendors, and deactivated — and why phone numbers stay locked.
Create a Driver once and every dispatch, logged hour, and Ticket attaches to that one record. Deactivating keeps that history and frees the phone number for the next Driver — no duplicate records.
## What it is
A [Driver](/concepts/connected-ecosystem) is the user who receives a dispatch and performs it. The Driver record is a User with the Driver Role, and it belongs to one account: yours (an [Internal Driver](/concepts/dispatching-drivers-vendors)) or a [Vendor](/concepts/connected-ecosystem)'s. It carries the phone number, name, and equipment assignment. The lifecycle has four stages: invite, first login, day-to-day dispatch, and deactivation.
## How Tread models it
* **Invitation** — an Admin creates the Driver, then sends an invite by email or SMS. SMS is the default for Drivers without a work email. The Driver taps the invite link and lands in the [Driver app](/mobile/driver-app).
* **First login** — the Driver sees their assigned equipment, the day's Jobs, and a "Start Log" button. With nothing assigned yet, the app shows "Your schedule is clear."
* **In review** — at shift end the Driver submits hours and Tickets. The driver-day sits in *In Review* until an [approver](/concepts/roles-permissions) signs off.
* **Phone-number lock** — once created, the phone number is locked to that Driver record. This stops two people from authenticating as the same Driver.
* **Deactivation** — Deactivate keeps the history (Tickets, settlements, hours) and frees the phone number for reuse.
| Action | Path | Effect |
| - | - | - |
| Driver leaves the company | Deactivate | Phone number freed, history kept |
| Driver moves from Vendor X to Vendor Y | Edit the Company on the Driver record | Same record, connected to the new Vendor |
| "Phone number already in use" error | Deactivate the old record, then reuse the number | Or edit the existing record |
| Driver already works at another Tread company | Contact Tread support — they connect the record across companies | One app login, history preserved. Support can't move a Driver who is active on a job — wait until it ends |
| Vendor changes EIN or legal name | Create a new Vendor record | 1099s tie to the EIN — do not edit in place |
## If you're the driver and you changed companies
You can't switch your own company in the app. The company that dispatches you owns your Driver record. When you move on, your new company adds you, and your old company keeps its history.
What to do:
* Give your new company the phone number you log in with. They add you as a Driver on that number.
* If they see "phone number already taken," your record still sits with your old company. Ask them to contact Tread support to move it.
* Keep the same phone number. You keep one app login, and your past hours and Tickets stay on the record.
* Finish any job you have running first. Tread can't move the record while you're active on a job.
You don't lose access while this happens. A dispatcher can run your jobs from the web app until your login points to the new company. See [Mobile Troubleshooting](/mobile/troubleshooting).
## Watch it
How to remove a Driver, end to end:
[How to delete/remove a driver in Tread Horizon](https://www.loom.com/embed/6efccff5c9814d748d4d8dd2e2e390bc)
## Common pitfalls
> [!WARNING]
>
> **"Phone number already in use" means an active Driver record already has that number.** Deactivate the old Driver record — that frees the number — then create the new one. Or edit the existing record instead of creating a duplicate.
> [!WARNING]
>
> **EIN or legal-name changes on a Vendor require a new Vendor record.** 1099s are issued against the EIN at the time of payment. Editing the EIN on an existing Vendor will misreport prior payments.
> [!WARNING]
>
> **A driver's role changed — employee to Owner-Operator, driver to office User? Edit, don't re-create.** A regional hauler's employee driver bought a truck and became an Owner-Operator. Re-creating the Driver split the ticket history across two records and broke pay history. Change the role on the User record instead: open **Settings → Users**, find the person, and edit the role. Phone number, history, and pay records stay on one record. If the edit is blocked with "phone number already taken," contact Tread support — don't delete and re-add. See [Roles & Permissions](/concepts/roles-permissions).
> [!WARNING]
>
> **The driver already worked at another Tread company.** A regional hauler hired an experienced driver and saw "phone number already taken." The existing record sits at the prior company — not yours. Drivers do not have a self-serve Connect flow today (vendors and customers do). Contact Tread support with the driver's name, phone number, and your company. Tread links the record across companies. Your dispatch can then assign the driver and they keep one app login.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem) — how Drivers, Vendors, and Customers connect
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors) — Internal, Shared, and Vendor drivers
* [Roles & Permissions](/concepts/roles-permissions) — what a Driver sees vs an Admin
* [Onboarding: Drivers](/onboarding/master-data/drivers) — step-by-step Driver setup
* [Mobile Troubleshooting](/mobile/troubleshooting) — fix login and dispatch issues
# Equipment & Equipment Types
Source: https://docs.tread.ai/concepts/equipment
Trucks, trailers, and the Equipment Types that set capacity and unit of measure.
Add your Trucks and Trailers in Tread's Equipment table. You can manage Equipment information, Compliance data with our Document Types feature, Accounting IDs and Ticket Matching IDs. You can additionally pair Trucks and Trailers with your Drivers.
Equipment Types allow capacities and unit of measures to be set on an Equipment Type, so that it defaults over based on the truck selection.
## What it is
An Equipment Type is a customizable template — "Tri-Axle Dump", "End Dump", "Belly Dump" — that holds a default capacity and unit of measure (UoM). Equipment is an individual truck or trailer record, attached to one Equipment Type. Types come first; every Equipment record requires a Type and inherits capacity and UoM from it.
> [!NOTE]
>
> On the order form this field is labeled **Truck Type**. Truck Type and Equipment Type are the same thing.
## How Tread models it
* **Equipment Type** — name, default capacity, and UoM (tons, yards, loads, hours). Tread uses these to calculate quantities on [Tickets](/concepts/tickets-timesheets) and reports.
* **Equipment** — an individual truck or trailer record: name, license plate, and the Equipment Type it belongs to. The name appears on Tickets and invoices.
* **Sharing** — Equipment can be shared to another account through a Company Share, a one-way connection between accounts, so both accounts see the same Equipment record. See [Connected Ecosystem](/concepts/connected-ecosystem).
| Field | Lives on | Function |
| - | - | - |
| Capacity | Equipment Type | Calculates quantities on Tickets and reports |
| UoM | Equipment Type | Sets the unit those quantities use |
| Name | Equipment | Appears on Tickets and invoices |
| License plate | Equipment | Identifies the individual truck or trailer |
## Common pitfalls
> [!WARNING]
>
> **An Equipment Type without capacity or UoM breaks quantity calculations.** Every Equipment record requires a Type, but capacity and UoM are optional on the Type.
> [!WARNING]
>
> **Equipment names appear on Tickets and invoices.** Renaming Equipment mid-billing-cycle changes what prints on new Tickets and invoices. Set naming conventions before importing.
## Related
* [Materials](/concepts/materials) — what Orders move
* [Connected Ecosystem](/concepts/connected-ecosystem) — how connected accounts share records
* [Onboarding: Equipment Types](/onboarding/master-data/equipment-types) — step-by-step Equipment Type setup
* [Onboarding: Equipment](/onboarding/master-data/equipment) — step-by-step Equipment setup
# Materials
Source: https://docs.tread.ai/concepts/materials
The Material record — its fields, how Material Rates price it, and bulk import.
Materials give every stakeholder their own materials list. Orders, Tickets, invoice line items, and accounting exports all reference the same Material.
## What it is
A Material is the record for what is set on the [Order](/concepts/orders-projects). Each Material has a Name, a Material Type, and an External ID. Pricing lives on separate Material Rate table.
## How Tread models it
* **Material** — Name, Material Type, and Material ID. Owned by your account.
* **Material Type** — the category the Material belongs to. Defaults to "Other."
* **Material ID** — your unique ID for the Material. This ID can only be used 1 per material. Use the same ID as your accounting system so exports match.
* **Material Rate** — prices a Material: a unit of measure (Ton, Yard, Load) plus buy and sell prices. Set per [Customer](/concepts/connected-ecosystem), per Project, per [Site](/concepts/sites-geofences), or globally. See [Rates, Add-Ons & Fuel](/concepts/rates-add-ons).
* **Bulk import** — Materials can be created one at a time or imported from CSV.
| Field | Required | Notes |
| - | - | - |
| Name | Yes | Unique within your account; the label users see on Orders and [Tickets](/concepts/tickets-timesheets) |
| Material Type | No | Defaults to "Other" |
| Material ID | No | Unique within your account; match your accounting system so exports line up |
## Related
* [Rates, Add-Ons & Fuel](/concepts/rates-add-ons) — how Material Rates are set
* [Prevailing Wage](/specialized/prevailing-wage) — the Prevailing Wage workflow
* [Onboarding: Materials](/onboarding/master-data/materials) — step-by-step setup
# Reporting
Source: https://docs.tread.ai/concepts/omni-reports
Tread reports cover export files, scheduled report deliveries, dashboards, and visualizations. Build your own with Build a Report.
Tread comes with more than a dozen default reports. Build your own with **Build a Report**, or ask Tread to configure a custom report based on your subscription plan.

## What it is
Reports is Tread's custom report library. Each report renders live inside Tread, alongside the standard reports in [Exports & Reports](/workflows/exports-reports). When your team needs a report that does not exist yet, build it yourself with Build a Report, or ask Tread to configure it for your account.
## How Tread models it
* **Report** — a saved report that renders inside Tread. Tread configures reports for your account, or your team builds them with Build a Report. System reports are available to every account.
* **Category** — a group of reports. The report list is organized by category.
* **Data scope** — a report shows data for your company and its [child companies](/concepts/companies-hierarchy).
* **Time zone** — a report renders in the viewing user's time zone.
## When to use Reports vs Exports
| Use [Exports & Reports](/workflows/exports-reports) when | Use OmniReports when |
| - | - |
| The report you need is already there | The report does not exist yet |
| You need a scheduled export or an accounting push | You need a custom report, live in Tread: build it yourself or ask Tread |
## Build your own report
**Build a Report** opens a report builder inside Tread. Pick fields, filter, and group your own data, then save the report for your team.
**1. Open Build a Report**
Go to **Reports**. In the **Dashboard** category, click **Build a Report** (1). The builder opens in your company's folder.
Click **New** (2), then **Workbook**.

**2. Pick Customer Reports**
Under **Topics**, pick **Customer Reports**. It holds job, load, order, project, and pricing data. Choose fields, then add filters and groupings to shape the results.

**3. Save it for your team**
Click **File**, then **Save...**. Save the report to your company's folder. Everyone in your company with report access can open and edit it there.
> [!TIP]
>
> Reports saved to **My documents** are visible only to you.
### Find your data
After you pick **Customer Reports**, the left panel lists its views. Each view holds one kind of record. Open a view to see its fields, then click a field to add it as a column.

| View | What it holds |
| - | - |
| **Customer Reports** | Jobs, one row per job |
| **Load Data** | Loads and their tickets, one row per load |
| **Order Reports** | Orders, one row per order |
| **Project Reports** | Projects and their defaults, one row per project |
| **Company Job Assignments** | The rate your company pays and the rate it receives on each job |
| **Customer Pricing** | Pricing settings on the customer side: currency, prevailing wage, jurisdiction, and material rate unit |
| **Vendor Pricing** | The same pricing settings on the vendor side |
| **Driver Pay** | How the Driver is paid on the job, and the pay rate |
For every field and what it means, see [Build a Report fields](/concepts/build-a-report-fields).
### Work with fields

| Control | What it does |
| - | - |
| **Search** | Finds a field by name across every view. |
| **In-use** | Shows only the fields already in your report. |
| Field icon | **#** is a number, the calendar is a date, and **A** is text. |
| **⋮** on a field | Shows the field's description. Also lets you **Filter**, **Pivot**, or **Bin** on it. |
| **Run** (▶) | Runs the report and shows the rows. |
| **Results**, **Chart**, **Both** | Shows the rows, a chart, or both. |
| Formula bar | Type **=** to add a calculated column. |
### What Build a Report shows
* **Your data only** — reports show data for your company and its [child companies](/concepts/companies-hierarchy), like every other report.
* **Pricing** — rates and pricing fields are included.
> [!NOTE]
>
> Build a Report does not include Omni's AI assistant. For a report you cannot build with the available fields, contact [support@tread.io](mailto:support@tread.io).
## Access
> [!WARNING]
>
> **OmniReports requires report access.** Viewing reports is gated by the user's [Role](/concepts/roles-permissions). If a user cannot open OmniReports, check their Role.
## Related
* [Exports & Reports](/workflows/exports-reports) — standard reports, scheduled exports
* [Build a Report fields](/concepts/build-a-report-fields) — every field in the Customer Reports topic
* [Roles & Permissions](/concepts/roles-permissions) — who can view reports
* [Companies & Hierarchy](/concepts/companies-hierarchy) — the data scope for parent and child companies
# Orders & Projects
Source: https://docs.tread.ai/concepts/orders-projects
The work — from a multi-day Project down to a single daily Order.
Projects represent long standing work for a Customer. Project allows tracking against more than 1 day of work. The Project ends up acting as a template across required objects — Customer, Sites, Materials, rates — and every daily Order with that project selected inherits it.
The Order captures a single day's required trucks or quantity to be dispatched. Orders are utilized on a daily basis, each new day gets a new order.
## What it is
A Project is the long-lived record for the work. It may run for a day or a year, and it holds everything the daily work inherits. An Order is one day of that work — the unit you dispatch. A Job is one truck's assignment on an Order. One Project can hold dozens of Orders; one Order can hold many Jobs.
## How Tread models it
* **Project** — spans the duration of the project, can be many weeks, months, or years. Holds the [Customer](/concepts/connected-ecosystem), the [Sites](/concepts/sites-geofences) (pickup and dropoff), the [Materials](/concepts/materials), the [rates](/workflows/project-rates), and the date range.
* **Order** — single day. Holds the date, shift, [Equipment](/concepts/equipment) requested, Drivers assigned, and the target quantity.
* **Job** — Also referred to as a dispatch, or a TRD. One truck's assignment on an Order. Holds the Driver, the Equipment, and the matched rate. An Order with five trucks has five Jobs.
* **Dispatch board** — lists every Order for a given day. Can be navigated with a calendar like experience. Fully searchable and filterable.
## When to use Projects
Projects can be one of the most powerful, time saving features in Tread. Use a project to create templates for types of work, or to save all information for a customer in a single location. Projects can by duplicated using the Copy & Edit feature. Projects are also the basis for Tread's Quoting features.
All rates can be setup in a Project. This allows the daily Order to inherit all templated data across the full project, making the daily order setup as simple as a few clicks.
## Order setup
There are three ways our customers most typically create Projects and Orders.
* **Running - example "3 Trucks Running"**
* When there is no max loads - and when a truck is expected to deliver as many loads as possible, select "Load" as Unit of Measure (UoM) and then select the "Running" option
* This allows the drivers to add as many loads as they desire to a given dispatch, and automatically adds another load to the drivers dispatch when they unload their current load
* You can also set a Target # of loads while still "Running" → displays as Running (5)

* **Load Count - example "3 Trucks 5 Loads each"**
* When you are dispatching a specific load count - like 5 loads. The driver will not be able to add more than 5 loads. The mobile app will progress the driver through their 5 loads, and end the job on the 5th load
* The driver can not add more than 5 loads to the dispatch

* **Quantity in a specific Unit of Measure, like Tonnage - example "3 Trucks 125 Tons each"**
* When a specific quantity is set with a Unit of Measure (not load) the dispatch is automatically set as running, as trucks may have unique equipment capacities that are unspecified at the time of dispatch
* The dispatch will automatically end after a single load if the dispatch is calculated as a "partial load" for example 5 Yards, or 12 Tons
* If material tickets are not uploaded, Tread will look to the set equipment capacity on the truck type to automatically track delivered quantities

Three fields on an Order control how work is measured and when a Job ends:
* **Units** — the unit of measure: Load, Ton, Hour, and others.
* **Quantity** — the target per truck. On a Load Order with Running unchecked, the Job stops when the Driver reaches the target.
* **Running** — the Order keeps adding loads as Drivers complete them, past the target or with no target set.
The standard setups — Running, Running with Target, Loads, and Tonnage — are in [Common Types of Orders](/workflows/order-types).
## Order Start Time and Truck Start Time
An Order carries two start times. **Order Start Time** schedules the Order. **Truck Start Time** schedules the trucks on it.
| Field | What it sets | Where it shows |
| - | - | - |
| **Order Start Time** | The date and time the Order is scheduled for. Places the Order on that day's dispatch board. | The Order header — `Start: 5:00 PM Sun Jul-12-2026` |
| **Truck Start Time** | The time each Job is scheduled to start. This is the time the Driver sees. | The **Start** column on each Job row |
The two match by default. Every new Order has truck start time same as order start time. Leave as is if Truck Start Time follows the Order Start Time. Click on **+ Truck time** to give the trucks a different time.

### Staggering truck start times
Two fields spread the trucks out instead of starting them together:
* **Stagger (mins)** — minutes added between each group of trucks.
* **Trucks Per Stagger** — how many trucks share a start time before the next group is pushed back.
A 7:00 AM Truck Start Time with a 15-minute Stagger and 1 Truck Per Stagger starts five trucks at 7:00, 7:15, 7:30, 7:45, and 8:00.
### When to use each
* **All trucks roll together** — leave the box checked. One time to set.
* **Trucks report after the Order opens** — uncheck it. Set the Order Start Time to when the site opens, and the Truck Start Time to when Drivers should be rolling.
* **Trucks queue at the pickup site** — set a Stagger so they arrive spread out.
* **One truck starts off-cycle** — edit the start time on that Job row. It changes that Job only.
> [!NOTE]
>
> Changing the Truck Start Time, Stagger, or Trucks Per Stagger recalculates the start time on every Job that has not completed. Completed Jobs keep their times.
Drivers get a reminder on the Driver App at their Job's start time if they have not started the Job.
## Common pitfalls
> [!TIP]
>
> Reuse a Project for repeat work with the same Customer and Sites. Daily Orders attach underneath. Do not create a new Project per day — reporting will fragment.
> [!WARNING]
>
> **An Order that others can see but you can't is almost always a filter.** Filters on the Dispatch board stay on between visits. Clear every filter chip, then check the date on the calendar.
> [!NOTE]
>
> **Canceled Orders are hidden by default.** They don't count in the day's Order total. To find one, search for its Order number on the Dispatch board. Tread can also turn on a setting that shows Canceled and Rejected Orders in the Orders tab. Ask support if you want it.
## Related
* [Sites & Geofences](/concepts/sites-geofences) — how Sites attach to a Project
* [Materials](/concepts/materials) — how Materials roll up to a Project
* [Tickets & Timesheets](/concepts/tickets-timesheets) — what gets captured per Order
* [Common Types of Orders](/workflows/order-types) — Units, Quantity, and Running setups
* [Workflow: Create Project → Order → Dispatch](/workflows/create-a-project)
# Core Concepts Overview
Source: https://docs.tread.ai/concepts/overview
The fifteen ideas you need to understand Tread.
## Start here
Tread is the operating system for bulk materials hauling. Every workflow — dispatch, tickets, approvals, billing, driver pay — sits on top of the same fifteen concepts. Learn them once and the rest of the product makes sense.
## The fifteen concepts
> **[Companies & Hierarchy](/concepts/companies-hierarchy)**
>
> Single company by default. Parent/child only for real regional splits.
> **[Connected Ecosystem](/concepts/connected-ecosystem)**
>
> How the Connected Customer, Tread Customer, Vendor, and Driver connect.
> **[Sites & Geofences](/concepts/sites-geofences)**
>
> Lat/long pins with virtual fences that detect arrival and departure.
> **[Equipment & Equipment Types](/concepts/equipment)**
>
> Types hold capacity. Equipment is the physical truck or trailer.
> **[Materials](/concepts/materials)**
>
> What gets hauled. Pulled from accounting, grouped under Material Types.
> **[Orders & Projects](/concepts/orders-projects)**
>
> A Project is the long-lived container for the work. Orders are the daily work inside it.
> **[Dispatching Drivers and Vendors](/concepts/dispatching-drivers-vendors)**
>
> Dispatch to an internal driver, a shared driver, and a vendor
> **[Driver Lifecycle](/concepts/driver-lifecycle)**
>
> Invite, first login, vendor moves, deactivation.
> **[Tickets & Timesheets](/concepts/tickets-timesheets)**
>
> The proof of work. Load tickets and driver hours.
> **[Settlements & Driver Pay](/concepts/settlements-driver-pay)**
>
> Approve, then settle. Receivables and payables run on different rules.
> **[Rates, Add-Ons & Fuel](/concepts/rates-add-ons)**
>
> Three components: price index, schedule, application.
> **[Roles & Permissions](/concepts/roles-permissions)**
>
> Who sees what. Drivers must never see customer rates.
> **[Custom Labels](/concepts/custom-labels)**
>
> Your own tags for slicing drivers, users, and vendors.
> **[OmniReports](/concepts/omni-reports)**
>
> Standard and custom reports, plus Build a Report to make your own.
> **[Compliance Documents](/concepts/compliance-documents)**
>
> Driver and vendor docs, expirations, and dispatch gating.
## How to read this section
Each concept page follows the same shape. What it is. Why it matters. How Tread models it. Common pitfalls. Related links. Most pages take under three minutes.
## Where to go next
> **[Quickstart](/)**
>
> Stand up your first dispatch in under an hour.
> **[Onboarding](/onboarding/company-hierarchy)**
>
> Step-by-step setup for a new Tread account.
# Phase Codes
Source: https://docs.tread.ai/concepts/phase-codes
Tag Jobs, Loads, and hours with your customer's cost codes so your reports match their cost coding.
Track hauled work against the cost codes your customer already uses.
## What it is
A Phase is a Name and a Code you attach to work — your customer's cost code, bid item, or task number. Phases are optional. An [Order](/concepts/orders-projects) with no phases works normally.
## How Tread models it
* **Phase** — a Name and a Code. Defined on the Project, then copied to every Order under it.
* **Setup** — on the Project, click **View / Bulk Add Phases**. Add phases one at a time, or paste two spreadsheet columns: Name first, then Code.
* **Primary Phase** — one phase per Order is Primary. New [Jobs and Loads](/concepts/orders-projects) start with it.
* **Per Job and per Load** — change the phase on a single Job or Load. One truck-day can carry more than one code.
* **In the driver app** — drivers pick a phase when they edit a load. Foremen must pick one whenever the Order has phases. With only one phase, Tread fills it in for them.
* **On hours** — if your account tracks hours by phase, split a shift's hours across phases when you approve driver time.
* **Downstream** — the code follows the Load onto its [Ticket](/concepts/tickets-timesheets), then into exports and [OmniReports](/concepts/omni-reports).
* **Permissions** — changing the phase on a Job or a Load is permission-controlled. See [Roles & Permissions](/concepts/roles-permissions).

## Common pitfalls
> [!WARNING]
>
> **Renames and deletes stop at the Project.** Adding a phase to a Project pushes it down to that Project's existing Orders. Renaming or deleting one does not. Live Orders keep the old phase, so fix those by hand.
> [!WARNING]
>
> **Codes match as exact text.** `1` and `1.0` count as two different phases. Copy the customer's schedule of values character for character.
> [!NOTE]
>
> Phase codes tag work for reporting and cost coding. [Settlements](/concepts/settlements-driver-pay) do not split by phase code.
## Related
* [Orders & Projects](/concepts/orders-projects) — where phases are defined
* [Create a Project](/workflows/create-a-project) — project setup, step by step
* [Foreman](/workflows/foreman) — the foreman workflow
* [Exports & Reports](/workflows/exports-reports) — pulling phase codes out of Tread
* [Importer APIs](/api-reference/importer-apis) — syncing phases from another system
# Project Fields
Source: https://docs.tread.ai/concepts/project-fields
What each Project field means, whether it copies to new Orders, and where it appears.
Set a field once on the [Project](/concepts/orders-projects) and it follows the work: onto each Order, the Driver's screen, and your PDFs. This page shows where each field goes, so you know what your team, your Customers, and your Drivers will see.
## PO, Order ID, and Project ID
Four numbers get mixed up often. Each one lives in a different place.
| Number | Where it lives | What other screens call it |
| - | - | - |
| **Order PO** | Project, then copied to each Order | "Order PO" (the Order's own copy) |
| **Order ID** (ORD-…) | Order only. Tread creates it. | Shown without a label on Order cards; "Ord. ID" on Order details |
| **Project #** (PROJ-…) | Project only. Tread creates it. | Not shown |
| **Project External ID** | Project only. You enter it. | "Project Ext ID" on Order cards; "Project ID" on the Order form, the Job Card PDF, and the Driver app |
> [!NOTE]
>
> The Project's **Order PO** is a starting value. When you create an Order, Tread copies it only if the Order's PO is empty. After that, the Order keeps its own copy. Changing the Project's PO later doesn't change existing Orders.
## How fields copy to Orders
A Project works like a template for its Orders. The **Copies to Orders** column in each table below uses these values:
| Value | What happens |
| - | - |
| **Yes** | Copied onto each new Order. |
| **Yes, and updates** | Copied onto each new Order. Later Project edits also update open Orders that still have the old value. |
| **Web only** | Copied only when you create the Order in the web app's Order form. |
| **No** | Stays on the Project. |
> [!WARNING]
>
> Orders created through an import or the API don't get the **Web only** fields. These are the Order PO, Charge to Account, Service Class, Driver and Internal notes, Contacts, Sites, Ordered Quantity and Unit, Units, Running, and Truck Capacity. Add them in your import file if your team needs them.
>
> Imports also set their own Number of Trucks, assigned users, and Order name, so they don't use the Project's.
## Identifiers
| Field | What it means | Copies to Orders | Where it shows |
| - | - | - | - |
| **Project Name** | The Project's display name. It must be unique in your company. | Yes. It becomes part of the default Order name. | Project list; Order cards ("Project:"); Tickets; settlements; Driver app ("Project"); Quote PDF |
| **Project #** | A number Tread creates (PROJ-123). You can't edit it. | No | Project list; the Project form header; Quote PDF |
| **Project External ID** | Your own ID for the Project, often from another system. It must be unique in your company. | No. It starts the default Order name. | Project list and Order cards ("Project Ext ID"); Order form, Driver app, and Job Card PDF ("Project ID"); Quote PDF |
| **Order PO** | The Customer's PO or job number. | Web only, and only if the Order's PO is empty | Order cards and settlements ("Order PO"); Driver app ("Order PO"); Job Card PDF ("PO Number"); Quote PDF ("PO / Job #") |
| **Contract No.** | A contract reference. It shows only if your company turns it on. | Yes, and updates | Order form ("Contract No.") |
| **Dispatch No.** | The dispatch number for the Project's work. | Yes, and updates | Order cards (before the Order name); Dispatch filters and exports; Driver app ("Dispatch No."); job status emails; Quote PDF |
| **Charge to Account** | The account Drivers charge to at the site. | Web only | Order cards ("Charge To Account"); Driver app ("Charge to"); Job Card PDF ("Charge To") |
## Customer, dates, and status
| Field | What it means | Copies to Orders | Where it shows |
| - | - | - | - |
| **Customer Account** | The Customer the work is for. You can't change it after you save the Project. | Yes | Everywhere the Customer appears, including the Driver app ("Customer") |
| **Department** | The department in your company that owns the Project. | Yes | Project list; Order; Quote PDF |
| **Start and End Date** | When the Project is valid. The start must come before the end. | No | Project list; Quote PDF |
| **Status** | Draft, Quoted, Lost, Active, Completed, Inactive, or Canceled. | No | Project list status chip and tabs. See [Sales Quotes](/workflows/sales-quotes). |
## Notes and terms
All four notes sit on one Notes card, one row each.
| Notes row | What it means | Copies to Orders | Who sees it |
| - | - | - | - |
| **Project** | General notes about the Project. | No. It shows read-only on the Order form. | Your team; Quote PDF. Drivers don't see it. |
| **Order** | Default notes for each Order. | Yes | Your team; Drivers ("Order Notes"), if turned on for your company; Quote PDF |
| **Driver** | Instructions for Drivers. | Web only. It passes from the Order to each job. | Drivers ("Driver Notes"); Job Card PDF |
| **Internal** | Notes for your company only. | Web only | Your team only. Other companies never see it. |
| **Quote PDF Terms** | Terms printed on the Quote PDF. If blank, Tread uses your company's default terms. | No | Quote PDF |
## People and places
| Field | What it means | Copies to Orders | Where it shows |
| - | - | - | - |
| **Requester** | The user who asked for the Project. | No | Project list ("Requestor", only when no Foreman or Sales is set); Quote PDF |
| **Contacts** (Sales, External Foreman, Supervisor, Collaborator) | The Customer's contacts, with name and phone. | Web only | Order; Driver app contacts; Quote PDF |
| **Assigned Foreman, Collaborator, Sales** | Your own Tread users on the Project. | Yes | Project list (Foreman and Sales); Order; Driver app contacts (Foreman only) |
| **Pickup and Drop-Off sites** | Default [sites](/concepts/sites-geofences) for the Project. | Web only | Order; Driver app with directions; Quote PDF |
| **Phases** | [Phase codes](/concepts/phase-codes) for the work, with a name and code. | The Order picks its phase from this list. Phases you add later go onto every Order in the Project, even completed ones. | Order cards ("Phase Code"); Tickets; Driver app ("Phase") |
| **Materials** | The total quantity planned for each [material](/concepts/materials). | No. The Order shows progress against it. | Project list progress bar; Order form; Driver app ("Material") |
## Order defaults
| Field | What it means | Copies to Orders |
| - | - | - |
| **Service Class** | The type of work. It shows only if your company turns it on. | Web only |
| **Ordered Quantity** and **Unit** | The default Order size. | Web only |
| **Number of Trucks**, **Quantity** | How many trucks each Order needs, and how much each truck hauls. | Yes |
| **Units**, **Running**, **Truck Capacity** | The unit for each truck's quantity, and the truck's capacity. **Running** means Drivers keep making trips with no set limit. | Web only |
| **Truck Type** | The kind of truck the work needs. | No |
| **Truck Time (Hrs)** | How long each truck should work. | No |
| **Ticket Chaser** | Texts Drivers when a Ticket is missing. | Yes, for new Orders only |
| **Default digital ticket view for drivers** | Opens the digital Ticket view for Drivers by default. | Yes, for new Orders only |
| **Enable Live ETA** | Shows live ETAs on the Dispatch board. | Yes, and updates |
## Rates and tax
| Field | What it means | Copies to Orders |
| - | - | - |
| **Freight Rates** | Customer, Vendor, and Driver rates. See [Rates & Add-Ons](/concepts/rates-add-ons). | Yes. They price each Order. |
| **Apply rate changes to existing orders** | Whether rate edits also update existing Orders. You can untick single Orders before you save. See [How Rate Changes Flow](/workflows/how-rate-changes-flow). | Not applicable |
| **Itemize Material Rate** | Shows freight and material as separate lines on Customer invoices. | Yes, and updates |
| **Prevailing Wage** | Marks the Project as a prevailing wage job. | Yes, for new Orders only |
| **Tax** | The tax rate, and whether it applies to Freight & FSC, Material, and Add-ons. | Yes, and updates |
## What Drivers don't see
The Driver app never shows these fields:
* Project and Internal notes
* Contract No.
* The Project's own Order PO (Drivers see the Order's copy)
* Project # (PROJ-123)
## Common pitfalls
* **An Order shows an old PO.** The Order kept its own copy. Edit the PO on the Order, not the Project.
* **A Customer asks for their "Project ID".** They usually mean the **Project External ID**, not the PROJ number.
* **Imported Orders are missing notes or contacts.** Imports skip the **Web only** fields. Add them to the import file.
* **A field is missing from your form.** Some fields only show if they're turned on for your company. These include **Contract No.**, **Service Class**, **Ticket Chaser**, **Enable Live ETA**, and **Default digital ticket view for drivers**. Ask your Tread contact.
## Related
* [Create a Project](/workflows/create-a-project): set up each section of the Project form
* [Orders & Projects](/concepts/orders-projects): how Projects, Orders, and jobs connect
* [How Rate Changes Flow](/workflows/how-rate-changes-flow): when rate edits reach existing Orders
* [Sales Quotes](/workflows/sales-quotes): quote statuses and the Quote PDF
# Rates, Add-Ons & Fuel Surcharges
Source: https://docs.tread.ai/concepts/rates-add-ons
How Tread prices work — by site, equipment type, and material.
Set pricing rules once; Tread matches the right rate to every Job. Invoices and pay statements build from the same rules — no re-keying rates ticket by ticket.
## What it is
A Rate is the price for a unit of work — per hour, per ton, per load, or flat. An Add-On is an extra charge line applied on top of a Rate; it lands on the invoice or the [Settlement](/concepts/settlements-driver-pay). A Fuel Surcharge is an Add-On whose amount adjusts with fuel prices.
## How Tread models it
Most pricing lives on the [Project](/concepts/orders-projects). Each [project rate](/workflows/project-rates) can be narrowed by pickup [site](/concepts/sites-geofences), dropoff site, [equipment](/concepts/equipment) type, and [material](/concepts/materials) — the most specific match wins on each Job. If no project rate matches, Tread falls back to your company rate cards: account-specific first, then defaults.
**Fuel surcharge has three components.** All three are required. See [Fuel Surcharges](/specialized/fuel-surcharges) for the setup walkthrough.
1. **Fuel Price Index** — the fuel price you track (a regional diesel average or a custom index). You update it on a cadence, typically weekly.
2. **Fuel Surcharge Schedule** — the table mapping fuel price tiers to a surcharge, either a percentage of the base rate or a flat amount per unit.
3. **Add On** — attaches the schedule to a Customer or Vendor rate so the surcharge shows up on invoices and driver pay.
| Component | Lives on | Example |
| - | - | - |
| Rate | Project rate or company rate card | \$4.25 per ton, Site A → Site B |
| Add-On | Customer or Vendor rate | \$50 per load |
| Fuel surcharge — index | Company | Gulf Coast (PADD 3) |
| Fuel surcharge — schedule | Company | |
| Fuel surcharge — Add On | Customer or Vendor rate | Applied to freight rate only |
## Common pitfalls
> [!WARNING]
>
> **Skipping any one of the three fuel surcharge components — index, schedule, Add On — silently removes the surcharge from invoices.** Test on a sample Settlement before go-live and reconcile against your existing fuel matrix.
> [!WARNING]
>
> **Add-Ons go missing at go-live.** Automatic customer fuel rates, material rates, and settlement add-ons each need explicit setup. If line items are missing from your first invoice cycle, audit the Add-On config first.
> [!WARNING]
>
> **A driver rate that matches the vendor rate also inherits that vendor rate's Add-Ons.** A fuel surcharge can land on driver pay even though you never added one to the driver rate. Open **Edit Driver Rate** on the job to see the inherited Add-On and remove it. To stop the matching entirely, ask Tread support to turn it off for your company — after that you enter vendor and driver rates separately on every project and order.
> [!NOTE]
>
> **Rate cards are built and managed on the web, not in the mobile app.** In the mobile app you can pick a rate card and adjust rates on an order or job form, but you can't create or change the rate cards themselves. To do that from a phone, open the web app in a mobile browser.
## Related
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — how rates land on invoices and pay statements
* [Materials](/concepts/materials) — Material rates
* [Roles & Permissions](/concepts/roles-permissions) — who can see and edit rates
* [Workflow: Project Rates](/workflows/project-rates) — set the pricing rules on a project
* [Workflow: Manage Rates, Add-Ons & Fees](/workflows/manage-rates) — company-level rate cards and fuel surcharge
* [Fuel Surcharges](/specialized/fuel-surcharges) — full setup walkthrough
# Roles & Permissions
Source: https://docs.tread.ai/concepts/roles-permissions
Every Tread role, what it can do, and who can see rates.
Roles give each User the access their work needs and nothing more. Dispatchers work the dispatch board, Drivers see their own dispatches, Billers see Invoices and Settlements — and Rates are visible only to Roles with the view Rates permission.
## What it is
A Role is a named bundle of permissions assigned to a User. Each Role decides what the User sees, edits, and acts on across web and mobile. One user can hold several roles at once. Their access is the sum of everything those roles grant.
Tread ships with eight operational roles and four specialty roles. The biggest risk a role protects against is rate visibility — a field user sharing customer billing rates is a trust problem you cannot undo, so pick the right role up front.
## Roles at a glance
| Role | Best for | Access summary |
| - | - | - |
| **Company Admin** | Owners, ops leaders | Everything in the company, including users, rates, and billing |
| **Dispatcher** | Dispatch desk | Create and dispatch [orders and jobs](/concepts/orders-projects), manage resources, sees rates |
| **Biller** | Billing and back office | Approvals, invoices, [settlements](/concepts/settlements-driver-pay), rates; does not dispatch |
| **Manager** | Approvers who must not see prices | Approvals, invoices, settlements, order edits; all rate values hidden |
| **Foreman** | Field supervision | Their orders and jobs, ticket sign-off, shift approvals; hauler rate only |
| **Driver** | Drivers on the mobile app | Their assignments, [tickets](/concepts/tickets-timesheets), timesheets, and their own pay rate |
| **Salesperson** | Quoting and project setup | Projects, sites, materials, [rates](/concepts/rates-add-ons), order requests; no dispatch |
| **Viewer** | Read-only stakeholders | View-only access with no rate values and no actions |
## Permission matrix
"Yes" means the role has the permission by default.
| Capability | Company Admin | Dispatcher | Biller | Manager | Foreman | Driver | Salesperson | Viewer |
| - | - | - | - | - | - | - | - | - |
| View rate values | Yes | Yes | Yes | No | Yes\* | Yes\* | Yes | No |
| Create and edit rates | Yes | Yes | Yes | No | No | No | Yes | No |
| Create and edit projects | Yes | Yes | Yes | Yes | No | No | Yes | No |
| Create and edit sites | Yes | Yes | Yes | Yes | Yes | No | Yes | No |
| Create orders | Yes | Yes | Yes | No | No | No | Yes | No |
| Create and edit jobs | Yes | Yes | Yes | No | Yes | No | No | No |
| Dispatch and assign jobs | Yes | Yes | Yes | No | Yes | No | No | No |
| Approve jobs, loads, and shifts | Yes | No | Yes | Yes | Yes | No | No | No |
| Approve driver timesheets | Yes | No | Yes | Yes | Yes | Own | No | No |
| Create and edit tickets | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
| Invoices and settlements | Yes | No | Yes | Yes | No | No | No | No |
| Add and edit users | Yes | Yes | No | Yes | No | No | No | No |
| Manage equipment | Yes | Yes | Yes | No | No | No | No | No |
| Manage materials | Yes | Yes | Yes | No | No | No | Yes | No |
| Accounting and telematics integrations | Yes | No | Yes | Yes | No | No | No | No |
| Send SMS to drivers | Yes | Yes | Yes | No | Yes | No | No | No |
| Mobile app login | Yes | Yes | Yes | No | Yes | Yes | No | No |
\* Foreman and Driver rate visibility is limited. See the next section.
> [!NOTE]
>
> Some companies run with Foreman approvals, job edits, or site creation switched off. If a Foreman is missing a "Yes" from this table, ask your implementation lead whether it's disabled for your account.
## Specialty roles
Stack these on top of another role when needed.
| Role | What it grants |
| - | - |
| **Reporting** | Access to [Omni reports](/concepts/omni-reports) and exports. The only role that grants report access. |
| **IT Admin** | Create, edit, and delete users, and view API access clients. Nothing else. |
| **Data Importer** | Ingest projects, orders, and tickets through the API. Used for integration service accounts. |
## Rate visibility
A dedicated `view_rate` permission controls rate access. Tread enforces it on the server. Users without it get no rate values in any response, and rate fields stay hidden on web and mobile.
| Role | Customer rate | Vendor / hauler rate | Driver pay rate |
| - | - | - | - |
| **Company Admin** | Yes | Yes | Yes (all drivers) |
| **Dispatcher** | Yes | Yes | Yes (all drivers) |
| **Biller** | Yes | Yes | Yes (all drivers) |
| **Salesperson** | Yes | Yes | Yes |
| **Foreman** | No | Yes, hauler rate only | No |
| **Driver** | No | No | Yes, own rate only |
| **Manager** | No | No | No |
| **Viewer** | No | No | No |
| **Ticket Approver** | No | No | No |
* **Drivers see their own pay rate.** Customer rates stay hidden from them. Do not strip the driver rate to be safe; drivers expect to see what they earn.
* **Foremen see the hauler rate** so they can manage trucking in the field. Nothing else.
* **Dispatcher rate visibility is always on.** There is no per-company toggle. If a person must not see rates, use a role without rate access.
## Choosing a role
| Person | Right role |
| - | - |
| Owner or operations lead | Company Admin |
| Dispatch desk | Dispatcher |
| Billing clerk or bookkeeper | Biller |
| Project manager who only tracks trucks and progress | Viewer |
| Approver who signs off on work but must not see prices | Manager |
| Field supervisor running crews | Foreman |
| Driver | Driver |
| Estimator or salesperson | Salesperson |
| Anyone who needs reports | Their base role plus Reporting |
| Ticket-queue approver without a wider role | Ticket Approver |
## Common pitfalls
> [!WARNING]
>
> **A rate-restricted person set up as a Dispatcher will see rates.** Dispatcher includes rate visibility by design. There is no toggle to remove it. For someone who only watches trucks and locations, use Viewer. If they also approve work, use Manager.
> [!TIP]
>
> Before go-live, create a test User for each Role. Log in as each one and confirm what shows up.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem): how Roles map across Customer, Vendor, and Driver
* [Rates, Add-Ons & Fuel](/concepts/rates-add-ons): how rates work
* [Onboarding: Users](/onboarding/master-data/users): step-by-step User and Role setup
# Settlements & Driver Pay
Source: https://docs.tread.ai/concepts/settlements-driver-pay
Invoices to Customers and pay statements for Drivers and Vendors.
Bill Customers and pay Drivers and Vendors from the same approved data. One approval feeds both sides — no re-keying, faster billing.
## What it is
A Settlement is a finalized batch of approved Invoices. Tread runs two surfaces: Receivables (invoices to Customers) and Payables (pay for Drivers and Vendors). Both pull from the same approved data, but different rates may apply depending on how the projects and orders were configured.
## How Tread models it
* **Approve, then settle.** Each invoice, both the receivable and payable, on a driver dispatch must be approved before they can land in a Settlement. Unapproved data does not appear.
* **Receivables** — invoices to Customers. Applies customer [Rates, Add-Ons, fuel surcharge](/concepts/rates-add-ons), and sales tax.
* **Payables** — pay to Drivers and Vendors. Applies pay Rates, commissions, and deductions.
* **Export** — Settlements can be pushed to [QuickBooks](/integrations/quickbooks) or exported as .csv or .xls documents for upload into your target accounting system of record. Settlements can also be emailed directly to customers as PDF statements through the Tread platform.
| Side | Pulls | Pays / bills |
| - | - | - |
| Receivables | Approved Tickets + Timesheets | Customer |
| Payables | Approved Tickets + Timesheets | Driver, Vendor, Owner-Operator (O\&O) |
## Common pitfalls
> [!WARNING]
>
> **Commissions apply per line item, not to the Settlement total.** Test commissions on a sample Settlement before the first cycle.
> [!WARNING]
>
> **Tickets "missing" from a Settlement were never approved.** If a Ticket does not appear in a Settlement, check its approval first. Approve, then re-pull the Settlement.
> [!WARNING]
>
> **Void-and-redo is the only correction path.** You cannot edit an approved Settlement in place. To fix a rate or quantity, void the Settlement, correct the underlying Ticket, then re-settle.
## Related
* [Tickets & Timesheets](/concepts/tickets-timesheets) — what feeds a Settlement
* [Rates, Add-Ons & Fuel Surcharges](/concepts/rates-add-ons) — how line items are priced
* [Payment Terms](/workflows/billing/payment-terms) — due dates on Settlements
* [QuickBooks](/integrations/quickbooks) — accounting exports
# Sites & Geofences
Source: https://docs.tread.ai/concepts/sites-geofences
Where work happens, and how Tread knows when trucks arrive and leave.
Sites and geofences turn GPS route histories into structured work data — load counts, cycle times, on-site minutes, and auto-completion of jobs. Dispatch and approvals run on real events instead of phone calls and approximations.
## What it is
A Site is a location on the map. A geofence (a virtual fence around a Site) tells Tread when a truck arrives, when it leaves, and how long it stayed.
## How Tread models it
* **Site** — name, address, lat/long. Reverse-geocoded from the address if you do not have coordinates.
* Sites typically have a Pickup and a Dropoff site. We also have a feature available for a third site - a "Staging Site"
* **Default Sites:** When you want to save multiple potential pickups or dropoffs to a Project or Order, you can utilize Tread's Default Sites feature. Tread does still enable geofence triggers and status updates when default sites are configured and the Pickup or Dropoff site is left blank.

* **Geofence** — the shape around the Site. Two types:
* **Circle** — a radius in meters. The default. Fast to draw.
* **Polygon** — a custom shape. Use it for irregular Sites or anywhere a circle would overlap a neighboring Site.
* **Multiple Geofences** — Tread allows for 5 additional geofences to be added to a given site. The "tag" represents the name of the geofence for reporting purposes


* **Geofence Timer** — the minimum time inside the fence, in seconds, before Tread counts a real arrival. Filters out drive-throughs.
* **Auto-geofence** — Tread can draw a default circle when a Site is created.
| Field | Required | Notes |
| - | - | - |
| Lat / long | Yes | No coordinates, no detection |
| Geofence shape | Yes | Circle is the default |
| Geofence Timer | No | Defaults to your company setting |
## Auto-end behavior
When a load or shift ends depends on the order type. Geofence exit auto-ends some orders; others wait for a manual end or a different trigger.
| Order type | What auto-ends a load or shift | Manual end available? |
| - | - | - |
| **Hourly order** | Driver clocks out at end of shift, or geofence exit on the last load of the day | Yes — driver or foreman can end early |
| **Loads order** | Geofence exit at the destination (load complete) | Yes — manual completion overrides geofence |
| **Shift order** | Shift end time, regardless of geofence | Yes — driver can end shift early |
| **Digital-ticket-mode job** | Manual end only — geofence does not auto-complete | Yes — required, no auto-end |
* **Geofence exit** — the truck crosses the fence boundary on the way out. Tread closes the load and starts the cycle-time clock for the next one.
* **Geofence Timer** still applies. A truck that crosses the fence for less than the timer window does not trigger auto-end.
## Common pitfalls
> [!WARNING]
>
> **Geofence type changes affect historical data, not just future loads.** Switching a Site from circle to polygon will change its appearance on prior Projects and Orders
> [!TIP]
>
> For paving and other work that moves down a road, use a [moving geofence](/specialized/paving-geofences) rather than redrawing a polygon every shift.
## Related
* [Tickets & Timesheets](/concepts/tickets-timesheets) — how arrivals turn into tickets
* [Paving & Moving Geofences](/specialized/paving-geofences) — geofences that travel with the work
* [Onboarding: Sites](/onboarding/master-data/sites) — step-by-step Site setup
# Tickets & Timesheets (per Shift or Hourly)
Source: https://docs.tread.ai/concepts/tickets-timesheets
The proof-of-work records — Tickets and Timesheets — and how they feed approvals, billing, and pay.
Every Ticket and Timesheet saves to Tread as it is captured — live, across connected accounts. That cuts re-keying and paper handling and speeds up approvals, billing, and pay.
## What it is
Tickets and Timesheets are the records Tread uses to prove the work happened. A Ticket records one load — ticket number, material, quantity, photo. A Timesheet records a [Driver's](/concepts/driver-lifecycle) hours for a shift or dispatch. Both must be approved before they reach billing and pay in a [Settlement](/concepts/settlements-driver-pay).
## How Tread models it
* **Ticket** — ticket number, material, quantity, unit of measure, photo, and source. Each Ticket links to its Load, Job, and [Order](/concepts/orders-projects). Tickets can be received via eTicket integration, drivers submitting via the Tread mobile application, or sent in via SMS through Tread's AI features
* **Source** — how the Ticket entered Tread: the Driver's mobile app, an SMS photo to Tread, a scale-house integration, or a digital Ticket from a connected account.
* **Ticket Chaser** — Tread's AI agent for Ticket collection. It messages Drivers over SMS to upload missing Tickets, reads the photos, and extracts the data. AI review flags inaccuracies and duplicates. Flags are informational, not blocking.
* **Timesheet** — a Driver's hours either for a shift which is 1 timesheet per day, or 1 per dispatch, for when a Driver requires a timesheet per Customer dispatch. Hours are automatically captured from clocking in & out via the mobile app, and additionally [geofence](/concepts/sites-geofences) enter and exit times are tracked from the Driver's mobile app to correlate a drivers working times. Tread has the ability to allow drivers or foreman to enter/edit shift and hourly times.
| Captured by | What it records |
| - | - |
| Driver mobile app | Photo, time, GPS |
| SMS to Tread | Photo + ticket number |
| Telematics | Geofence enter / exit |
| Scale-house integration | Quantity + ticket number |
## Common pitfalls
> [!WARNING]
>
> **AI flags are informational. They do not block approvals.** Truck numbers with dashes, mixed date formats, and faded photos can trigger false positives. Treat a flag as a hint and approve on human judgment.
> [!TIP]
>
> Approve Tickets and Timesheets in the same approval session per Order. Splitting them across days means going back to the same Driver twice.
## Related
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — what happens after approval
* [Sites & Geofences](/concepts/sites-geofences) — how arrivals create Timesheet events
* [Workflow: Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets)
* [Driver guide: Add a timesheet to hourly jobs (PDF)](https://tread.ai/features/Add%20Timesheet%20to%20Hourly%20Jobs.pdf) — printable steps for Drivers
# Dispatch a Job (Web & Mobile)
Source: https://docs.tread.ai/dispatch-guide/dispatch-a-job
Assign, configure, send, and monitor jobs from the web dashboard, or dispatch on the go from the mobile app — then see what your driver does to accept and start the job.
Dispatching works on **both surfaces**. Assign, configure, send, and monitor jobs from the **web** dashboard, or dispatch on the go from the **mobile** app. Either way, your driver receives and starts the job on their phone.
**Dispatch from the web**
**1. Assign a driver (or a vendor)**
Click **Assign** on the job row to open the panel, then choose who hauls the job.

1. **Assign** — opens the Driver / Vendor picker on the job row.
2. **Driver** — assign one of your own drivers (an Internal Driver), or a driver a partner shares to you (a Shared Driver, often an Owner-Operator). Search by name or truck number.
3. **Vendor** — hand the job to a hauling company that will sub-dispatch it to their own driver.
## Bulk assign
To give many jobs to one hauling company at once:

1. Click the **Bulk Assign** (persons) icon at the top right to open the *Assign to* dialog.
2. Use **+** to set the number of trucks for the selected vendor.
3. Click **Assign All** to assign every selected job to that vendor at once.
**2. Send the jobs**
Click **Send** on a single row to dispatch that driver, or **Send All Jobs** at the top to send every pending assignment at once. Drivers receive a push notification immediately.

> [!WARNING]
>
> **Send All Jobs** dispatches **every job with an assignment**. Double-check the list before clicking — drivers are notified instantly.
**3. Monitor the jobs**
Follow each job's **Status** as the day runs: *Accepted → To Pickup → At Pickup → Loaded → To Dropoff → At Dropoff → Unloaded → In Review → Completed*. You can manually advance a status by clicking the down arrow in the status box, and follow trucks on the **Live Map**. With Live ETA on, the **Cycle** column shows each truck's estimated arrival time and flags late trucks in red. See [Live ETAs on Dispatch](/workflows/track-drivers-collect-tickets#live-etas-on-dispatch).

See [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets) for what comes next.
**Dispatch from Mobile**
## Dispatch from mobile
You can run the same dispatch from the Tread mobile app — useful when you're away from your desk. Open the **Dispatch** tab to see the day's orders. If you don't see **Dispatch** on the bottom bar, tap **More**.
Watch the full flow, then follow the steps below:
[Video walkthrough: dispatch from the mobile app](https://www.loom.com/embed/9b985be23d1d4b1c8490039fbd27f94d)
**1. Open the assignment view**
Tap the **▼** arrow next to the order's truck count to see the assigned trucks, then tap **+ Assign** to start adding a driver.

**2. Pick a driver and send**
Search for a driver by name or truck number, tap to select, then tap **Send**. The driver gets a push notification immediately and can accept and start the job from their phone.


> [!NOTE]
>
> You'll see the driver's location on the map as soon as they start the job. Each truck on the **Live Map** and the order map shows a name plate with its truck number.
**3. Message your drivers**
Tap the chat icon (**Message Drivers**) on the order card to message every driver on the order, or one driver about their job. A red count shows unread replies. See [Messages & Broadcasts](/mobile/messaging).

**On mobile — your driver receives**
Once you send a job, the assigned driver gets it on their phone. Here's what they do:
**1. View the request**
New offers appear in the driver's **Assigned** tab under **New Tread Requests**. The driver taps **View Request** to see the job details.

**2. Accept the job**
The driver reviews the pickup, drop-off, and material, then taps **Accept** (or **Decline**). Until they respond, you'll see their status as **Pending** on your board.

**3. Start the job**
The driver taps **Start** to begin the run. Their location now appears on your **Live Map**, and the job's status starts moving through the flow.

## Tips & common pitfalls
> [!WARNING]
>
> **Assign to the right place.** Use the **Driver** tab for your own drivers and shared drivers, and **Vendor** for haulers who sub-dispatch. Picking the wrong one is the most common reason a driver never receives a load. See [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
* **Driver didn't get the load?** Check the job status — if it's stuck at **Assigned** (not **Sent**), you still need to hit **Send**. If it's sent but the driver shows **Pending**, they haven't accepted yet, or they may not have the app or location permissions ([Train Your Drivers](/vendor-guide/train-your-drivers)).
* **Vendor jobs** show the driver's name on your board only *after* the vendor's dispatcher accepts and assigns one of their drivers.
* Set a **default truck** on each driver so it pre-fills on every assignment — fewer clicks, fewer mistakes.
## Related
* [Dispatch Overview](/dispatch-guide/overview) — the board, modes, and prerequisites
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors) — internal, shared, and vendor drivers
* [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets) — after the job is sent
* [Orders & Projects](/concepts/orders-projects) — what you're dispatching
# Dispatch Overview
Source: https://docs.tread.ai/dispatch-guide/overview
How a job gets from your dispatch board to your driver's phone — the board, assigning to your own drivers or a vendor, and what you need before you start.
Dispatching is the day-to-day act of getting your work onto the right driver's phone. You can dispatch from the **web** dashboard or the **mobile** app — assign, send, and monitor jobs on either surface — and your drivers receive, accept, and start those jobs on their phones.
> [!TIP]
>
> New to Tread? Set up your trucks, drivers, and users first — see [Set Up Trucks & Drivers](/vendor-guide/setup-trucks-and-drivers). Then come back here to dispatch.
## What you dispatch
A **Project** represents the construction project, (a multi-day scope of work) and can be viewed as a template for daily work; an **Order** is the daily trucking or material request you actually dispatch. You assign and send the **jobs (TRDs or truck dispatches**) under an order. If you haven't created the work yet, start with [Create a Project, Order & Dispatch](/workflows/create-a-project).
| Concept | Role in dispatch |
| - | - |
| **Project** | Holds the customer, sites, materials, and rates |
| **Order** | The day's work: trucks requested, start time, target loads/hours |
| **Job** | One truck's assignment within an order — what you send to a driver |
## The dispatch view
The **Dispatch** view (on web, and the **Dispatch** tab on mobile) is your command center for the day. Each order card shows its status, truck count, and the per-job rows you act on — assign a driver, send the job, and track its status.

Each job moves along this status flow as the day runs:
**Accepted → To Pickup → At Pickup → Loaded → To Dropoff → At Dropoff → Unloaded → In Review → Completed**
## Assign to your own driver — or a vendor
When you assign a job, you choose **who hauls it**. In the **Assign** panel you toggle between **Driver** and **Vendor**. Pick the wrong one and the driver never sees the load, or the wrong company gets billed, so confirm the relationship first. Full detail in [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
| Assign to | Who hauls it | In the Assign panel | When to use |
| - | - | - | - |
| **Internal Driver** | Your own driver | **Driver** tab | Your own drivers and trucks |
| **Shared Driver** | A driver a partner shares to you | **Driver** tab | A partner (often an Owner-Operator) whose specific driver you assign yourself |
| **Vendor** | A hauling company that sub-dispatches | **Vendor** tab | You hired a hauling company; their dispatcher picks the driver |
> [!WARNING]
>
> **Vendor** dispatch needs an accepted Vendor connection, and a **Shared Driver** must be shared to you — otherwise the job won't send or the driver won't appear in your Assign list. Check **Settings → Vendors** and **Settings → Drivers** first.
## Before you dispatch — checklist
**1. Work exists**
A project and at least one order for the day. See [Create a Project, Order & Dispatch](/workflows/create-a-project).
**2. Trucks & drivers are set up**
Drivers added (and invited so they have the app), trucks created, default trucks paired to drivers. See [Set Up Trucks & Drivers](/vendor-guide/setup-trucks-and-drivers).
**3. Connections are confirmed (if using vendors or shared drivers)**
For a Vendor, the connection is accepted. For a Shared Driver, the partner has shared the driver to you.
## Next
* [Dispatch a Job (Web & Mobile)](/dispatch-guide/dispatch-a-job) — the step-by-step assign → send → monitor flow, and what your driver sees
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors) — internal, shared, and vendor drivers, in depth
* [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets) — what happens after the load is sent
* [Tread Dispatch Guide (single-page version)](https://tread.ai/dispatchguide/) — this guide as one shareable HTML page
# Welcome to Tread
Source: https://docs.tread.ai/index
Everything you need for your first live dispatch — prerequisites and the 5-step setup.
## Prerequisites
* Admin access to Tread Horizon (the web app for office staff).
* Master data exports from your accounting system
* Customers
* Vendors
* Drivers (Internal and Third Party)
* Materials
* Equipment (Trucks and Trailers)
* Sites
* A point of contact for at least one driver and one customer
## The 5 steps
**1. Confirm company hierarchy**
Decide whether you run as a single company or as a parent with child companies. Flat is the default. Use child companies only for true regional splits with separate billing and dispatch.
See [Company Hierarchy](/onboarding/company-hierarchy).
**2. Upload master data**
Load data in this order: Users → Drivers → Customers → Vendors → Equipment Types → Equipment → Materials → Sites. Order matters. An Equipment Type, for example, must exist before you can add Equipment to it.
See [Master Data Overview](/onboarding/master-data/overview).
**3. Connect integrations**
Connect your accounting system (QuickBooks, Sage 300, Vista, Foundation, or Spectrum). Connect telematics (Samsara or Geotab) for live truck location. Connect Paver Tracker if you pave.
See [Integrations Setup](/onboarding/integrations).
**4. Set up agents**
AI Ticket Scanning and AI Reviews can read tickets and flag issues for you. Scanning is on by default, and Reviews stays off until you configure it.
See [Agent Configurations](/onboarding/agent-configurations).
**5. Run your first dispatch**
Create a project, add a daily order, and assign drivers. Drivers receive the job on the Driver app. Tickets and timesheets flow back the same day.
See [Create Project, Order, Dispatch](/workflows/create-a-project).
## Verify
You should see:
* Your company name in the Account Info under **Settings** → **General Settings**
* Make sure you add a logo!
* At least one driver in **Settings → Drivers** with a phone number.
* One project on the dispatch board with a driver assigned.
* One ticket or timesheet returned from the field by end of day.
## What's next
> **[Core Concepts](/concepts/overview)**
>
> Learn the model behind the screens.
> **[Onboarding Guide](/onboarding/company-hierarchy)**
>
> Full setup, page by page.
> **[Workflow Guides](/workflows/create-a-project)**
>
> Daily ops, end to end.
> **[Common Mistakes](/resources/common-mistakes)**
>
> Avoid the traps first-time admins hit.
> **[Glossary](/resources/glossary)**
>
> Terms you will see across the docs.
# QuickBooks
Source: https://docs.tread.ai/integrations/quickbooks
Connect QuickBooks, match your records, and export Settlements as invoices and bills.
Export approved [Settlements](/concepts/settlements-driver-pay) straight to QuickBooks as invoices and bills — no re-entry into your accounting system. Works with QuickBooks Online and QuickBooks Desktop.
## Prerequisites
* The **Company Admin**, **Biller**, or **Manager** role in Tread.
* Your QuickBooks administrator sign-in.
* Pop-ups allowed for the Tread app. The connection window opens as a pop-up.
* Tread links one accounting account at a time per company.
## Connect your QuickBooks account
One-time setup. Once linked, Tread pulls in your QuickBooks customers, vendors, items, accounts, tax rates, and payment terms.
**1. Open Integrations**
Go to **Settings → Integrations**, under **AI & Integrations**.
**2. Manage the Accounting integration**
On the **Accounting** card, click **Manage**. Tread connects to QuickBooks through Rutter, an accounting connection service.
**3. Link your account**
Click **Link account**. The connection window opens in a pop-up.

**4. Authorize Tread**
Click **Continue**, choose your QuickBooks product, and sign in with your QuickBooks administrator credentials. Follow the steps in the dialog.
For QuickBooks Desktop, complete these steps on the server or machine where your company file is open.
**5. Close the pop-up**
At "Authentication Complete!", close the pop-up. Your connection appears in the table and the first sync starts automatically.

> [!NOTE]
>
> The first sync can take several minutes on QuickBooks Online. QuickBooks Desktop syncs when your Web Connector runs — up to a day.
> [!TIP]
>
> Closed the pop-up too early? The connection row shows *Awaiting authorization* — click the row to reopen the sign-in and finish.
## Map your Tread records to QuickBooks
Mapping tells Tread which QuickBooks record each Tread record exports to. Exported invoices and bills then land on the right customers, vendors, items, and accounts.
Click your connection row to open **Tread ↔ QuickBooks Mapping**. Each tab lists your Tread records, with a dropdown to pick the matching QuickBooks record. Only active QuickBooks records are offered. Use **Search** and **Filters** to find unmapped rows.

| Tab | What you map | Rule |
| - | - | - |
| **Customers** | Each Tread customer to the QuickBooks customer it bills to | Each QuickBooks customer backs exactly one Tread customer. **New customer** creates one. |
| **Vendors** | Each Tread [Vendor](/concepts/dispatching-drivers-vendors) (an account you send dispatches to) to its QuickBooks vendor | Each QuickBooks vendor backs exactly one Tread Vendor. **New vendor** creates one. |
| **Items** | The **Core lines** (Freight, Material) and each **Add-on** to a QuickBooks product or service | One QuickBooks item can serve several rows. |
| **Ledger** | **Accounts Receivable** (customer invoices) and **Accounts Payable** (vendor bills) | One account each. The account used for one isn't offered for the other. |
| **Tax rates** | Each Tread tax rate schedule to a QuickBooks tax rate | Each QuickBooks tax rate backs exactly one schedule. |
| **Payment terms** | Each Tread [payment term](/workflows/billing/payment-terms) to a QuickBooks term | Only QuickBooks terms due a fixed number of days can be mapped. Each backs exactly one Tread term. |


> [!TIP]
>
> Added records in QuickBooks? Click **Refresh All Data**, then map the new rows. The **Last Sync** time shows when Tread last pulled from QuickBooks.
> [!WARNING]
>
> Disconnecting deletes every mapping. After reconnecting you redo all customer, vendor, item, ledger, tax rate, and payment term mapping.
## Choose export settings
Open **More → Export settings → Advanced Configuration** on the mapping page.
* **Invoice & Bill Numbers** — turn this on to leave the QuickBooks Invoice No. / Bill No. blank and put the Tread Settlement ID in the memo instead.
* **Service Date** — Use the job date to populate the QuickBooks service date field on each invoice line.
* **Line item description** — choose which details appear in the description of each freight and material line, and in what order.
Set up line descriptions separately for **Receivables (Invoices)** and **Payables (Bills)**. Click **Edit**, select the fields you want, drag them into order, then **Save**. The preview shows a sample line itemized by load or by job.

Available fields: Service date, Tread job ID, Ticket number(s), Truck, Material, Order PO, Project name, Sites, Driver, Delivered quantity and Pay Time (for hourly jobs).
The default is Service date, Tread job ID, Ticket number(s), Truck, Material. Click **Reset to default** to return to it. Add-on lines, such as a fuel surcharge, keep their name-only description.
## Export Settlements to QuickBooks
Customer Settlements export as **invoices**. Vendor Settlements export as **bills**. Driver Settlements can't be exported to QuickBooks.
**1. Open Settlements**
Go to **Approvals → Receivables** (or **Payables**) → **Settlements**.
**2. Approve the Settlement**
Only approved or paid Settlements can be exported. Approve a pending Settlement first.
**3. Click Export**
Click **Export** on the Settlement row.

**4. Confirm the export**
Check the Settlement ID, customer, and total in the **Export to Accounting System** dialog. A Settlement can only be exported once.

**5. Watch the Exported column**
It updates as QuickBooks accepts the document.
**6. How it looks in Quickbooks**
Here is an example invoice that has been exported from Tread.

### Reading the Exported column
| What you see |
What it means |
| **Accounting pending** |
Being delivered to QuickBooks. Desktop exports stay pending until your Web Connector next runs. |
| **Accounting • date** |
The invoice or bill was created in QuickBooks on that date. |
| **Accounting failed** |
Something blocked the export. The reason shows below the status. Fix it and export again. |
> [!NOTE]
>
> The QuickBooks invoice or bill number is the Settlement ID, unless you moved it to the memo in export settings. Each line posts against your mapped items, with the description you set in export settings.
## Why an export fails
Almost always one of these. Fix the cause, then click **Export** again — failed exports can be retried.
1. **The QuickBooks connection hasn't finished syncing to Tread yet.** Check the **Last Sync** time on the mapping page.
2. **The Settlement isn't approved yet.** Approve it first, then export.
3. **The Settlement's customer or Vendor isn't mapped yet** (Customers or Vendors tab).
4. **Freight, Material, or an add-on on the Settlement isn't mapped to a QuickBooks item yet** (Items tab).
5. **Your Accounts Receivable or Accounts Payable account isn't mapped yet** (Ledger tab).
6. **A tax rate schedule on the Settlement isn't mapped yet** (Tax rates tab), **or a line uses a typed tax percentage instead of a mapped schedule.** A typed percentage won't export. Map the schedule, apply it to the line, then export again.
7. **The Settlement has already been exported once.** Exports are one-time — QuickBooks never receives a duplicate.
8. **An item isn't set up correctly in QuickBooks.** In QuickBooks Products and Services, items used on invoices need *"I sell this product/service to my customers"* checked. Items used on bills need *"I purchase this product/service from a vendor"* checked.

Still stuck? Contact your Tread representative with the Settlement ID and the exact message you saw.
# Agent Configurations
Source: https://docs.tread.ai/onboarding/agent-configurations
Configure Tread's AI agents — AI Ticket Scanning, AI Reviews, and the Driver Agent.
## What you'll do
Review the AI agents on **Settings → Agents**. Each configuration is independent — set them in any order, and change them later.
## Before you start
* [Drivers](/onboarding/master-data/drivers) and [Vendors](/onboarding/master-data/vendors) set up so the agents know who to contact.
* A first dispatch run completed so the agents have tickets to work on.
* A billing lead identified to review the agents' first week of output.

## The configurations
### AI Ticket Scanning
**Custom Instructions** tell the AI how to read your uploaded tickets, for example, "Treat the number in the top-right corner as the ticket number." Click **Edit**, describe your ticket layout, and save.
### AI Reviews
Check **Automatically review tickets with AI to approve valid tickets and flag inaccuracies or duplicates**. There is no confidence threshold to pick. Instead, add **Custom Instructions** with context specific to your company — for example, "Always flag tickets where the quantity exceeds 30 tons."
### Driver Agent
Once ticket chasing is live, this section lists the phone number(s) drivers text to upload tickets. If the section isn't there yet, click **Contact Tread for More Information** to have it set up.
On a project's order defaults, the **Ticket Chaser** toggle controls chasing for that project. See [AI Ticket Chaser](/specialized/ai-ticket-chaser) for the full walkthrough, including what drivers see over SMS.
## Verify
Settings → Agents shows your custom instructions saved, the AI Reviews box checked, and the Driver Agent phone number(s) once ticket chasing is live.
## Common mistakes
> [!WARNING]
>
> **Treating AI Review flags as blocking.** A flag means "look at this," not "reject this." The billing lead reads the flag context, then approves or corrects. For the first five business days, review every auto-approved ticket; after that, sample 10%.
# Confirm Company Hierarchy
Source: https://docs.tread.ai/onboarding/company-hierarchy
Flat or parent/child — decide the structure with your Tread implementation lead before uploading data.
## What you'll do
Decide whether your account runs flat or parent/child, then send the structure to your Tread implementation lead. Hierarchy is not self-serve — Tread creates the parent and child companies for you. Your job is to decide, confirm, and provide the list.
## Before you start
* A list of every legal entity, division, or terminal that dispatches trucks.
* Agreement from operations on whether dispatchers cross divisions today.
* Your Tread implementation lead's contact.
## Walkthrough
**1. Default to flat**
Most Tread accounts run flat — one company, one set of master data. Pick this unless you have a hard reason not to.
**2. Use parent/child only for real regional splits**
Ask for child companies only when divisions have their own dispatchers, fleets, and books. Users added to the parent can navigate down to every child; users added to a child cannot see parent-level data.
**3. Decide where master data lives**
If drivers, equipment, and [Sites](/concepts/sites-geofences) are used across children, create them at the parent and share them down via [Company Shares](/concepts/connected-ecosystem). If children are truly independent regions, manage data at each child. See [Companies & Hierarchy](/concepts/companies-hierarchy) for the full model.
**4. Send the structure to Tread**
Give your Tread implementation lead the entity list, which users belong at the parent, and which belong at each child. Tread creates the companies — confirm the result before any master data is uploaded.
## Verify
Open **Dispatch** → **Dispatch as**. The companies on screen match the structure you sent. Master data lives where you decided — nothing was created on the wrong company.
## Common mistakes
> [!WARNING]
>
> **Setting up a shared fleet's master data on a child company.** A multi-region producer with one shared fleet set up every driver, vendor, truck, and customer on a child account instead of the parent. Dispatchers couldn't move drivers across divisions. Drivers were imported as vendors. Payroll pulled the wrong hours. The fix took two days of manual back-end work. When children share a fleet, create at the parent and share down. See [Companies & Hierarchy](/concepts/companies-hierarchy).
# Go-Live Checklist
Source: https://docs.tread.ai/onboarding/go-live-checklist
The QA pass to run before flipping your fleet to Tread — data, integrations, mobile, billing setup, training.
## What you'll do
Run a final QA pass across nine categories before your first live dispatch. This is the last gate — once you flip live, drivers, customers, and vendors are on Tread.
## Before you start
* All [master data](/onboarding/master-data/overview) imports complete.
* [Integrations](/onboarding/integrations) connected.
* [Agent configurations](/onboarding/agent-configurations) reviewed.
* A test project ready for the dry-run dispatch.
## The checklist
Work through each category. Don't flip live until every box is checked.
> **Master data complete**
>
> All master data sets imported. Sample records reviewed by an admin.
>
> * [Users](/onboarding/master-data/users) — all admins, dispatchers, and back-office staff invited. Internal drivers created here with the **Driver** role.
> * [Drivers](/onboarding/master-data/drivers) — every O\&O and contract driver loaded with a unique phone.
> * [Customers](/onboarding/master-data/customers) — including all Connected Customer invites accepted.
> * [Vendors](/onboarding/master-data/vendors) — all subhaulers connected.
> * [Equipment Types](/onboarding/master-data/equipment-types) — capacity and unit of measure set on each.
> * [Equipment](/onboarding/master-data/equipment) — every truck loaded and named consistently.
> * [Materials](/onboarding/master-data/materials) — pulled from accounting.
> * [Sites](/onboarding/master-data/sites) — lat/long set, geofences validated.
> * [Departments, Labels & Service Classes](/onboarding/master-data/departments-labels-classes) — only the ones you'll actually use.
> **Hierarchy correct**
>
> Entities sit at the right level. Shared resources flow correctly.
>
> * [Company hierarchy](/onboarding/company-hierarchy) reviewed — flat unless you have real regional splits.
> * Equipment shared from owning entity into operating entities (if multi-entity).
> * Drivers shared across the hierarchy where they run loads.
> * See [Multi-Entity Billing](/specialized/multi-entity-billing) if money flows between entities.
> **Integrations connected**
>
> Every system that needs to flow into or out of Tread is live.
>
> * [Telematics](/integrations/telematics) — connected; assets matched to equipment; live GPS visible on the dispatch board.
> * [Paver Tracker](/integrations/paver-tracker) — connected if you pave.
> * Accounting integration ([QuickBooks](/integrations/quickbooks), [Sage](/integrations/sage), [Vista](/integrations/vista), [Foundation](/integrations/foundation), or [Spectrum](/integrations/spectrum)) authenticated and test invoice synced.
> **Agents configured**
>
> Decide what's on and what's off.
>
> * **Ticket Chaser** — on or off? See [Agent Configurations](/onboarding/agent-configurations).
> * **AI Reviews** — on or off? Add custom instructions for what the agent should approve or flag. There is no user-set confidence threshold.
> * Review the [Common Mistakes](/resources/common-mistakes) page for agent-related pitfalls.
> **Mobile app installed**
>
> Field users have the apps on their devices and can sign in.
>
> * [Driver App](/mobile/driver-app) installed on at least two driver phones — confirmed sign-in.
> * [Foreman App](/workflows/foreman) installed for any field foreman who'll create or approve work.
> * One test ticket captured end-to-end on a real device.
> **Billing set up per customer**
>
> Every active customer can be invoiced correctly on day one.
>
> * [Rates](/workflows/manage-rates) assigned — freight and material rates cover every active customer and project.
> * Billing address and billing email set on each [customer record](/onboarding/master-data/customers) — the address prints on PDF invoices.
> * One sample invoice generated and reviewed with the customer's AP contact.
> **First dispatch dry-run**
>
> One full project end-to-end on a real driver, real truck, real ticket — with billing skipped.
>
> * [Project, order, and dispatch created](/workflows/create-a-project).
> * Driver received the dispatch on their phone.
> * Ticket captured and approved.
> * Settlement generated but not sent.
> **Training delivered**
>
> Every role that will use Tread has had a walkthrough.
>
> * Admin user — full platform tour.
> * Dispatcher — dispatch board, [intra-day changes](/specialized/intra-day-changes), agent overrides.
> * Foreman — [Foreman in the Field](/workflows/foreman) walkthrough.
> * Driver — Driver App install, ticket capture, e-signature.
> **Communication plan**
>
> Everyone affected knows what's changing and when.
>
> * Vendor notification sent — every connected hauler knows go-live date.
> * Customer notification sent — AP contacts know to expect Tread invoices.
> * Internal comms — ops, billing, and exec team aware.
> * Escalation contact named — one person owns Tread questions during the first two weeks.
## Verify
Every category above shows as complete. Your test invoice cleared your accounting system. At least one driver has run a real ticket end-to-end and the settlement was reviewed. Then flip live.
## Common mistakes
> [!WARNING]
>
> **Going live without the dry-run.** A regional hauler skipped the test dispatch. Day one, the dispatch board worked but settlements failed because rates weren't tied to the right customer. Run the dry-run — it catches this kind of gap in an hour.
> [!WARNING]
>
> **Going live without an escalation owner.** Day one will surface questions. Without a named owner, those questions go unanswered and get worse. Pick one person before flipping live.
> [!WARNING]
>
> **Skipping vendor and customer notification.** Connected vendors and customers need to know when to expect connection invites and Tread-formatted invoices. Without notice, they'll bounce both. Send the notification at least one week before go-live.
## Related
* [Master Data Overview](/onboarding/master-data/overview) — every data set this gates on
* [Common Mistakes](/resources/common-mistakes) — pitfalls to spot before go-live
* [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets) — what runs on day one
# Integrations Setup
Source: https://docs.tread.ai/onboarding/integrations
Connect telematics and Paver Tracker during onboarding.
## What you'll do
Connect the two data feeds that matter during onboarding: telematics for live truck positions, and Paver Tracker if you pave. Accounting integrations come after billing is live.
## Before you start
* A login for your telematics (ELD) provider's account.
* [Equipment](/onboarding/master-data/equipment) loaded so vehicles can match Equipment records.
* [Sites](/onboarding/master-data/sites) loaded so geofences line up with arrival events.
* If you pave: the job IDs your Paver Tracker uses, for project External IDs.
## Walkthrough
**1. Open Telematics**
Go to **Settings → Integrations** and click **Manage** on **Telematics**. Tread connects to more than 300 ELD providers, including Samsara, Motive, and Geotab.

**2. Connect your provider**
Click **Connect provider**. A popup guides you through it: pick your ELD from the list, sign in to your telematics account, and grant Tread access to your vehicle data. Once authorized, your vehicles appear on the [Live Map](/workflows/track-drivers-collect-tickets) automatically. A carrier can also complete the connection through an invitation link.

**3. Match vehicles to Equipment**
Match each connected vehicle to an [Equipment](/onboarding/master-data/equipment) record so live positions land on the right truck. See [Telematics & ELD](/integrations/telematics) for the matching walkthrough and the list of supported providers.
**4. Ask Tread to connect Paver Tracker**
If you pave, access **Paver Tracker**, paste your credentials.
If you pave: Paver Tracker is not self-serve — contact Tread to configure the connection and the paver list. Then set each paving project's **External ID** to the Paver Tracker job ID, and turn on **Sync sites from telematics (PaverTracker)** on each order that should follow a paver. See [Paver Tracker](/integrations/paver-tracker) and [Paving & Moving Geofences](/specialized/paving-geofences).
## Verify
The Telematics page shows your connection status. The [Live Map](/workflows/track-drivers-collect-tickets) shows live pins for active trucks.
## Common mistakes
> [!WARNING]
>
> **Skipping the vehicle match.** Tread can't record positions against a truck it can't identify. Walk through every connected vehicle before moving on.
# Customers
Source: https://docs.tread.ai/onboarding/master-data/customers
Add the customers you bill.
## What you'll do
Add every company you invoice. Default to the Connected Customer model so they can confirm tickets directly with access to the platform.
## Before you start
* An export of customers from your accounting system: name, billing address, email.
* Decide which customers will use a Connected Customer login (a customer-side Tread account that lets them view tickets and approve invoices).
* A dummy email is fine for customers who won't log in — Tread won't send invites until you turn them on.
## Walkthrough
**1. Open Settings → Customers**
Click **Add Customer**.
**2. Enter company details**
Fill in legal name, billing address, and billing email. The address prints on PDF invoices.
**3. Add the primary contact**
Enter the AP contact's name, email, phone number.
**4. Set the Ext. ID**
Paste the customer ID from QuickBooks, Sage, Vista, Foundation, or Spectrum so invoices export back cleanly. See [Integrations](/onboarding/integrations).
**5. Decide on Connected Customer access**
Toggle **Connected Customer** off only if you don't want them to confirm tickets and view invoices in their own portal. It is on by default.
## Verify
Settings → Customers lists every account. Spot-check a row: the Ext. ID matches your accounting export. See [Connected Ecosystem](/concepts/connected-ecosystem) for how customers, your company, vendors, and drivers connect.
## Common mistakes
> [!WARNING]
>
> **Skipping the billing address.** PDF invoices use the address on the customer record. A blank field prints a blank line. Fix it before the first billing run, not after.
> [!WARNING]
>
> **Can't add a contact for a customer?** That customer needs [Connected Customer](/concepts/connected-ecosystem) access first — the customer-side login that lets them view tickets and approve invoices. A customer added without it can't have people added on their behalf. Open the customer record, turn on **Connected Customer**, then add the contact.
# Departments, Labels & Service Classes
Source: https://docs.tread.ai/onboarding/master-data/departments-labels-classes
Optional categorization for reporting and dispatch flow.
## What you'll do
Add the optional tags that organize how data is filtered, dispatched, and coded. All three are optional — set up only what you'll actually use.
## Where each one applies
| Object | Apply it to | Use it for |
| - | - | - |
| Departments | [Projects and Orders](/concepts/orders-projects), [Customers](/onboarding/master-data/customers), [Vendors](/onboarding/master-data/vendors), [Sites](/onboarding/master-data/sites) | Filter the Dispatch board, Projects list, approvals, and reports by division |
| Labels | [Users](/onboarding/master-data/users), [Drivers](/onboarding/master-data/drivers), Customers, Vendors, [Equipment](/onboarding/master-data/equipment) | Color-coded chips for filtering and quick identification |
| Service Classes | Projects, Orders, [rate cards](/workflows/manage-rates) | Rate and bill by type of service |
## Before you start
* A list of departments your business reports against (e.g., Aggregates, Asphalt, Hauling).
* A list of dispatch labels you already use on whiteboards or sticky notes (e.g., "Standby," "Priority," "Inbound").
* A list of service classes from your accounting or job-cost system if you code work by job type.
## Walkthrough
**1. Add Departments**
Settings → **Departments** → **Create Department**. Departments group [orders and projects](/concepts/orders-projects), accounts, and [Sites](/onboarding/master-data/sites) for reporting and filtering — the Dispatch board can filter by department. Use them if your finance team already reports by division.

**2. Add Labels**
Settings → **Labels** → **Create Label**. Labels are color-coded tags for Users, Drivers, Customers, Vendors, and [Equipment](/onboarding/master-data/equipment). Pick a name and a color — the preview shows the chip drivers and dispatchers will see. Mirror the tags you already use on whiteboards.

**3. Add Service Classes**
Settings → **Service Classes** → **Create Service Class**. Service classes define the types of hauling service you offer (e.g., Hauling, Plant, Standby) and are used for rating and billing — a [rate card](/workflows/manage-rates) can be narrowed to a specific Service Class.
**4. Skip what you don't need**
None of these are required. Add only what your team will use day to day. You can come back later.
## Verify
Each panel lists the rows you added. Create a test order — the new department and service class show up as options on the order form.
## Common mistakes
> [!WARNING]
>
> **Creating a label, department, and service class for every concept.** Pick only what your team will actually use daily and skip the rest.
# Drivers
Source: https://docs.tread.ai/onboarding/master-data/drivers
Add the drivers who will receive dispatches.
## What you'll do
Add the drivers you dispatch who have their own account — Owner-Operators (O\&Os) and contract drivers.
> [!WARNING]
>
> **Internal drivers are not created here.** An employee who drives for you is a user with the **Driver** role — create them in [Users](/onboarding/master-data/users). Creating a driver on this page gives them their own account, like an O\&O. You can't convert the record yourself; contact support to remove it.
## Before you start
* A driver list with name, mobile phone, license info, and assigned truck (if any).
* An O\&O (Owner-Operator) is a driver who owns their own truck and works for you — they belong on this page.
* Employees who drive for you are internal drivers — create them in [Users](/onboarding/master-data/users) with the **Driver** role.
* Drivers belonging to a third-party hauling company are added through that [Vendor](/onboarding/master-data/vendors), not here.
## Walkthrough
**1. Open Settings → Drivers**
Click **Add Driver**.
**2. Fill in driver details**
Enter name, mobile phone, and email. Phone must be unique.
**3. Assign default equipment**
Pick the truck the driver usually runs. The driver app pre-selects it on shift start. You can override per shift. Set the unit as Internal if you own the unit or External if the driver owns the unit.
**4. Set the Ext. ID (optional)**
Paste the payroll or accounting system identifier if you settle drivers through an integration.
**5. Send the driver app invite**
The driver receives an SMS or email link to install the Tread driver app and log in.
## Verify
Settings → Drivers shows every driver in your account.
# Equipment
Source: https://docs.tread.ai/onboarding/master-data/equipment
Add the trucks and trailers that show up on tickets.
## What you'll do
Add every truck and trailer in your fleet. Share each one to the vendors that use it.
## Before you start
* [Equipment Types](/onboarding/master-data/equipment-types) set up.
* A truck list with name (the number drivers and customers see), VIN or asset ID, and assigned type.
* Decide how truck names appear on invoices and statements — that's the name customers and vendors will see.
## Walkthrough
**1. Open Settings → Equipment**
Click **Create Equipment**.
**2. Name the truck**
Use the truck number drivers paint on the door. This name prints on tickets, invoices, and settlement statements. It also matches what telematics reports.
**3. Pick the equipment type**
Capacity and UoM auto-fill from the [Equipment Type](/onboarding/master-data/equipment-types). Override only if a specific truck differs from its type's standard.
**4. Set the Ext. ID and VIN**
Paste the asset ID from your accounting or maintenance system. VIN is optional but helps with telematics matching.
**5. Share with vendors**
If a vendor runs this truck, click **Add Shared Company** and pick their company. They see the truck on their dispatch board; you keep ownership.
## Verify
Settings → Equipment shows every truck with its type, capacity, and UoM. Open a vendor and confirm shared trucks appear under their fleet.
## Common mistakes
> [!WARNING]
>
> **Naming trucks with internal codes customers won't recognize.** "EQ-00347" on an invoice triggers customer questions. Use the truck number painted on the door — what dispatch and drivers actually say.
# Equipment Types
Source: https://docs.tread.ai/onboarding/master-data/equipment-types
Set up types before equipment — capacity and UoM live here.
## What you'll do
Define the categories of equipment you run — Tri-Axle, Belly Dump, End Dump, Tractor-Trailer, etc. Capacity and unit of measure (UoM — tons, cubic yards, loads) is applied to the type, not the truck.
## Before you start
* A list of every truck and trailer category you operate.
* Standard capacity per type (e.g., 22 tons for a Tri-Axle).
* The UoM you bill in for each type.
* This page **must** be completed before [Equipment](/onboarding/master-data/equipment).
## Walkthrough
**1. Open Settings → Equipment Types**
Click **Create Equipment Type**.
**2. Name the type**
Use the name dispatchers and drivers say out loud — Tri-Axle, Belly Dump, End Dump, Tag-Along, Pup, Quad. Avoid internal codes.
**3. Set default capacity and UoM**
Capacity is the standard load this type carries. UoM is what you bill in (tons, cubic yards, loads, hours). Material tracking and ticket totals depend on these values.
**4. Repeat for every category**
One row per category. Don't create a type per truck — that's what [Equipment](/onboarding/master-data/equipment) is for.
## Verify
Settings → Equipment Types lists each category once. Capacity and UoM are populated on every row.
## Common mistakes
> [!WARNING]
>
> **Skipping types and going straight to equipment.** Without a type, a truck has no capacity or UoM. Tickets won't compute material totals, and exports to accounting drop quantity. Always set up types first.
# Materials
Source: https://docs.tread.ai/onboarding/master-data/materials
Pull from your accounting system, grouped under Material Types.
## What you'll do
Add every product you haul or sell — aggregate, sand, asphalt mixes, fill — grouped under the Material Types your business already uses.
## Before you start
* A materials export from your accounting system: name, SKU, default UoM, and accounting code.
* A list of the Material Types you group products under (e.g. Aggregate, Asphalt, Fill).
* Confirm UoM with billing — tons, cubic yards, loads. Materials and equipment must use the same UoM for ticket math to work.
## Walkthrough
**1. Add Material Types**
Settings → **Material Types** → **Create Material Type**. Group materials the way your business already thinks about them (Aggregate, Asphalt, Fill). Every Material belongs to a Material Type.
**2. Open Settings → Materials**
Click **Add Material**.
**3. Enter material details**
Name, Material Type, default UoM, and the accounting code (Ext. ID) used on invoices.
**4. Bulk import the rest**
For more than 30 materials, ask your implementation lead for the CSV template. Match the columns from your accounting export.
## Verify
Settings → Materials lists every product with its Material Type. UoM matches what your equipment types use.
## Prevailing wage
Materials don't carry their own prevailing-wage flag. [Prevailing Wage](/specialized/prevailing-wage) rates live on the rate schedule instead, and can be scoped by equipment type, material, site, or the whole project. See [Manage Rates](/workflows/manage-rates).
# Master Data Overview
Source: https://docs.tread.ai/onboarding/master-data/overview
The data sets you'll prepare, in the order they need to be uploaded.
## What you'll do
Prepare and upload nine master data sets in order. Each set unlocks the next.
## Before you start
* Confirm your [company hierarchy](/onboarding/company-hierarchy) first. All master data lives at the parent level.
* Export source data from your accounting and HR systems (drivers, customers, vendors, materials).
* Decide which records carry an Ext. ID — Tread's external identifier used to match rows back to your accounting system. Each Ext. ID must be unique within Tread and is reusable only across integrations.
## Bulk import with CSV
You don't have to type records in one at a time. Every master data grid in Settings — Users, Drivers, Customers, Vendors, Equipment Types, Equipment, Material Types, Materials, and Sites — has an **Import/Export** button that loads a whole data set from a CSV file.

**1. Download the template**
**Download Template** gives you a blank CSV with every column and example values. Open **Column Reference** in the same dialog to see which columns are required and what values each accepts.
**2. Fill it from your source export**
One row per record, straight from your accounting or HR export. Include the Ext. ID column so each row matches back to your accounting system.
**3. Upload and fix any failed rows**
**Upload CSV** (max 5MB) creates new records — or updates existing ones when the row carries the record's ID. Tread validates every row and reports failures with the reason per row. Download the failed rows, correct them, and re-upload just those.

**Export All Data** in the same dialog downloads what's already in Tread (up to 10,000 records) — useful for auditing a finished import against your source.
> [!NOTE]
>
> Historical operational data — past orders, projects, and tickets — imports through Tread's import API, not CSV upload. Your Tread contact runs these during onboarding. Developer teams can integrate directly; see the [API reference](/api-reference/introduction).
## Walkthrough
Upload in this order. Skipping ahead breaks references.
**1. Users**
Add the people who log into Tread. See [Users](/onboarding/master-data/users).
**2. Drivers**
Add the drivers who receive dispatches. See [Drivers](/onboarding/master-data/drivers).
**3. Customers**
Add who you bill. See [Customers](/onboarding/master-data/customers).
**4. Vendors**
Add the third-party haulers you dispatch to. See [Vendors](/onboarding/master-data/vendors).
**5. Equipment Types**
Set up types before equipment — capacity and unit of measure (UoM) live here. See [Equipment Types](/onboarding/master-data/equipment-types).
**6. Equipment**
Add the trucks and trailers. See [Equipment](/onboarding/master-data/equipment).
**7. Materials**
Pull from accounting. See [Materials](/onboarding/master-data/materials).
**8. Sites**
Add job sites and yards with lat/long and geofences. See [Sites](/onboarding/master-data/sites).
**9. Departments, Labels & Service Classes**
Optional categorization for reporting and dispatch flow. See [Departments, Labels & Service Classes](/onboarding/master-data/departments-labels-classes).
## Verify
Settings → each panel shows a populated list. Spot-check three rows per set against your source export, or use **Export All Data** and diff the file against your source.
## Common mistakes
> [!WARNING]
>
> **Uploading equipment before equipment types.** Capacity and UoM live on the type. Without types, material tracking and ticket calculations don't work. Always do types first.
# Sites
Source: https://docs.tread.ai/onboarding/master-data/sites
Locations with lat/long and geofences — circle or polygon.
## What you'll do
Add every yard, plant, and jobsite you dispatch to or from. Each site needs lat/long and a geofence (a virtual boundary that tells Tread when a truck arrives or leaves).
## Before you start
* A list of sites with name, address, and (if known) lat/long.
* Decide whether each site uses a circle or polygon geofence — circles are the default, polygons give tighter accuracy at large or oddly-shaped sites.
* Polygon shape data exported from another system (KML, GeoJSON) if you want to import existing boundaries.
## Walkthrough
**1. Open Sites**
Click **Create Site**.
**2. Enter the address**
Type the address. Tread reverse-geocodes it to lat/long and drops a pin on the map. Adjust the pin if the geocoded result is off.
**3. Draw or accept the geofence**
Tread defaults to a circle around the pin. Resize it if needed. To use a polygon, click **Polygon** and trace the boundary, or import a KML/GeoJSON file from your records.
**4. Tag the site type**
Mark as Plant, Yard, or Job site, etc. The type drives reporting and dispatch defaults.
**5. Add contacts (optional)**
Add a name and phone number for anyone at the site dispatchers or drivers may need to reach — a yard foreman, a gate attendant.
**6. Share with connected companies (optional)**
Toggle **Share with Connected Companies** to let a connected Customer or Vendor view and select this site — useful for a shared yard or a customer-owned pit.
**7. Save and repeat**
Sites care added once. Job sites can be added on the fly during dispatch — but pre-loading the recurring ones speeds up order entry.
## Verify
**Sites** shows every location with a geofence drawn. Open one — the map shows the pin inside the boundary. You can move the Pin anywhere you need it to be.
## Common mistakes
> [!WARNING]
>
> **Switching a site's geofence type after go-live.** Changing from circle to polygon (or vice versa) reshapes how Tread interprets historical truck arrivals and exits. Past tickets recompute against the new shape, which can shift on-site times and break reporting. Pick the right type at setup. See [Sites & Geofences](/concepts/sites-geofences).
# Users
Source: https://docs.tread.ai/onboarding/master-data/users
Add the people who will log into Tread.
## What you'll do
Add every dispatcher, billing lead, foreman, and admin who needs a Tread login.
## Before you start
* A list of users with name, email, mobile phone, and role.
* Each user needs a unique mobile phone number — Tread uses it for SMS login.
* Decide whether to invite users by email, SMS or both.
* Optional: an Ext. ID for each user if you want to match Tread back to an HRIS or accounting system.

## Walkthrough
**1. Open Settings → Users**
Click **Create User** in the top right.

**2. Fill out the user form**
Enter name, email, and mobile phone. Pick one or more roles — Company Admin, Dispatcher, Biller, Foreman, Reporting, Viewer, or Driver. See [Roles & Permissions](/concepts/roles-permissions) for what each role can do.

**3. Set the Ext. ID (optional)**
If you sync to QuickBooks, Sage, Vista, or another system, paste the matching identifier here. It must be unique across all users.
**4. Send the invite**
In the **How should we invite this user?** section, check **Email invite**, **SMS invite**, or **Don't send an invite**. The invite goes out as soon as you click **Create** — email carries a link to set a password, SMS carries a link to download the mobile app.
**5. Repeat in bulk if needed**
For more than 20 users, ask your Tread implementation lead to run a CSV import.
## Internal drivers
An internal driver — an employee who drives for your account — is a user with the **Driver** role. Create them on this page, not on the [Drivers](/onboarding/master-data/drivers) page.
After you create them, they appear under the **Internal Drivers** tab, where you can assign their default truck.

> [!WARNING]
>
> **Don't add employees on the Drivers page.** That page creates a driver with their own account — an [Owner-Operator](/onboarding/master-data/drivers). You can't convert the record yourself; contact support to remove it, then re-create the driver here.
## Verify
Settings → Users shows every person added to your account. Search by phone number returns one match per user.
## Forgot password or lost invite
### Reset a password
Users reset their own password — no admin needed.
**1. Click Forgot password? on the sign-in page**

**2. Enter the account email and click Send Reset Email**
Tread emails a link to set a new password.
> [!NOTE]
>
> Password reset applies to email sign-in only. SMS login uses a one-time code, so there is no password to reset.
> [!TIP]
>
> **If the reset link opens the website instead of a password form, sign in with the phone number on the user's record.** Tread texts a one-time code, which gets the user working without waiting on the email flow. The reverse also works — a user stuck on SMS can sign in with their email address instead.
### Resend an invite
If a user never activated their account or lost the invite, resend it.
**1. Open Settings → Users and search for the user**
Search by name, email, or phone number.
**2. Click the ⋯ menu in the Actions column**
Choose **Resend Email Invite** or **Resend SMS Invite**.

Resend options only show for users who haven't activated their account yet. For an active user, use the password reset steps above.
## Common mistakes
> [!WARNING]
>
> **Reusing a phone number across two users.** Tread treats phone numbers as unique. A duplicate blocks SMS login for both accounts. If a user needs to leave, deactivate — don't delete — to keep the number reusable.
# Vendors
Source: https://docs.tread.ai/onboarding/master-data/vendors
Add the third-party hauling companies you dispatch to.
## What you'll do
Add every Vendor — an account you send dispatches to, instead of assigning your own [Driver](/onboarding/master-data/drivers). That covers brokers, outside haulers, and Owner-Operators (O\&Os).
## Before you start
* A vendor list with company name, address, primary contact name, email, and mobile phone.
* Decide which vendors are O\&Os — an O\&O is a Vendor with a single Driver, dispatched directly as a Shared Driver.
* Vendor addresses are required if you want them to appear on PDF settlement statements.
## Walkthrough
**1. Create the account**
Open **Settings → Vendors** and click **Create Account**. The Account Type is set to **Vendor**. If the vendor already runs Tread, use **Connect** instead — see [Connected Ecosystem](/concepts/connected-ecosystem).

**2. Enter account details**
Fill in the **Account Name**, address, and — if you export to accounting — the **External ID** and **Accounting ID**. Accuracy matters here: this data prints on settlement statements and exports to accounting.
**3. Set the Company Type**
Pick **Broker**, **Contractor**, **Hauler**, **Owner Operator**, or **Producer**. Pick **Owner Operator** for a single-Driver vendor you dispatch directly — the form says it plainly: "Select O\&O to direct dispatch." Two Vendor Settings live here too: restrict the vendor's equipment options for dispatch, and [allow the vendor to split jobs](/workflows/vendor-job-splitting).

**4. Add the Primary Account Contact**
Enter the contact's name and pick an **Invite Type** (Email or SMS). If the account is connected, this contact is invited to Tread as a User — use a real email or mobile number.
**5. Share equipment they'll use**
From [Equipment](/onboarding/master-data/equipment), share each truck the vendor runs to their company. They see it, you keep ownership.
## Verify
Settings → Vendors lists every hauler with its compliance status. Open one — the account shows the contact you entered, and any shared equipment appears under their fleet.
## Common mistakes
> [!WARNING]
>
> **Adding subhauler drivers as drivers on your own roster.** Drivers who work for a vendor belong on the vendor's company, not yours. If you add them as your drivers, dispatch boards mis-attribute hours and settlements pay the wrong party.
> [!WARNING]
>
> **Can't find a company under Vendors? Check Customers.** A company you both buy from and sell to is one record with two roles, Customer and Vendor. If it only has the Customer role, it won't appear under Vendors. You can't add the second role yourself. Contact Tread support and ask them to add it. See [Connected Ecosystem](/concepts/connected-ecosystem).
> [!TIP]
>
> Vendor adoption takes about four weeks. Set expectations early and stay firm on the requirement.
# Platform Configurations
Source: https://docs.tread.ai/onboarding/platform-configurations
Set the company-wide defaults that drive geofencing, order entry, and quotes.
## What you'll do
Review the company-wide defaults on **Settings → Configuration**. Each configuration is independent — set them in any order, and change any of them later with its **Edit** button.
## Before you start
* Operations agreement on how long a truck must sit inside a [geofence](/concepts/sites-geofences) before it counts as on-site.
* A list of units of measure (UoM) you bill in.

## The configurations
### Auto Order Completion
Toggle whether Tread automatically completes active orders at 12am when their start time was before 4pm.
### Geofence Creation
The default geofence for every new [Site](/onboarding/master-data/sites): the **Auto Geofence Type** (Circle) and the **Radius (ft)**. Tread auto-creates that geofence around each Site you add. The default radius is customizable — size it to cover the whole yard or plant entrance.
### Geofence Timer
**Default Geofence Delay (seconds)** — how long a truck must stay inside a geofence before Tread marks it on-site. Start at 60 seconds; raise it for busy yards where trucks pass through.
### Date Format
The default date format for the company.
### Default Onsite Minutes
**Default Pickup Onsite (mins)** and **Default Dropoff Onsite (mins)** — the default onsite duration for new orders.
### Allowed Units of Measure
The units available when creating or editing orders — toggle on only the UoMs your billing actually uses. At least one unit must stay selected.

### Quote PDF Terms
The default terms that print on every [quote PDF](/workflows/sales-quotes). Override them on a specific project when a quote needs different terms.
## Verify
* Create a test order — only the allowed UoMs appear, and the pickup and dropoff onsite minutes prefill.
* Add a new Site — a circle geofence with your default radius appears around it.
* Open a quote's PDF — your terms print on it, and dates follow your chosen format.
## Common mistakes
> [!WARNING]
>
> **Setting Geofence Timer too low at busy yards.** A 10-second timer marks every passing truck as on-site, inflating dwell time and triggering false on-site events. Start at 60 seconds and tune down only if dispatchers report missed arrivals.
> [!WARNING]
>
> **Setting the geofence radius too small.** If the circle doesn't cover where trucks actually stop, GPS pings never land inside it and arrivals go missing. Size the radius to the real footprint of the site.
# AI Ticket Chaser
Source: https://docs.tread.ai/specialized/ai-ticket-chaser
Automatically text a driver when their load is missing a ticket, so it gets uploaded without a dispatcher following up.
Ticket Chaser closes ticket gaps without a dispatcher picking up the phone. When a load finishes without its ticket, it texts the driver directly and uploads whatever they send back.
## When to use this
Turn on Ticket Chaser for projects where drivers regularly finish a load without uploading its ticket. Scale tickets and dirt/quantity tickets are the common case. It replaces a dispatcher calling or texting the driver by hand to chase down a missing ticket.
## How it works
When a load is missing an expected ticket, Ticket Chaser texts the driver, referencing the job by its Job ID (for example, `TRD-62943`). The driver replies with the job ID and a photo of the ticket, and Ticket Chaser uploads it to the correct load, and with no dispatcher in the loop.

## Turn it on
Ticket Chaser is enabled for per account by Tread, then switched on per project.
**1. Request access**
Go to **Settings → Agents**. If Ticket Chaser isn't live yet, this shows **AI Agentic Ticket Chasing** with a **Contact Tread for More Information** button. Click it to start the enablement request with Tread.

**2. Turn on the Ticket Chaser toggle per project**
Once Tread enables Ticket Chaser for your account, each [project's](/concepts/orders-projects) order defaults shows a **Ticket Chaser** field with a **Text drivers for missing tickets** checkbox, next to the Trucks section. Check it to chase missing tickets on that project's orders. Enabling the agent for your account doesn't chase tickets on its own.

**3. Find the Driver Agent phone number**
Once ticket chasing is live, **Settings → Agents** lists the phone number(s) drivers text to upload tickets. See [Agent Configurations](/onboarding/agent-configurations) for the full Settings → Agents walkthrough, including AI Ticket Scanning and AI Reviews.
## Common pitfalls
> [!WARNING]
>
> **The account-level agent and the project toggle are two separate switches.** Enabling Ticket Chaser for your account doesn't chase tickets on any project by itself — check **Text drivers for missing tickets** on each project's order defaults too.
## Related
* [Agent Configurations](/onboarding/agent-configurations) — Settings → Agents, including AI Ticket Scanning and AI Reviews
* [Digital Tickets](/specialized/digital-tickets)
* [Tickets & Timesheets](/concepts/tickets-timesheets)
# Approve Tickets, Payables, Receivables & Settlements
Source: https://docs.tread.ai/specialized/approving-tickets-and-settlements
The full daily sequence from ticket approval through payable, receivable, and settlement creation.
This walkthrough chains the full daily sequence in one place: approve each [Ticket](/concepts/tickets-timesheets), approve the payable and receivable line items it generates, then create and send [Settlements](/concepts/settlements-driver-pay) to Customers, Vendors, and Drivers. Run the whole sequence, or jump to the section you're on.
## What you'll do
1. **Approve tickets (loads)** — verify ticket images and details, then approve each load.
2. **Approve payables and receivables** — review totals and approve line items for billing.
3. **Create and send receivable settlements** — bill Customers for the approved work.
4. **Create and send payable settlements** — pay Vendors and Drivers for the same work.
5. **Filter and manage settlements** — track what's pending, approved, or paid.
## Approve tickets (loads)
Start in the Loads view, which shows every Ticket across all Orders for the selected day.
**1. Navigate to Approve Jobs**
Go to the **Approvals** tab in the main navigation, then select **Approve Jobs**.

**2. Select the Loads view**
In the top-right corner, click the **Jobs / Loads** toggle and select **Loads**. This shows every load under every Order for the selected date.

**3. Verify and approve each load**
Work through the loads one by one:
1. Click a load to open the load drawer.
2. If a Ticket image is attached, review it for accuracy. Use the rotate control if it needs to be rotated.
3. Correct any Ticket details so the invoice will be accurate, then click **Save**.
4. Click **Approve & Next** to approve the current load and move to the next one.
Repeat until every load for the day is reviewed and approved. See [Approving Loads & Tickets](/workflow/approvals/loads) for the load-by-load reference, or [Approving Jobs](/workflow/approvals/jobs) if you approve at the job level instead.

> [!NOTE]
>
> **Approved a load with the wrong ticket or wrong Site?** Unapprove the load. Open the ticket and download its image if you will need it again. Then click the **Delete** icon, re-add the correct ticket, and approve again.
>
> A load can show as **Approved** with no ticket image. Approval applies to the load, not the picture. If a driver removed the photo after approval, the image is still in the **All Files** tab of the Order.
## Approve payables and receivables
Once loads are approved, approve the payable and receivable line items for each truck's work so settlements can be created.
**1. Switch to the Jobs view**
Click the **Jobs / Loads** toggle and select **Jobs**.

**2. Filter for approved loads**
Open **Filters** and check **Approved** under Load Approval Status, then confirm you're viewing the correct date. This narrows the list to jobs whose loads are approved and ready for payable/receivable approval.

**3. Know which columns to approve**
Focus on the **Receivables** and **Payables** columns — approve these to move settlement creation forward. The **Job Approval** column on the right approves the entire truck assignment and every Ticket/load beneath it; you don't need it to proceed with payables and receivables.

**4. Approve payables and receivables**
Review the totals for each line item. If everything looks correct, click the checkmark to approve both the Receivables and Payables columns for each row. See [Approve Payables & Receivables](/workflows/billing/approve-payables-and-receivables) for how to edit rates or add-ons before approving.

## Create and send receivable settlements
Receivable settlements bill Customers for approved work.
> [!WARNING]
>
> Approve every relevant invoice first. Settlement creation fails over unapproved line items.
**1. Open the Receivables tab**
Click the **Receivables** tab, then filter by **Approved** status. Confirm the date — the Invoices tab filters by the date of the hauling, not the settlement creation date.

**2. Create the settlement**
Choose one:
* **Manual** — check the specific invoices to include, then click **Create settlement** in the floating action bar.
* **Bulk** — click **Bulk Create Settlement**, then set a **Date Range**, optionally a specific Customer under **Specific customers**, and **Itemize settlement by: Load** to output every load and ticket number.
Click **Confirm** to generate.


**3. Review the settlement**
Open the **Settlements** tab and expand the new settlement to check equipment type, ticket numbers, and rate values. Click **Add an Add-On** for any additional charges, or **Remove** to undo one added by mistake.

Need to change a rate or quantity after the fact? Follow [Redo an Approved Settlement](/workflows/billing/redo-a-approved-settlement) — approved settlements can't be edited directly.
[Loom video player](https://www.loom.com/embed/7d49c45179d04cdab36bfac302336452)
**4. Approve and email the settlement**
1. Click **Approve** on the settlement.
2. Click **Email** to send the invoice to the Customer.
3. Click **Send** to confirm delivery.
4. Verify the email status in the status indicator and the details section below.

## Create and send payable settlements
Payable settlements pay Vendors and Drivers for the same approved work. The process mirrors receivables.
**1. Open the Payables tab**
Go to the **Payables** tab and confirm the date.

**2. Create the settlement**
Click **Bulk Create Settlement** and set:
* **Date Range** — the relevant date.
* **Create settlements for** — [Vendor](/concepts/dispatching-drivers-vendors) (sub-haulers, O\&Os) or Driver.
* **Specific vendors/drivers** — one recipient, or leave blank to settle everyone eligible.
* **Itemize settlement by** — **Load**, then click **Confirm**.
**3. Review, approve, and email**
1. Open the new settlement from the **Settlements** tab.
2. Review all details for accuracy.
3. Click **Approve**, then **Email** to send it to the Vendor or Driver.
> [!WARNING]
>
> If the email field doesn't auto-populate when you click **Email**, no email address is on file for that Vendor or Driver. Add one to their profile before you can send the settlement.
## Filter and manage settlements
In the Settlements tab, filter by **Pending**, **Approved**, **Done (Paid)**, or **Void** to track where every settlement stands. On the Invoices tab (before a settlement exists), filter by **Unapproved**, **Approved**, or **In Settlement** instead.

## Quick reference checklist
* [ ] Approvals → Approve Jobs → Loads: review each Ticket image and detail, then **Approve & Next**
* [ ] Approve Jobs → Jobs, filter by **Approved** loads
* [ ] Approve the Receivables and Payables columns for every job
* [ ] Receivables → Approved → **Create settlement** (Itemize by Load)
* [ ] Review the settlement, add any add-ons, then **Approve** and **Email**
* [ ] Payables → Approved → **Bulk Create Settlement** (Itemize by Load)
* [ ] Review, **Approve**, and **Email** payable settlements
* [ ] Confirm email delivery status for every settlement sent
## Watch the full walkthrough
[Loom video player](https://www.loom.com/embed/3f8e1e961d0c404db8139cc5a1ac9dbb)
## Related
* [Approving Loads & Tickets](/workflow/approvals/loads) — load-by-load approval reference
* [Approving Jobs](/workflow/approvals/jobs) — job-level approval reference
* [Approve Payables & Receivables](/workflows/billing/approve-payables-and-receivables) — editing rates and add-ons before approval
* [Create & Send Settlements](/workflows/billing/create-and-send-settlements) — the detailed settlement reference
* [Redo an Approved Settlement](/workflows/billing/redo-a-approved-settlement) — voiding and correcting a settlement
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — how Settlements work
# Back-Hauls & Return Runs
Source: https://docs.tread.ai/specialized/back-hauls
Haul material out and a different material back — one order per direction, one driver switching between them.
## No special setup
A back-haul is not a separate feature. It is two (or three) [orders](/concepts/orders-projects) dispatched to the same [Driver](/concepts/driver-lifecycle) — one order per direction. The driver switches jobs after each unload, so every load lands on the order that owns its material, customer, and rate.
## Example: gravel out, RAP back
A truck hauls gravel from the quarry to a job site, and reclaimed asphalt (RAP) from the job site back to the yard.
| Order | Route | Material |
| - | - | - |
| **Job A** | Quarry → Job site | Gravel |
| **Job B** | Job site → Yard | RAP |
The driver's day alternates between the two:
1. Load gravel at the quarry, unload at the job site — logged on **Job A**.
2. Switch to **Job B**. Load RAP, unload at the yard — logged on **Job B**.
3. Switch back to **Job A** and repeat until both are done.
Add a third leg the same way — it's just one more order.
## Setup
**1. Create one order per direction**
Each [order](/workflows/create-a-project) carries its own pickup, dropoff, material, customer, and [rate](/workflows/manage-rates). Job A and Job B in the example are two ordinary orders.
**2. Dispatch both to the same driver**
Both assignments appear in the driver's Assigned menu on the [Driver App](/mobile/driver-app).
**3. Driver switches jobs after each unload**
After unloading, the driver opens the other job and logs the next load there. Tickets, quantities, and pricing stay separate per order — the outbound and return legs can bill different customers.
> [!WARNING]
>
> **Log return loads on the return order, not the outbound one.** A RAP load logged on the gravel job gets the gravel job's rate and customer. If loads keep landing on the wrong job, the fix is the switch after each unload — not editing tickets later.
## Related
* [Create Project, Order & Dispatch](/workflows/create-a-project) — build each direction's order
* [Driver App](/mobile/driver-app) — how drivers see and switch between assigned jobs
* [Rates, Add-Ons & Fees](/workflows/manage-rates) — price each direction on its own order
* [Tickets & Timesheets](/concepts/tickets-timesheets) — where each leg's loads land
# Document Management & Dispatch Compliance
Source: https://docs.tread.ai/specialized/document-management
Driver and vendor docs, expiration tracking, dispatch gating.
> [!NOTE]
>
> This feature is in active development. The page below describes what it will do. Reach out to your CSM if you'd like early access.
## When to use this
Use document management when you need proof that a driver or vendor is legal to be on a job — insurance, CDL, drug-test, W-9 — and you want Tread to block dispatch when those docs lapse. Common requirement on public-works, union, and large-GC projects.
## How it works
Each driver and each vendor has a document shelf — a set of files and expiration dates. Tread tracks two things per document.
* **Status.** On file, missing, or expired.
* **Expiration date.** When the document stops counting.
When a [dispatch](/concepts/orders-projects) (assigning a driver or vendor to an order) is attempted, Tread checks the assigned party's documents against the requirements set on the [project](/concepts/orders-projects) or [order](/concepts/orders-projects). If a required doc is missing or expired, the dispatch is blocked or flagged based on your settings.
## Setup
**1. Define your document types**
In Settings → Document Types, add the document types you require (insurance, CDL, W-9, drug screen, etc.). Each gets a name and an expiration policy.
**2. Set requirements**
Pick which document types are required for drivers and which for vendors. You can also set a company-wide baseline.
**3. Choose block vs warn**
Decide whether a missing or expired doc blocks dispatch outright or just warns the dispatcher. Most teams block insurance and CDL, warn on the rest.
## Common pitfalls
> [!WARNING]
>
> **Vendor docs are owned by the vendor, not by you.** If a vendor refuses to upload, you cannot fix it from your side. Set the expectation during vendor onboarding — no docs, no dispatch.
> [!WARNING]
>
> **An expired doc blocks dispatch even if the driver is already on a job.** A doc expiring mid-shift will not pull the driver off the current load, but the next dispatch will fail. Run a weekly expiration report so you are not surprised on a Monday morning.
# Driver E-Signatures
Source: https://docs.tread.ai/specialized/driver-esignature
Capture signatures on shifts, jobs, and loads.
## When to use this
Use e-signatures when you need a sign-off as proof — for billing disputes, hours verification, or customer delivery confirmation. Most useful on time-and-material work, prevailing-wage jobs, and any customer that demands a signed manifest.
## How it works
Signatures are captured in the [Driver App](/mobile/driver-app) and attach to a load, a job, or a shift. There are two signature types.
| Signature type | Who signs | Where it lands |
| - | - | - |
| **Driver Signature** | The driver | End of shift — confirms the day's hours |
| **Dropoff Signature** | The receiver at the drop-off | A load's digital [ticket](/concepts/tickets-timesheets) — delivery proof |
Each signature is stored with the signer's name and phone, the time, and the GPS position where it was captured. Signatures show up alongside the load, job, or shift record for the office to review.
## Setup
**1. Ask Tread to turn on shift sign-off**
The end-of-shift driver signature is enabled per company by Tread — contact your Tread representative. Once on, a driver must sign to stop logging their shift, acknowledging that their hours are correct and that they were not injured during the shift.
**2. Use digital tickets for dropoff signatures**
Dropoff signatures ride along with [digital tickets](/specialized/digital-tickets). When a load uses a digital ticket, the Driver App prompts the driver to collect the receiver's signature before saving or completing the load.
**3. Brief the drivers**
Drivers will see a sign-here screen at the end of the shift and on digital-ticket loads. A 30-second walkthrough on day one prevents support tickets.
## Common pitfalls
> [!WARNING]
>
> **A signature is not an approval.** A signed shift still has to clear the office approval queue. Don't tell customers "the driver signed, so it's billable" — billing leads still review.
> [!WARNING]
>
> **Shift sign-off blocks the driver from stopping.** Once enabled, a driver cannot end their shift without signing. Tell drivers before it goes live — a driver stuck at end of day generates a support call.
# Fuel Surcharges
Source: https://docs.tread.ai/specialized/fuel-surcharges
A guide to setup Fuel Surcharges based on index prices.
## When to use this
You have fuel surcharges based on an index price (e.g. your surcharge rate depends on the latest diesel prices published on the EIA Gulf Coast Index).
Tread applies the right surcharge **automatically** once it's configured. No manual invoice edits each time fuel prices change.
## How it works
A fuel surcharge has three parts, and all three are required:
1. **Fuel Price Index** — the fuel price you're tracking. Tread includes default indexes that update every week from the U.S. Energy Information Administration (EIA), or you can create your own.
2. **Fuel Surcharge Schedule** — a table mapping fuel price tiers to a surcharge (a percentage of the freight total, a per-unit amount, or a flat amount per load).
3. **Add On** — the piece that actually attaches the schedule to an order or project so it shows up on invoices and driver pay.
## Fuel price indexes
Find indexes in **Settings → Fuel Surcharge**, on the **Fuel Surcharge Indexes** tab.
**Default indexes** — Tread has 10 default regional diesel indexes based on the US EIA. Tread automatically updates the price each week around 11am Eastern on Tuesday (Wednesday on holiday weeks).

**Custom indexes** — if you need a price the EIA doesn't publish (a supplier's rack price, a contract-specified price), create a custom index. You enter and maintain its prices yourself. See [Create a custom index](#create-a-custom-index) below.
> [!TIP]
>
> Start with a default index unless your contract names a different price source. It's one less thing to update every week.
## Setup
**1. Create a Fuel Surcharge Schedule**
In **Settings**, open **Fuel Surcharge** and stay on the **Fuel Surcharge Schedule** tab.

Click **Add Schedule**, give it a **Schedule Name**, and pick a **Fuel Price Index** .

Indexes with "EIA" are automatically updated each week.

Pick a **Rate Type**:
* **Percentage** (e.g. 1% of the freight total)
* **Per unit** (e.g. \$0.25 per ton, multiplied by the invoiced quantity)
* **Per load** (e.g. \$10 per load, multiplied by the number of loads on the invoice
Click **Create** to save the schedule.
**2. Add Surcharges**
Select the schedule and click **Add Price** to enter your surcharge rates.

You'll enter 2 values:
1. **Price** - At what fuel price should this rate be applied
2. **Surcharge** - The rate
Click the check mark to save each rate.

**Example above** - If the price of diesel reaches \$4.50 in the EIA Midwest Index, then apply a 0.5% surcharge rate.
**3. Create a Fuel Surcharge add-on**
An add-on is required to apply a Fuel Surcharge to customers or vendors/drivers if you pass-through.
1. In **Settings**, open **Add-Ons** and click **Create Add On**.
2. Enter a **Description** your team will recognize (e.g. *Fuel Surcharge – Gulf Coast*).
3. Set the **Rate Type** to **Fuel Surcharge**, then select one **Schedule**
4. Click **Create**

**4. Apply it to an order or project**
Open an order from Dispatch or Projects and scroll to **Freight Rates**. Under the Customer Rate block (or Vendor Rate, if you pass the surcharge through to a vendor), click the ••• menu, choose **Add On**, and select the fuel surcharge add-on.

You'll see add ons listed under the rates.

That's it for a default index — Tread adds each week's price for you and recalculates the surcharge on every open invoice that uses the schedule.
***
## Create a custom index
Only needed if you're not using a default index.
**1. Create the index**
In **Settings → Fuel Surcharge**, open the **Fuel Surcharge Indexes** tab. Click **Create Index** and name it (e.g. *Acme Rack Price*). Avoid names that start with "EIA" — they're easy to confuse with the default indexes, which update on their own.
**2. Add prices**
Select the index, click **Add Price**, and enter the fuel price with its date. Tread matches each job to the price entry dated closest to (without exceeding) the job's start date, so add a new entry — don't edit the old one — each time the price changes.
**3. Keep the price current**
Add a new entry every week (or on whatever cadence your surcharge schedule assumes). Tread automatically recalculates the surcharge on every invoice that uses that schedule and isn't locked — no need to touch individual orders.
## How the surcharge is calculated
Tread takes the index price dated on or before the job's start date, then applies the highest schedule rate at or below that price. With tiers at 3.50, 3.60, and 3.70, an index price of 3.65 uses the 3.60 tier.
***
## Switch a schedule to a different index
If you built your schedule on a custom index and want Tread to keep the price current for you, point the schedule at a default index. Your rates, rate type, and add-ons stay as they are.
**1. Open your schedules**
In **Settings → Fuel Surcharge**, stay on the **Fuel Surcharge Schedule** tab.
**2. Edit the schedule**
Hover over the schedule and click the pencil icon.
**3. Change the index and save**
Pick the new **Fuel Price Index** — default indexes are marked *Synced weekly from the EIA* — and click **Save**.

# Intra-Day Changes
Source: https://docs.tread.ai/specialized/intra-day-changes
When a driver or foreman needs to change the plan mid-shift.
## When to use this
Use this guide when the day goes off-plan — a driver finishes early and needs another job, a customer calls in a rush load, weather shuts a site, or the foreman moves trucks from paving to base course mid-morning. Most jobs do not run end-to-end as dispatched. Tread expects that.
## How it works
Three roles can change the plan during the shift.
**The dispatcher** edits the [order](/concepts/orders-projects) (the day's work) from the web app — reassigns trucks, adds or cancels loads, splits a job to a new site. Drivers see the change on their next push notification.
**The foreman** edits from the [Foreman App](/workflows/foreman) on the job site. Same edit rights as the dispatcher for projects they are assigned to. Useful when the office is offline or slow to respond. See [Foreman in the Field](/workflows/foreman).
**The driver** can flag a load as wait, void, or material-mismatch from the [Driver App](/mobile/driver-app). They cannot reassign themselves, but they can stop a load that is going wrong before it costs you a billing dispute.
Every change is logged. Office staff see the audit trail in the order history; billing pulls from the final state, not the original plan.
## Common pitfalls
> [!WARNING]
>
> **Splitting a job mid-shift can break geofence-based auto-end.** If the auto-end timer is tied to the original [site](/concepts/sites-geofences) (a virtual fence around a job site), moving the job to a new site mid-shift may leave the original load open. Close it manually before reassigning.
> [!WARNING]
>
> **Night shift jobs that span midnight.** Edits made after midnight on a job that started the previous day can land on the wrong calendar day. Confirm the shift date when reassigning across midnight, especially for [timesheet](/concepts/tickets-timesheets) approvals (the driver-hours record).
# Mixed Loads
Source: https://docs.tread.ai/specialized/mixed-loads
Multiple customers on a single truck — how to dispatch and bill split loads.
## When to use this
Use mixed loads when one truck carries material for two or more customers on the same trip. Common at small materials yards where a full truckload is split across nearby deliveries — three yards of stone for one customer, four for another, all on the same run.
## How it works
A mixed load is one dispatch with one truck and multiple [tickets](/concepts/tickets-timesheets) — one per customer. Tread calls this a **split load**. The split flag tells the system to record each delivery as its own ticket, with its own quantity, customer, and price.
The driver app prompts the driver to confirm each delivery as they make it. Each split records the right material, quantity, and timestamp against the right customer. Billing runs against each ticket independently — Customer A gets an invoice for their three yards, Customer B for their four.
You configure split-load support once at the platform level, then turn it on per order when needed.
## Setup
**1. Enable the split flag in platform configurations**
Settings → Platform Configurations → **Split Flag Configs**. Turn on split-load support and set the default unit of measure for splits. See [Platform Configurations](/onboarding/platform-configurations).
**2. Create the order with split enabled**
On the [order](/workflows/create-a-project), turn on **Split load**. Add each customer with their own quantity. The total must match the truck's capacity.
**3. Dispatch the truck**
Assign one driver. The [Driver App](/mobile/driver-app) shows each split as a separate stop with its own ticket and signature.
## Common pitfalls
> [!WARNING]
>
> **Splitting on a truck with no defined capacity.** Without an [Equipment Type](/onboarding/master-data/equipment-types) capacity, Tread can't validate the split totals. Set capacity on the type before running mixed loads.
## Related
* [Platform Configurations](/onboarding/platform-configurations) — split flag setup
* [Tickets & Timesheets](/concepts/tickets-timesheets) — how each split records
* [Equipment Types](/onboarding/master-data/equipment-types) — capacity drives split validation
* [Driver App](/mobile/driver-app) — driver flow for multi-stop deliveries
# Multi-Contractor Projects
Source: https://docs.tread.ai/specialized/multi-contractor-projects
One project, multiple contractors — separate billing, shared dispatch, unified reporting.
## When to use this
Use multi-contractor projects when several contractors share one job number — a highway, a subdivision, a large site — but each one bills separately. Common on public-works projects where six to eight contractors run the same job site under the same owner.
## How it works
A [project](/concepts/orders-projects) is the container for all work tied to a job number. Tread lets you attach multiple [customers](/onboarding/master-data/customers) (the contractors) to one project. Each [order](/concepts/orders-projects) (the day's work) is tagged to the customer paying for it.
Dispatch sees one project on the board. Billing splits cleanly — each contractor gets their own invoice for their own loads, with no manual sorting. Reports can roll up to the project (everything that happened on the highway) or down to the contractor (just what Contractor A owes you).
This setup also keeps the data clean for the owner. If the owner asks "who hauled what on this job?", one report pulls every contractor and every load tied to the project.
## Setup
**1. Create the project once**
Projects → New Project. Use the shared job number as the project name. Set the project [site](/onboarding/master-data/sites) to the work zone.
**2. Attach each contractor as a customer**
On the project, add each contractor under **Customers**. They must already exist in [Customers](/onboarding/master-data/customers) — invite them as [Connected Customers](/concepts/connected-ecosystem) if they're not.
**3. Tag each order to the right customer**
When you create an order under this project, pick the contractor paying for that day's work in the **Customer** dropdown. Tickets and rates flow to that contractor only.
**4. Pull the unified project report**
Reports → Projects → pick the project. The report rolls up loads, hours, and revenue across every contractor. Filter by customer to see one contractor at a time.
## Common pitfalls
> [!WARNING]
>
> **Creating a separate project per contractor.** A regional hauler tried this on a six-contractor highway job. Reporting back to the owner became a manual spreadsheet exercise. One project with multiple customers is the right model — don't split it.
> [!WARNING]
>
> **Forgetting to tag the order to the customer.** An untagged order falls back to the project default and bills the wrong contractor. Confirm the customer on every new order before dispatching.
## Related
* [Orders & Projects](/concepts/orders-projects) — project as the container, order as the day
* [Connected Ecosystem](/concepts/connected-ecosystem) — how contractors connect to your company
* [Customers](/onboarding/master-data/customers) — set up each contractor before attaching
* [Exports & Reports](/workflows/exports-reports) — pulling project-level vs customer-level data
# Multi-Entity Billing
Source: https://docs.tread.ai/specialized/multi-entity-billing
When money flows between parent, leasing, and terminal entities — set up the right shares.
## When to use this
Use multi-entity billing when your business runs through more than one legal entity and money flows between them. Common with hauling groups that have a parent company, a separate leasing entity that owns the trucks, and one or more terminal child companies that operate locally. Every load runs at the terminal but the books eventually roll up to the parent.
## How it works
Tread models each legal entity as its own [company](/concepts/companies-hierarchy) (a separately-billed business unit). The parent sits at the top. Children — leasing entity, regional terminals — sit underneath in the [company hierarchy](/onboarding/company-hierarchy).
Money flows in three steps. The terminal bills the customer. The terminal pays the leasing entity for the truck. The leasing entity rolls earnings up to the parent. Each step is a real settlement that respects the entity boundary.
Drivers are shared across the hierarchy through **company shares**. A driver employed by the leasing entity can run loads at any terminal it shares into. The driver sees one app; the back-office sees the right entity on every settlement line.
## Setup
**1. Create the parent entity**
The parent is a top-level company. Set it up first under [Company Hierarchy](/onboarding/company-hierarchy) → **New parent**. The parent owns the hierarchy but rarely bills directly.
**2. Create child entities under the parent**
Add the leasing entity and each terminal as child companies. Each one gets its own customers, vendors, and accounting connection.
**3. Share equipment from leasing into terminals**
Settings → Equipment → **Share**. The leasing entity shares its trucks into each terminal that operates them. Without the share, the terminal can't dispatch the truck.
**4. Share drivers across the hierarchy**
Settings → Drivers → **Share**. Drivers employed by one entity get shared into the entities where they run loads. See [Driver Lifecycle](/concepts/driver-lifecycle).
**5. Configure inter-entity rates**
On the leasing entity, set the rate it bills each terminal for the truck. On the parent, set the rate the leasing entity rolls up. See [Manage Rates](/workflows/manage-rates).
**6. Configure inter-entity rates**
On the leasing entity, set the rate it bills each terminal for the truck. On the parent, set the rate the leasing entity rolls up. See [Manage Rates](/concepts/rates-add-ons).
## Common pitfalls
> [!WARNING]
>
> **Setting up everything as one flat company.** A complex multi-entity hauler tried this and lost the ability to settle between entities. Books mixed, customer rates leaked across regions, and unwinding it took months.
> [!WARNING]
>
> **Forgetting to share drivers down to the terminal.** A driver employed by the leasing entity won't appear in a terminal's dispatch board until shared. The terminal will assume the driver doesn't exist.
> [!WARNING]
>
> **Mixing customer rates across entities.** Each entity sets its own rates. Confirm rate scope when copying customers between entities.
## Related
* [Companies & Hierarchy](/concepts/companies-hierarchy) — flat vs parent/child models
* [Company Hierarchy onboarding](/onboarding/company-hierarchy) — setup walkthrough
* [Driver Lifecycle](/concepts/driver-lifecycle) — sharing drivers across entities
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — settling between entities
* [Manage Rates](/concepts/rates-add-ons) — entity-scoped rate setup
# Paving & Moving Geofences
Source: https://docs.tread.ai/specialized/paving-geofences
Geofences that travel with the paver, fed by the operator's phone or by Paver Tracker.
## When to use this
Use a moving geofence when the work is linear — paving, milling, road striping — and the active drop zone shifts down the road as the day goes on. A fixed geofence at one milepost will miss every load delivered past it.
## How it works
A [geofence](/concepts/sites-geofences) (a virtual fence around a site that tells Tread when a truck has arrived or left) usually stays put. A moving geofence is tied to a piece of [equipment](/concepts/equipment) instead of to a fixed point. Wherever that equipment reports its position, the geofence follows.
Trucks crossing the moving boundary trigger the same arrive and depart events as a static [site](/concepts/sites-geofences). Tickets, on-site minutes, and load counts attach to the [order](/concepts/orders-projects) (the day's work) the same way.
## Set up a moving geofence
**1. Create the equipment**
In Settings → Equipment, add the paver or mill and name it. No special settings are needed. If it carries a telematics device, map it on the **Integrations** tab.

**2. Create the site**
Set **Geofence Type** to **Equipment**, pick the paver under **Available Equipment**, then set the **Radius**.

**3. Add inner geofences (optional)**
Under **Additional Geofences**, add a tighter circle and give it a **Tag** — Loading, Unloading, Check In, Scaling, or Ticketing. Additional geofences follow the same equipment automatically, so you only set radius and tag.
**4. Set the operator up as Foreman and Driver**
The person running the paver needs both roles. The **Driver** role is what matters for the geofence: only a Driver can clock in, and clocking in is what starts GPS. Set the paver as their primary equipment. See [Foreman](/workflows/foreman).
**5. Build the order**
Create the [order](/concepts/orders-projects) as normal and pick the moving site as the pickup or drop-off. Milling equipment is usually the pickup; the paver is usually the drop-off. Set **Geofence Delay (s)** here, not on the site.

**6. Day of: pick the equipment and start the shift**
On the **Drive** tab, the operator sets **Truck & Trailer** to the paver, then taps **Start Shift**. From that point the phone's position moves the geofence. The operator does not have to be assigned to the order.

## Feeding the position
Two sources move the same geofence. Either one works; you do not need both.
| Source | Updates | Setup |
| - | - | - |
| Operator's phone | Every few seconds while on duty | The steps above. Nothing else to turn on. |
| [Paver Tracker](/integrations/paver-tracker) | About once a minute | Tread creates the equipment, site, and geofences for you. |
The geofence moves on the live map as positions arrive — no page refresh needed. A job's route timeline replays where the geofence sat through the day, alongside truck history.
## Common pitfalls
> [!WARNING]
>
> **No clock-in, no movement.** If the operator never starts a shift, Tread falls back to that equipment's last known position from up to 12 hours earlier. With nothing in that window, the geofence is dropped from the job and no arrive or depart events fire.
> [!WARNING]
>
> **A radius that is too wide catches the staging area.** Trucks queueing 200 feet behind the paver will register as on-site, inflating wait time and load counts. Start tight; widen only if drivers report missed arrivals.
> [!NOTE]
>
> **Geofence Delay applies to the outer circle only.** The delay set on the order filters arrivals on the outer **Site** geofence. Inner geofences trigger with no delay.
> [!WARNING]
>
> **"Sync sites from telematics (PaverTracker)" is not the on switch.** That checkbox only appears when the company has a Paver Tracker fleet connected, and it is on by default. Turning it off stops Paver Tracker from moving daily sites on that order. It does nothing to a moving geofence you set up by hand.
## Related
* [Paver Tracker](/integrations/paver-tracker)
* [Sites & Geofences](/concepts/sites-geofences)
* [Equipment](/concepts/equipment)
* [Foreman](/workflows/foreman)
# Plant-to-Plant Hauls
Source: https://docs.tread.ai/specialized/plant-to-plant
Cement, RAP, and other plant-feed flows where the customer and the supplier are both in your network.
## When to use this
Use plant-to-plant when both ends of the haul are companies on Tread. Common with cement, RAP (reclaimed asphalt pavement), and other plant-feed materials — an upstream plant supplies an aggregate, you haul, and a downstream plant receives. Both plants are your customers, your vendors, or both.
## How it works
Plant-to-plant runs through the [Connected Ecosystem](/concepts/connected-ecosystem) — the Customer, Tread Customer, Vendor, and Driver connect. The downstream plant is a [Connected Customer](/concepts/connected-ecosystem) — they place orders. The upstream plant is also a Connected Customer or Vendor — they confirm the load left their site.
Because both ends are on Tread, the dispatcher doesn't chase paper. The upstream scale ticket and the downstream receiving ticket both flow to the same load. You bill the downstream plant for the haul and pay the upstream plant for the material.
The dispatcher coordinates the handoff between the upstream load-out window and the downstream receiving window.
## Setup
**1. Connect both plants**
Each plant must be a [Connected Customer](/concepts/connected-ecosystem) or Connected Vendor on your account. Send a connection invite from Settings → Customers or Settings → Vendors.
**2. Create the order**
Set the upstream plant as the **pickup site** and the downstream plant as the **delivery site**. Pick the right material for the load. See [Create Project, Order & Dispatch](/workflows/create-a-project).
**3. Coordinate the handoff**
Confirm the upstream plant's load-out window and the downstream plant's receiving hours. Mismatched windows are the most common cause of trucks waiting at gates.
## Common pitfalls
> [!WARNING]
>
> **Treating one plant as Connected and the other as a manual entry.** If only one end is on Tread, you lose half the automatic ticket flow. Connect both plants before running the haul.
> [!WARNING]
>
> **Skipping the handoff window check.** Plants run on tight schedules. A truck arriving thirty minutes after the receiving window closes wastes hours. Confirm both windows on the order.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem) — the stakeholders that connect to power plant-to-plant
* [Create Project, Order & Dispatch](/workflows/create-a-project) — order setup
* [Sites & Geofences](/concepts/sites-geofences) — geofences at each plant
* [Materials](/concepts/materials) — flagging plant-feed materials
# Prevailing Wage
Source: https://docs.tread.ai/specialized/prevailing-wage
Flag public-works projects as prevailing wage and manage PW rates, benefit credits, and overtime rules.
## When to use this
Public-works work often requires prevailing wage (PW) — a government wage determination that sets an hourly rate, fringe benefits, and overtime treatment for a jurisdiction and work classification. If a government body funds the work, PW likely applies.
## How it works
**Flag the project.** Mark a [project](/concepts/orders-projects) as prevailing wage. New orders under the project default to PW, and a PW badge shows on the project, on dispatch, and on Approve Jobs order cards — every stakeholder sees the flag.
**Set PW rates on the rate schedule.** A PW rate schedule carries the wage-determination fields: the classification name, the jurisdiction (for example, "Erie, Region 5"), the on-site PW rate, and the total fringe rate. The driver rate covers off-site and travel time. A rate schedule can apply to an equipment type, a material, specific sites, or the whole project. See [Manage Rates](/workflows/manage-rates).
**Record benefit credits.** **Settings → PW Benefits** holds your benefit catalog — health and welfare, pension, and similar. Each Driver's credit toward a benefit is recorded with an effective date. This covers [Internal Drivers and Shared Drivers](/concepts/dispatching-drivers-vendors) both.

**Apply overtime rules.** **Settings → OT Rules** defines when overtime starts (weekly and daily thresholds), the pay multiplier, how fringe is treated during overtime (straight time, premium, or reduced), and whether the rule covers PW hours only or all employer hours. The form lists common DOL schedules for reference — federal Davis-Bacon plus New York, Minnesota, and California patterns — with state-specific advanced options for NY, CA, MN, and NV.

## Common pitfalls
> [!WARNING]
>
> **Classification follows the equipment type, not the driver.** PW rates live on rate schedules that can be scoped by equipment type. The same driver can hit two classifications in one shift by switching trucks. Don't assume one driver = one rate for the day.
> [!WARNING]
>
> **The project flag doesn't set rates.** Flagging a project PW marks the work as prevailing wage — pricing still comes from the PW fields on your rate schedules. A PW project with no PW rate schedule bills at your standard rates.
# Shift Jobs (Hourly Cycling)
Source: https://docs.tread.ai/specialized/shift-jobs
Trucks that cycle between plant and lay-down crew on the clock — slurry, paving, plant-feed work.
## When to use this
Use shift jobs when trucks cycle on the clock instead of running discrete loads — slurry plants feeding a paving crew, asphalt plants feeding a lay-down operation, concrete feeding a pour. The work is time-driven, not tonnage-driven. A truck might run twelve cycles in eight hours and the customer pays for the hours, not the loads.
## How it works
A shift job is billed differently from a load-based job. Instead of one ticket per load, the truck logs hours on the shift. Tickets still record at each plant pickup so you can prove what was delivered, but pay and billing run on hours.
Tread auto-starts the dispatch from telematics. When the assigned truck enters the plant [geofence](/concepts/sites-geofences) (a virtual fence around a site), Tread starts the clock. The truck cycles between plant and job site under relaxed ticket matching — Tread doesn't reject a ticket that's missing the usual fields, because the job is hourly anyway.
At the end of the shift, the driver confirms total hours. Billing pulls hours; settlements pay the driver or vendor on hours. Material totals roll up from the cycle tickets for record-keeping.
## When to use shift jobs vs load-based dispatching
| Pattern | Use shift jobs | Use load-based dispatch |
| - | - | - |
| Pricing | Hourly | Per load or per ton |
| Truck behavior | Cycles continuously | Discrete trips with downtime |
| Ticket matching | Relaxed — cycle tickets are informational | Strict — every ticket must match an order |
| Common use | Slurry, paving, plant-feed | Aggregate delivery, dirt haul, RAP |
## Setup
**1. Set the order to shift mode**
On the [order](/workflows/create-a-project), pick **Shift** as the dispatch mode. Enter the shift start time and the rate per hour.
**2. Confirm telematics is connected**
Auto-start needs live GPS. See [Telematics](/integrations/telematics) and confirm the assigned truck's asset is matched.
**3. Set plant geofence**
The plant [site](/onboarding/master-data/sites) needs an active geofence so Tread can detect entry and start the shift. A circle geofence is fine for most plants.
**4. Dispatch the trucks**
Assign drivers to the shift. The shift starts when each truck enters the plant geofence.
## Common pitfalls
> [!WARNING]
>
> **Using shift mode without a plant geofence.** Without it, auto-start can't fire and the dispatcher has to start every truck manually. Build the geofence before the first shift, not after.
> [!WARNING]
>
> **Expecting strict ticket matching on shift jobs.** Cycle tickets are intentionally relaxed. A slurry plant feeding a paver might generate twenty tickets per shift — chasing OCR mismatches on each one wastes the dispatcher's day.
## Related
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors) — the three ways to assign a job
* [Telematics](/integrations/telematics) — required for auto-start
* [Sites & Geofences](/concepts/sites-geofences) — the plant geofence triggers the shift
* [Paving & Moving Geofences](/specialized/paving-geofences) — for the lay-down side
# Tread for Connected Customers
Source: https://docs.tread.ai/specialized/tread-for-connected-customers
Sign in, track your dispatched jobs, download tickets, and manage your team's users as a Connected Customer.
A [Connected Customer](/concepts/connected-ecosystem) — a Customer with its own Tread account — gets its own view into the work it requested: real-time truck data, tickets as they post, and reports and invoices for its own orders. This page walks through that view.
## Sign in
**1. Go to app.tread-horizon.com**
Enter your email or phone number, then your password or a login code sent by SMS.
**2. Click Sign In**

Forgot your password? Use **Reset** on the sign-in page.
## View orders and jobs
Orders your Vendors create for you show up on the **Dispatch** page.
**1. Open Dispatch, then pick a date on the Calendar**
The Orders list shows every job dispatched that day, with the Driver list on the left and summary stats — trucks, loads, and material ordered — on the right.

**2. Click a job line to see its tickets and status**
The **Overview** tab lists every ticket a driver added to the job. Click a ticket to review it. Job status updates in real time, alongside a route map showing pickup and delivery activity.

## Track trucks on the Live Map
**1. Click Live Map**
See every truck moving on your active orders.
**2. Click a truck, then View Route**
Route details include speed and time on site, alongside GPS pings as they occur.

## Download tickets
**1. Go to Approvals → Approve Jobs**
Check the box on each order you need, then click **Download Files**.

**2. Pick file categories and a format**
Choose which file categories to include — scale tickets, inspection reports, site maps — and download as **PDF** or a **Zip file**.

## Add a user
Expand your own team's access without waiting on your Tread Customer.
**1. Go to Settings → Users → Create User**
Set the new user's **Role** — for example, Company Admin. See [Roles & Permissions](/concepts/roles-permissions) for what each role can see and do.
**2. Check Send Email Invitation and Send SMS Invitation**
The new user gets a text with a login link and can download the Tread mobile app to get started.

## Common pitfalls
> [!WARNING]
>
> **Unapproving an invoice blocks your vendor's pay.** Your vendor can't re-approve an invoice you unapproved. Only you can. Until you re-approve it, the [settlement](/concepts/settlements-driver-pay) for that work won't generate. Re-approve promptly, or tell your vendor why their pay is delayed.
## Related
* [Connected Ecosystem](/concepts/connected-ecosystem)
* [Tickets & Timesheets](/concepts/tickets-timesheets)
* [Roles & Permissions](/concepts/roles-permissions)
* [Digital Tickets](/specialized/digital-tickets)
# Dispatch Jobs
Source: https://docs.tread.ai/vendor-guide/dispatch-jobs
Accept customer jobs, assign drivers, and send assignments to phones — in three steps.
From accepting a customer's job to sending it to a driver. Same flow, two surfaces.
**Mobile**
**1. Accept jobs from your customer**
**30 Second Video**
[Loom video player](https://www.loom.com/embed/6be57cec05874a1d99115ab385a452f2)
Tap **Accept All** to take every pending job at once, or tap the **▼** arrow next to a job to expand it and accept individually.


**2. Open the assignment view**
Tap the **▼** arrow next to the truck count to expand the assignment section, then tap **+ Assign** to open the driver picker.

**3. Pick a driver and send**
Search by name or truck number, tap the driver you want to assign, and tap **Send**. The driver gets a push notification immediately.


> [!NOTE]
>
> You will see the driver's location on the map as soon as they start the job.
**Web**
**1. Accept jobs from your customer**
New jobs appear with a status of **Pending Acceptance**. Click **Accept** per row or **Accept All** to take every pending job at once. Accepted jobs are ready to be assigned.

**2. Assign drivers to each job**
Click **Assign** on the job row. Use the **Driver** tab to assign one of your own drivers, or the **Vendor** tab to sub-dispatch to a hauler. Search by name or truck number, confirm the details, and click **Save Assignment**.

**3. Send assignments to drivers**
Click **Send** on a single row, or **Send All Jobs** to dispatch every pending assignment at once.

> [!WARNING]
>
> **Send All Jobs** dispatches every assignment still in pending status. Double-check the list before clicking — drivers will receive push notifications immediately.
Once sent, the driver receives a push notification and can accept and start the job from their phone.
# Welcome to Tread.
Source: https://docs.tread.ai/vendor-guide/getting-started
Everything you need to get your team running on Tread.
> [!NOTE]
>
> Prefer another format? [Read the full guide online](https://www.tread.ai/vendorguide) or [download it as a PDF](https://tread.ai/vendorguide/Tread_Vendor_Guide_June_2026.pdf).
## Why Tread
All the documentation you need for paying drivers and billing your customer, in one place.
Receive dispatches from your customers, assign drivers, track trucks in real time, and collect and process material tickets and timesheets with AI
> **Direct Dispatch Delivery**
>
> Receive dispatches directly by mobile app or SMS
> **Real Time Tracking**
>
> Track every driver. Schedule every dispatch.
> **Digital Tickets and Timesheets**
>
> Drivers add scale tickets and timesheets right from the app.
## What's in this guide
| Chapter | Who it's for | What you'll do |
| - | - | - |
| [Train Your Drivers](/vendor-guide/train-your-drivers) | Dispatchers onboarding drivers | Walk every driver through download, sign-in, and running their first dispatch |
| [Setup Trucks & Drivers](/vendor-guide/setup-trucks-and-drivers) | Admins and dispatchers | Add equipment, create driver accounts, and set up your team before dispatches go out |
| [Dispatch Jobs](/vendor-guide/dispatch-jobs) | Dispatchers | Accept customer dispatches, assign drivers, and send dispatches to phones |
| [Help & Support](/vendor-guide/help-and-support) | Everyone | Find the fastest path to an answer — chat, phone, email, or help center |
| [Quick Reference](/vendor-guide/quick-reference) | Everyone | Button legend, common menu paths, and the driver day-one checklist |
# Help & Support
Source: https://docs.tread.ai/vendor-guide/help-and-support
Four ways to get help when you need it.
> **In-app chat**
>
> Tap the chat icon at the top of the web app, or open Account on mobile. Fastest response.
> **Help Center**
>
> Search articles and step-by-step guides at [intercom.help/tread/en](https://intercom.help/tread/en).
> **Phone or text**
>
> Call or text **1-888-558-7323** during business hours.
> **Email**
>
> Send a message to [support@tread.io](mailto:support@tread.io) any time.
> [!NOTE]
>
> Your CSM is also available for onboarding questions. Reach out directly if you have their contact details.
# Quick Reference
Source: https://docs.tread.ai/vendor-guide/quick-reference
Button legend, common menu paths, and the driver day-one checklist.
## Button color legend
| Button | Color | Meaning |
| - | - | - |
| START | Green / primary | Forward / submit / save |
| ACCEPT | Green | Confirm / accept a job |
| STOP JOB | Red | End / reject / destructive action |
| VIEW | Grey | Open / view detail |
| SEND | Blue | Dispatch — mobile per-row send |
| MENU | Grey | Navigation or menu item |
## Common menu paths
| Task | Platform | Path |
| - | - | - |
| Add a truck | Web | Settings → Equipment → Create Equipment |
| Add a truck | Mobile | Account → Manage Equipment → + Add |
| Add a driver | Web | Settings → Drivers → Create Driver |
| Add a driver | Mobile | Account → Manage Contract Drivers → + Add |
| Add a dispatcher or admin | Web | Settings → Users → Create User |
| Add a dispatcher or admin | Mobile | Account → Manage Users → + Add |
## Driver day-one checklist
**1. Download the Tread app**
Go to link.tread.io/app or search "Tread" on the App Store or Google Play.
**2. Sign in with your phone number**
Enter your mobile number, then enter the 6-digit SMS code. No password needed.
**3. Allow location permissions**
Tap Allow when the app asks for location access.
**4. Confirm your name and truck appear correctly**
Check the Account tab. Contact your dispatcher if anything looks wrong.
**5. Accept your first job**
Open the Jobs tab, tap the job to review the details, then tap Accept.
# Setup Trucks & Drivers
Source: https://docs.tread.ai/vendor-guide/setup-trucks-and-drivers
Add your trucks, drivers, dispatchers, and admins before the first job goes out.
Same setup, two surfaces. Complete these steps on mobile or web — whichever is easier for your team.
> [!TIP]
>
> Assign a default truck to each driver. The truck name shows up alongside the driver every time you dispatch — fewer clicks, fewer mistakes.
**Mobile**
**1. Download and sign in**
Download the Tread app from the App Store or Google Play, or go to [link.tread.io/app](https://link.tread.io/app). Sign in using your mobile phone number and the SMS verification code.
**2. Add your trucks**
Tap **Account → Manage Equipment → + Add**. Enter the truck name and type, then tap **Save**. Repeat for each truck in your fleet.

**3. Add your drivers**
Video Guide • 30 seconds\
**Video Guide • 30 seconds**
[Loom video player](https://www.loom.com/embed/0b9453df1b5e412ab92055c0ed442a9e)
Tap **Account → Manage Contract Drivers → + Add**. Enter the driver's name and phone number. Toggle on **Send SMS invite** to send the driver a download link, then tap **Save**.

> [!NOTE]
>
> The SMS invite sends a download link directly to the driver's phone. If you skip this step, you can send the invite from the driver's profile later.
**4. Add dispatchers and admins**
Tap **Account → Manage Users → + Add**. Enter the user's name, email, and phone. Select the appropriate role — **Dispatcher** or **Admin** — and tap **Save**.

> [!NOTE]
>
> Admins can access all account settings including billing. Assign the Admin role only to team members who need that level of access.
**Web**
**1. Log in to the web app**
Go to [app.tread-horizon.com](https://app.tread-horizon.com) and sign in with your email and password.

**2. Add your trucks**
Open **Settings → Equipment → Create Equipment**. Enter the truck name and type, then click **Save**. Repeat for each truck in your fleet.

**3. Add and invite your drivers**
Go to **Settings → Drivers → Create Driver**. Fill in the driver's name and phone number. Check **Send SMS invite** so the driver receives a download link for the Tread app. Click **Save**.

> [!NOTE]
>
> If you leave the SMS invite unchecked, you can send the invite later from the driver's profile. The driver won't be able to log in until they've received and used the invite link.
**4. Assign default trucks to drivers**
In **Settings → Drivers**, click a driver's name to open their profile. Set the **Equipment** field to their default truck and click **Save**. The selected truck will pre-fill on every new assignment for this driver.

**5. Add dispatchers and admins**
Go to **Settings → Users → Create User**. Enter the user's name, email, and phone. Select **Dispatcher** (can create and send jobs) or **Admin** (full account access) and click **Save**.

## Common mistakes
> [!WARNING]
>
> **"Phone number already in use" when adding a driver.** This means the number is already on a driver record under a different company account — often the driver's own previous employer, or another vendor they've worked with. There's no self-serve way to move the record yourself. Contact support with the driver's name, phone number, and both company names, and they'll reassign it.
# Train Your Drivers
Source: https://docs.tread.ai/vendor-guide/train-your-drivers
The three things every driver needs to know on day one.
By the end of this section, every driver will have the Tread app downloaded, permissions granted, and know how to accept jobs, add scale tickets, and stop a job.
> [!TIP]
>
> Print the one-page driver guide and put it in the cab of each truck. Drivers can scan the QR code to download the app.

Scan to download the Tread app
> **Download the app**
>
> Available on App Store and Google Play. Go to [link.tread.io/app](https://link.tread.io/app) from any phone.
> **One-page driver guide**
>
> A printable reference card for the cab. Ask your CSM for the latest version.
## Step 1 — Download and sign in
> **Download the Tread app**
>
> Search for **Tread** on the App Store (iPhone) or Google Play (Android), or go to [link.tread.io/app](https://link.tread.io/app) from any phone browser.
>
> 
> **Enter your phone number**
>
> Open the app and enter your mobile number. No password required — Tread uses phone number verification only.
>
> 
> **Enter the SMS code**
>
> A 6-digit code will be sent by text message. Enter it in the app to complete sign-in.
>
> 
## Step 2 — Enable location permissions
Tread tracks driver location **only while a job is active**. No tracking occurs outside of active jobs.
**iOS**


**Android**


> [!NOTE]
>
> Drivers must allow location access for job tracking to work.
## Step 3 — Run the job
> **Accept and start**
>
> 1. Tap **Assigned** to see new job requests.
>
> 
>
> 2. Tap **Accept** to confirm you are taking the job.
>
> 
>
> 3. Tap **Start Job** when ready. Location tracking begins and the dispatcher can see you on the map.
>
> 
> **Add a scale ticket**
>
> 1. After loading, tap **Add Ticket** on the active job screen.
>
> 
>
> 2. Take a photo of the scale ticket. Tread reads it automatically and fills in the ticket number and net weight — check the fields and correct them if needed.
>
> 
>
> 3. Tap **Save**. The ticket appears immediately in the dispatcher's view.
>
> 
> **Add a ticket after the job ends**
>
> 1. If a ticket didn't get added during the job, open [**History**](/mobile/past-shifts-history), tap **Done**, then open the finished job.
>
> 
>
> 2. Scroll to **Material Tickets** and tap **Add Ticket** next to the load that's missing one. Then take a photo with **Camera** or pick one from **Gallery**.
>
> 
>
> 3. Tread reads the ticket and fills in the ticket number and quantity. Check the fields, then tap **Done**.
>
> 
> **Stop the job**
>
> 1. Tap the red **Stop Job** button when your last delivery is complete.
>
> 
>
> 2. Confirm the end-of-job prompt.
>
> 
>
> 3. Review your timesheet if applicable and tap **Submit**.
>
> 
> [!TIP]
>
> For hourly work, drivers log time directly in the app. Timesheet entry is rolling out by region — contact your CSM to confirm availability.
> **[Add a timesheet to hourly jobs](https://tread.ai/features/Add%20Timesheet%20to%20Hourly%20Jobs.pdf)**
>
> A printable, step-by-step guide for drivers: stop the job, attach a photo of the timesheet, submit, and end the shift. Download the PDF.
# Finding Work & Downloading Tickets
Source: https://docs.tread.ai/workflow/approvals/find-and-download-tickets
Narrow the Approve Jobs list, then pull ticket files out in bulk.
The Approve Jobs list holds every job for the dates you pick. Filtering and sorting get you to the right rows quickly, and a bulk download pulls their ticket files out in one file.
## Narrowing the list
The Approve Jobs page groups jobs under their [order](/concepts/orders-projects). Three controls change what you see.
**Expand and collapse.** Click an order row to open it and see the jobs underneath. Click it again to close it. The **Jobs / Loads** toggle sets which tab an order opens on, so you can land straight on loads if that is how you review.
**Filter.** The chips above the table narrow the list to work that needs attention: **Unapproved Payables**, **Unapproved Receivables**, **Duplicate Tickets**, and a third chip that reads **Unapproved Jobs** or **Unapproved Loads** depending on which tab the toggle is set to. Combine them with the date range and the search box.
**Sort.** Pick a field from the sort control, then click the arrow beside it to flip between ascending and descending. The fields are Dispatch No., Scheduled At, Created At, Company, Customer, and Order ID.

## Downloading ticket files
A [ticket](/concepts/tickets-timesheets) is the proof a load was delivered. Tread can bundle the ticket files for many jobs into a single download.
**1. Pick the jobs you want**
Check the box on each job row. A bar appears at the bottom of the screen showing how many jobs are selected.
To download everything in your current view instead, skip the checkboxes, apply a filter, and use **Bulk Download Files** at the top of the table.
**2. Open Download Files**
Click **Download Files** in the bottom bar, or **Bulk Download Files** in the toolbar.
**3. Choose which files to include**
**Scale Ticket (Internal)** is checked for you. Open **Advanced** to add Scale Ticket (External), Inspection Report, Site Map, or Other.

**4. Choose a format**
Pick **PDF** to get every ticket in one document, or **Zip file** to get the files separately. Only one format applies per download.
**5. Download**
Click **Download**. Tread shows "Preparing your files for download..." while it builds the file, then "Your files are ready" once it finishes. A wide date range takes longer.
## Common pitfalls
> [!WARNING]
>
> **Bulk Download Files switches off when rows are checked.** The toolbar button covers your whole filtered view, so it greys out the moment you check a job. Use **Download Files** in the bottom bar for checked jobs. Clear the selection to use the toolbar button again.
> [!WARNING]
>
> **The toolbar button follows your filters, not your selection.** Bulk Download Files pulls every job in the current view, and the date range at the top of the page always counts as a filter. Check that range before you use it, or you may pull far more than you meant to.
> [!NOTE]
>
> **"Too many attachments found, please add more filters."** The download covers too much. Shorten the date range, pick specific drivers, or clear some file categories, then run it again.
> [!NOTE]
>
> **"No attachments found."** The jobs you picked have no files in the categories you chose. Confirm the jobs have tickets attached, and check whether the file you want sits under **Advanced**.
## Related
* [Approving Loads & Tickets](/workflow/approvals/loads) reviews tickets one load at a time.
* [Approving Jobs](/workflow/approvals/jobs) approves work at the job level.
* [Exports, Reports & Vendor Scorecards](/workflows/exports-reports) covers scheduled exports and the report library.
# Approving Jobs
Source: https://docs.tread.ai/workflow/approvals/jobs
The **Approve Jobs** page is where you approve work at the job level. This is typically used for tonnage jobs and per-load jobs where you want to review the specific work completed rather than a driver’s full day.
## Before You Start
A job will only appear on the Approve Jobs page once two conditions are met:
* The job has been **completed**
* The order is **in progress**
If the order has not yet started or the job is still open, it will not show up in this view.
## Approving a Job
1. Navigate to **Approvals → Approve Jobs**.
2. Filter to the date and order you want to review.
3. Click into a job to verify the details. From here you can:
* Edit times if any corrections are needed.
* Click **View Route History** to see how the driver moved throughout the day based on location data.
* Review the **Timeline** for a full log of all actions taken by the driver, dispatcher, or system.
4. Once everything looks correct, click **Approve Job**.

💡 Approving a job automatically approves all loads underneath it — you do not need to approve them separately.
## Bulk Approving Jobs
To approve multiple jobs at once, select all the jobs that need to be approved and click **Bulk Approve**. This is useful at the end of the day when reviewing a full list of completed jobs.

## Unapproving Jobs and Loads
Approvals can be adjusted after the fact if needed:
* To unapprove at the **load level** while keeping the job approved, click the dropdown arrow on the job and unapprove the individual load.
To unapprove at the **job level** while keeping a load approved, you can do so independently — however, unapproving the job means you will need to re-approve the loads underneath it individually.

## Watch it
Let us show you how:
[Loom video player](https://www.loom.com/embed/7712f53b1e0f4abda767ea203c1a7e7b)
Questions? We're here to help! Contact us anytime at 1 (888) 558-7323 or email us at [support@tread.io](mailto:support@tread.io)
# Approving Loads & Tickets
Source: https://docs.tread.ai/workflow/approvals/loads
If your workflow is ticket-based and you prefer to review each load individually before approving, the **Loads** view in the Approvals page gives you full visibility into every ticket across all orders for a given day.
## Switching to the Loads View
By default, the Approvals page displays jobs. To switch to load-level approvals:
1. Navigate to **Approvals → Approve Jobs**.
2. Click the **Jobs / Loads** toggle in the top right corner and select **Loads**.
This view shows all loads for a given order, as well as loads across multiple orders for the selected day — all in one place.

## Reviewing and Approving Loads
Once in the Loads view, work through each load one by one:
1. Open a load drawer to review the details and confirm everything looks correct.
2. Choose one of the following options:
* **Approve** — Approves the current load and keeps you on the same page.
* **Approve Next** — Approves the current load and automatically moves you to the next one.
3. Loads that have not yet been completed will remain in a **pending** status and cannot be approved until they are finished.

## Bulk Approving All Loads
If everything looks correct and you want to approve all loads at once, use the **Approve All** option to approve all loads for the selected day in a single action.
## Watch it
Let us show you how:
[Loom video player](https://www.loom.com/embed/eaef3e35604e4140a7fe0c874d328825)
Questions? We're here to help! Contact us anytime at 1 (888) 558-7323 or email us at [support@tread.io](mailto:support@tread.io)
# Approving Shifts
Source: https://docs.tread.ai/workflow/approvals/shifts
The **Approve Work** page is where you approve a driver’s full day as a digital timesheet. This captures the entire shift — from when a driver starts their day to when they end it — along with all jobs completed within that shift.
## Reviewing a Shift
1. Navigate to **Approvals → Approve Work**.
2. Filter to the date you want to review.
3. Each shift entry shows the driver’s start time, end time, and all jobs completed during that shift.
4. If any times need to be corrected, click into the shift to **edit the shift times, such as Clock in time** or the times on individual jobs.
5. Once everything looks correct, click **Approve Shift**.

💡 Approving a shift automatically approves all jobs and loads underneath it — you do not need to approve them separately.
💡 How to edit Clock in time:
[Loom video player](https://www.loom.com/embed/77d6a76ae8ac4ff8ae8f5831de8e1133)
## Bulk Approving Shifts
If multiple drivers need to be approved for the same day, you can click **Approve Shift** on each driver one by one down the page. Use the date filter to make sure you are reviewing the correct day.

## Shifts Not Yet Completed
If a driver has not ended their shift, the shift will appear as incomplete and cannot be approved until it is closed.

* Only certain user roles have permission to end a shift on a driver’s behalf.
* Once the driver ends their own shift, it will appear as ready for approval.
## Watch it
Let us show you how:
[Loom video player](https://www.loom.com/embed/668fc14b50cd4e2a8e9d401d6ca8bdb3)
Questions? We're here to help! Contact us anytime at 1 (888) 558-7323 or email us at [support@tread.io](mailto:support@tread.io)
# Approve Payables & Receivables
Source: https://docs.tread.ai/workflows/billing/approve-payables-and-receivables
**Purpose:** After loads are approved, approve the payable and receivable line items for each truck's work so settlements can be created.
**When to run:** Immediately after approving completed work, for the same date. This could be either after approving tickets or hourly job times.
**Prerequisites:** All loads and/or jobs for the target date are approved.
**Next SOP:** Create & Send Settlements
***
## Step 1 — Navigate to the Job view
After all your approving all your dispatched work, navigate to the Job view by clicking the default tab labeled **Job**.

## Step 2 — Filter for approved work
Depending on how you approved work in the step before, apply one of the following filters:
1. **All Approved Loads** under **Load Approval Status** — This displays only the jobs whose loads have been approved and are now ready for payable/receivable approval.
2. **All Approved Jobs** under **Jobs Approval Status.**
Confirm you are looking at the correct date (e.g., today's date). If work approval is not a prerequisite for AR/AP then you can skip this step.

## Step 3 — Verify payables and receivables
Review the totals for each line item. You can also click into a truck's dispatch and go to the **Payables** or **Receivables** tab to see line-item detail before approving. You can make any changes to the rates, quantities or add-ons directly in this view.

## Step 4 — Approve payables and receivables invoices
If everything looks correct, click **Approve** on each row for both payables and receivables either via the approval column or on the tab view.

> **Tip — working on only Payables or only Receivables?** Skip Approve Jobs and go straight to the **Payables** or **Receivables** tab under Approvals. Those tabs show the same information as Approve Jobs but scoped to just one side, with the same editing and approval controls. Changes made there sync back to Approve Jobs and vice versa
>
> 
***
## Reference: what the approval columns mean
You will see several columns. Focus on the middle two — they control payable and receivable approvals:
* **Payables & Receivables columns (middle):** These are the ones you need to approve to move forward with settlement creation.
* **Job Approval (right column):** Approves the entire truck assignment and all tickets/loads beneath it. You **do not** need to approve this column to proceed with payables and receivables if you are only concerned with approving tickets.

***
## Done when
Every approved load for the date has its payables and receivables approved. You're ready to move on to Create & Send Settlements.
# Create & Send Settlements
Source: https://docs.tread.ai/workflows/billing/create-and-send-settlements
**Purpose:** Generate, review, and email settlements — receivables (customer invoices) and payables (vendor/driver payments).
**When to run:** After Approve Payables & Receivables is complete for the target date. Cadence is per company — can be run daily, weekly, or monthly. AR settlements can be generated on a different cadence than AP.
**Prerequisites:** All relevant payables and receivables for the date are approved. **If invoices are not approved first, settlement creation will not work.**
***
## Part A — Receivable Settlements (Customer Invoices)
### Step 1 — Navigate to the Receivables tab
Click the **Receivables** tab, then filter by **Approved** status. Verify you are viewing the correct date.
> In the **Invoices** tab, you filter by the date of the hauling. In the **Settlements** tab, you filter by the date the settlement was created.

### Step 2 — Create the settlement
You have two options:
* **Option A:** Manually select the specific dispatches you want to include, then click **Create Settlement**.
* **Option B:** Click **Bulk** **Create Settlement** directly, then configure:
* **Date Range** — Select today (or the relevant date).
* **Customer** — Choose a specific customer, or leave blank to generate several settlements across multiple customers.
* **Output By** — Select **Load** (recommended) to itemize the settlement by ticket number. Otherwise select **Job** to group by truck or by driver. This configuration can be changed even after a settlement has been created.
Click **Confirm** to generate the settlement.


### Step 3 — Review the settlement
After generating, you'll see a success message pop up with a link to your AR settlement. Click the link, or navigate directly to the **Settlements** tab. Find the newly created settlement and review all details, including:
* Equipment type (as set on the job)
* Ticket numbers
* Rate values
If you need to include additional charges for the entire settlement, click **Add an Add-On** and enter the details. If an add-on was added by mistake, click **Remove**.

### Step 4 — Approve and email
1. Click **Approve** on the settlement.
2. Click **Email** to send the invoice to the customer. You will not be able to email without approving.
> **If the email field is not auto-populated** when you click Email, there's no email address on file for that vendor/driver. Open their profile, add an email address, and try again.
3. Click **Send** to confirm delivery.
4. Verify the email status — delivery confirmation appears in the status indicator and in the details section below.

### Step 5 — Generate Settlement PDF
1. Click on the 3-dot menu to the right of the settlement row.
2. Click on Generate PDF to see your full settlement document.
3. Click on Download Files if you would also like to download any other attachments as well (ex. scale tickets)

### Step 6 — Need to make edits?
Follow the Settlement Void process in this training guide for making changes to individual rates & add-ons for each job.
***
## Part B — Payable Settlements (Vendor/Driver Payments)
The process mirrors receivables - follow the steps above for more information.
### Step 1 — Navigate to the Payables tab
Go to the **Payables** tab and confirm you are viewing the correct date.

### Step 2 — Create the payable settlement
Click **Create Settlement** and configure:
* **Date Range** — Select the relevant date.
* **Recipient Type** — Choose **Vendor** (sub-haulers, OOs) or **Driver** (internal).
* **Specific Recipient** — Select a specific vendor or driver. Leave blank to create settlements for all applicable vendors and drivers.
* **Output By** — Select your desired itemization, then click **Confirm**.

### Step 3 — Review, approve, and email
1. View the newly created payable settlement(s) in the **Settlements** tab.
2. Review all details for accuracy.
3. Click **Approve** on each settlement.
4. Click **Email** to send to the respective vendor or driver.
5. Click the 3-dot menu to **Generate** a settlement PDF.
***
## Tips
1. **Filter the Settlements view** to manage your workflow:
* **Approved** — All settlements that have been approved.
* **Unapproved** — Settlements still pending approval.
2. **Use Bulk Settlement Creation** to create several settlements for different accounts at the same time for a given date range. It generates settlements for any invoice that has been approved within that date range.
> [!WARNING]
>
> **The Settlements tab filters by the date the settlement was created, not the date the work was hauled.** A settlement you just made for last week's loads won't show under last week's dates. Set the filter to today, or to **All Dates**, to find it.
***
## Done when
Every settlement for the date — both receivable and payable — has been created, approved, emailed, and confirmed as delivered. See the Quick Reference Checklist for the end-to-end summary.
# Dynamic Rates - Project to Invoice
Source: https://docs.tread.ai/workflows/billing/dynamic-rates
Define a pricing rulebook on a project once — Tread matches the right rate to every job.
## What this solves
When pricing varies by truck, material, or site, billers end up re-keying rates on every ticket. Project Rates ends that. You define the pricing rules once on the [Project](/concepts/orders-projects). Tread then applies the right customer, vendor, and driver rate to each order and job automatically.
Each rate holds three values:
| Value | What it is |
| - | - |
| **Customer rate** | What the customer is charged |
| **Vendor rate** | What the vendor or carrier is paid |
| **Driver rate** | What your internal driver earns — can inherit the vendor rate |
> [!TIP]
>
> Check **Use vendor rate and add-ons for driver rate** to keep the driver rate in sync with the vendor rate automatically.
## How matching works
Conditions narrow when a rate applies. There are four, combinable in any mix: **Pickup [Site](/concepts/sites-geofences)**, **Dropoff Site**, **[Equipment](/concepts/equipment) Type**, and [**Material**](/concepts/materials). A rate with no conditions is the project-wide default.
Matching runs per job, once equipment is assigned. Change the truck, pickup, dropoff, or material and the rate re-evaluates. The pick order:
1. **Manual override** — never replaced by automatic matching.
2. **Starred rate** — forces one rate onto every job on the order.
3. **Most specific match** — three conditions beat two, two beat one.
4. **Project default** — the no-condition rate.
5. **Company rate cards** — account-specific first, then defaults.
## Walkthrough
**1. Open the Freight Rates panel**
Open a project. Rates appear as accordion rows — collapsed shows a summary with condition chips.

**2. Add a rate**
Click **Add another rate**. Name it clearly (e.g., *Tri-Axle Gravel from Main Quarry*). Enter the customer, vendor, and driver values, then add conditions. Duplicate a rate to clone and tweak. There is no limit on rate count.

**3. Attach add-ons or a rate card**
Use the **…** menu on a rate row to attach [add-ons](/concepts/rates-add-ons) (fuel surcharge, standby) or pull in an account rate card as a starting point. Update a rate card once and every project using it picks up the change.

**4. Check the order**
Every order form shows the project's rates. Star one rate to force it onto every job — useful for flat-rate hauls. Orders without a project can hold their own order-level rates.
**5. Rate matching and assignment**
Assign a vendor or driver, or set equipment — rates match automatically on each job row. To verify which rate card was applied, open the **Edit Rates** or **Edit Job** form.
**6. Manually override a job when needed**
Fix a single job from the **Edit Job** or **Edit Rates** form. You can change any value directly, or pick from a dropdown of the project's rates — choosing a non-matching rate flags the job as manual. Editing any of the conditions reverts it back to the system match.

## Editing and stamping
While an order is referenced to the project, rate edits can sync both ways between project and order. When an order is dereferenced, its rates are **stamped** — snapshotted and disconnected — so later project edits never change finished billing.
A rate edit can reach beyond where you make it. What's reachable:
| Edit at… | Can reach… |
| - | - |
| Project | All orders on that project |
| Order (referenced) | The project + other orders |
| Order (stamped) | That order only — its edits never reach the project |
### Steering the cascade
On every rate change to a project or a referenced order, you choose whether the change applies to existing orders within a date range. Turn on **Apply rate changes to existing orders** (or …**to the project and existing other orders** on an order) and at Submit, a dialog opens where you pick which reachable orders receive it. Stamped orders don't show the checkbox at all — their edits stay local, and the way back to following the project is through this dialog (see below).

From the Project Form:
| Turn it… | And existing orders… |
| - | - |
| Off | Keep their current rates — and are stamped, so they stop following the project. Only orders created from now on use the new rates. |
| On | You choose which orders will accept the cascade. |
From the Order Form:
| Turn it… | And the parent project & existing orders… |
| :- | :- |
| Off | Keep their current rates — the change stays on this order only, and the order is stamped. This happens on save even if you didn't change any rates: the checkbox is a direct control, and an order created with it off is stamped from the start. |
| On | You choose which reachable orders cascade, and the project always receives the update. |
The dialog defaults to orders from today onward — s**et an earlier start date to reach older orders**. If you pick a past range, it will re-price completed and in-progress loads, and it warns you before you do.
**Deselecting stamps the order.** Any order you uncheck that's still synced is automatically stamped — it keeps its current rates and stops following the project. Future rate changes won't reach it on their own, and its own edits never flow back to the project. Selecting a stamped order in this dialog re-references it: its own rates are discarded and it follows the project's rates — including this change — from then on. Stamped orders default unchecked here and show a "**Keeps its own rates**" chip, so opting back in is always deliberate.
## Rate history
Every rate change is logged. Click **Rates History** on a project card (or in the project form header) to see a timeline: who changed what, when, and the exact values. Use it to answer "why did this rate change?" without a support ticket.

## Migrating from Site Rates
Existing Site Rates were migrated automatically — no re-entry. They now appear as rates with a Pickup Site condition and match the same way as before. Layer in more conditions when ready.
## Watch it
Full walkthrough — project rates end to end:
[Project Rates — full walkthrough](https://www.loom.com/embed/3fd37e89f99f40078a706af95424dff7)
Short demo — a job auto-matching the right rate by site, material, and equipment:
[Project Rates — short demo: automatic rate matching](https://www.loom.com/embed/43377aa535134b749a54c738a0b5cc98)
## Common pitfalls
> [!WARNING]
>
> **Add-ons are replaced when the matched rate changes.** A re-match clears the old rate's add-ons and applies the new rate's. To apply an add-on universally, attach it to every rate that could match.
> [!WARNING]
>
> **Two rates with identical conditions are ambiguous** — the first-created rate wins. You can confirm which one applied in the Rates History view. To avoid this, rename one or change a condition so each rate is unique.
## FAQ
> **What happens if no project rate matches a job?**
>
> Tread falls back to your company rate cards — account-specific first, then defaults. Keep one no-condition rate on the project to guarantee a match.
> **Can I edit rates on an order without touching the project?**
>
> Not while the order is active — edits sync both ways. After completion, rates are stamped and stop syncing. Job and invoice edits never sync back.
> **Why doesn't my completed order show my latest project edits?**
>
> Completed orders hold a snapshot from when the work finished. Reopening the order keeps the stamped rates.
> **Can drivers see or edit rates on mobile?**
>
> Rates on mobile are editable, not view-only. Drivers' visibility stays gated by [Roles & Permissions](/concepts/roles-permissions). Bulk edits from the order screen act as manual overrides.
## Related
* [Manage Rates, Add-Ons & Fees](/workflows/manage-rates) — company-level rate cards, add-ons, and fuel surcharge
* [Rates, Add-Ons & Fuel Surcharges](/concepts/rates-add-ons) — how Tread models pricing
* [Orders & Projects](/concepts/orders-projects) — how Projects, Orders, and Jobs fit together
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — where matched rates land
# Payment Terms
Source: https://docs.tread.ai/workflows/billing/payment-terms
Set payment terms once so every settlement gets a due date automatically — in Tread and in QuickBooks.
Payment terms turn "when is this owed?" into a field Tread fills in for you. Pick a term on a settlement and Tread sets the due date, prints it on the settlement PDF, and carries it into QuickBooks exports.
## How it works
A payment term is a name and a number of days (for example, *Net 30*). It drives the due date on a [Settlement](/concepts/settlements-driver-pay): the settlement's created date plus the term's days. *Due on Receipt* is 0 days.
Every company gets five standard terms automatically: **Due on Receipt**, **Net 15**, **Net 30**, **Net 60**, and **Net 90**. They belong to your company like any other term — rename, edit, or deactivate them as you like.
Payment terms work with or without an accounting connection. Companies connected to [QuickBooks](/integrations/quickbooks) can also map each term to a QuickBooks term.
## Manage your payment terms
**1. Open Payment Terms**
Go to **Settings → Rates → Payment Terms**. Users who can manage rates see this page.

**2. Create a term**
Click **Create Payment Term**. Enter a **Name** and the **Due days** — a whole number of days after the settlement is created. Use 0 for due on receipt. Two active terms can't share a name.

**3. Edit or deactivate a term**
Use the **•••** menu on a row to **Edit** or **Deactivate** it. A deactivated term disappears from the settlement picker, but settlements already using it keep it. You can reactivate it any time.
## Set a company default
Go to **Settings → Configuration**, find **Default payment term**, click **Edit**, pick a term, and click **Save**. Every new settlement gets this term and its due date automatically. You can still change the term on any individual settlement.

## Pick a term on a settlement
**1. Open the settlement**
Go to **Approvals → Receivables** (or **Payables**) and switch to **Settlements**. Click the arrow on a settlement row to expand it.
**2. Choose the term**
In the **Payment Terms** card, click the pencil, then pick a term from the list.

**3. Check the due date and save**
Tread fills in **Due Date** from the settlement's created date plus the term's days. Change the date by hand if you need to — the date you type is what's saved. Click **Save**.

> [!NOTE]
>
> Once a settlement is **approved**, its payment term, due date, and notes are locked. If you void and re-bill a settlement, the new settlement keeps the same term and gets a fresh due date.
The **Due Date** prints on the settlement PDF whenever it is set. For QuickBooks-connected companies, the PDF also shows a **Payment Terms** column.
## Map terms to QuickBooks
If your company is connected to [QuickBooks](/integrations/quickbooks), open **Settings → Integrations**, click **Manage** on the **Accounting** card, click your connection, and open the **Payment terms** tab. Pick the QuickBooks term for each Tread term. Only QuickBooks terms due a fixed number of days after the invoice date can be mapped, and each QuickBooks term can back exactly one Tread term.
## Common pitfalls
* **You can't deactivate a term.** It is the company default. Change the default in **Settings → Configuration** first.
* **The due date looks too early.** Tread counts from the settlement's *created* date, not from today. Adjust the date by hand if you need a different one.
* **A settlement has no term.** Settlements created before you set a default keep working as before. Pick a term on them individually, or leave them as they are.
# Redo a Approved Settlement
Source: https://docs.tread.ai/workflows/billing/redo-a-approved-settlement
# Fix a Settlement (Void & Change)
**Purpose:** Void an settlement, correct or add missing details (such as a fuel surcharge or a rate fix), and create a new settlement to send to the customer or vendor.
**When to run:** Any time line items on a settlement is found to be incorrect or incomplete. Approved settlements cannot be edited directly — they must be voided and recreated.
**Prerequisites:** The settlement you need to fix has been created. You know what needs to change (an add-on for a single invoice, or an order-level change that should apply across all loads).
**Related:** Create & Send Settlements — the happy-path settlement workflow this is the recovery flow for.
***
## Section 1: Void the existing settlement
### Step 1 — Open the approved settlement
Go to the **Settlements** tab and locate the approved settlement you need to modify.
### Step 2 — Void it
Click **Void** on the settlement. This removes the settlement but preserves the underlying order, so you can create a new settlement with updated information.

***
## Section 2: Unapprove the receivables or payables
### Step 3 — Navigate to Receivables (or Payables)
Navigate back to the **Payables** or **Receivables** tab that you would like to make changes to.
### Step 4 — Unapprove the invoice
Click **Unapprove** under the invoice. The line items have to be unapproved before you can edit them.

***
## Section 3: Make your changes
**Pick the option that matches the scope of the change:**
* **One individual change on one job/dispatch?** Use Option A.
* **A charge or rate change that should apply across the whole order?** Use Option B.
### Option A — Edit at the individual job/dispatch level
For a one-time change on a specific invoice (e.g., a single Job-level change), edit directly in the receivables/payables view without leaving the screen.
1. Locate the line item you want to modify.
2. Click on the **pencil** icon to edit rates, quantities or add-ons.
3. Save your changes.


### Option B — Edit at the order level
For changes that apply to the entire order — such as a fuel surcharge, a rate correction, or any charge that should appear across all loads — make the change in Dispatch.
1. Copy the order number from the receivables/payables view.
2. Navigate to the **Dispatch** tab.
3. Locate and open the order.
4. Add the missing item (e.g., fuel surcharge) in the appropriate field.
5. Click **Save**, then **Submit**.
6. The change automatically applies to all invoices under that order.


### Step 5 — Verify changes applied
Return to the Receivables (or Payables) tab and confirm the changes are reflected. For example, if you added a fuel surcharge at the order level, you should now see it on all relevant loads/trucks under that order.
***
## Section 4: Re-approve and create a new settlement
### Step 6 — Approve the updated receivables/payables
With your changes in place, re-approve each invoice. This is the same approval step from the original workflow. You can bulk approve directly in the Payables or Receivables tabs.
### Step 7 — Create the new settlement
Click **Create Settlement** on the order in the Receivables/Payables view. Manual selection (vs. bulk) is the right call here since you're typically redoing one settlement, not processing many at once.
The system generates a new settlement for that order, now including your changes.

### Step 8 — Review the new settlement
Open the **Settlements** tab and the newly created settlement. Scroll down to verify all changes are present — for example, confirm the fuel surcharge appears for every applicable truck.
***
## Section 5: Approve and email the new settlement
### Step 9 — Approve
Click **Approve** on the new settlement.
### Step 10 — Email
Click **Email** to send the updated invoice to the customer or vendor, then click **Send** to confirm. Verify delivery in the status indicator.
***
## Tips
1. **Access voided settlements for reference.** If you need to look up a previous voided settlement (for record-keeping or comparison), go to the **Settlements** tab and click the **Void** filter. This displays all previously voided settlements.
2. **One settlement covering two orders? Void it, then invoice each order on its own.** A customer who worked two jobs in one day often wants one invoice per job. Go to the **Settlements** tab, open the **⋯** menu on the settlement, and click **Void**. Return to **Receivables**, select the invoices for one order, and click **Create settlement**. Repeat for the other order. Don't use **Bulk Create Settlement**, which groups the orders back together. Order numbers start with **ORD-** and appear in the **Order summary**.
3. **Choose Option A vs Option B by blast radius.** If only one invoice is affected, Option A (invoice-level add-on) is faster and lower-risk. If the change should apply to every load on the order, always use Option B (order/dispatch level) — applying it invoice-by-invoice is where mistakes happen.
***
## Done when
The corrected settlement has been approved, emailed, and confirmed delivered. The original (incorrect) settlement remains accessible under the Void filter for reference.
# Vendors: Connecting a Vendor Using Tread ID
Source: https://docs.tread.ai/workflows/connect-vendor-tread-id
Connect an external vendor to your account using their unique Tread ID.
You can quickly connect with vendors in your Tread network by using their Tread ID. This guide walks you through the process of adding a new vendor to your account.
## Permissions
Only users with the right role can connect vendors via Tread ID:
* **Admin** or **Dispatch Manager**: Can create, edit, and connect vendors using a Tread ID.
* **Dispatcher**: Can assign jobs to connected vendors but cannot create new vendor connections.
## Before you start
* The vendor must already have an active Tread account.
* Ask the vendor to share their **Tread ID** from their account settings.
## Connect the vendor
1. In the web app, go to **Settings** → **Vendors**.
2. Click **+Connect**

3. Enter the vendor's **Tread ID** in the connection field, click on Search.

4. Confirm the vendor's company name and details that populate from their Tread account, select Vendor.

5. Click **Connect**.
Once connected, the vendor appears in your vendor list and can be assigned to jobs from the dispatch board.
## Verify the connection
* Open a job and click **Assign** → **Vendor**.
* The newly connected vendor should appear in the list of available vendors.
* After you send the job, the vendor receives the assignment in their own Tread account and can sub-dispatch to their drivers.
## Troubleshooting
* **Tread ID not found**: Confirm the ID is spelled correctly and that the vendor's account is active.
* **Vendor already exists**: You may already have a manual vendor record with the same name. Merge or archive the duplicate before connecting via Tread ID.
* **Vendor doesn't see jobs**: Confirm the vendor has accepted the connection request (if prompted) and that their users have permission to view incoming dispatches.
# Create a Project - Detailed Guide
Source: https://docs.tread.ai/workflows/create-a-project
Projects are created to represent a specific scope of work for your clients to allow for proper reporting, billing, and to create orders in Tread.
Projects in Tread work like templates. Setting up your project information upfront means that details flow down automatically to each order, so you don't have to re-enter them every day.

***
To get started, navigate to the **Projects** tab in the top left corner of your screen, then click **New Project**.

***
### **Step 1: Project Details**
Fill in the following fields to set up the basics of your project:
* **Customer** — Select an existing customer account or create a new one directly from this screen.
* **Project Name** — Give your project a clear name (e.g. Taylor Stadium).
* **Department** — Assign a department if applicable (e.g., Hauling).
* **Project External ID** — Optional reference ID for your own tracking (e.g. a Job ID from an external system)
* **Dispatch Number / Order PO** — Add these if required for your workflow.
> [!TIP]
>
> **Project External ID**\
> This is a unique value which cannot be shared across projects.\
> It can be used to "link" projects together.

#### **Phase Codes**
If your project has phases:
* Click "View / Bulk Add Phases" to enter phase codes
* You can enter them one by one, or copy and paste from a spreadsheet
See [Phase Codes](/concepts/phase-codes) for how these codes follow the work to Jobs, Loads, and reports.

***
### **Step 2: Dates**
Set a **Start Date** and **Start Time** for the project. If you don't yet know the end date, you can leave that field blank and fill it in later.

***
### **Step 3: Pickup and Drop-Off Sites**
If you know your pickup and drop-off locations, you can add them here. These will default to every order created under this project, saving you from entering them each time.
#### Default Sites
Make certain sites easily visible in the order form by using default sites.
1. Select a site, then click the + button
2. Open the sites menu, you'll see a "Default Sites" list
1. Note: Pick Up and Drop Off have their own Default Sites lists

Example: In this project I set 2 Pick Up sites because we load materials from both sites
#### What the site icons mean
The map draws a marker for every site so you can confirm the route at a glance. The marker's outline tells you whether a site is set for the order or only suggested.
| Marker style | Meaning |
| - | - |
| **Dotted outline** | A **Default Site** — suggested from the project's pickup or drop-off default list, not yet set on this order |
| **Solid outline** | A **set Pickup or Drop-Off site** — locked in for this order and used for routing and [geofences](/concepts/sites-geofences) |

The icon inside the marker tells you the site's role:
| Icon | Site role |
| - | - |
| **Up arrow** | Pickup |
| **Down arrow** | Drop-off |
| **Both arrows** | Pickup and drop-off |
| **Right arrow** | Staging |
***
### **Step 4: Materials & Material Rates**
Add the material(s) you will be hauling on this project, and associated rates. Set up once, and every order under the project prices its material automatically — no re-entry each day.
For each material:
* **Material** — pick from your [materials](/onboarding/master-data/materials) list (e.g., Gravel).
* **Total Quantity** and **Unit** — the amount ordered for the whole project (e.g., 1,000 tons).
#### Material Rates: buy and sell prices per site
If you track material costs, click **+ Add Material Rate** to price the material. Each rate row holds a **Site**, a **Buy Price** (what you pay), a **Sell Price** (what you charge the customer), and a **Unit**.
The same material can carry a different price at each site — add one rate row per site with **+ Add Material Rate**:
| Site | Buy Price | Sell Price |
| - | - | - |
| Bayside Quarry | \$5/ton | \$10/ton |
| Montgomery Site | \$8/ton | \$12/ton |

**On orders:** when an order under this project uses the material with a pickup site that has a rate row, Tread applies that site's buy and sell prices automatically. Change the pickup site on the order and the prices update to match the new site's rate row.
### **Step 5: Order Defaults**
These settings will pre-fill on every order created under this project:
* **Charge to Account** — Specify the account your drivers should charge to on-site. You can set this to match your customer account or leave it blank.
* **Quantity per Day** — Enter the expected tonnage or loads per day (e.g., 100 tons/day).
* **Trucks per Order** — Set how many trucks you expect per order (e.g., 5 trucks).
* **Quantity per Truck** — Set how much each truck will carry (e.g., 20 tons).
* **Units** — Switch between per ton or per load depending on your workflow. If set to per load, you can choose between a specific requested amount or running (which allows drivers to keep making trips without a set limit).
* **Truck Type** — Select a specific truck type if required (e.g., Tri-Axle Dump Truck). This helps Tread estimate how many loads are needed to reach the daily ordered quantity and also presets values on tickets.
* **Truck Work Duration** — Optionally define how long each truck should work.

Example: Each order for this project will default an order for 5 Tri-axles doing a Running (i.e. continuous) haul between sites.
***
### **Step 6: Freight Rates and Tax**
Set rates and add ons for freight. For more info please refer to [this documentation](/workflows/billing/dynamic-rates).
* **Customer Rate** — The rate you CHARGE customers
* **Vendor Rate** — The rate you PAY vendors (e.g. brokers, haulers, OOs)
* **Driver Rate** — The rate you PAY internal drivers (i.e. company drivers)
#### Tax
You can apply a tax rate to the receivables invoice and choose which items it applies to.
1. Enter your tax rate (e.g., 8%).
2. Select whether the tax applies to freight and fuel surcharge rates, material rates, and/or add-ons.
***
### **Step 7: Contacts**
Default contacts on the order. For example set the Foreman in charge of the project.

***
### **Step 8: Attachments & Notes**
You can attach any relevant files to the project and add notes that will appear directly on the order.
Project files appear on every order in the project, and drivers see them in the driver app. To attach a file to one order only, see [Attach Files to an Order for Drivers](/workflows/order-attachments).
#### Notes
* **Project** - Visible in this Project and itsOrders
* **Order** - Visible in the order
* **Driver** - Drivers see these notes in the Driver App
* Internal - Visible in this Project and its Orders
To see which fields copy to each Order and where they show up, see [Project Fields](/concepts/project-fields).

Example: (Left) A site map is attached to the project.
# Drivers: Accept & Start Jobs
Source: https://docs.tread.ai/workflows/drivers-accept-and-start-jobs
## **Accepting and Starting your Jobs in Tread**
Your Job assignments are in the **Assigned** menu. To accept jobs:
1. Tap on **VIEW** **REQUEST**
2. Tap on **ACCEPT**
3. Tap on **START**

# Review and approve timesheets (for a job)
Source: https://docs.tread.ai/workflows/drivers-add-timesheets
Drivers report their hours for a Tread Job. Your team reviews, adjusts and approves.
> ****Coming Soon****
>
> This flow is coming soon!
# Flow Summary
**For jobs with a Per Hour driver or vendor rate.**
1. Drivers complete a Tread job
2. Driver add a picture of their timesheet. Tread scans it and fills in the start, end, total hours and timesheet number.
3. Back office reviews, adjusts and approves in Hours. Approved hours are the billable hours.
4. Driver cannot edit timesheet once approved.
# Driver Adds a Timesheet and Hours on the Mobile App
> **[Add a timesheet to hourly jobs](https://tread.ai/features/Add%20Timesheet%20to%20Hourly%20Jobs.pdf)**
>
> A printable, step-by-step guide for drivers: stop the job, attach a photo of the timesheet, submit, and end the shift. Download the PDF.
## 1. Add a timesheet and hours
If the pay rate type is **PER HOUR**, drivers see a card to add timesheet and times.
1. Press the "ADD TIMESHEET & HOURS button
1. This can be found in the job screen, job review screen and past job screen in History
2. Add a timesheet
3. Tread will scan it, then review the scanned data and Save
4. Stop the job

# Back Office Review and Approval
The biller or company admin reviews the timesheet and times submitted by the driver.
## 1. Navigate to Approvals / Approve Jobs

### 2. Review Timesheet
Open a job. In the Job Summary you will see hours and the timesheet. The default times are based on driver actions, when they started and stopped the job on the mobile app.
* Click the timesheet to view it
* Click "Use Timesheet Times" to set the reported timesheet times as the job's billable times

### 3. Adjust Hours
Click the "Edit" button to adjust times. This will **not** change the timesheet data. The hours saved in this form are the billable hours.

> ****Tread separates timesheet times and billing times****
>
> * We consider timesheet times as what's reported by the driver or field
> * Billing times are separate
>
> *There is a customization which allows drivers to set the billable times. This is an opt-in feature.*
### 4. Review payable or receivable
Once you save these hours, the billable quantity in the payable or receivable will be updated.

### 5. Approve hours
Click the Approve button to approve the hours and all loads. This will stamp "Billing" approval.

Once approved, the driver cannot edit the timesheet.

> [!TIP]
>
> ### **Timesheets should go in Tread as a Timesheet**
>
> This helps maintain clear billable data.
>
> * Material tickets should be added as Tickets (loads)
> * Timesheets are added as timesheets
***
## Add a timesheet to a completed job
Drivers can add timesheets and material tickets to past jobs.
### 1. Open the job from History
Tap **History** in the bottom bar:
* Completed jobs are under **Done**. Jobs waiting on review are under **In Review**
* Tap the job to open it

### 2. Add the timesheet and times
**You'll see the job's info**, including the order name, dispatch number, customer and project.
Add the timesheet and hours in the "Times" section by tapping EDIT or the ADD TIMESHEET button.

### 3. (Optional) Add other files and images as Attachments
Scroll down, past the Material Tickets, to the **Attachments** section. Press ADD ATTACHMENT to include other files/images to this Tread job.
For example if you drivers have a secondary timesheet for the entire week, this can be added here.


## Tips
> [!TIP]
>
> You can add a timesheet after the job ends. Completed jobs stay under **History** → **Done**.
## Related
* [Drivers: Accept & Start Jobs](/workflows/drivers-accept-and-start-jobs)
* [Drivers: Attach Files to an Order](/workflows/order-attachments)
* [Tickets & Timesheets (per Shift or Hourly)](/concepts/tickets-timesheets)
* [Driver guide: Add a timesheet to hourly jobs (PDF)](https://tread.ai/features/Add%20Timesheet%20to%20Hourly%20Jobs.pdf)
# Exports & Reports
Source: https://docs.tread.ai/workflows/exports-reports
Get the data out — to your accounting system, to ops dashboards, to your team.
## What this solves
Tread is the system of record for dispatch, tickets, hours, and billing — but the rest of your business runs on accounting, ops dashboards, and weekly leadership reports. If getting data out takes a developer or a CSV-and-pivot-table afternoon, you stop looking at it. This workflow covers the two ways data leaves Tread: on-demand reports for ops, and settlement exports to your accounting system.
## Walkthrough
**1. Open Reports**
Go to **Reports**. The library is grouped into categories set up for your account. Tread comes with standard reports and can configure custom reports for you. Each report runs against live data. If you do not have access to Reports, please contact [support@tread.io](mailto:support@tread.io) or send us a message from the in-app chat at the top of the page.
**2. Run a report**
Pick a report, set the date range and filters (customer, project, [department](/onboarding/master-data/departments-labels-classes), driver), and run. Results render in-page with a download button for CSV or PDF. Large reports can take a few minutes to render — the download options appear once the report finishes loading.
**3. Import to your accounting system**
For invoices and bills, we can build export reports for you that can be used as imports into your accounting system of record.
## Download settings
Use these settings when downloading a report. They prevent the most common formatting surprises.
**CSV** — enable both options:
| Option | Why |
| - | - |
| Apply data formatting (rounding, special characters, etc.) | Values match what the results table shows |
| Keep hidden columns hidden | The file matches the report layout |
**PDF** — use these settings:
| Setting | Value |
| - | - |
| Paper Size | Legal |
| Orientation | Landscape |
| Expand tables | On |
| Show filter values | On |
Legal + Landscape gives wide tables the most room and minimizes column cutoffs. A report with many columns can still truncate — that is a PDF rendering limit. When it does, download the CSV instead.
> [!WARNING]
>
> **Avoid the Excel (.xlsx/.xls) download.** The Excel export is a static data dump — it writes the displayed values, not the underlying calculations or formulas. This is a platform limitation. Use CSV and apply formulas in your own workbook.
## Watch it
## Common pitfalls
> [!NOTE]
>
> **A blank report page usually means it is still loading, not broken.** Reports run against live data, and a large report or wide date range can take several minutes to render. Changing any filter re-runs the report, so the wait starts over. Let it load — the download options appear when it finishes. If an error shows instead, reload the page and run the report again; if the error repeats, contact support with a screenshot.
> [!WARNING]
>
> **Filter scope changes the answer.** Running a report without a department or company filter on a multi-region account returns rolled-up totals that don't match what your regional billing lead expects. Always set the department or [company](/concepts/companies-hierarchy) filter to match the audience for the export.
> [!NOTE]
>
> **A report or export missing expected line items usually means a configuration issue, not missing data.** If an accounting export leaves out fuel surcharges, or groups invoices differently than you expect, check the report's column and grouping settings first. If those look right and the numbers still don't match, contact support with the report name and date range.
> [!NOTE]
>
> **An export doesn't match the filters you set on screen.** If a downloaded CSV, PDF or Excel file includes rows you filtered out, contact support. Include the page or report name, the filters you set and the file you downloaded.
## Related
* [Generate Settlements & Driver Pay](/concepts/settlements-driver-pay) — what feeds the accounting export.
* [QuickBooks integration](/integrations/quickbooks) — and other accounting destinations.
* [HCSS HeavyJob](/integrations/hcss) — bidirectional job and timecard sync.
* [Roles & Permissions](/concepts/roles-permissions) — who can run and share reports.
# Foreman: Run the Day from the Jobsite
Source: https://docs.tread.ai/workflows/foreman
Create orders, dispatch trucks, track progress live, and approve work — all from the Foreman App.
A foreman runs the whole day from a phone: create the [order](/concepts/orders-projects), dispatch trucks, watch every load on a live map, and approve work at the end of shift. The office sees the same data in real time — fewer status calls, and billing starts from hours the foreman already approved.
## Set up a foreman
**1. Assign the Foreman role**
In Settings → Users, give the user the Foreman role. This unlocks order creation and approval permissions on mobile. See [Adding Users](/onboarding/master-data/users).
**2. Add the foreman to the project**
On the [project](/concepts/orders-projects), add the foreman as a project contact. Only projects they're assigned to show up on their device.
**3. Install the app**
Foremen use the same Tread app as [Drivers](/mobile/driver-app), signed in with their own credentials. The bottom tabs are **Assigned**, **Review**, **Live Map**, and **Account** — plus **Dispatch** when their role includes dispatch access.
## Create an order
**1. Open the order form**
On the **Assigned** tab, tap **+ NEW ORDER**. Pick an [order type](/workflows/order-types): Trucking (request a number of trucks), Equipment Moves (heavy equipment haul), or Service (a single truck for a service like water or fuel).
**2. Fill in the form and create**
Key fields: **Project**, **Customer** (the account charged for the order), **Pick Up / Drop Off**, and **Unit** — Truck, Ton, or Load. Tap **CREATE**.

Tap NEW ORDER (1), fill the form, then tap CREATE (2)
**3. Dispatch accepts or rejects the request**
Orders from a foreman start in a **Pending** state and require dispatcher review. Dispatchers find the request on the web in the **External** tab, where they Accept, Reject, or Cancel it.

If the request is rejected, the foreman sees the rejection and its reason. If it's accepted, the foreman sees the assigned Drivers and [Vendors](/concepts/connected-ecosystem) (an account you send dispatches to, instead of assigning your own Driver).

## Copy an order
Repeat yesterday's work without retyping the form. On an order card, tap **••• ACTIONS**, then pick one:
* **Duplicate Order** — set the start date and truck count, keep or clear the job assignments, tap **CONFIRM**.
* **Copy & Edit Order** — opens the full order form pre-filled with the source order's details. Update anything, then tap **SAVE**.

ACTIONS (1) opens the Duplicate / Copy & Edit sheet (2)

Duplicate Order: set the start date (2), then CONFIRM (3)

Copy & Edit Order: review the pre-filled form (1), then SAVE (2)
## Assign drivers
When the foreman's role includes dispatch access, the **Dispatch** tab assigns trucks right from the jobsite.
**1. Expand the order's trucks**
Tap the down arrow next to the truck count (1) to see each truck slot, then tap **+ ASSIGN** (2).

**2. Pick a driver and send**
Search by name or truck number on the **Drivers** tab (or hand the job to a **Vendor**). Tap **SEND** — the [Driver](/concepts/dispatching-drivers-vendors) gets a notification and can accept and start the job in the app.

## Track the day in real time
### Order card
On the **Assigned** tab, tap the down arrow on an order card (1) to see live counts (2): trucks driving, loads delivered, and units against the order total — plus each truck's current status.

### Order detail
Tap an order to open it. Tabs across the top: **Jobs** (each dispatch on the order), **Loads**, **Metrics**, **Details**, and **Map**.

### Metrics tab
The **Metrics** tab has two views: **Performance** and **Trucks**.
**Performance** shows progress against the order goal — units shipped versus ordered, delivered / in-transit / remaining loads, first ticket and first drop times, units per hour (shipped and delivered), onsite time at pickup and dropoff, cycle time, and cost per unit.

The metrics icon on the order card (1) opens Performance: goal progress (2) and active trucks (3)
**Trucks** lists every truck on the order with its current status (1) — To Pickup, At Pickup, To Dropoff, At Dropoff — its cycle time (2), an idle flag when a truck sits too long, and a connectivity indicator (3) that confirms the driver's GPS is reporting.

The **Loads** tab lists the order's [tickets](/concepts/tickets-timesheets) (proof of load delivered) with delivered totals and cycle averages, so arriving loads can be checked against what was expected.
### Map and Live Map
The order **Map** tab shows pickup and dropoff sites and every truck sharing GPS. Tap a truck (1) to see the driver and truck details with **Call** and **Send Text** (2), plus delivered totals, idle and cycle times, and GPS status (3).


SEE ALL JOBS (1) also jumps to the order Map (2)
The **Live Map** tab in the bottom bar shows the same live truck view across all of the foreman's orders.
## Approve work
**1. Open the Review tab**
The **Review** tab lists each day's jobs (and their loads) for orders assigned to the foreman. Tap **APPROVE** on a completed job, or tap the job to check it first.

**2. Review hours, loads, and tickets**
The job detail shows total hours with scheduled start, start, and end times (2), the linked timesheet (3), delivered totals, and each ticket. Tap **APPROVE** when it matches the day.

**3. The office sees the approval**
Company Admins and Billers see the foreman's sign-off as the **Field** approval in Approvals → Approve Work on the web. Billing pulls from the same approved data.

> [!TIP]
>
> Approve daily, not weekly. End-of-shift approvals keep details fresh and shorten the billing cycle.
## Common pitfalls
> [!WARNING]
>
> **Foreman orders skip dispatch creation, not dispatch review.** The office sees requests appear without warning — set notifications so dispatchers catch new foreman orders quickly.
> [!WARNING]
>
> **Field-first approvals take a few weeks to stick.** A multi-entity hauler saw about four weeks of resistance from drivers and subhaulers before end-of-shift approvals became routine. Stay firm on the workflow during the transition.
## Related
* [Create a Project, Order, and Dispatch](/workflows/create-a-project)
* [Order Types](/workflows/order-types)
* [Intra-Day Changes](/specialized/intra-day-changes)
* [Driver App](/mobile/driver-app)
# How Rate Changes Flow Through Tread
Source: https://docs.tread.ai/workflows/how-rate-changes-flow
*A simple guide to how rate changes cascade between projects, orders, jobs, invoices, and settlements.*
## The big picture
In Tread, rates flow downhill: **Project → Order → Job → Invoice → Settlement**. You set rates once at the top, and they automatically carry through to everything below. Three rules explain almost all of the behavior:
1. **Rates flow down automatically.** A change at a higher level updates everything below it that's still active.
2. **Connected items stay in sync.** Referenced orders, jobs, and unapproved invoices all receive rate changes.
3. **Disconnected items are locked.** De-referenced orders and approved invoices keep the rates they had — later changes won't touch them automatically.

## Projects and orders
Every order starts out **referenced** — linked to its project. While referenced, rates sync both ways: project rate changes flow down to all referenced orders, and rate changes on a referenced order push back up to the project (and out to its other referenced orders).
Whenever you change rates on the project or an order, you choose which orders the change applies to. Order status doesn't matter — active or completed orders can both receive changes. Orders you select stay referenced; orders you skip become **de-referenced**.
De-referenced orders keep their own rates and stop syncing. You can edit their rates individually without affecting the project. You can still push project rates to a de-referenced order later, but that's a one-time update that restamps its rates — it doesn't re-link the order.
Duplicating or copy-and-editing any order always pulls the latest rates from its project.
## Orders and jobs
Order rates always flow down to jobs — every job stays current with its order.
You can manually adjust rates on an individual job, and that override sticks. However, if the order's rates, material, pickup site, dropoff site, or equipment type change, rates are re-matched across all jobs and any manual overrides are replaced.
## Jobs and invoices
Job rate changes flow down to **unapproved** invoices, and rate changes made on an unapproved invoice push back up to the job. Add-ons flow down from the job to the invoice, but add-on changes made on the invoice stay on the invoice.
**Approving an invoice locks its rates.** No further changes reach it while it's approved. If you unapprove an invoice, it immediately catches up with any changes made to the job in the meantime.
## Invoices and settlements
A settlement mirrors its approved invoice — line items and rates can't be edited directly on the settlement. You can add settlement add-ons, which stay on the settlement only.
To change a line item that's already on a settlement:
1. Void the settlement
2. Unapprove the invoice
3. Make your changes (on the invoice, job, order, or project — as far upstream as needed)
4. Re-approve the invoice
5. Regenerate the settlement
## Quick reference
| Level | Receives changes when… | Locked when… |
| - | - | - |
| Order | Referenced to its project (any status) | De-referenced (skipped during a rate change) |
| Job | Always | Never (manual overrides last until a rate re-match) |
| Invoice | Unapproved | Approved |
| Settlement | Regenerated from a re-approved invoice | Always (edit upstream instead) |
## Common pitfalls
> [!WARNING]
>
> **The order pulled no rate? It was probably skipped when the rate was set.** When you change a project rate, Tread asks which orders to apply it to. Skip an order and it goes independent — it stops syncing with the project. Open the order and set the rate on it directly, or re-apply the project rate as a one-time push.
> [!WARNING]
>
> **A manual job rate vanished after an edit.** Changing an order's material, pickup site, dropoff site, or equipment type re-matches rates across every job. The re-match replaces any manual rate you set on a job. Re-enter the override after the change, not before.
> [!NOTE]
>
> **No rate at all usually means no rate matches.** A rate matches on a material and a route. If the project has no rate for that material, or for that pickup-and-dropoff pair, the order has nothing to pull. Add the rate to the project, then re-apply it to the order.
## Related
* [Manage Rates, Add-Ons & Fees](/workflows/manage-rates) — where project rates are set.
* [Dynamic Rates](/workflows/dynamic-rates) — rates that change by date or index.
* [Settlements & Driver Pay](/concepts/settlements-driver-pay) — where locked rates land.
# Drivers: Attach Files to an Order
Source: https://docs.tread.ai/workflows/order-attachments
Add a route map or PDF to an order so every driver on it can open the file in the driver app.
Attach the route to the order and every driver on it opens the same file on their phone. No texting PDFs, no calls asking which gate to use.
[Add route attachments for drivers](https://www.loom.com/embed/cb9a8c81673e4af396921a94fcc69155)
## Attach the file
Files live under **Other Items** on the [order](/concepts/orders-projects) form. An order is one day of work inside a project.
**1. Open the order and click Edit**
**2. Scroll to Other Items and click Add Other Items**
Tread accepts PDF, PNG, and JPG files up to 10 MB.
**3. Pick the file**
The file uploads as soon as you select it.
**4. Set the Category and Description, then click Confirm**
**Category** is required. Pick from Inspection Report, Site Map, Scale Ticket (External), Scale Ticket (Internal), Timesheet, or Other. A route map goes under **Site Map**.
**Description** is free text and optional. Drivers see it next to the file name, so use it — "Route" or "North gate entry" tells a driver what they are opening.
**5. Click Submit**
Submit saves the order. The attachment is now available to drivers.
## What the driver sees
The driver opens the dispatch in the [driver app](/mobile/driver-app) and scrolls to **Attachments**. Tapping a row opens the file.

Attachments on the order, on its project, and on the driver's own job all appear in that one list.
## Common pitfalls
> [!WARNING]
>
> **Confirm is not save.** Confirm only stages the category and description in the form. Nothing is stored until you click **Submit** on the order. The **Confirm** button stays disabled until you pick a category.
> [!WARNING]
>
> **Every driver on the order sees every attachment.** There is no per-file visibility setting. Never attach a rate sheet or anything with pricing — keep pricing in the rate card record. See [Rates, Add-Ons & Fuel Surcharges](/concepts/rates-add-ons) and [Common Setup Mistakes](/resources/common-mistakes).
> [!TIP]
>
> Attaching the same route every day? Put it on the project instead of the order. Project files show on every order in that project, read-only, and drivers see them in the same **Attachments** list. See Step 8 of [Create a Project](/workflows/create-a-project).
## Related
* [Create a Project - Detailed Guide](/workflows/create-a-project)
* [Orders & Projects](/concepts/orders-projects)
* [Driver App](/mobile/driver-app)
# Common Types of Orders
Source: https://docs.tread.ai/workflows/order-types
A guide on setting up common types of orders in Tread.
# Running
> **Example Case**
>
> ### I need 5 trucks to continuously deliver loads between Site A and Site B.
**How to set it up:**
1. In the **Trucks** section of the form, set **Units** to **Load.**
2. Leave **Quantity** empty
3. Check the **Running** box

**How this looks on web and mobile**
> [!TIP]
>
> On mobile, loads will be automatically added each time a driver completes a load.

***
# Running with Target
> **Example Case**
>
> ### I need 5 trucks to target 5 loads, but continue delivering loads after delivering 5 loads.
**How to set it up:**
1. In the **Trucks** section of the form, set **Units** to **Load**
2. Set a quantity per truck (e.g. 5)
3. Check the **Running** box
**Example below**
This is an order for 2 trucks. Each truck should target 5 loads, and continue delivering after 5 loads are delivered.

**How this looks on web and mobile**

***
# Loads Order
> **Example Case**
>
> ### I need 2 trucks to each deliver 5 loads.
**How to set it up:**
1. In the **Trucks** section of the form, set **Units** to **Load.**
2. Set a quantity (per truck).
3. Keep the **Running** unchecked.
**Example below**
This is an order for 2 trucks. Each truck should deliver 5 loads.

**How this looks on web and mobile**
> [!TIP]
>
> On mobile - when the driver reaches 5 delivered loads, the job will automatically stop.

***
# Tonnage
> **Example Case**
>
> ### A customer ordered 400 tons of sand. I want 4 trucks to deliver 100 tons each.
**How to set it up:**
1. In the **Trucks** section of the form, set **Units** to **Ton**
2. Enter the total tonnage per truck (e.g. 100)
**Example below**
This is an order for 2 trucks. Each truck should deliver 100 tons.

**How this looks on web and mobile**
> [!TIP]
>
> Drivers need to stop the job when they reach their target tonnage. It will not automatically end.

***
## Related
* [Create a Project - Detailed Guide](/workflows/create-a-project) — where Order Defaults are set
* [Orders & Projects](/concepts/orders-projects) — how orders fit into the bigger picture
* [Tickets & Timesheets](/concepts/tickets-timesheets) — how load counts and tonnage are captured
# Sales Quotes
Source: https://docs.tread.ai/workflows/sales-quotes
Quote a job, share pricing, and convert straight to a project — no re-entry.
## How it works
A quote is a [Project](/concepts/orders-projects) in the **Quoted** state. You build it the same way you'd build any project — customer, site, equipment, materials — then generate a PDF to share instead of dispatching it right away. When the customer accepts, that same project moves to Active and runs as live work. Nothing gets recreated.

**1. Start the project as a Draft**
Click **New Quote** and fill out the project like you normally would. It saves as a **Draft** — a draft never dispatches or bills, so it's safe to build out while you're still pricing the job.

**2. Price it from Project Rates**
Rates set up under [Project Rates](/workflows/project-rates) — by lane, equipment type, and material — carry straight onto the quote. You don't re-enter pricing by hand.
**3. Move it to Quoted**
Click the project's state chip and choose **Mark as Quoted** once it's ready to share with the customer. This is the same record moving to a new state, not a copy.

**4. Generate the quote PDF**
Open the project's action menu and choose **View PDF**. Tread builds the PDF in your browser with your line items, rates, and quote terms already on it.


**5. Send it to your customer**
Download the PDF and send it however you send quotes today — email, print, whatever your process is. Tread doesn't email it to the customer for you yet; see Limitations below.
**6. Close it out**
If the customer accepts, activate the project — it starts running as live work with the same data, no re-entry. If they decline, mark it **Lost**.

## Quote states
| State | What it means |
| - | - |
| Draft | Still being built. Nothing has been shared. |
| Quoted | Shared with the customer, waiting on a decision. |
| Lost | Customer declined. There's no reason-tracking field yet — if you need to know why quotes are lost, track it outside Tread for now. |
| Active | Accepted. Runs as a live project — [orders and dispatch](/workflows/create-a-project) continue from here. |
## Quote terms
Set default terms once under **Settings → Configuration**. Every quote uses them unless you override the terms on that specific project. The PDF renders your terms and an acceptance signature block.
## Limitations
* **No email-send from Tread yet.** Download the PDF and send it yourself — in-app send-to-customer is planned but not live.
* **Line-item pricing only.** The PDF shows rates by lane, equipment type, and material. There's no single blended "delivered price" line if that's how you price a job.
* **No digital acceptance.** A customer can't accept by clicking a link in an email. Activate the quote in Tread yourself once they've said yes.
## Related
* [Project Rates](/workflows/project-rates) — the pricing a quote pulls from.
* [Create a Project, Order, and Dispatch](/workflows/create-a-project) — what happens once a quote goes active.
* [Orders & Projects](/concepts/orders-projects) — the data model a quote lives inside.
# Text Drivers (SMS)
Source: https://docs.tread.ai/workflows/text-drivers
Send an SMS to one Driver or to every Driver on an order from the Dispatch page.
Text a [Driver](/concepts/driver-lifecycle) straight from the dispatch they are working on. The message lands on their phone as a regular text, tagged with the Job ID, so the Driver knows which dispatch it's about.
## What Drivers receive
Tread sends each text as an SMS to the phone number on the Driver's profile. Every text starts with your company name and the Job ID:
```text theme={null}
Acme Hauling TRD-104233: Gate 3 is closed. Use the north entrance.
```
The Driver doesn't need the Tread app open to get it.
| Action | Sends | Use it to |
| - | - | - |
| **Send Text** / **Text All Drivers** | An SMS to the Driver's phone | Reach a Driver fast, even outside the app |
| **Message driver** / **Message all drivers** | An in-app message | Keep a conversation in Tread. See [Messages & Broadcasts](/mobile/messaging) |
## Text one Driver
**1. Find the job**
On the **Dispatch** page, find the [order](/concepts/orders-projects) and expand it to see its jobs.
**2. Open the job's actions menu**
Click the actions menu (**⋯**) on the job row, then click **Send Text**.
**3. Write and send**
Type your message and click **Send**. A **Text successfully sent** alert confirms it went out.
> [!NOTE]
>
> **Send Text** only shows when the job has a Driver with a phone number on file.
## Text all Drivers on an order
**1. Open the order's actions menu**
On the **Dispatch** page, click the actions menu (**⋯**) on the order card.
**2. Click Text All Drivers**
**Text All Drivers** sits at the top of the menu.
**3. Write and send**
Type your message and click **Send**.
Tread texts the Driver on every job in the order that has a phone number on file. Rejected jobs are skipped.
> [!TIP]
>
> Tread sends one text per job. A Driver with two jobs on the order gets two texts, one for each Job ID.
In the mobile app, **Text All Drivers** is in the order card's **Actions** sheet.
## Troubleshooting
> **I'm in Approvals and there's no Send Text option**
>
> **Send Text** is on the **Dispatch** page only. Approvals has no texting menu. Go to **Dispatch**, find the job, and use its actions menu (**⋯**). This works on completed jobs too, so you can still text a driver about a ticket problem after the run is done.
> **I don't see Send Text on a job**
>
> The job has no Driver yet, or the Driver has no phone number on file. Add the phone number to the Driver's profile, then try again. If the option is still missing, your role may not allow texting Drivers. See [Roles & Permissions](/concepts/roles-permissions).
> **I don't see Text All Drivers on an order**
>
> The option is hidden on orders that are **Completed**, **Canceled**, or **Rejected**, and on orders you can't edit.
> **Text All Drivers shows an error**
>
> No job on the order has a Driver with a phone number. Assign Drivers, or add phone numbers to their profiles.
## Related
* [Messages & Broadcasts](/mobile/messaging)
* [Dispatch a Job (Web & Mobile)](/dispatch-guide/dispatch-a-job)
* [Driver Lifecycle](/concepts/driver-lifecycle)
# Track Drivers & Collect Tickets
Source: https://docs.tread.ai/workflows/track-drivers-collect-tickets
Live truck visibility plus automatic ticket capture from the field.
## What this solves
You've sent the dispatch. Now you want to know — are the trucks moving, did they arrive, where are the tickets? Most operators today are on the phone all day chasing drivers and digging through stacks of paper at end of shift. This workflow gives you a live map of every truck, automatic geofence arrivals and departures, and ticket capture from photo, SMS, or telematics — without anyone calling the driver to ask "where are you?"
## Walkthrough
**1. Open the Live Map**
Go to **Live Map**. Every dispatched truck shows up with its current location, speed, and status. Filter by Project, customer, [department](/onboarding/master-data/departments-labels-classes), etc.
**2. Watch arrival times on the Dispatch board**
With [Live ETA](#live-etas-on-dispatch) on, the **Cycle** column on **Dispatch** shows when each truck is expected to reach its next site. The time updates from the Driver's live GPS. Answer "where's my truck?" without calling the Driver.

**3. Watch geofence arrivals**
When a truck enters a [geofence](/concepts/sites-geofences) (a virtual fence around a site), Tread logs the arrival, starts the onsite timer, and updates the job status. No driver action required if you have telematics connected.
**4. Capture tickets from the field**
Drivers submit tickets three ways: a photo from the [Driver App](/mobile/driver-app), an SMS reply with a photo, or an automated feed from a scale-house [integration](/integrations/telematics). Each ticket attaches to the matching load.
**5. Let the AI read the ticket**
The Ticket Chaser agent (Tread's OCR + matching agent) reads the ticket image, pulls ticket number, weight, material, and timestamps, and matches it to a dispatched load. Anything ambiguous gets flagged for human review.
**6. Resolve flagged tickets**
Each card shows the ticket image side-by-side with the parsed fields. Confirm or edit, then approve. Most teams clear this queue twice a day. The driver can also verify the ticket details before submitting the ticket.
**7. Review the day's loads**
At end of shift, open **Approvals → Approve Jobs → Loads** for a list of every load with its tickets, hours, and miles.
## Live ETAs on Dispatch
Live ETA shows each truck's estimated time of arrival (ETA) on the order, in the **Cycle** column of **Dispatch**. Late trucks stand out before the customer calls.
| What you see | What it means |
| - | - |
| **ETA 6m · Dropoff** | On the way. Counts down to arrival at the pickup or dropoff site. |
| **Overdue 12m · Dropoff** | Running late. The truck is past its predicted arrival. Red text, red row. |
| **On site 42m · Pickup** | On site 30 minutes or more. Orange text, orange row. The time counts up while the truck waits. |
| **On site 1h10m · Dropoff** | On site an hour or more. Red text, red row. |
| **ETA unavailable · Pickup** | No arrival time yet. Tread has no location for the Driver, or the site has no location. |
### Turn on Live ETA
Check **Enable Live ETA** on the order. To turn it on for every order in a [Project](/concepts/orders-projects), check **Enable Live ETA** on the project instead.
> [!WARNING]
>
> Changing **Enable Live ETA** on a project overwrites it on that project's open orders and active jobs. A change you made on one order is replaced.
> [!NOTE]
>
> Live ETA is turned on per company. If you don't see **Enable Live ETA**, contact Tread support.
## Watch it
## Common pitfalls
> [!WARNING]
>
> **ETA unavailable usually means a missing location.** Check that the [site](/concepts/sites-geofences) has an address or pin, and that the Driver is signed in to the [Driver App](/mobile/driver-app) with location on.
> [!WARNING]
>
> **Tickets without a matching load become orphans.** If a driver submits a ticket for an order that wasn't dispatched in Tread, the ticket lands in an unmatched bucket and won't bill. Always dispatch the order — even retroactively — before approving the ticket.
> [!WARNING]
>
> **OCR is informational, not blocking.** The Ticket Chaser parses fields fast, but it doesn't gate approvals. A billing lead at one large hauler taught their team to trust the parsed values without a quick visual check — and a misread ticket weight slipped through to invoice. Always glance at the source image before approving.
> [!WARNING]
>
> **Wrong photo on a ticket.** A driver fixes a bad photo by retaking it in the [Driver App](/mobile/driver-app) before submitting. If a wrong image already came through, catch it in the review queue — the parsed fields won't match the picture. Return the ticket so the driver recaptures, or replace the image, before you approve the load.
## Related
* [AI Data Collection & Load Approvals](/workflows/track-drivers-collect-tickets) — what happens after capture.
* [Messages & Broadcasts](/mobile/messaging) — message a late Driver from the same order.
* [Tickets & Timesheets](/concepts/tickets-timesheets) — the data model.
* [Digital Tickets](/specialized/digital-tickets) — every supported ticket source.
* [Telematics integrations](/integrations/telematics) — auto-arrival and engine data.
# Vendors: Vendor Job Splitting
Source: https://docs.tread.ai/workflows/vendor-job-splitting
Let a vendor divide one job into several, so they set their own truck count without asking you to redo the order.
Job splitting lets a [vendor](/onboarding/master-data/vendors) divide one job into several smaller ones. The vendor manages their own truck count and load split, and you never have to edit the order for them.
Say you order 110 loads of slag cement and split it across three vendors — 70 loads, 30, and 10. The vendor holding 70 loads can break that job into 15 jobs, one per truck, on their own.
> [!NOTE]
>
> Don't see the checkboxes below? Job splitting is a per-account feature. Email [support@tread.io](mailto:support@tread.io) to have it turned on.
## Part 1: Set it up as the order creator
Two things have to be switched on — the vendor's account, and the order itself.
### Turn on splitting for the vendor
**1. Open Settings → Vendors and click the pencil icon**
Find the vendor, then open **Update Account**.
**2. Check Allow vendor to split jobs under Account Configuration**
The tooltip spells out what it grants: the vendor can edit their own job count.

**3. Click Save**
This vendor can now split any job you send from an order that also allows it.
### Create the order
**1. Add the material, ordered quantity, and unit of measure**
Recommended, so the order totals read correctly.
**2. Under Trucks, set the number of trucks and set Units to Load**
Each truck is one job. Quantity can stay at 1 — you set the real load counts in the next step.
**3. Check Allow vendors to split jobs, then create the order**
Miss this box and the vendor sees no **Split Job** action, even with their account setting on.

### Set the loads on each job
**1. Click Bulk Edit**
Faster than editing each job row by hand.
**2. Set the load quantity per job, then Save**

> [!WARNING]
>
> **A job's requested load count caps at 50.** Without job splitting enabled the cap is 25. This limits the loads Tread creates up front — loads added by hand or created automatically later are not capped.
### Dispatch to the vendors
**1. Assign a vendor to each job, then click Send**

## Part 2: Split a job as the vendor
You received one job for 50 loads and want five jobs, one per truck.
**1. Open Dispatch → Orders and click Accept on the job**
A job you haven't accepted can't be split yet.
**2. Click the ••• icon on the job row, then Split Job**

**3. Set the number of jobs and the loads on each**
The dialog shows the job's total requested quantity. **Distribute Evenly** splits the loads for you. Watch **Remaining** — it reads **Fully allocated** when the numbers balance.

**4. Click Split**
Tread creates the new jobs. Accept them to carry on dispatching.

You can split a job again after the first split, using the same **Split Job** action.
**Let us show you how:**
[Vendor job splitting walkthrough](https://www.loom.com/embed/e39359fa0cb840488c48c7edb07c9065)
## Skip the Accept step
Turn on auto-accept and new jobs arrive ready to dispatch.
**1. Open Settings → Customers and click the pencil icon on the customer**
Scroll to **Account Configuration**.
**2. Set Auto-Accept Jobs to Yes, then Save**

## Common pitfalls
> [!WARNING]
>
> **The vendor has no Split Job action.** Both switches are required — **Allow vendor to split jobs** on their account *and* **Allow vendors to split jobs** on the order. An order created before you ticked the account setting still won't allow splitting.
> [!WARNING]
>
> **Units aren't set to Load.** Splitting divides a load count. Set **Units** to **Load** on the order's Trucks section before you dispatch.
## Related
* [Vendors (master data)](/onboarding/master-data/vendors)
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors)
* [Dispatch a Job](/dispatch-guide/dispatch-a-job)
* [Orders & Projects](/concepts/orders-projects)
# Add Drivers to a Vendor's Account
Source: https://docs.tread.ai/workflows/vendor-management/add-drivers
Create a driver in a vendor's Tread account so you can dispatch to them right away.
Add a driver to a [vendor's](/onboarding/master-data/vendors) account when the vendor hires someone who needs access to Tread.
**1. Find the vendor and click MANAGE**

> [!NOTE]
>
> No **MANAGE** button? Email [support@tread.io](mailto:support@tread.io) with the vendors you need to manage, or ask in the in-app chat.
**2. Review the vendor's tabs**
You can see the vendor's **Drivers**, **Equipment**, and **Users**.

**3. Open the Drivers tab and click + Add Driver**

**4. Enter the driver's information**

**5. Click Create**

> [!TIP]
>
> The driver is shared to your account automatically, so you can dispatch to them right away.
## Common pitfalls
> [!NOTE]
>
> **"Phone number already taken" can happen here too.** It means that phone number already belongs to a driver record at another vendor or company. Contact Tread support with the driver's name, phone number, and your company — support links the existing record so the driver keeps one app login. See [Driver Lifecycle](/concepts/driver-lifecycle) for the full pitfall.
## Related
* [Edit & Remove Drivers from a Vendor's Account](/workflows/vendor-management/edit-drivers)
* [Add Equipment to a Vendor's Account](/workflows/vendor-management/add-equipment)
* [Driver Lifecycle](/concepts/driver-lifecycle)
# Add Equipment to a Vendor's Account
Source: https://docs.tread.ai/workflows/vendor-management/add-equipment
Create a truck in a vendor's Tread account and share it back to yourself so you can dispatch it.
Add a truck to a [vendor's](/onboarding/master-data/vendors) account when the vendor has new equipment, or when you need dispatch access to a truck they already run.
## Add the truck
**1. Open Settings → Vendors**

**2. Click MANAGE on the vendor**

> [!NOTE]
>
> No **MANAGE** button? Email [support@tread.io](mailto:support@tread.io) with the vendors you need to manage, or ask in the in-app chat.
**3. Open the Equipment tab**
The Equipment tab lists every truck on the vendor's account.

**4. Click Add Equipment**

**5. Enter the truck number and equipment type**

## Share the truck to your company
> [!WARNING]
>
> Share the truck to **your** company, or you won't be able to dispatch it.
**1. Click + Add Shared Company**

**2. Select your company**

**3. Set the access level to Dispatchable**

**4. Click Create**

The new truck appears in the vendor's equipment table.

## Assign the truck to the vendor's driver
**1. Open Settings → Drivers**
This is your own driver list, including drivers shared to you.


**2. Pick the truck in the Select Truck field**
Choose the driver's row, then set the truck you just added.


**3. Confirm on the Dispatch board**
The driver now shows with their assigned truck.

## Related
* [Edit & Delete Equipment from a Vendor's Account](/workflows/vendor-management/edit-equipment)
* [Add Drivers to a Vendor's Account](/workflows/vendor-management/add-drivers)
* [Equipment](/concepts/equipment)
# Create a Vendor Account
Source: https://docs.tread.ai/workflows/vendor-management/create-account
Set up a new vendor from Settings so you can dispatch to them the same day.
Add a [vendor](/onboarding/master-data/vendors) — an account you send dispatches to, instead of assigning your own Driver — without waiting on a sign-up from them first.
**1. Open Settings → Vendors, then click Create Account**

**2. Fill in the account, contact, and invite details**
Enter the **Account Name** and address, then set the **Company Type** — Broker, Contractor, Hauler, Owner Operator, or Producer. Pick \*\*Hauler \*\*for a Multi-Driver vendor you'll request trucks from. See [Vendors (master data)](/onboarding/master-data/vendors) for what each Company Type controls.
Add the primary contact's name and pick an **Invite Type** — Email, SMS, or both — then click **Save**.

**3. Find the new vendor in your list**
The vendor now appears in **Settings → Vendors**, ready to share equipment and drivers to.

## Related
* [Vendors (master data)](/onboarding/master-data/vendors) — Company Type, O\&O setup, and vendor addresses in full
* [Add Equipment to a Vendor's Account](/workflows/vendor-management/add-equipment)
* [Add Drivers to a Vendor's Account](/workflows/vendor-management/add-drivers)
# Edit & Remove Drivers from a Vendor's Account
Source: https://docs.tread.ai/workflows/vendor-management/edit-drivers
Update a vendor's driver details, resend their invite, or remove a driver who no longer works for them.
Edit a [vendor's](/onboarding/master-data/vendors) driver when a name or phone number changes. Remove the driver when they stop driving for that vendor.
## Edit a driver
**1. Open Settings → Vendors**

**2. Click the MANAGE button**

> [!NOTE]
>
> No **MANAGE** button? Email [support@tread.io](mailto:support@tread.io) with the vendors you need to manage, or ask in the in-app chat.
**3. Find the driver and click the pencil icon**
The list shows every driver who belongs to this vendor or is shared to them.

**4. Edit the details and click Update**


## Resend a driver's invite
A vendor's driver who never activated their account can get a new invite.
**1. Open the vendor's Drivers tab**
Go to **Settings → Accounts → Vendors**, click **MANAGE**, and stay on the **Drivers** tab.
**2. Find the driver and click the ••• icon**

**3. Click Resend Email Invite or Resend SMS Invite**
Each option only shows if the driver hasn't activated yet and has that email address or phone number on file. To add a missing one, edit the driver first.
If the driver is already active and can't sign in, see [Mobile Troubleshooting](/mobile/troubleshooting).
## Remove a driver
You remove a driver by unsharing them from the vendor's account.
**1. Find the driver and click the ••• icon**

**2. Click Remove Share**

> [!NOTE]
>
> The driver may still be shared to **your** account. Remove that share from **Settings → Drivers** in your own account.
## Common pitfalls
> [!WARNING]
>
> **A driver sees no pay rate on their loads.** Check **Share Pay Rate** on the company share for that driver (the row that shares the driver to another company). When it's on, the rate set on the job is passed through as the driver's pay. When it's off, no driver pay rate is set, even though dispatch still works. Only the company that shared the driver can change this setting, so a vendor that received the driver may need to ask that company. If the rate is there but looks wrong, see [How Rate Changes Flow Through Tread](/workflows/how-rate-changes-flow).
## Related
* [Add Drivers to a Vendor's Account](/workflows/vendor-management/add-drivers)
* [Enable Driver Direct Dispatch](/workflows/vendor-management/enable-direct-dispatch)
* [Add, Edit, Re-invite, or Deactivate a User in a Vendor's Account](/workflows/vendor-management/manage-users)
* [Driver Lifecycle](/concepts/driver-lifecycle)
# Edit & Delete Equipment from a Vendor's Account
Source: https://docs.tread.ai/workflows/vendor-management/edit-equipment
Correct a vendor's truck details, or remove a truck the vendor no longer owns.
Edit a [vendor's](/onboarding/master-data/vendors) truck when a number or type is wrong. Delete it when the vendor no longer runs it.
## Edit equipment
**1. Open Settings → Vendors**

**2. Click MANAGE on the vendor**

**3. Open the Equipment tab**

**4. Find the vendor's own rows in the Company column**
You can only edit equipment where the **Company** column shows this vendor's name. Other rows belong to another account.

**5. Click the pencil icon**

**6. Update the details and click Update**


## Delete equipment
**1. Click the ••• icon on the truck**

**2. Click Delete**

**3. Click Confirm**

## Related
* [Add Equipment to a Vendor's Account](/workflows/vendor-management/add-equipment)
* [Edit & Remove Drivers from a Vendor's Account](/workflows/vendor-management/edit-drivers)
* [Equipment](/concepts/equipment)
# Enable Driver Direct Dispatch
Source: https://docs.tread.ai/workflows/vendor-management/enable-direct-dispatch
Share a vendor's driver to your own account so you can assign them jobs without waiting on their dispatcher.
Assign a [vendor's](/onboarding/master-data/vendors) driver yourself instead of sending the dispatch and waiting for their dispatcher to pick someone. The driver becomes a [Shared Driver](/concepts/dispatching-drivers-vendors) — a driver another account shares to you, dispatched directly like your own.
## Share the driver to your account
**1. Open Settings → Vendors**

**2. Find the vendor and click MANAGE**
Pick the vendor account the driver belongs to.

> [!NOTE]
>
> No **MANAGE** button? Email [support@tread.io](mailto:support@tread.io) with the vendors you need to manage, or ask in the in-app chat.
**3. Find the driver and click the pencil icon**
The pencil sits in the **Actions** column of the vendor's **Drivers** tab.

**4. Click + Add Shared Company under Shared User Configuration**
Scroll to **Shared User Configuration** near the bottom of the form.
**5. Pick your company from Select Share To Companies**
Only accounts connected to the vendor appear in the list.

> [!NOTE]
>
> Tick **Share Pay Rate** on the same row if you want the driver's pay rate shared along with the access.
**6. Give the driver a truck under Available Equipment**
Pick the truck the driver runs. The truck number travels with the driver onto every job you assign.
**7. Click Update**
The driver now appears in the driver panel on the [Dispatch](/dispatch-guide/dispatch-a-job) page.
## Common pitfalls
> [!WARNING]
>
> **The section is missing.** **Shared User Configuration** only shows on users whose role can be shared. Confirm the user holds the Driver role before you look for it.
> [!WARNING]
>
> **The driver has no truck.** A driver with no **Available Equipment** still dispatches, but the job carries no truck number — dispatchers and billing lose the truck reference. Set it while you are in the form.
> [!NOTE]
>
> Removing the share hides the driver from your board again. Use **Remove Share** from the driver row — see [Edit & Remove Drivers from a Vendor's Account](/workflows/vendor-management/edit-drivers).
## Related
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors)
* [Add Drivers to a Vendor's Account](/workflows/vendor-management/add-drivers)
* [Edit & Remove Drivers from a Vendor's Account](/workflows/vendor-management/edit-drivers)
* [Driver Lifecycle](/concepts/driver-lifecycle)
# Add, Edit, Re-invite, or Deactivate a User in a Vendor's Account
Source: https://docs.tread.ai/workflows/vendor-management/manage-users
Manage who can sign in to a vendor's Tread account — a foreman, a dispatcher, or a company driver — and resend their invite.
Add a user to a [vendor's](/onboarding/master-data/vendors) account when someone there needs to sign in to Tread. Deactivate a user when they leave.
## Add a user
**1. Open Settings → Vendors**

**2. Click MANAGE**

**3. Open the Users tab**

**4. Click Add User**

**5. Enter the person's information**

**6. Select the person's role**

> [!WARNING]
>
> Only pick **Driver** if this person is a company (W2) driver for the vendor. See [Roles & Permissions](/concepts/roles-permissions).
**7. Send the invitation**
Add an email address or phone number first, then send the invite by email or SMS.

**8. Click Create**

## Edit a user
**1. Click the pencil icon**

**2. Update the details and click Update**

## Resend an invite
Resend the invite when a vendor's user never got it, lost it, or let it expire.
**1. Open Settings → Accounts → Vendors and click MANAGE**
No **MANAGE** button? Email [support@tread.io](mailto:support@tread.io) with the vendors you need to manage, or ask in the in-app chat.
**2. Open the Users tab**
Find the user, often the vendor's main contact.
**3. Click the ••• icon on the user's row**

**4. Click Resend Email Invite or Resend SMS Invite**
Tread sends a new invite to the email address or phone number on file.
### Don't see the resend options?
> **The user already accepted the invite**
>
> Resend options only show for users who haven't activated their account yet. If an active user can't sign in, they need a [password reset](/onboarding/master-data/users#reset-a-password).
> **Only one option shows, or neither**
>
> Each option needs that contact method on file. **Resend Email Invite** needs an email address. **Resend SMS Invite** needs a phone number. Click the pencil icon, add the missing detail, click **Update**, then try again.
## Deactivate a user
Deactivating removes the user from the vendor's account.
**1. Find the user and click the ••• icon**

**2. Click Deactivate**

**3. Confirm the deactivation**

## Related
* [Add Drivers to a Vendor's Account](/workflows/vendor-management/add-drivers)
* [Roles & Permissions](/concepts/roles-permissions)
* [Users (master data)](/onboarding/master-data/users)
# Vendor Management
Source: https://docs.tread.ai/workflows/vendor-management/overview
Add and edit a vendor's drivers, trucks, and users from your own account — without waiting on the vendor to do it.
Vendor Management lets you work inside a [vendor's](/onboarding/master-data/vendors) account for them. A vendor is an account you send dispatches to, instead of assigning your own driver. When a vendor is slow to add a new truck or driver, you add it yourself and dispatch the same day.
> [!NOTE]
>
> A vendor can be a multi-truck hauler, a broker, or a single Owner-Operator (O\&O).
## Where do I find it?
**1. Open Settings → Accounts → Vendors**
Find the vendor in the list, then look for a **MANAGE** button on their row.

**2. Click MANAGE**
You land on the vendor's page. It has three tabs: **Drivers**, **Equipment**, and **Users**.

**Let us show you how:**
[Vendor Management walkthrough](https://www.loom.com/embed/c139764c17d944319217517ab6b3dc59)
## Guides
> **[Create a vendor account](/workflows/vendor-management/create-account)**
>
> Set up a new vendor from Settings so you can dispatch to them the same day.
> **[Add equipment](/workflows/vendor-management/add-equipment)**
>
> Create a truck in the vendor's account and share it to yourself for dispatch.
> **[Edit & delete equipment](/workflows/vendor-management/edit-equipment)**
>
> Fix a truck number, or remove a truck the vendor no longer owns.
> **[Add drivers](/workflows/vendor-management/add-drivers)**
>
> Give a vendor's new driver access to Tread.
> **[Edit & remove drivers](/workflows/vendor-management/edit-drivers)**
>
> Update a driver's details, or remove one who left.
> **[Enable driver Direct Dispatch](/workflows/vendor-management/enable-direct-dispatch)**
>
> Share a vendor's driver to your account and assign them jobs yourself.
> **[Manage users](/workflows/vendor-management/manage-users)**
>
> Add, edit, re-invite, or deactivate a user in the vendor's account.
## Can't find this feature?
If you don't see a **MANAGE** button, the vendor isn't set up for management yet. Email [support@tread.io](mailto:support@tread.io) with the list of vendors you need to manage.
## Related
* [Vendors (master data)](/onboarding/master-data/vendors)
* [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors)
* [Vendors: Adding Drivers & Trucks](/workflows/vendors-adding-drivers-and-trucks) — for a vendor working in their own account
# Vendors: Accept & Dispatch Jobs
Source: https://docs.tread.ai/workflows/vendors
## On the Web
### Accepting Jobs from your customer
1. Click “**Accept**” to accept jobs individually
2. Bulk Accept all jobs by clicking “**Accept All**”

### Assigning jobs to drivers
1. Click “**Assign**” to select a Driver for the job assignment
2. **Driver**: use the “Driver” tab to assign an internal or external driver you directly dispatch to
3. **Vendor**: use the “Vendor” tab to assign a multi-truck hauler who will sub-dispatch to their own driver

### Dispatching/Sending Jobs to drivers or vendors
Once you’re ready to send jobs, follow the instructions below and Drivers/vendors will be notified of their assignments in the Tread Mobile App
1. Click “**Send**”
2. "Bulk Send" all jobs by clicking **“Send All Jobs”**\
*Note*: When using **Send All Jobs**, every assignment in pending status will be sent

## On Mobile
### Accepting Jobs from your customer
To accept jobs in Tread’s mobile app, simply:
1. Tap on “Accept All”
2. Or you can Accept Jobs individually by selecting the down arrow ( V ) next to the truck count
3. Accepted jobs will display an “Accepted” status and are ready to be Assigned to drivers using the "Assign" button

### Assigning jobs to drivers
After accepting jobs, assign your driver with a few taps:
1. Tap the down arrow ( V ) next to the Order truck count to expand and view the list of assigned trucks
2. Tap on the “+ Assign” button

### Dispatching/Sending Jobs to drivers or vendors
1. Select a driver by searching by name or truck number
2. Then tap on “Send”
3. The driver will receive a notification and can accept the job and start on the mobile app

# Vendors: Adding Drivers & Trucks
Source: https://docs.tread.ai/workflows/vendors-adding-drivers-and-trucks
> [!NOTE]
>
> This page is for a vendor working in their **own** account. To add drivers or trucks **to a vendor's account from your account**, see [Vendor Management](/workflows/vendor-management/overview).
## On the Web
### Adding your trucks:
1. Go to the **Settings**
2. Click **Equipment**
3. Click **Create** **Equipment**
4. Add the Truck number or Truck Name & Equipment Type, then click **Create**

### Adding your Drivers:
Once your trucks have been added to your account, you can add your drivers and assign their trucks.
### Adding your Company Drivers:
Company drivers only drive for you, and no other companies.
1. Go to **Settings**
2. Select **Users**
3. Click on **+Create User**
4. Complete driver details & click on **Create**

**Important**: \
Check the **Send SMS Invitation** box to invite the driver via text message with link to install the mobile app.
### Adding your Contracted Drivers:
Contracted drivers might driver for other companies as well as your own. These are individual drivers, not multi-truck vendors.
1. Go to the **Settings**
2. Click **Users**
3. Select **+ Create Driver**
4. Complete driver details, assign or add new truck
5. Click **Create**

**Important**: \
Check the **Send SMS Invitation** box to invite the driver via text message with link to install the mobile app.
***
## On Mobile
### Adding your Company Drivers:
Company drivers only drive for you, and no other companies.
1. Tap on **Account**
2. Select **Manage** **Users**
3. Tap on **+Add**
4. Complete driver details & tap on **Submit**

**Important:** \
**Select Send SMS invite**
### Adding your Contracted Drivers:
Contracted drivers might driver for other companies as well as your own. These are individual drivers, not multi-truck vendors.
1. Tap on **Account**
2. Select **Manage** **Contract** **Drivers**
3. On the next screen, tap **+ Add**
4. Complete driver details & tap on **Create**

**Important**: \
**Select Send SMS invite**
# Bulk update Accounts
Source: https://docs.tread.ai/api-reference/accounts/bulk-update-accounts
/api-reference/openapi.json patch /v1/accounts/bulk_update
Perform select bulk updates to `Accounts`.
Requires the `edit_account` permission.
# Create a connected Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-connected-account
/api-reference/openapi.json post /v1/accounts/connected
Create a connected `Account` between two `Companies`.
This endpoint creates two complimentary connected `Accounts`:
* a "sender" `Account` owned by the `Company` specified by `sender_company_id` which has the provided `sender_account_types`
* a "receiver" `Account` owned by the `Company` specified by `receiver_company_id` which has the opposite `account_types`
The newly created "sender" `Account` is returned.
This endpoint requires the `platform_admin` `IamRole`.
# Create a connected Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-connected-account-1
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/connected
Create a connected `Account` between two `Companies` by use of a `tread_id`.
This endpoint creates two complimentary connected `Accounts`:
* a "sender" `Account` owned by the `Company` specified in the `company-id` path param which has the provided `account_types`.
* a "receiver" `Account` owned by the `Company` specified in the `tread_id` which has the opposite `account_types`
The newly created "sender" `Account` is returned.
This endpoint must be called by a principal authorized to act on behalf of the "sender" `Company`.
This endpoint requires the `connect_companies` `IamPermission`.
# Create a new Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-new-account
/api-reference/openapi.json post /v1/accounts
Create a new `Account`
This endpoint requires the `create_account` permission
# Create Scheduled Time Off
Source: https://docs.tread.ai/api-reference/accounts/create-scheduled-time-off
/api-reference/openapi.json post /v1/accounts/{account-id}/scheduled_time_offs
Create a Scheduled Time Off for an `Account`
# Delete a Scheduled Time Off
Source: https://docs.tread.ai/api-reference/accounts/delete-a-scheduled-time-off
/api-reference/openapi.json delete /v1/accounts/{account-id}/scheduled_time_offs/{id}
Delete Scheduled Time Off for an `Account`
# Delete an Account
Source: https://docs.tread.ai/api-reference/accounts/delete-an-account
/api-reference/openapi.json delete /v1/accounts/{id}
Delete an `Account` by ID
This endpoint requires the `delete_account` permission
# Invite a Company to connect through an Account
Source: https://docs.tread.ai/api-reference/accounts/invite-a-company-to-connect-through-an-account
/api-reference/openapi.json post /v1/accounts/invite
Invite a `Company` which is not yet on the `Tread` platform to connect through an `Account`.
This will create:
* a new `Company` named `name` using `contact` data for `primary_contact ` and `billing_contact`
* a new `User` with information from `contact` that has the `Company Admin` `IamRole`
* a new `Account` owned by the currently authenticated `User`'s `Company` and connected to the newly created `Company`
Note that all fields in `contact` are required.
The following unique constraints must be met or a `422` will be returned:
* `name` must be globally unique to `Companies`
* `contact.email` and `contact.phone` must be globally unique to `Users`
If successful the newly created `Account` will be returned.
This endpoint requires the `create_account` `IamPermission`
# Invite a Company to connect through an Account for a Company
Source: https://docs.tread.ai/api-reference/accounts/invite-a-company-to-connect-through-an-account-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/invite
Invite a `Company` which is not yet on the `Tread` platform to connect through an `Account` for a `Company`.
This will create:
* a new `Company` named `name` using `contact` data for `primary_contact ` and `billing_contact`
* a new `User` with information from `contact` that has the `Company Admin` `IamRole`
* a new `Account` owned by the currently authenticated `User`'s `Company` and connected to the newly created `Company`
Note that all fields in `contact` are required.
The following unique constraints must be met or a `422` will be returned:
* `name` must be globally unique to `Companies`
* `contact.email` and `contact.phone` must be globally unique to `Users`
If successful the newly created `Account` will be returned.
This endpoint requires the `create_account` `IamPermission`
# Mark Schedule Available
Source: https://docs.tread.ai/api-reference/accounts/mark-schedule-available
/api-reference/openapi.json put /v1/accounts/{account-id}/scheduled_time_offs/available
Mark current `Account` as available and disable any `Scheduled Time Off`
# Mark Schedule Unavailable
Source: https://docs.tread.ai/api-reference/accounts/mark-schedule-unavailable
/api-reference/openapi.json put /v1/accounts/{account-id}/scheduled_time_offs/unavailable
Mark current `Account` as unavailable and create a new `Scheduled time off`
# Retrieve a single Account
Source: https://docs.tread.ai/api-reference/accounts/retrieve-a-single-account
/api-reference/openapi.json get /v1/accounts/{id}
Retrieve `Account` by ID
# Retrieve Accounts that belong to a Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-accounts-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts
Retrieve `Accounts` for a `Company`.
Filter usage:
* to filter a single state: `filter[account_types][]=customer`
* to filter multiple states: `filter[account_types][]=customer&filter[account_types][]=vendor`
# Retrieve all Accounts visible to the current Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-all-accounts-visible-to-the-current-company
/api-reference/openapi.json get /v1/accounts
Retrieve `Accounts` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
Filter usage:
* to filter a single state: `filter[account_types][]=customer`
* to filter multiple states: `filter[account_types][]=customer&filter[account_types][]=vendor`
# Retrieve all connected Accounts visible to the current Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-all-connected-accounts-visible-to-the-current-company
/api-reference/openapi.json get /v1/accounts/connected
Retrieve all connected `Accounts` visible to the currently authenticated `Company`.
# Retrieve connected Accounts that belong to a Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-connected-accounts-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/connected
Retrieve connected `Accounts` for a `Company`.
# Retrieve Scheduled Time Offs for an Account
Source: https://docs.tread.ai/api-reference/accounts/retrieve-scheduled-time-offs-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/scheduled_time_offs
Retrieve all active `ScheduledTimeOffs` visible to your `Company` for an `Account`
# Typeahead search on customer Accounts scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/accounts/typeahead-search-on-customer-accounts-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/customers/accounts/typeahead
`Typeahead` search on customer `Accounts` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on vendor Accounts scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/accounts/typeahead-search-on-vendor-accounts-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/vendors/accounts/typeahead
`Typeahead` search on vendor `Accounts` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update Account for a Managed Company
Source: https://docs.tread.ai/api-reference/accounts/update-account-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/accounts/{id}
Update `Account` by ID for a Managed Company
This endpoint requires the `edit_account` permission
# Update an Account
Source: https://docs.tread.ai/api-reference/accounts/update-an-account
/api-reference/openapi.json patch /v1/accounts/{id}
Update an `Account` by ID.
This endpoint requires the `edit_account` permission
# Importer APIs (Beta)
Source: https://docs.tread.ai/api-reference/importer-apis
Bulk-load Orders, Projects, Tickets, and Files into Tread with async ingest endpoints, then check on results after the fact.
The Importer APIs bulk-load data into Tread. Send an array of Orders, Projects, Tickets, or Files in one request instead of calling the REST API record by record. Each endpoint saves your payload and processes it in the background.
Use the Importer APIs for bulk loads — seeding historical data, a nightly sync from your ERP or accounting system, or a high-volume data feed. Use the REST API endpoints elsewhere in this reference when you're creating or updating a single record.
> [!NOTE]
>
> This API is in **Beta**. Behavior may change. Contact [developers@tread.io](mailto:developers@tread.io) with questions or feedback.
## Base URL and authentication
Every Importer endpoint lives under the same host as the rest of the API, with an `/ingest` prefix.
```
https://api.tread-horizon.com/ingest
```
Authentication uses the same bearer token as the rest of the API. See [Authentication](/api-reference/introduction#authentication) for how to get one.
```bash theme={null}
Authorization: Bearer
```
`Content-Type` depends on the endpoint. Orders, Projects, and Tickets take JSON:
```
Content-Type: application/json
```
Files takes a multipart upload instead — see [Files](#files).
Every JSON payload can include an optional `metadata` object for your own tracking, like a batch ID or source system name. Tread stores it but doesn't act on it.
```json theme={null}
{
"orders": [ /* ... */ ],
"metadata": { "source_system": "ERP", "batch_id": "2025-06-02-001" }
}
```
## The async model
Orders, Projects, and Tickets process asynchronously. A `202 Accepted` response means Tread saved your payload and queued it for processing. **It does not mean the record was created or updated.**
> [!WARNING]
>
> `202 Accepted` is not success. Always check the imported record's state after you send a payload.
Two ways to check on a payload after you send it:
* **Reports > API Integrations** in the Tread app. Shows Imported For, Import Received At, State, Last Error, and the raw payload you sent. Defaults to the last 7 days, most recent first.
* **Error webhooks**, if you've configured one. Tread pushes an event when a payload fails to process. See [Webhooks](/integrations/webhooks).
Each imported record ends up in one of these states:
| State | Meaning |
| - | - |
| `created` | Received. Not yet processed. |
| `processed` | Succeeded. |
| `failed` | Failed. Retries pending. |
| `exhausted` | Failed. All retries used up. |
| `skipped` | A business rule blocked it — for example, a duplicate payload. |
| `skipped_update` | An update was skipped because a user edited that field in the Tread app. |
If a record is `failed` or `exhausted`, read its `last_error` field for the reason, fix the source data, and resend. Tread deduplicates automatically, so resending the same payload is safe.
The Files endpoint is the one exception — it processes synchronously. See [Files](#files).
## Orders
`POST /ingest/orders` creates or updates [Orders](/concepts/orders-projects). The root key is `orders` — send an array, even for a single record.
### Required fields
| Field | Notes |
| - | - |
| `external_id` | Your system's ID for this order (Ext. ID — used to match it on future requests). |
| `load_at` | Load date and time, ISO 8601. Interpreted in the company's timezone. |
| `customer.external_id` | Your system's ID for the customer placing the order. |
### Example request
```bash theme={null}
curl -X POST https://api.tread-horizon.com/ingest/orders \
-H "Authorization: Bearer $TREAD_TOKEN" \
-H "Content-Type: application/json" \
-d @payload.json
```
```json theme={null}
{
"orders": [
{
"external_id": "ORD-2025-0142",
"load_at": "2025-06-02T07:30:00",
"customer": { "external_id": "CUST-441", "name": "Acme Aggregates" },
"material": { "external_id": "MAT-GRAVEL-34" },
"sites": [
{ "waypoint": "pickup", "external_id": "SITE-QUARRY-1", "full_address": "4500 Quarry Rd, Denver, CO" },
{ "waypoint": "drop_off", "external_id": "SITE-JOB-19", "full_address": "800 Main St, Denver, CO" }
],
"truck_count": 4,
"service": "Hired Truck"
}
]
}
```
### Behavior notes
* Matching is by `external_id`, scoped to your company. A match updates the order's root fields — name, quantities, rates, notes, and so on.
* `customer`, `material`, `equipment_type`, and `sites` are nested records. Tread creates them if they don't exist but doesn't update them on a match — see [external\_id matching](#external_id-matching-and-upsert-behavior).
* `foremen` and `vendors` are arrays. Every payload **replaces** the whole array — it doesn't merge with what's already there. This is true even if you omit the field: omitting `foremen` does not preserve the existing foremen. Send the complete set every time.
* If an order is canceled and you later send a payload with the same `external_id` in a non-canceled state, Tread renames the canceled order's `external_id` to `X-{N}` and creates a new order. This is automatic — no cleanup needed on your end.
## Projects
`POST /ingest/projects` creates or updates [Projects](/concepts/orders-projects). The root key is `projects`.
### Required fields
| Field | Notes |
| - | - |
| `external_id` | Your system's ID for this project. |
| `customer.external_id` | Your system's ID for the customer. |
### Example request
```bash theme={null}
curl -X POST https://api.tread-horizon.com/ingest/projects \
-H "Authorization: Bearer $TREAD_TOKEN" \
-H "Content-Type: application/json" \
-d @payload.json
```
```json theme={null}
{
"projects": [
{
"external_id": "PRJ-2025-014",
"name": "Highway 401 Resurfacing",
"effective_at": "2025-05-01T00:00:00",
"customer": { "external_id": "CUST-441", "name": "Acme Aggregates" },
"phases": [
{ "name": "Mobilization", "code": "PH-01" },
{ "name": "Paving", "code": "PH-02" }
],
"materials": [
{ "external_id": "MAT-ASPHALT-12", "total_quantity": 2500, "unit_of_measure": "Ton" }
]
}
]
}
```
> [!WARNING]
>
> `effective_at` must be strictly before `expires_at`. If your source data has them equal — common for one-day projects — omit `expires_at` entirely. Don't set it to end of day; just leave it off.
### Behavior notes
* Matching is by `external_id`. A match updates root fields — name, dates, notes, rates.
* **Phase sync is destructive.** Every payload replaces the full phase list. A phase left out of the payload is deleted. Always send the complete set, not just what changed.
* **Materials sync the same way.** A material left out of the payload is removed from the project.
* **Sites need an address.** Every site needs `full_address` or `lat`/`lon`. If your source data only has a site name, set `full_address` to that name — Tread geocodes it automatically. Without one of these, the site fails validation and is silently dropped: the project still reports success, but that pickup or drop-off is missing and no error surfaces. See [Site Coordinates & Geofences](/api-reference/site-coordinates-geofences) for the coordinate format and how the geofence gets built.
* `foremen` replace on update, the same as Orders.
* If a project's name collides with a different project's name, Tread appends `-{external_id}` to keep both.
## Tickets
`POST /ingest/tickets` creates [Tickets](/concepts/tickets-timesheets) — the proof-of-load record for one Load. Root key is `tickets`.
### Required fields
| Field | Notes |
| - | - |
| `ticket_number` | Unique per company. |
| `service_date` | ISO 8601. |
| `quantity` | Numeric quantity. |
| `unit_of_measure` | Exact enum value — see [Enum reference](#enum-reference). |
| `truck_id` | Identifies the truck. |
### Example request
```bash theme={null}
curl -X POST https://api.tread-horizon.com/ingest/tickets \
-H "Authorization: Bearer $TREAD_TOKEN" \
-H "Content-Type: application/json" \
-d @payload.json
```
```json theme={null}
{
"tickets": [
{
"ticket_number": "T-88213",
"service_date": "2025-06-02T14:10:00Z",
"quantity": 22.4,
"unit_of_measure": "Ton",
"truck_id": "T-101",
"dispatch_number": "DISP-2025-0142",
"material": { "external_id": "MAT-GRAVEL-34" },
"customer": { "external_id": "CUST-441" }
}
]
}
```
### Behavior notes
* Tread links a ticket to an order two ways: `tread_order_id` (direct, preferred) or `dispatch_number` plus a matching job start date (fallback). Send `tread_order_id` when you have it.
* `unit_of_measure` normalization is case-insensitive but exact values are safer. `"tons"` becomes `"Ton"`, but a string the system doesn't recognize can silently fall back to the default (`Ton`) instead of erroring. Use the exact enum value.
* `site` is a single object on Tickets — unlike Orders and Projects, where `sites` is an array.
## Files
`POST /ingest/files` attaches a file to an existing (or soon-to-exist) [Order](/concepts/orders-projects). It uses `multipart/form-data`, not JSON — every other Importer endpoint uses JSON.
### Required fields
| Field | Notes |
| - | - |
| `file` | Binary file upload. A URL string is rejected. |
| `external_id` | The target Order's `external_id`. |
| `file_attachable_type` | Currently only `Order` is supported. |
Optional: `category` (`Inspection Report`, `Site Map`, `Scale Ticket (External)`, `Scale Ticket (Internal)`, `Timesheet`, or `Other`) and `description`. Maximum file size is 10 MB. Accepted types: JPEG, PNG, WebP, GIF, and PDF.
### Example request
```bash theme={null}
curl -X POST https://api.tread-horizon.com/ingest/files \
-H "Authorization: Bearer $TREAD_TOKEN" \
-F "file=@/path/to/scale-ticket.jpg" \
-F "external_id=ORD-2025-0142" \
-F "file_attachable_type=Order" \
-F "category=Scale Ticket (External)"
```
### Behavior notes
Files process **synchronously** — the one exception among the Importer APIs.
* **`201 Created`** — the Order already exists. Tread attaches the file immediately.
* **`202 Accepted`** — the Order doesn't exist yet. Tread stores the file and attaches it automatically once a matching Order arrives — files and orders can arrive in either order. No extra call needed.
* **`422`** — the file failed validation (wrong type or over 10 MB).
## external\_id matching and upsert behavior
Every Importer endpoint uses `external_id` — your system's identifier — to decide whether to create a new record or update an existing one. It's scoped per company and case-sensitive.
**Root records** (Order, Project, Ticket) work as you'd expect: found by `external_id` → update; not found → create.
**Nested records** (customer, material, equipment type, sites, foremen) work differently. Tread creates them if they don't exist, but generally doesn't update their fields once matched. Sending a different `name` for a customer that already exists doesn't rename it.
| Nested record | Matched by |
| - | - |
| Customer | Name, then `external_id` |
| Material | Name, then `external_id` |
| Site | Name and `external_id` together, then either alone |
| Equipment Type | Name or `external_id` |
| Foreman | Email, then phone, then `external_id` |
To rename a customer, material, or other master-data record, use the REST API elsewhere in this reference — not the Importer APIs.
Arrays follow one of three patterns on update:
| Array | Behavior |
| - | - |
| `foremen`, `vendors`, `collaborators`, `salespeople` | Replace — the whole array is swapped |
| `phases`, `materials` (Projects only) | Sync — items missing from the payload are deleted |
| `sites` | Upsert — matched by waypoint type; the record's ID is preserved |
## Enum reference
Exact string values Tread expects. A value outside this list either gets normalized (unit of measure) or rejected.
**Unit of measure** — `Load`, `Tonne`, `Ton`, `Yard`, `Meter`, `Foot`, `Liter`, `Hour`, `Bushel`, `Gallon`, `CubicMeter`, `Mile`, `Kilometer`, `Barrel`, `Bag`, `Pallet`. Default: `Ton`.
**Rate type** — `RatePerHour` (default), `RatePerDay`, `RatePerLoad`, `RatePerTon`, `RatePerTonne`, `RatePerYard`, `RatePerBushel`, `RateCommission`, `RateFlatCommission`, `RateFlatRate`.
**Site waypoint** — `pickup`, `staging`, `drop_off`, `weigh_point`.
**Site type** — `Plant`, `Quarry`, `JobSite`, `Depot`, `EquipmentHomeBase`, `Daily`, `Other` (default).
## Common pitfalls
* **`202` doesn't mean it worked.** Check the imported record's state before you treat a payload as done.
* **Nested records don't update on match.** Renaming a customer or material in your payload has no effect once that record already exists. Use the REST API to rename it.
* **Sites without an address are dropped, silently.** No `full_address` or `lat`/`lon` on a site means Tread drops it — and the Project or Order still reports success. So does sending one coordinate without the other. See [Site Coordinates & Geofences](/api-reference/site-coordinates-geofences).
* **Invalid phone numbers are dropped, silently.** A phone that doesn't normalize to E.164 is stripped from the contact. No error, no `last_error` entry.
* **Duplicate payloads are skipped, not reprocessed.** Sending the exact same payload twice marks the second one `skipped`. This is expected, not a bug.
* **Phase sync deletes what you leave out.** Every Project payload replaces the entire phase list, not just the phases you're changing.
* **Foremen and vendors replace, they don't merge.** Every payload with a `foremen` or `vendors` array swaps the whole thing, even if you omit the field.
* **Unit of measure is picky.** `"tons"` normalizes to `"Ton"`, but a string the system doesn't recognize silently falls back to the default (`Ton`) instead of erroring. Use exact enum values.
## Managing individual records
Need to create, update, or delete one record at a time instead of bulk-loading? Use the REST API endpoints elsewhere in this reference. They're synchronous — a `201` or `200` means it's done — and they support full field updates on nested records, including renaming a customer or material. The Importer APIs are for bulk loads only.
## Going further
> **[Site Coordinates & Geofences](/api-reference/site-coordinates-geofences)**
>
> Send `lat`/`lon` so imported Sites get a working geofence.
> **[Authentication](/api-reference/introduction#authentication)**
>
> Get a bearer token for these endpoints.
> **[Webhooks](/integrations/webhooks)**
>
> Get notified when an imported payload fails to process.
> **[Orders and Projects](/concepts/orders-projects)**
>
> How the dispatch hierarchy fits together.
> **[Tickets and Timesheets](/concepts/tickets-timesheets)**
>
> What a Ticket records, and how it becomes a Settlement.
# Introduction
Source: https://docs.tread.ai/api-reference/introduction
Build on top of Tread Horizon — the operating system for bulk materials hauling.
The Horizon API is a REST API that returns JSON. It conforms to OpenAPI 3.0.3 and covers the same data your team manages in the Tread Horizon app — Projects, Orders, dispatch, Tickets, Settlements, and more. Every endpoint listed in this reference is auto-generated from the live spec.
## Base URL
All requests go to a single host. There is one production server today.
```
https://api.tread-horizon.com
```
> [!NOTE]
>
> Sandbox access is provisioned per customer. Contact [developers@tread.io](mailto:developers@tread.io) to request a sandbox account.
## Authentication
The API uses bearer tokens. Two flows exist depending on who is calling.
* **User session tokens** — for human users. Stytch issues a short-lived JWT after a user logs in (email + password, magic link, or SSO). Use this when building tools that act on behalf of a signed-in user.
* **Machine-to-machine (M2M) tokens** — for server-to-server integrations. Tread issues a Client ID and Client Secret. Exchange them at the auth endpoint for an access token using the OAuth 2.0 client credentials grant.
Send the token on every request as a `Bearer` header.
```bash theme={null}
Authorization: Bearer
```
Tokens expire. When you get a `401 unauthorized`, fetch a new one. See **Generate an auth token** in the Authentication group in the sidebar for the exact request shape. To get M2M credentials, email [developers@tread.io](mailto:developers@tread.io).
## Required headers
| Header | Required | Value |
| - | - | - |
| `Authorization` | Yes | `Bearer ` |
| `Content-Type` | On `POST`, `PUT`, `PATCH` | `application/json` |
| `Accept` | No | `application/json` (default) |
| `Accept-Language` | No | `en-ca`, `es-us`, or `fr-ca`. Translates error messages. |
An invalid `Content-Type` returns `415 unsupported_media_type`. An invalid `Accept` returns `406 not_acceptable`.
## Pagination
List endpoints use cursor-based pagination. Pass `page[limit]` to set page size. The default is `25` and the maximum is `100`.
```bash theme={null}
GET /v1/companies/{company-id}/projects?page[limit]=25
```
The response includes a `Link` header with `next` and `prev` URLs when more results exist.
```
Link: ; rel="next"
```
Follow the `next` link until the header no longer includes one. The `page[after]` cursor is opaque — do not parse it.
## Errors
Every error response uses the same envelope. The `code` mirrors the HTTP status.
```json theme={null}
{
"error": {
"code": "unprocessable_content",
"errors": [
{ "model": "User", "field": "email", "message": "email is required" }
]
}
}
```
| HTTP | `code` | When you'll see it |
| - | - | - |
| 400 | `bad_request` | Malformed request. |
| 401 | `unauthorized` | Missing or expired token. |
| 403 | `forbidden` | The user lacks permission for this action. |
| 404 | `object_not_found` | The resource does not exist or is not visible. |
| 409 | `conflict` | The action violates a state machine rule. |
| 415 | `unsupported_media_type` | `Content-Type` is wrong. |
| 422 | `unprocessable_content` | Validation failed. The `errors` array names the field. |
| 500 | `internal_server_error` | Reach out to [support](mailto:support@tread.io). |
| 503 | `service_unavailable` | Retry after a short backoff. Requests time out at 60 seconds. |
`409` and `422` responses include an `errors` array with `model`, `field`, and `message` fields you can surface to end users.
## Resources
The API exposes most of what Horizon manages. Major resource families:
| Family | Notes |
| - | - |
| [Projects, Orders](/concepts/orders-projects), Jobs, Loads | The dispatch hierarchy. A Project holds Orders. An Order holds Jobs. A Job is one [Driver's](/concepts/driver-lifecycle) work. A Load is one cycle. |
| [Tickets](/concepts/tickets-timesheets), DriverDays | Proof-of-work records. A Ticket records one Load. A DriverDay records a Driver's hours for a shift — a Timesheet in the app. |
| Users, Drivers, Foremen | Users with access, scoped by [Roles and Permissions](/concepts/roles-permissions). |
| [Sites](/concepts/sites-geofences) | Pickup and delivery locations with geofences. |
| [Companies](/concepts/companies-hierarchy), CompanyShares | The account you operate as, and its parent/child structure. A CompanyShare is a one-way connection that shares records between accounts. |
| [Equipment, EquipmentTypes](/concepts/equipment) | Individual truck or trailer records. Capacity and unit of measure live on the Equipment Type. |
| [Materials, MaterialRates](/concepts/materials) | The Material record for what an Order moves. A MaterialRate prices a Material. |
| [Rates, AddOns, FuelSurcharges](/concepts/rates-add-ons) | The pricing model — base Rates, Add-Ons, and fuel surcharges. |
| [Settlements](/concepts/settlements-driver-pay), Invoices | A Settlement is a batch of approved work, ready to bill or pay. Invoices bill Customers. |
| Integrations, Telematics, Agave | Connections to accounting ([QuickBooks](/integrations/quickbooks), [Sage](/integrations/sage), Vista, Foundation, Spectrum), [telematics](/integrations/telematics) (Samsara, Geotab), [Paver Tracker](/integrations/paver-tracker), and [HCSS](/integrations/hcss). |
Each family has its own group in the left-hand sidebar. Click in to see the endpoints, request shape, and a try-it-out console.
## Webhooks
Tread can push events to your endpoint when records change — Orders accepted, Loads approved, Tickets created, and more. Webhooks are configured per company. See the [Webhooks integration page](/integrations/webhooks) for setup, retry behavior, and the event catalog.
## Parent and child companies
A [company can have a parent](/concepts/companies-hierarchy). A user in the parent has the same role and permission level in every child. Most endpoints scope to a company via the URL — for example, `GET /v1/companies/{company-id}/projects` lists Projects for one specific company. Use the company-scoped variant when you need to read or write data inside a child.
`parent_company_id` is read-only in the API. Circular references are rejected. List child companies with `GET /v1/companies/{company-id}/children`.
## Quick example
Fetch the first page of Projects for a company.
```bash theme={null}
curl https://api.tread-horizon.com/v1/companies/{company-id}/projects \
-H "Authorization: Bearer $TREAD_TOKEN" \
-H "Accept: application/json"
```
Sample response:
```json theme={null}
{
"data": [
{
"id": "f0a1...",
"name": "Highway 401 Resurfacing",
"external_id": "PRJ-2025-014",
"starts_on": "2025-05-01",
"ends_on": "2025-09-30",
"company_id": "abc...",
"customer_id": "cust...",
"created_at": "2025-04-12T14:22:10Z"
}
]
}
```
## Going further
> **[Generate an auth token](#authentication)**
>
> Log in and exchange credentials for a bearer token.
> **[Webhooks](/integrations/webhooks)**
>
> Subscribe to events and receive them in real time.
> **[Tread Horizon app](https://app.tread-horizon.com)**
>
> Sign in to the platform that backs this API.
> **[Importer APIs (Beta)](/api-reference/importer-apis)**
>
> Bulk-load Orders, Projects, Tickets, and Files with async ingest endpoints.
> **[Status](https://status.tread.io)**
>
> Live uptime and incident history.
# Health Check
Source: https://docs.tread.ai/api-reference/reflection/health-check
/api-reference/openapi.json get /health
`/health` is used by load balancers in AWS as well as in our Docker image.
# Retrieve Mobile Context
Source: https://docs.tread.ai/api-reference/reflection/retrieve-mobile-context
/api-reference/openapi.json get /v1/mobile_context
Retrieve the current Mobile Context
# Retrieve the current Version
Source: https://docs.tread.ai/api-reference/reflection/retrieve-the-current-version
/api-reference/openapi.json get /version
Retrieve the current `Version`
# Site Coordinates & Geofences
Source: https://docs.tread.ai/api-reference/site-coordinates-geofences
Send lat and lon on imported Sites so Tread builds a working geofence and logs arrival and departure events.
Coordinates sent through the [Importer APIs](/api-reference/importer-apis) are what turn an imported Site into live truck tracking. Get them right and arrivals, departures, and cycle times post on their own. Get them wrong and the Site imports with no fence around it, and every load needs a phone call.
## Send lat and lon together
Include `lat` and `lon` on every [Site](/concepts/sites-geofences) in your `sites` array. Those two values are what Tread builds the geofence (a virtual fence around a Site) from. Send both or neither.
```json theme={null}
{
"projects": [
{
"external_id": "PRJ-2025-014",
"customer": { "external_id": "CUST-441" },
"sites": [
{
"waypoint": "pickup",
"external_id": "SITE-QUARRY-1",
"name": "Quarry Rd Scale House",
"site_type": "Quarry",
"full_address": "4500 Quarry Rd, Denver, CO",
"lat": 39.812345,
"lon": -105.087654
},
{
"waypoint": "drop_off",
"external_id": "SITE-JOB-19",
"name": "Main St Paving",
"site_type": "JobSite",
"full_address": "800 Main St, Denver, CO",
"lat": 39.745210,
"lon": -104.998320
}
]
}
]
}
```
Format rules:
* **Signed decimal degrees.** Longitude is negative in North America. No `N`/`W` suffixes and no degrees-minutes-seconds.
* **Six decimal places, maximum.** Tread stores six, which is about 4 inches. Extra digits get rounded off, so there's nothing to gain by sending twelve.
* **Numbers, not quoted strings.**
> [!WARNING]
>
> `lat` without `lon` fails validation, and the Site is dropped from the payload with no error. The Project still returns `processed` — that pickup or drop-off is simply missing. Sending neither coordinates nor `full_address` does the same thing.
Projects read only the `pickup` and `drop_off` waypoints. Orders also read `staging`.
## Aim at where trucks stop
The geofence is a circle centered on the exact `lat`/`lon` you send. Point it at the scale house, the gate, or the stockpile.
A mailing address or a parcel centroid is the most common reason a fence never triggers. The coordinates land somewhere a truck never parks, so no GPS ping falls inside the circle.
## Coordinates beat addresses
Send `lat`/`lon` whenever your source system has them. When a Site arrives with `full_address` and no coordinates, Tread geocodes the address and accepts the result only when Google returns a `ROOFTOP` or `GEOMETRIC_CENTER` match.
Rural quarry and job-site addresses often resolve to `RANGE_INTERPOLATED` or `APPROXIMATE`. Tread rejects those on purpose, because a fence in the wrong place is worse than no fence. The Site is created with no coordinates and no geofence.
Two more things worth knowing about the fallback:
* Geocoding runs only when both `lat` and `lon` are empty. It never overwrites coordinates you sent.
* An address of `UNDEFINED` or `UNKNOWN` is skipped rather than geocoded. Integrations send these as placeholders.
Keep `full_address` even when you send coordinates. Tread uses it as the geofence label and for display.
## Set the default radius first
With coordinates present, Tread draws a circle centered on them using your company's default radius. Confirm that default before your first import.
**1. Open Settings → Configuration**
Find the **Geofence Creation** panel. See [Platform Configurations](/onboarding/platform-configurations) for the rest of the settings on this page.
**2. Set Auto Geofence Type to Circle**
**None** stores no default radius, so no geofence gets created — no matter how good your coordinates are. The **Radius** field only appears once the type is **Circle**.

**3. Size the radius to the site**
The field displays feet or meters based on your company's unit setting. The API always uses meters.
| Site kind | Typical radius |
| - | - |
| Large pit, quarry, or yard | 100–150 m (330–500 ft) |
| Plant or depot | 75–100 m (250–330 ft) |
| Tight urban drop-off | \~50 m (165 ft) |
Cover the working area plus GPS drift. Keep circles of neighboring Sites from overlapping, or arrival and departure attribution gets ambiguous.
## Override the radius on one Site
Add a `next_billion_geofence` object to a Site to override the company default. `circle_radius` is in meters and must be greater than zero. `circle_center` defaults to the Site's `lat`/`lon` when you leave it out.
```json theme={null}
{
"waypoint": "pickup",
"external_id": "SITE-QUARRY-1",
"name": "Quarry Rd Scale House",
"lat": 39.812345,
"lon": -105.087654,
"next_billion_geofence": {
"geofence": {
"name": "Quarry Rd",
"type": "circle",
"circle_radius": 120
}
}
}
```
`type` accepts `circle` or `polygon`. Polygons take a `geojson` object instead of a radius.
> [!WARNING]
>
> A malformed `next_billion_geofence` drops the whole Site, silently, exactly like bad coordinates. Leave the key off entirely when you aren't overriding the default.
## Coordinates are set once
A Site that matches an existing record is reused as-is. Tread matches on `external_id`, or on `name` when the stored Site has no `external_id`. New `lat`/`lon` values in a later payload are ignored.
Get coordinates right on the first import. Corrections after that go through the Tread app or the REST Site endpoint, not the Importer APIs.
## Verify after import
A `202 Accepted` and a `processed` state don't prove the Site landed. Check the map instead.
* The Site draws a circle on the [Live Map](/workflows/track-drivers-collect-tickets).
* Loads running through it log arrival and departure events.
* A Site that appears on the Project but draws no circle means its coordinates or the default radius failed.
## Common pitfalls
* **One coordinate without the other drops the Site.** No error surfaces on the import record. Send both or neither.
* **Auto Geofence Type set to None means no geofence.** Perfect coordinates still produce nothing.
* **Mailing addresses put the fence in the wrong place.** Use the scale house, gate, or stockpile.
* **Address-only Sites often get no coordinates.** Anything less accurate than `GEOMETRIC_CENTER` is rejected, which leaves the Site with no fence.
* **Re-importing doesn't fix coordinates.** Matched Sites keep the values they were created with.
* **Overlapping circles confuse attribution.** Tighten the radius or switch to a polygon.
## Related
* [Importer APIs](/api-reference/importer-apis) — the `/ingest/projects` and `/ingest/orders` payloads
* [Sites & Geofences](/concepts/sites-geofences) — geofence types, timers, and auto-end behavior
* [Platform Configurations](/onboarding/platform-configurations) — the company-wide geofence defaults
* [Onboarding: Sites](/onboarding/master-data/sites) — setting up Sites in the app
* [Paving & Moving Geofences](/specialized/paving-geofences) — fences that travel with the work
# Retrieve Daily Ticket Data Export
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-daily-ticket-data-export
/api-reference/openapi.json get /v1/companies/{company-id}/data_export/tickets/day/{date}
Returns a daily export of `tickets` for given company. Please
note, this endpoint is only available to users authenticating
an `m2m_client`. This endpoint must be configured for customer
by Tread. The file_url is signed and will be valid for 1 hour
from time of api call.
# Typeahead search on Accounts
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts
/api-reference/openapi.json get /v1/accounts/typeahead
Typeahead search against the `name` property for `Accounts` visible to the currently authenticated `Company`.
# Typeahead search on Accounts for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/typeahead
Typeahead search against the `name` property on `Accounts` for a `Company`.
# Typeahead search on Accounts for a Company with with Capacity Data
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts-for-a-company-with-with-capacity-data
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/capacity/typeahead
Typeahead search against the `name` property on `Accounts` for a `Company`.
Unlike the standard typeahead, this endpoint includes additional fields with capacity data.
Additionally, this endpoint automatically filters to:
- Connnected Accoubts
- Vendor-type Accounts
- Accounts that are currently scheduled on
The `availability` filter can be set to true/false to only include Accounts that are scheduled on or off for the `date` specified. If no `date` is specified then the current day is used.
# Typeahead search on AddOns for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-addons-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons/typeahead
Typeahead search against the `name` property on `AddOn` for a `Company`
# Typeahead search on Children for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-children-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/children/typeahead
Typeahead search against the `legal_name` property on `Children` for a `Company`.
# Typeahead search on Companies
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-companies
/api-reference/openapi.json get /v1/companies/typeahead
Typeahead search against the `legal_name` property for `Companies` visible to the currently authenticated `Company`.
# Typeahead search on Departments by Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-departments-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/departments/typeahead
Typeahead search against the `name` property on `Departments` for a `Company`.
# Typeahead search on Equipment for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/typeahead
Typeahead search against the `name` property on `Equipment` for a `Company`.
# APEX Scale, Command Alkon
Source: https://docs.tread.ai/integrations/apex-command-alkon
Tread enables direct integrations with APEX Scale.
Contact [integrations@tread.io](mailto:integrations@tread.io) to learn more
# Astec Scale
Source: https://docs.tread.ai/integrations/astec-scale
Tread enables direct integrations with Astec Quarry & Plant Scale Ticket software
Contact [integrations@tread.io](mailto:integrations@tread.io) to learn more
# Paver Tracker
Source: https://docs.tread.ai/integrations/paver-tracker
Connect live paver position to drive moving geofences on paving orders.
Tread reads live paver position from Paver Tracker to drive [moving geofences](/specialized/paving-geofences). A moving geofence is a [geofence](/concepts/sites-geofences) — a virtual fence around a site — that follows the paver as the work advances. Use it on linear paving jobs where a static geofence does not cover the work. Arrive and depart events stay aligned with the work, with no manual site edits.
## Prerequisites
* A Paver Tracker connection on your account. Tread configures the connection and the paver list for you — there is no self-serve credential entry.
* Each paving [project's](/concepts/orders-projects) **External ID** matches the job ID in Paver Tracker.
* **Sync sites from telematics (PaverTracker)** turned on for each order that should follow a paver.
## How it works
1. **Daily match** — Tread reads the day's Paver Tracker report and matches it to your projects by External ID. If one project runs several crews, Tread also matches each order by foreman name.
2. **Equipment sync** — Tread creates an [equipment](/concepts/equipment) record for each paver, named after the vehicle in Paver Tracker. Name changes sync automatically.
3. **Site creation** — On each matched order, Tread attaches a Daily site with a moving geofence tied to the paver's equipment record. Milling equipment becomes the pickup site; other equipment becomes the drop-off site.
4. **Position polling** — About once a minute during active work, Tread polls the paver's position and moves the site and its geofence to match.
5. **Swap handling** — If Paver Tracker reports a different paver on the work, Tread re-points the moving geofence to the new equipment automatically.
## What flows where
| Data | Direction | Frequency |
| - | - | - |
| Daily report (job ID, foreman, vehicles) | Paver Tracker → Tread | Daily |
| Paver GPS position | Paver Tracker → Tread | About once a minute during active work |
| Vehicle names and IDs | Paver Tracker → Tread | With each sync |
## Setup
**1. Connect Paver Tracker**
Contact Tread to connect Paver Tracker to your account. Tread configures the credentials and the paver list.
**2. Set project External IDs**
On each paving project, set **External ID** to the job ID used in Paver Tracker.
**3. Turn on site sync per order**
On each order that should follow a paver, turn on **Sync sites from telematics (PaverTracker)**.
**4. Confirm the geofence moves**
Watch the map as the paver moves. The geofence should follow within about a minute.
## Limitations
* When sync is on, Paver Tracker can attach or move Daily sites on the order. A manually selected drop-off site can be overwritten — turn sync off on that order to keep it.
* Position is polled, not streamed. Expect up to a minute of lag.
* If Paver Tracker has no recent position fix, the geofence stays at its last position.
## Troubleshooting
**Geofence not moving with the paver**
1. Confirm **Sync sites from telematics (PaverTracker)** is on for the order.
2. Confirm the project's **External ID** matches the job ID in Paver Tracker.
3. Check Paver Tracker for a recent position fix on the paver.
**Order not matched to a paver**
1. Confirm the project's External ID.
2. If the project runs several crews, confirm the order's foreman name matches the name in Paver Tracker.
# Telematics & ELD (Samsara, Motive, Geotab)
Source: https://docs.tread.ai/integrations/telematics
Connect your ELD or telematics provider — Samsara, Motive, Geotab, and hundreds more — to see live truck locations in Tread.
Connect your ELD (electronic logging device) or telematics provider and Tread tracks your trucks in real time. Live positions show on the [Live Map](/workflows/track-drivers-collect-tickets) and let Tread detect when a truck enters or leaves a [geofence](/concepts/sites-geofences) (a virtual fence around a Site).
## Supported providers
Tread connects to more than 300 ELD and telematics providers, including:
| Samsara | Motive (formerly KeepTruckin) | Geotab |
| - | - | - |
| Verizon Connect | Omnitracs | Teletrac Navman |
| Zonar | Azuga | Trimble |
| Isaac | Webfleet | GPS Insight |
| Fleet Complete | Lytx | Linxup |
| BigRoad | Rand McNally | JJ Keller |
Don't see yours here? Search for it in the provider list when you connect. If it's not there either, contact [support@tread.io](mailto:support@tread.io).
## Connect your provider
You need a login for your ELD provider's account. Some providers ask for an API key instead.
**1. Open Settings → Integrations and click Manage on Telematics**

**2. Click Connect provider**
If you've connected a fleet before, the button says **Connect fleet**.

**3. Pick your provider and sign in**
A popup opens. Start typing your provider's name, select it, and sign in to grant Tread access to your vehicle data.

> [!TIP]
>
> Popup didn't open? Allow popups for Tread in your browser, then click the button again.
## Match vehicles to Equipment
After the fleet connects, click **View vehicles** and match each vehicle to an [Equipment](/concepts/equipment) record. Tread records each matched vehicle's live position against that Equipment.
## Troubleshooting
> **Trucks stopped showing on the Live Map**
>
> The most common cause is expired credentials at your ELD provider. For example, the user account you signed in with was archived or its password changed. Reconnect with an active account. If trucks still don't show, contact [support@tread.io](mailto:support@tread.io).
> **A vehicle shows up but isn't on the right truck**
>
> Check the vehicle's match under **View vehicles** and pick the right [Equipment](/concepts/equipment) record.
## Related
* [Integrations Setup](/onboarding/integrations) — connect telematics during onboarding
* [Sites & Geofences](/concepts/sites-geofences) — how Tread knows when trucks arrive and leave
* [Equipment & Equipment Types](/concepts/equipment) — the records vehicles match to
* [Paver Tracker](/integrations/paver-tracker) — live paver positions for paving jobs
# Webhooks
Source: https://docs.tread.ai/integrations/webhooks
Real-time event subscriptions — receive Tread events for Orders, Jobs, Loads, Tickets, and imported records.
Webhooks push real-time events from Tread to a URL you control. Use webhooks when your downstream system (data warehouse, ERP, custom dashboard) needs to react the moment something happens in Tread — an Order is created, a Ticket is approved, a Project is updated — instead of polling the API.
## Prerequisites
* An HTTPS endpoint you control. HTTP is rejected.
* A Tread admin user with the **Integrations** permission.
* Ability to verify HMAC signatures on the receiving side.
* A retry-tolerant handler. Tread retries failed deliveries.
## How it works
1. **Register a subscription** — Set the destination URL, the HMAC signing secret, and any custom request headers in **Settings → Integrations → Webhooks**.
2. **Pick triggers** — Each subscription listens to one or more triggers. A trigger is a topic plus an event (for example, `Order::create`).
3. **Tread fires events** — When a matching action happens in the app, Tread builds a JSON envelope and POSTs it to your URL.
4. **Verify the signature** — Tread signs the body with HMAC-SHA256 using your secret. The signature lands in the `X-Tread-Hmac-sha256` header.
5. **Acknowledge with 2xx** — A 2xx response marks the event delivered. Anything else triggers a retry.
## Event topics and types
Tread emits events on these topics:
| Topic | What it is |
| - | - |
| `Order` | A daily [Order](/concepts/orders-projects) |
| `Job` | One [Driver's](/concepts/driver-lifecycle) assignment for one Order |
| `Load` | One pickup-to-drop-off cycle |
| `Ticket` | The [record of one Load](/concepts/tickets-timesheets) — proof the work happened |
| `ImportedProject` | A Project pushed in via the import API |
| `ImportedOrder` | An Order pushed in via the import API |
| `ImportedTicket` | A Ticket pushed in via the import API |
Each topic supports these event types: `create`, `update`, `state_change`, `skip`, `error`. Subscribe to the combinations you care about.
## Payload format
Every delivery has the same envelope:
```json theme={null}
{
"subscription_id": "uuid",
"trigger_id": "uuid",
"event_id": "uuid",
"delivery_id": "uuid",
"attempt": 1,
"event_time": "2026-04-30T14:21:09Z",
"event": "Order::create",
"payload": { },
"meta": {
"company_id": "uuid"
}
}
```
The `payload` field holds the resource as it appears in the Tread API. The `event` field is the topic and event type joined by `::`. The `attempt` field starts at 1 and increments on retry.
## Setup
**1. Open Webhooks settings**
Go to **Settings → Integrations → Webhooks**.
**2. Add a subscription**
Enter your HTTPS endpoint URL. Generate or paste an HMAC signing secret. Tread will include the signature on every delivery.
**3. Pick triggers**
Select the topic-and-event combinations you want. Start narrow — `Order::create` and `Ticket::state_change` cover most use cases.
**4. Add custom headers (optional)**
If your endpoint needs an auth header or routing token, add it under request headers.
**5. Send a test event**
Use the **Send test** button to confirm your endpoint receives, verifies, and acknowledges. Inspect the delivery log for the response code.
## Signature verification
For each delivery, Tread computes:
```
HMAC-SHA256(secret, request_body) → hex digest
```
The digest is sent in the `X-Tread-Hmac-sha256` header. Recompute on your side using the raw request body and compare. Reject any request where the signature does not match.
## Retry behavior
* Failed deliveries (non-2xx, timeout, redirect) are retried at increasing intervals.
* Each event has a retry limit. Once hit, delivery stops and the failure is logged.
* The `attempt` field on the envelope tells you which retry you're seeing.
* Delivery timeout is 10 seconds. Acknowledge fast and process async.
## Limitations
* HTTPS only. HTTP URLs are rejected at registration.
* One destination URL per subscription. To fan out, register multiple subscriptions.
* 10-second delivery timeout. Long-running handlers must respond first and process in the background.
* Tread does not guarantee event ordering. Use `event_time` to reconcile.
* Replays are not supported. Once a delivery exhausts retries, it's gone — design for at-least-once delivery and idempotent handlers.
## Troubleshooting
**Signature mismatch**
1. Confirm you're hashing the raw request body, not a parsed copy.
2. Confirm you're using the same HMAC cipher (default: SHA-256).
3. Rotate the secret if it may have leaked.
**Endpoint times out**
1. Reduce handler work — acknowledge immediately, queue the actual processing.
2. Check the delivery log for response time.
**Events not firing**
1. Confirm the subscription has the right trigger (topic + event).
2. Confirm the action in Tread matches the topic. `Order::create` fires on Order creation, not Order updates — add `Order::update` separately.
## Related
* [API Reference](/api-reference/introduction) — the resource shapes returned in the payload
* [Agave](/integrations/agave) — accounting integration for AR/AP
# WEM Scale
Source: https://docs.tread.ai/integrations/wem-scale
Tread enables direct integrations with WEM Scale Ticket software
Contact [integrations@tread.io](mailto:integrations@tread.io) to learn more
# Driver App
Source: https://docs.tread.ai/mobile/driver-app
What Drivers see on their phone — and how to onboard them.
The Tread Driver App puts a Driver's dispatches, tickets, and signatures on one phone. Dispatchers see progress in real time instead of calling for updates.
## Who it's for
[Drivers](/concepts/driver-lifecycle) — the users who receive a dispatch and perform it. That includes your own Internal Drivers, [Shared Drivers](/concepts/connected-ecosystem) (Drivers another account shares to you), and Owner-Operators (O\&O — a Vendor with a single Driver, dispatched directly as a Shared Driver).
## Key features
* Accept jobs and see the full day's assignments before the first run.
* Auto-start and auto-end on [geofences](/concepts/sites-geofences) (a virtual fence around a site).
* Capture scale tickets by photo. OCR pre-fills the load fields.
* Capture e-signatures by shift, job, or load as required.
* Message dispatch from the active job. See [Messages & Broadcasts](/mobile/messaging).
* Works [offline](/mobile/offline-mode). Uploads queue when service drops and send when it returns.
## Find your way around
The bottom bar holds up to five tabs. Which tabs a user sees depends on their role. When a user has more than five, the bar shows the first four in this order: **Assigned**, **Dispatch**, **History**, **Messages**, **Review**, **Live Map**, **Account**. A **More** tab follows. **More** opens the rest — for example **Live Map** and **Account**.
A badge on **More** counts unread messages on the tabs inside it.

## Walkthrough
**1. Sign in**
Download Tread from the App Store or Google Play, or go to [link.tread.io/app](https://link.tread.io/app) from any phone. Sign in with the phone number on the driver's user record — no password. Tread texts a one-time code to finish sign-in. See [Adding Drivers](/onboarding/master-data/drivers).


**2. Enable location permissions**
Tread tracks driver location **only while a job is active**. No tracking occurs outside of active jobs. Allow location access when prompted.
**iOS**


**Android**


**3. Accept the day's jobs**
Assigned jobs appear in the Assigned menu. Tap **View Request** → **Accept** on each. Declined jobs return to dispatch.


**4. Start the run**
When Telematics integrations enabled, Tread auto-starts when the truck enters the pickup geofence. The driver can also press **Start** to start their jobs.

**5. Capture the ticket**
On loaded, snap a photo of the scale ticket. OCR fills the ticket number and quantity. Confirm or edit.
If the photo looks blurry, Tread shows **Photo quality warning**. Tap **Retake photo** for a clearer shot, or **Use anyway**. A clear photo lets Tread read the ticket for you.
If your company has the **Adjust photo** screen, drag the corners to the edges of the ticket and tap **Use photo**. Tap **Rotate** to turn it, or **Use full photo** to skip cropping.
Quantities accept a comma or a period as the decimal — *29,39* saves as 29.39. A ton quantity of 100 or more shows **Double-check the quantity** before you save.
Wrong photo? Retake it before you submit. The new photo replaces the old one.


**6. End the load**
When the job has a set load count or quantity, Tread auto-ends it when the truck leaves the drop-off geofence. The driver can also press **Stop Job**, confirm the prompt, then review and tap **Submit**.


**7. Sign and close out**
At end of shift the driver can sign a load. Foremen or customers can sign per job or per load. See [Driver E-Signatures](/specialized/driver-esignature).
> [!TIP]
>
> **Getting too many texts?** Drivers open **Account → Notifications** in the app and uncheck the SMS alerts they don't want. If the boxes are greyed out, push notifications are off for that driver. Drivers can still turn off SMS alerts from this screen.
>
> 
## Onboard your fleet
Driver adoption is a change-management problem, not a technology problem. Train in person and track adoption in Tread.
**1. Train one crew at a time**
Walk drivers through the app in person. Avoid email-only rollouts.
**2. Keep tickets and signatures in the app**
Tickets and signatures come from the app. No paper backup.
**3. Coach weekly**
Review missing tickets and signature gaps in Tread each week. Coach the drivers who lag.
**4. Expand at 90% adoption**
Once the first crew captures 90% of its tickets in the app, roll out to the next.
## Related
* [Messages & Broadcasts](/mobile/messaging)
* [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets)
* [Digital Tickets](/specialized/digital-tickets)
* [Driver E-Signatures](/specialized/driver-esignature)
# How to Edit Your Username in Tread
Source: https://docs.tread.ai/mobile/manage-users
Edit a user's name, phone, email, roles, and truck from the mobile app.
Keep names, phone numbers, and emails current from the field — so dispatches and notifications reach the right person without waiting for someone at a laptop.
## Who can use it
**Manage Users** appears on the **Account** tab only if your role includes user management. If you don't see it, ask your Admin to make the change or update your [role](/concepts/roles-permissions).
From this screen you can edit any user on your account, not just yourself.
## Edit a user
**1. Open the Account tab**
Open the Tread app — or go to [link.tread.io/app](https://link.tread.io/app) to install it. Tap **Account** in the bottom menu.

**2. Tap Manage Users**
Scroll down the Account screen and tap **Manage Users**.

**3. Tap EDIT next to the user**
The Users screen lists every user on your account with their roles. Use **Search** to find someone, then tap **EDIT** on their row.

**4. Update the fields**
You can change the user's **First Name**, **Last Name**, **Email**, **Phone**, and **Roles**. If the roles include [Driver](/concepts/driver-lifecycle) (the user who receives a dispatch and performs it), a **Select Truck** field also appears to set the user's truck.
> [!WARNING]
>
> The phone number is also how the user signs in. After you change it, sign-in codes go to the new number. See [Mobile Troubleshooting](/mobile/troubleshooting) if the user can't sign in.
**5. Tap SUBMIT**
Tap **SUBMIT** at the top right. Changes save immediately.

> [!TIP]
>
> To add a new user instead, tap **+ ADD** at the top of the Users screen. See [adding dispatchers and admins](/vendor-guide/setup-trucks-and-drivers).
## Related
* [Roles and permissions](/concepts/roles-permissions) — what each role can see and do.
* [Driver lifecycle](/concepts/driver-lifecycle) — how Driver records work.
* [Mobile Troubleshooting](/mobile/troubleshooting) — sign-in codes and common app issues.
# Messages & Broadcasts
Source: https://docs.tread.ai/mobile/messaging
Message Drivers from an order or a dispatch on the web or in the Tread app, send broadcasts, and reply from the active job.
Dispatchers and [Drivers](/concepts/driver-lifecycle) message each other inside Tread, on the web or in the app. Drivers get a push notification and reply in the same conversation. Each conversation is tied to the order or dispatch it is about. That means fewer calls and fewer texts lost in a personal phone.
> [!NOTE]
>
> Messages is turned on per company. If you don't see **Messages** on the web or in the app, contact Tread support.
## Where conversations live
| Conversation | Who is in it | Where to find it |
| - | - | - |
| **Order thread** | Dispatch and the Drivers on an [order](/concepts/orders-projects) when the thread starts | Order → **Messages** → **Order thread** |
| **Jobs DMs** | Dispatch and the Driver on one dispatch | Order → **Messages** → **Jobs DMs**, and the Driver's active job → **Messages** |
| **Broadcast** | Dispatch and the Drivers you pick | **Messages** tab → **Broadcasts** |
The **Messages** tab lists every conversation, filtered by **All**, **Jobs**, **Orders**, and **Broadcasts**.
> [!TIP]
>
> Drivers assigned to an order after its order thread starts are not added to it. Use **Jobs DMs** to reach them.
## Message Drivers on the web
**Messages** in the top menu lists every conversation. A badge shows your unread count. On **Dispatch**, the **Unread messages** filter shows only orders with unread replies.

**1. Message one Driver**
On **Dispatch**, click the actions menu (**⋯**) on the job row, then click **Message driver**. Click **Start conversation**, or **Open conversation** if one already exists. The conversation is about that job only.
**2. Message every Driver on an order**
Click the actions menu (**⋯**) on the order card, then click **Message all drivers**. Or expand the order and open its **Messaging** tab. **Order thread** holds one conversation for every Driver on the order. **Job DMs** lists the one-to-one conversations on the order's jobs.
**3. Message all your Drivers**
In **Messages**, click **New message**. Under **Conversation type**, pick **Direct** for one Driver or **Broadcast** for many. For a broadcast, pick **Recipients** or **Select all drivers**, choose **Replies**, then click **Review broadcast**.
Messages can include photos and files. You can edit or delete a message you sent. A broadcast reaches at most 500 Drivers.
## Message Drivers from Dispatch in the app
**1. Open the order's conversations**
On the **Dispatch** tab, tap the chat icon (**Message Drivers**) on the order card. You can also tap **Message Drivers** in the order's **Actions** sheet. Both open the order on its **Messages** tab.

**2. Pick the order thread or a job DM**
Tap **Order thread** to message every Driver on the order at once. If no thread exists yet, tap **Open order conversation**. Tap **Jobs DMs** to message one Driver about their dispatch.

**3. Watch for unread counts**
The chat icon turns red and shows a count when a Driver replies. The **Dispatch** and **Messages** tabs show a badge with the total unread.
> [!NOTE]
>
> **Text All Drivers** in the **Actions** sheet still sends an SMS. See [Text Drivers](/workflows/text-drivers). **Message Drivers** sends an in-app message.
## Send a broadcast
A broadcast sends one message to many Drivers at once.
**1. Start a new broadcast**
On the **Messages** tab, tap **New message**, then **New broadcast**.

**2. Choose recipients and replies**
Tap **Choose recipients**, or **Select all drivers**. Under **Replies**, pick one:
* **Forum** — everyone can reply.
* **One-way** — no replies.
* **Private replies** — replies go privately to you.
Add an optional **Conversation name** and your **Message**.
**3. Review and send**
**Review broadcast** shows the recipient count and the reply setting. Check it before you send.
> [!WARNING]
>
> A broadcast can't be recalled once it's sent.
Only users whose role can create conversations and broadcasts see **New broadcast**.
## What Drivers see
* **Messages on the active job.** The active job has **Info**, **Tickets**, and **Messages** tabs. Dispatch starts the conversation. Until then the tab shows *No messages from dispatch yet*.
* **Push notifications.** Tapping a message notification opens that conversation.
* **Private replies.** On a broadcast with private replies, Drivers tap **Reply privately**. Dispatch sees which broadcast the reply answers.
* **Replies off.** On a one-way conversation, Drivers see *Replies are off for this conversation* instead of a reply box.
* **No signal.** Messages sent without service show *Waiting for connection* and send when the phone reconnects. See [Offline Mode](/mobile/offline-mode).
## Related
* [Dispatch a Job (Web & Mobile)](/dispatch-guide/dispatch-a-job)
* [Text Drivers](/workflows/text-drivers)
* [Driver App](/mobile/driver-app)
* [Offline Mode](/mobile/offline-mode)
# Offline Mode in the Tread Driver App
Source: https://docs.tread.ai/mobile/offline-mode
> #### Drivers can access basic functions without internet. In offline mode they can start, stop, and end their log (with time and location tracked), and upload scale tickets.
## **What drivers see**
If a driver loses internet or can't reach Tread, the app detects this and displays a prompt. From there, the driver can choose to enter offline mode or wait and try connecting again.
While offline, a banner is shown at the top of the app so the driver always knows they're working without internet or a connection to Tread.
#### Offline Mode Prompt

***
## **What drivers can do offline**
* **Log management** — Drivers can start, pause, and end their log. Time and location are tracked on-device throughout.

While offline, time and location are logged.
* **Scale tickets** — Drivers can create and submit scale tickets, including capturing a ticket photo.

* **Messages** — Drivers can write [messages](/mobile/messaging) to dispatch. Each one shows *Waiting for connection* until the phone reconnects, then sends. Past messages in a conversation stay readable offline.
***
## **Data syncing**
While offline the app stores location pings, time tracking, scale tickets, and unsent messages locally on the device.
Once connectivity is restored, the app syncs all offline data automatically

# Past Shifts & History
Source: https://docs.tread.ai/mobile/past-shifts-history
How Drivers review past shifts, hours, and completed dispatches in the app.
[Drivers](/concepts/driver-lifecycle) look up their own hours, tickets, and past dispatches in the app — no call to the office needed.
## Open the History page
Sign in to the Tread app ([link.tread.io/app](https://link.tread.io/app)). Tap **History** — the clock icon in the bottom menu. The page has three tabs: **In Review**, **Done**, and **Time Logs**.
## View past shifts
**1. Open the Time Logs tab**
Tap **Time Logs**. Each row is one shift, with total hours, loads, tickets, and approval status.
**2. Open a shift**
Tap a shift to see its Past Logs. This shows start and end times, break time, [timesheets](/concepts/tickets-timesheets), and the completed work on each dispatch.

## View completed dispatches
**1. Open the Done tab**
Tap **Done**. Completed and canceled dispatches appear as cards. Use **All Dates** to filter by date.

**2. Open a dispatch**
Tap anywhere on the dispatch card. Job Info shows hours, delivered totals, and every ticket and document on the job.

## Hours lock after approval
Once a dispatch is field approved or billing approved, its times and timesheet lock in the app. The **Approvals** section on the shift or Job Info shows who approved it under **Field** and **Billing**, and when. Owner-Operators see this section on Job Info too.
Hours a Driver enters always save to the timesheet. When no time was logged but a scanned timesheet has times, the app shows those times with a **Scanned** badge. Times an approver changed show an **Adjusted** badge.
> [!TIP]
>
> Need to change locked hours? Ask your office to unapprove the dispatch first. See [Approving Shifts](/workflow/approvals/shifts).
## Which tab to use
| You want | Tab |
| - | - |
| Hours worked and timesheets for a shift | **Time Logs** |
| Loads, tickets, and documents on a past dispatch | **Done** |
## Related
* [Driver App](/mobile/driver-app)
* [Tickets & Timesheets](/concepts/tickets-timesheets)
* [Driver Lifecycle](/concepts/driver-lifecycle)
# Mobile Troubleshooting
Source: https://docs.tread.ai/mobile/troubleshooting
Login codes, GPS permissions, missing jobs, app updates — fix the most common driver and foreman issues.
## When to use this page
Send this link to a driver or foreman before opening a support ticket. Most issues resolve in under two minutes. If a fix below does not work, contact your Admin with the driver's phone number and the time of the issue.
## Common issues
> **Verification code didn't arrive**
>
> A code only sends to a phone number that already exists on a Tread account. If the driver was never added, no code will arrive — resending won't help.
>
> **Check in order:**
>
> 1. **Confirm the driver has an account.** This is the most common cause support sees. The dispatcher or Admin must add the driver first. See [Driver record](/concepts/driver-lifecycle).
> 2. **Check the number entry.** Type the 10-digit number only. An extra leading "1" or country code blocks the code.
> 3. **Check whether the driver replied STOP to a Tread text.** STOP unsubscribes the number, and login codes stop with it. The app still shows "Error sending code, please check your phone number" — the number itself is fine. Fix: the driver opens the thread where earlier "Your Tread verification code is…" texts arrived, replies **START** in that same thread, then taps **Send code via text** again. See [Text Messages from Tread](/resources/text-messages).
> 4. Wait 60 seconds, then tap **Resend code**. SMS deliverability varies by carrier — some codes arrive in 5 seconds, others take up to a minute.
> 5. Check the phone has signal (one bar is enough).
> 6. Confirm the phone number on file matches the SIM in the phone. A driver who swapped phones but kept the number is fine; a driver on a new number needs the Admin to update the [Driver record](/concepts/driver-lifecycle).
>
> For Spanish-speaking drivers reporting *"el código no llega"* — same fix. The code text arrives in English, even when the app is in Spanish. See [Text Messages from Tread](/resources/text-messages#language).
> **SMS won't work — sign in another way**
>
> SMS is one of three ways into the app. If codes keep failing, use email instead.
>
> * **Password:** the driver's email invitation includes a link to create a password. Sign in with it, or tap **Forgot password** to reset.
> * **Magic link:** tap **Sign in with email**, then **Send magic link**. Open the link from the phone's email app.
>
> Reinstalling? Get the app at [link.tread.io/app](https://link.tread.io/app).
> **Driver can't sign in but loads need to keep moving**
>
> A dispatcher can run the job from the web app while the sign-in issue gets fixed. The driver does not need to be in the app for the loads to progress.
>
> **From the Dispatch page:**
>
> 1. Find the driver's job row.
> 2. Click the job's status and pick the next step. Accept the job first if the driver never accepted it.
> 3. Keep advancing the status as the truck moves, through to completion.
>
> Moving the job to **En Route** alone is not enough — the driver must sign in to run the job from the app. Advancing each step from the Dispatch page is the only way to progress the loads on the driver's behalf.
>
> This is a stopgap, not a fix. Resolve the sign-in with the steps above, or send the driver's phone number and the time of the issue to your Admin.
> **My boss said I got a dispatch but I don't see it**
>
> Almost always a stale cache or a vendor-assignment mismatch.
>
> **Try in order:**
>
> 1. **Pull-to-refresh** the home screen. Drag down from the center of the page.
> 2. **Force-quit and reopen** the app.
> 3. **Check the app version** under **About**. If older than the current store version, update.
> 4. **Confirm the vendor assignment.** Ask the dispatcher which Vendor the dispatch was sent to. If it went to a Vendor the driver is no longer linked to, the dispatch will not appear. See [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
> **iPhone — the job won't start and Motion & Fitness won't turn on**
>
> The app needs Fitness Tracking switched on at the iPhone level. Turning it on inside the Tread app alone won't work.
>
> 1. Open **Settings → Privacy & Security → Motion & Fitness**.
> 2. Turn on **Fitness Tracking**.
> 3. Quit the Tread app and open it again.
>
> Location Services can be on and the job will still refuse to start. Both settings have to be on.
> **iPhone — Always-Allow location prompt missing after update**
>
> iOS sometimes drops the location prompt after an OS update. The app needs **Always** access to log GPS in the background.
>
> **Fix manually:**
>
> 1. Open **Settings → Privacy & Security → Location Services**.
> 2. Confirm Location Services is **On**.
> 3. Scroll to **Tread**.
> 4. Set to **Always**.
> 5. Toggle **Precise Location** to on.
> 6. Toggle **Motion & Fitness** to on. It lets the app pause GPS while the truck is parked, which saves battery.
>
> Reopen the app and check **GPS Status**. **Online** means permissions are right. An **Update permission** warning means a setting above is still off.
> **iPhone — location is inaccurate or dots are missing**
>
> Tread discards GPS pings that are too imprecise. If the phone only reports a rough fix, those points never reach the Live Map. Three iOS settings sharpen the fix.
>
> **1. Turn on Precise Location for Tread:**
>
> 1. Open **Settings → Privacy & Security → Location Services**.
> 2. Scroll to **Tread**.
> 3. Toggle **Precise Location** to on.
>
> **2. Enable the System Services the phone uses to locate itself:**
>
> 1. In **Location Services**, scroll to the bottom and tap **System Services**.
> 2. Turn on **Motion Calibration & Distance**.
> 3. Turn on **Networking & Wireless**.
>
> **3. Turn on Wi‑Fi:**
>
> * Open **Settings → Wi‑Fi** and switch it on. The phone does not need to join a network — it uses nearby hotspots to triangulate a tighter position.
>
> Reopen the app. Accuracy should improve within 30 seconds.
> **Android — battery optimization eats GPS**
>
> Android battery optimization will kill background GPS without warning. The driver's truck shows as parked even when moving.
>
> **Disable optimization for Tread:**
>
> 1. **Settings → Apps → Tread → Battery**.
> 2. Set to **Unrestricted** (or **Don't optimize** depending on the OEM).
> 3. On Samsung: also check **Settings → Device Care → Battery → Background usage limits** and remove Tread from the **Sleeping apps** list.
> 4. On Xiaomi/OnePlus: enable **Autostart** for Tread.
>
> Reopen the app and check **GPS Status** shows **Online**. Then confirm GPS dots appear on the dispatch map.
> **Truck shows offline on the dispatch map even though GPS is on**
>
> The dispatch map only updates while the Tread app on the driver's phone is sending GPS pings. Phone-level GPS being on is necessary but not enough — the app shares location while the driver is on duty.
>
> **Have the driver:**
>
> 1. Open the Tread app and tap **Clock in**. A driver who never clocked in doesn't transmit GPS.
> 2. Force-quit and reopen the app if it has been backgrounded for hours.
> 3. Confirm location permission is **Always** (iPhone) or **Allow all the time** (Android). The two accordions above walk through this.
>
> **From the dispatch side, confirm:**
>
> * The driver is assigned to a job today on the [Dispatch page](/concepts/dispatching-drivers-vendors).
> * The truck on the job matches the [Equipment](/concepts/equipment) the driver actually drove out in — a mismatch makes the moving unit show under the wrong truck.
>
> If the truck still shows offline after these checks, contact Tread support with the driver's phone number, the time, and a screenshot of the dispatch map.
> **The app won't install — device isn't supported**
>
> The app runs on modern iOS and Android phones and tablets. If the store hides the app or it crashes on launch, the device is likely unsupported.
>
> **Minimum requirements:**
>
> * **iPhone and iPad:** iOS 16 or newer. The App Store hides the app on older iPhones, so it never appears as an install option.
> * **Android phones and tablets:** Android 7.0 or newer. Android 10 or newer is recommended — battery and GPS performance degrade on older devices.
>
> **Not supported:**
>
> * Amazon Fire and Kindle tablets (FireOS)
> * Chromebooks and Chrome OS tablets
> * Android 6.0 or older, and Android devices with x86 processors
> * iPhones on iOS 15 or older
> * Windows Mobile devices
>
> The fix is a different device. Any mainstream phone from the last few years works.
> **My truck isn't in the equipment list**
>
> At first sign-in the driver picks a default truck. If the unit is missing, it hasn't been added to the account.
>
> * **Internal Drivers:** ask the dispatcher to add the unit.
> * **Vendors:** add it in the app under **Account → Manage Equipment → + Add**. See [Set up trucks and drivers](/vendor-guide/setup-trucks-and-drivers).
> **Driver not showing online — run the Connection Checker**
>
> When a driver does not appear online or reports connection problems, have them run the Connection Checker. It verifies the phone can reach Tread's services.
>
> **Run it:**
>
> 1. Open the **Account** tab.
> 2. Tap **Connection Checker**.
> 3. Tap **Run Checks**.
>
> 
>
> It runs two checks:
>
> * **Backend Health** (`/health`) — confirms the app can reach Tread's servers.
> * **RTU Connection** (`DeploymentChannel`) — confirms the real-time link that pushes live updates to the phone.
>
> **Reading the result:**
>
> * **Green check** — Tread is accessible. Everything should work.
> * **Red check** — Tread is not accessible. Location data and some operations may not be available.
>
> A red check usually means connection quality is poor in the area, or the network is blocking access. Move to a spot with better signal and run the checks again.
> **App update install hangs**
>
> The store download stalls at 90% or the install icon spins forever.
>
> **iOS:**
>
> 1. Tap and hold the Tread icon → **Pause Download** → **Resume Download**.
> 2. If still stuck: open the App Store, tap your profile, pull-to-refresh.
> 3. Reboot the phone.
> 4. Last resort: delete the app and reinstall.
>
> **Android:**
>
> 1. **Settings → Apps → Google Play Store → Storage → Clear cache**.
> 2. Reopen Play Store, retry the update.
> 3. Reboot the phone if it still fails.
> **Driver day stuck 'In review'**
>
> *In Review* means the shift was submitted but no [Ticket Approver](/concepts/roles-permissions) has signed off yet. The driver can still log in and start a new day — the in-review day is locked from edits but does not block tomorrow's work.
>
> **What the driver should do:**
>
> * Nothing. The Approver clears the queue from the web app.
>
> **What the Approver should do:**
>
> * Open **Approvals → Driver Days**, review hours and tickets, approve or reject. See [Timesheet Approvals](/concepts/tickets-timesheets).
> **Offline mode — what syncs when**
>
> The Driver app keeps working when the phone loses signal. Some data uploads as soon as signal returns; some have known edge cases.
>
> **Syncs immediately on reconnect:**
>
> * GPS pings (queued and uploaded in order)
> * Load tickets and photos
> * Status changes (en route, arrived, departed)
> * Hours start/stop
>
> **Edge case — offline signatures:** Driver e-signatures captured offline upload when signal returns, but the timestamp on the signature is the moment it was captured, not the upload time. If the gap is more than a shift, the [Approver](/concepts/roles-permissions) sees the original capture time on the ticket.
>
> **What does not sync:**
>
> * Live dispatch updates push to the phone over the network. A new dispatch sent while offline will not appear until the phone reconnects.
## Still stuck?
Have the driver send their Admin: phone number, app version (**Settings → About**), and a screenshot. Most cases resolve from those three pieces of info.
Drivers can also reach Tread support directly: in-app chat, call or text [1-888-558-7323](tel:+18885587323), or email [support@tread.io](mailto:support@tread.io).
# Release Notes · March 2026
Source: https://docs.tread.ai/release-notes/2026-03
Tread releases in March 2026: 4 web, 1 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · March 30, 2026**
#### New features
**Project-level rates** — Teams can now define rates with multiple conditions (site, equipment type, material, and service class) that automatically resolve at order and job time. The dropoff site is now also available as a rate condition, and when equipment type varies, rate summaries display accordingly at both the order and job level. See [manage rates](/workflows/manage-rates).
**Digital ticket filtering on Dispatch and Approvals** — Dispatchers and approvers can now filter orders by [digital ticket](/specialized/digital-tickets) view type on the dispatch and approvals pages, making it faster to find and process the right tickets.
**Compliance notification toggle** — Admins can now enable or disable [compliance](/concepts/compliance-documents) notifications via a new toggle in the compliance settings.
**Apex connector: additional order states and site mapping** — The [Apex](/integrations/apex-command-alkon) integration now supports Hold, Weather Hold, and Canceled order states, and correctly maps sites for imported orders.
**Auto-start jobs with active telematics** — Jobs are now automatically started when an active [telematics](/integrations/telematics) integration is detected, reducing manual steps for dispatchers.
#### Improvements
* Rate information (driver or vendor rate, based on job assignment) is now shown on Job Card PDFs.
* The trailer is now displayed in the Drivers table, next to the equipment column.
* Improved duplicate ticket filtering in the AI loads review workflow.
* Staging map pin display is now consistent on dispatch routes.
**Release Notes · March 26, 2026**
#### New features
**Phase tracking on loads** — [Phases](/concepts/phase-codes) can now be linked to project materials and automatically cascade to orders, jobs, and loads when a material is selected. A new Phase column on the dispatch and approvals loads tables shows the phase name and code at a glance, and phases are also supported when importing tickets.
**Internal notes on jobs** — Back-office users can now add and edit internal notes directly on jobs. Notes are company-scoped (only visible to users within the same company), making it easy to pass billing instructions and context through the dispatch chain without exposing them to other parties.
**Shift notes** — A Shift Notes field is now available on the Driver Day Shift tab, giving reviewers helpful context (for example, late arrivals, equipment issues, dispatcher adjustments) right where they need it while reviewing shift hours.
#### Improvements
* [Compliance document](/concepts/compliance-documents) expiration email notifications can now be controlled per document type in user notification preferences.
* The Job Card PDF now shows pickup and dropoff site with an updated layout.
* Driver rate amounts are now shown on the Payables invoice for internal drivers.
* Imported sites from external systems now have their addresses automatically geocoded.
* Duplicate ticket detection now uses a dedicated field instead of an AI review state, making the duplicate quick filter more accurate and reliable.
**Release Notes · March 23, 2026**
#### New features
**Order Metrics UI updates** — The Order Metrics tab on Dispatch has a new layout, improved labels, additional job states, and pickup/dropoff site names for better clarity.
**Staging waypoint support** — Orders and jobs now support a staging site between pickup and dropoff. Staging sites appear correctly across Approvals, Loads, Settlements, and all reports. Full form editing and dispatch card display follow in a later release.
**Unapproved Jobs and Loads filters** — The Approve Jobs screen now includes sticky filters for "Unapproved Jobs" and "Unapproved Loads", making it faster to find items that still need attention.
**Next load navigation across orders** — When approving loads, dispatchers can now navigate to the next load across different orders. No need to back out and re-enter each order individually.
**Restrict equipment options by vendor** — Companies can now configure which equipment types are available to vendors on a per-job basis, and dispatchers see a filtered equipment list when assigning trucks on dispatch.
**Hold enforcement for drivers** — When an order is on Hold or Weather Hold, drivers are now blocked from starting their jobs, preventing accidental hold removal that previously affected all trucks on the order.
#### Improvements
* Load summaries now include distance travelled information.
* Dispatchers can view mileage data on load details.
**Release Notes · March 19, 2026**
#### New features
**Order Metrics on Dispatch** — Dispatchers can now view per-order delivery metrics directly from the Dispatch screen, including delivery progress, events, truck activity, and onsite times, all in a new "Metrics" tab on each order.
**Approval status filters on Approve Jobs** — Dispatchers can now filter by job and load approval status on the Approve Jobs page, making it easier to find unapproved items that need attention.
**AI Ticket Chaser enabled by default** — The [Ticket Chaser](/specialized/ai-ticket-chaser) feature, which automatically follows up on missing tickets, is now enabled by default for new projects, reducing manual follow-up work.
#### Improvements
* Maps are now displayed on distance calculation pages for better visual context.
* Improved ticket matching accuracy via vendor-scoped equipment name and external ID matching.
* Imported tickets no longer require a dispatch ID, improving integration flexibility.
* Increased the maximum load count when vendor job splitting is enabled.
* The selected calendar date range now persists on Approve Jobs when using search.
* Reduced page flickering on the Dispatch view when smart updates are enabled.
* Companies can now delete their company logo.
**Release Notes · March 16, 2026 · v1.105.0**
#### New features
**Digital ticket experience overhaul** — Drivers now default directly into the [digital ticket](/specialized/digital-tickets) view when enabled on an order, with a redesigned layout that hides empty fields for a cleaner experience. The tickets list has been streamlined with a simplified menu, and load details are now easier to scan on both Order and Job screens.
**Signature prompts and warnings** — Drivers are now prompted to capture a signature when completing a load. If a dropoff signature is missing, a visual warning appears on the ticket row and when saving, helping ensure complete documentation on every delivery. See [driver e-signature](/specialized/driver-esignature).
**SSO login support** — Drivers can now log in using Single Sign-On (SSO), matching the login experience already available on the web platform.
**Set truck license number in app** — Drivers can now enter and update their truck license number directly from the mobile app, eliminating the need to contact a dispatcher.
**New site creation in order form** — Users with the appropriate permissions can now create new sites directly from the Create Order and Edit Order forms without leaving the workflow.
#### Improvements
* Prevented accidental double-taps on buttons throughout the app.
* Updated the Loads list UI on Order and Job detail screens for better readability.
* Added staging waypoint type support for future dispatch routing features.
# Release Notes · April 2026
Source: https://docs.tread.ai/release-notes/2026-04
Tread releases in April 2026: 9 web, 3 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · April 30, 2026**
#### Improvements
Project-level rates:
* The new rate selection experience is now available on the Edit Job form, giving dispatchers the same streamlined pricing controls when modifying existing jobs.
* Users can now clear rates on a job to reset to automatic rate matching.
Self-service API clients:
* The API client creation flow is now complete. Create a new client, assign a role, and receive a one-time API key, all from the Settings page.
**Release Notes · April 29, 2026**
#### New features
**Self-service API client management** — Company admins can now create, view, and revoke API clients directly from the new API Clients page in Settings. Active clients are displayed with masked keys, and access can be revoked instantly with a single click. See the [API reference](/api-reference/introduction).
#### Improvements
Project-level rates:
* Invoice rate selectors now show project-level rates instead of only company-wide rates, so billing matches the pricing configured on each project.
* Invoice line items now display a "Type" column distinguishing Material and Freight charges.
* Each rate card now includes a "Use vendor rate and add-ons for driver rate" option, letting driver rates stay in sync with vendor pricing automatically.
* Material rates now properly validate unit of measure when a sell price is set.
* Material rate selections are now correctly saved and displayed on orders.
* Improved handling when a material rate's unit differs from the material's default unit.
* Removed deprecated Flat Commission and Commission from Customer Rate types.
Other improvements:
* The Automatic Settlement Add-ons table now shows a "Default Qty" column for easier verification.
* Jobs now only auto-start when GPS reports the driver is moving, reducing false starts from stationary location pings.
* Milling equipment now automatically uses the equipment site as the pickup location.
* User profiles now support an Accounting ID field for correlating users with external payroll and accounting systems.
**Release Notes · April 23, 2026**
#### New features
**Separated material and freight rates on invoices** — Invoices and settlements now break out material rates and freight rates as separate line items, giving you a clearer cost breakdown. The combined view remains available for invoices without itemized material rates.
#### Improvements
* Duplicate ticket filtering. The Dispatch page now supports filtering loads by duplicate ticket status, making it easier to find and resolve duplicates before billing or payment.
**Release Notes · April 21, 2026 · v1.108.0**
#### New features
**Offline ticket creation** — Create tickets while offline. They automatically sync (including images) once you reconnect. No more lost work in low-connectivity areas. See [offline mode](/mobile/offline-mode).
**Smarter offline banner** — The offline indicator now checks actual backend reachability, not just internet connectivity, giving you a more accurate picture of your connection status.
#### Improvements
* Faster map loads on job and order views (reduced redundant network calls).
* Better inline error messages on Create Site and Job Location forms.
* More reliable feature evaluation, especially while offline.
**Release Notes · April 21, 2026**
#### New features
**Phase code management: bulk paste from Excel** — Manage [phase codes](/concepts/phase-codes) in a new slide-out drawer with a full table view. Bulk-add dozens of phase codes by pasting directly from Excel. No more entering them one at a time.
**Restore jobs** — Dispatchers can now restore canceled jobs from a dropdown menu. Restoring a job with no active loads automatically creates one so work can resume immediately.
**Streamlined ticket entry** — The ticket number is now optional on the web (configurable per organization). The ticket form auto-opens with smart defaults for date, time, and unit of measure. Fewer clicks to log a ticket.
#### Improvements
* Project-level rates: star a rate to apply it to every job on an order, overriding condition-based matching. Override matched rates on individual jobs and invoices. Rate cards now default to open when no rates are set.
* A prevailing wage filter is added to Payables and Receivables.
* License plate and VIN are now visible on the Remote Vehicle Integration page.
* Invite type selection now uses a cleaner button toggle.
* Improved ticket scanning accuracy.
* Single material rates view on projects. All material rates are managed in one form.
* Improved address geocoding accuracy.
**Release Notes · April 15, 2026**
#### New features
**Project-level rates** — You can now define a complete pricing rulebook directly on a project. Set customer, vendor, and driver rates with conditions based on pickup site, dropoff site, equipment type, and material. The system automatically matches the best rate for each job and stamps pricing when orders complete. Rate templates, add-ons, starring, and manual overrides are all supported. See [manage rates](/workflows/manage-rates).
**AI ticket reviews** — AI-powered ticket reviews now appear directly in the ticket drawer, with duplicate ticket indicators to help reviewers quickly spot and handle duplicates.
#### Improvements
* [Prevailing wage](/specialized/prevailing-wage) badges and filters are now available across Dispatch, Approvals, Payables, and Receivables.
* Prevailing wage fields are now shown on rate cards when enabled for a project.
* Settled invoices now show an inactive "Approved" badge to prevent accidental un-approval.
* Bulk settlement actions are added to the Approve Jobs tab.
* A "View Settlement" link is added to settlement toast notifications.
* A confirmation dialog is now shown when bulk canceling jobs in dispatch.
* Trucks now display the driver's first and last name instead of "My Truck".
* Default onsite minutes can now be configured in Settings.
* Multiple labels are now shown on dispatch driver and vendor cards.
* Customer Portal Access now defaults to ON for new connected accounts.
* Rates and phase codes are now visible on the ticket drawer.
* The Tax Rate Schedules list is now searchable.
**Release Notes · April 13, 2026 · v1.107.0**
#### New features
**Site geofences on maps** — Site [geofences](/concepts/sites-geofences) (both circles and polygons) now render on all in-app maps with tag-based color coding (loading, unloading, check-in, scaling, ticketing), so drivers and foremen can see site boundaries directly on Job Details, Active Job, Order Detail, and Live Map views.
**Dispatch on mobile: edit order state** — Dispatchers and company admins can now edit order state directly from mobile, bringing parity with the web experience.
**Dispatch department filter** — The Dispatch tab now has a Department filter, making it easier to narrow down orders in large organizations.
**Connection checker in app settings** — A new connection checker in app settings lets drivers manually troubleshoot connectivity issues in the field. See [troubleshooting](/mobile/troubleshooting).
#### Improvements
* The foreman create-order form now includes "Charge To Account" on Equipment orders (previously only on Trucking orders).
* A clearer offline-mode UI cue so drivers know when they're working offline.
* Offline cache errors are now handled gracefully instead of surfacing cryptic messages.
* The ticket scanning banner is now correctly hidden for tickets coming from API integrations.
* Improved real-time connection stability, with fewer spurious errors while the app is backgrounded.
**Release Notes · April 9, 2026**
#### New features
**Prevailing wage settings** — New settings pages for managing Overtime Rules and Prevailing Wage Benefits are now available, with a Prevailing Wage badge visible on Projects and Dispatch pages to easily identify PW jobs. See [prevailing wage](/specialized/prevailing-wage).
**Canceled and rejected orders in Dispatch** — Companies can now optionally show Canceled and Rejected orders in the dispatch Orders tab for full visibility into all order statuses.
#### Improvements
* AI review instructions can now be edited directly from the Settings > Agents page.
* The Duplicate Tickets quick filter now links directly to the Loads tab on the approvals page.
* The Driver Type filter is now sticky. Your selection persists when navigating between pages.
**Release Notes · April 7, 2026**
#### New features
**AI review improvements** — Companies can now add custom review instructions to tailor AI ticket reviews to their specific business rules. Review sensitivity has also been improved to reduce false flags on small quantity differences (for example, 24 vs 26 tons). See [agent configurations](/onboarding/agent-configurations).
#### Improvements
* Rate cards now automatically re-match when a job's equipment type changes, ensuring the correct pricing is always applied.
* Imported tickets can now match to active jobs by truck even without a dispatch number.
* Order imports now support vendor assignments and site mapping for imported tickets, with improved duplicate detection.
**Release Notes · April 3, 2026 · v1.106.0**
#### New features
**Staging site support** — Staging waypoints now appear on job maps with markers and camera bounds, giving drivers clear visibility into staging locations.
**Hold and Weather Hold enforcement** — Drivers are blocked from starting jobs when the order is on Hold or Weather Hold.
#### Improvements
* Added Recurring and Collaborator fields to the Moves variant of the foreman create-order form.
* A Material field is added to the job edit form.
* Shift notes are now visible on the Logged Hours card.
* Removed the driver signature from the digital ticket flow.
* Unit of measure visibility improvements.
* Large text accessibility improvements for foreman views.
* Offline mode groundwork: data storage and offline actions for jobs and driver shifts.
**Release Notes · April 2, 2026**
#### New features
**Job notification emails** — Configurable email notifications for job events are now available.
**Tax rate schedules on projects and orders** — Tax rate schedules can now be selected on Project and Order forms and automatically cascade through to invoices.
**PaverTracker: equipment controls** — A new "Use Paver Tracker equipment" checkbox on the Site edit modal, plus equipment editing on moving site geofences. See [PaverTracker](/integrations/paver-tracker).
**Prevailing wage and contract number on forms** — Toggle [prevailing wage](/specialized/prevailing-wage) on Projects and Orders with a configurable work week start day. A contract number field is now available on both forms.
**Trailer auto-assignment** — Trailers are now auto-assigned when dispatching drivers, with a new trailer column on the Driver grid.
#### Improvements
* Support for capturing a "Printed At" timestamp on imported tickets.
* AI ticket scanning now retries on API failures and only uses allowed units of measure.
**Release Notes · April 1, 2026**
#### New features
**PaverTracker sync controls** — Background sync now respects a remote sync override flag, giving dispatchers more control over equipment-to-site assignments.
**Editable internal notes on job approvals** — Internal notes can now be edited directly from the Approve Jobs screen.
**Tax rate schedules** — A new Settings page for managing tax rate schedules, with full create, edit, and delete support.
#### Improvements
* Added a contract number field to Projects and Orders.
# Release Notes · May 2026
Source: https://docs.tread.ai/release-notes/2026-05
Tread releases in May 2026: 6 web, 2 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · May 26, 2026**
#### Improvements
* Add-ons sorted alphabetically. The add-on list now displays in alphabetical order instead of creation order, making it faster to find the one you need.
**Release Notes · May 21, 2026**
#### New features
**Job and order notifications** — Users can now opt into push, SMS, and email notifications for key job events (accepted, rejected, canceled, and completed) as well as when new orders or projects are created. Notification preferences are configurable per channel on the User Profile Notifications screen, so each team member receives only the alerts they care about.
**Bulk download filters** — Bulk Download Files now respects your page filters (date range, driver) so downloads match exactly what you see on screen. The download dialog also displays which filters are applied before you download. See [find and download tickets](/workflow/approvals/find-and-download-tickets).
#### Improvements
* Idle time visibility on the live map: idle truck markers now use a higher-contrast yellow, and route history idle indicators have clearer colors and styling.
* Projects page for parent and child companies: the Projects page now shows projects from both parent and child companies by default.
* API pagination documentation: documentation for upcoming pagination changes is now available in the [API reference](/api-reference/introduction).
**Release Notes · May 20, 2026 · v1.110.0**
#### New features
**Edit Job form redesign with rate card support** — The Edit Job form now includes full rate card support on mobile. Dispatchers can select from project or order rate cards, toggle vendor rate and add-ons per rate card, and override the system-matched rate. Rate display logic on order details now shows the starred customer rate or hides rates when none are starred. The field formerly labeled "Site rate schedule" is now called "Rate Card Selection" for clarity.
**Manual offline mode** — [Offline mode](/mobile/offline-mode) is now manually controlled rather than triggered by automatic detection, giving drivers more predictable behavior. Drivers can also complete required signatures while offline. Signatures are queued and submitted once connectivity returns.
**Map improvements** — The driver map now auto-centers on your current location while navigating. The confusing delayed green marker has been removed in favor of the live blue pin. Local geofence notifications alert drivers when approaching pickup or dropoff sites, and map cursor alignment and orientation have been improved.
#### Improvements
* Softer in-app update prompt. App updates now appear as a gentle notification on the Accounts tab instead of forcing an immediate update.
* Load-level sites on orders. Orders now display pickup and dropoff sites at the load level, so drivers can see exactly where each load needs to go even when dispatch doesn't set order-level waypoints.
* Ticket quantity validation. The app now validates ticket quantity after a ticket is added, preventing incomplete submissions.
**Release Notes · May 18, 2026**
#### Improvements
Project-level rates:
* Project timeline entries now identify which specific rate card was changed, including its name and conditions, making it easy to tell which rate was modified on projects with multiple rate cards.
* When editing a job, saving condition changes alongside manual rate edits now triggers a confirmation dialog so the rate re-match doesn't silently override your manual pricing.
* Deleting a starred rate card on an order now prompts a confirmation and triggers a system re-match, consistent with the existing unstar behavior.
* Project and order forms now gracefully recover from partial save failures. If some rate cards or add-ons fail to save, the form stays open with a clear error message and retry option instead of silently losing data.
* The order form now correctly indicates when rates are decoupled from the project after an order moves back from Completed status.
**Release Notes · May 14, 2026**
#### New features
**Sales quoting workflow** — The Projects page now includes a Quotes tab with full lifecycle tracking. Move projects through Draft, Quoted, Active, and Completed states directly from the page. Status chips and transition actions make it easy to manage your sales pipeline at a glance. See [sales quotes](/workflows/sales-quotes).
#### Improvements
* Order Metrics redesign. The Order Metrics view has been refreshed with new data including first truck arrival time, total work time, scheduled start, and idle time breakdowns at pickup and dropoff. Truck status badges now show completed-vs-accepted counts at a glance.
* Project-level rates terminology. "Unnamed Schedule" is renamed "Base Rate" and the invoice rate selector is renamed "Rate Card" for clearer naming.
* Improved automatic ticket matching for orders dispatched with placeholder jobs.
* The "Running" checkbox on job edit forms is now always editable.
**Release Notes · May 11, 2026**
#### New features
**Idle time tracking** — Dispatchers can now see when trucks are idle directly on the Dispatch page. An idle indicator appears on the driver panel, and a threshold line is shown on the speed timeline so you can quickly spot idle periods. Idle time is automatically calculated per load, job, and order upon completion.
#### Improvements
* Project-level rates polish. "Site Rate Schedule" is renamed "Freight Rates" for clarity, a confirmation modal now appears before starring a rate to prevent unintended cascading changes, and a "Rate Card Selection" label has been added to the site rate selector.
* Load notes are now visible in order-level load lists and the load drawer, with edits immediately reflected after saving.
* A new branded Tread email layout for transactional emails.
* [Apex](/integrations/apex-command-alkon) orders now default to Running Loads.
**Release Notes · May 5, 2026**
#### New features
**Project timeline** — Projects now display a real-time timeline of key events, including creation, rate changes, site updates, and schedule modifications. Teams can track a project's full activity history at a glance without leaving the project view.
#### Improvements
Project-level rates:
* Orders with no rates now show a clear empty-state UI, making it obvious when pricing hasn't been configured.
* Project-level rates now take precedence over order-level fallbacks during automatic rate matching.
* Starring a rate on an order now cascades that rate to all jobs on the order.
* The customer rate is now visible directly on the Dispatch page.
* A confirmation banner now appears when unstarring rates to prevent accidental changes.
* Sub-vendors in the dispatch chain can no longer edit the customer rate.
Self-service API clients, full release:
* API client management is now fully released. Create, view, and revoke API clients directly from Settings. See the [API reference](/api-reference/introduction).
Other improvements:
* The automated ticket review now detects when an uploaded image isn't a ticket and prevents automatic approval, improving billing accuracy.
* "Axle" has been renamed "Telematics" throughout the platform.
* Users can now set a preferred language on their profile.
* Pickup and dropoff site selectors are now available on the load drawer.
* Orders can now be deleted via the API.
* Drivers are now automatically assigned to driverless jobs when a matching ticket is ingested.
* The Accounting ID field is now available on updated user profile forms.
**Release Notes · May 4, 2026 · v1.109.0**
#### New features
**Project-level rates on mobile** — The full Rates experience is now available on mobile order forms, including project-level rate cards, add-ons, and inline rate editing. Dispatchers can manage pricing directly from their phone or tablet.
**Send message from mobile** — Dispatchers can now text individual drivers or all drivers on an order directly from the mobile app, making field communication faster and easier.
#### Improvements
* Load notes now have their own dedicated section in load and ticket details for easier viewing.
* Site creation now pins to the typed address instead of defaulting to the current GPS location.
# Release Notes · June 2026
Source: https://docs.tread.ai/release-notes/2026-06
Tread releases in June 2026: 6 web, 3 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · June 25, 2026**
#### New features
**Dispatch rate filters** — Filter orders on the Dispatch page by whether they have Customer Rates, Vendor Rates, or Driver Rates assigned, to quickly spot orders that still need pricing.
**Order Completed notification** — A new "Order Completed" notification preference in User Profile settings. Opt into push, SMS, and email alerts when an order is completed.
**Catena Telematics onboarding** — A new welcome banner on the [Catena Telematics](/integrations/telematics) page (Settings → Integrations) guides new users through connecting their fleet telematics provider with a simple three-step flow.
**Send email and SMS invites together** — When adding a new user, you can now send both an email and SMS invite at the same time instead of choosing one or the other.
**Release Notes · June 24, 2026 · v1.112.0**
#### New features
**Read-only Viewer role** — Mobile users with the Viewer role now have a dedicated Assigned tab and read-only access to orders and job details, matching the web Viewer experience.
**Offline editing** — Drivers can now edit load and ticket times, shift and log times and notes, and attach job photos while working offline. Changes sync automatically when connectivity returns. See [offline mode](/mobile/offline-mode).
#### Improvements
* The [foreman](/workflows/foreman) order form now supports setting pickup and dropoff site contacts, auto-attaches all project phases, and requires phase codes on Load, Job Hours, and Resource Usage forms.
* Drivers and foremen can now apply add-ons to jobs from the Review Job screen.
* Approved jobs now display an approvals card and hide add/edit actions for clearer status visibility.
* The scale ticket number is now optional for companies that don't require it.
* Configurable mandatory and hidden field controls on mobile order forms.
* A softer in-app "update available" prompt, less disruptive than the previous forced upgrade dialog.
* The user language setting now displays consistently throughout the app.
* The job load list now wraps long material names and quantity/unit lines for better readability.
* Removed the "Charge to" field from Equipment Moves orders.
**Release Notes · June 18, 2026**
#### New features
**Settings redesign** — The Settings area has been completely reorganized. The sidebar now groups items into six labeled sections (Personal, Workspace, Accounts, AI & Integrations, Data Setup, Rates) with icons and a search/filter box. Every settings page now displays a consistent title and description header for easier navigation.
**Hide driver phone numbers** — A new account-level toggle lets you hide driver phone numbers from upstream connected companies. When enabled, connected customers and vendors see driver names, but phone numbers are redacted on live map popovers and other views.
**Material type management** — Companies can now create, edit, and delete their own [material](/concepts/materials) types directly from Settings, matching the existing equipment type management experience.
**"Report an Issue" on Reports** — A new "Report Issue" link on the Reports page lets you quickly flag issues with a specific report. It opens a support conversation with the report link pre-attached.
**Overdue and suspended billing banner** — Company admins now see an in-app banner when their account is overdue or suspended, with clear guidance on how to resolve it.
#### Improvements
* Reports page URLs now reflect the selected report. You can bookmark, share, and use browser back/forward to navigate between reports.
* Users with the Viewer role can now access the Assigned (collaborator) tab on mobile to view job locations on the map.
* Invoice and settlement line items now track their taxable status for improved reporting accuracy.
* Added a truck count filter to dispatch.
* Job cancel and complete notifications now include email parity, matching the existing push/SMS pipeline.
**Release Notes · June 16, 2026 · Hotfix v1.111.2**
#### Improvements
* Notification settings in the mobile app now include all options available on web, ensuring full parity between platforms.
**Release Notes · June 14, 2026**
#### Improvements
* The company logo upload limit has been significantly increased. You can now upload higher resolution logos (previously limited to very small file sizes).
* Full-resolution company logos now display on quote PDFs instead of low-resolution thumbnails.
* The project import API now accepts dispatch numbers.
**Release Notes · June 9, 2026**
#### Improvements
* Foremen and drivers with telematics-integrated equipment (for example, Motive) are now trackable on the map throughout the day, even when not on an active job. Location history is now recorded continuously.
* Improved reliability of automatic job status tracking for multi-load jobs. Each load is now processed independently, so if one load encounters an issue, the remaining loads continue to track correctly.
**Release Notes · June 4, 2026 · v1.111.0**
#### New features
**Hired truck workflow: job loads management** — [Foremen](/workflows/foreman) can now view and manage a driver's loads directly in the app. The new Job Loads tab displays load numbers, materials, quantities, sites, and phase codes, with the ability to edit loads inline. A "View Loads & Details" button provides quick navigation, and the tab supports real-time updates and pull-to-refresh.
**Editable driver hours** — The Review Job screen now lets foremen and drivers add, edit, and delete driver hours alongside equipment hours, making job approvals faster and more accurate.
**Offline signatures and attachments** — Drivers can now capture signatures and add attachments while working offline. Data syncs automatically when connectivity is restored. See [offline mode](/mobile/offline-mode).
#### Improvements
* The phase code is now displayed on load rows and available in the load edit form.
* Phone number fields auto-detect North American formatting across all forms.
* Clearer messaging and a smoother flow when a forced app update is required.
* Added a "Language:" label to the language setting for clarity.
* A new option to clear the offline cache for troubleshooting or freeing up space.
* Improved detection of backend connectivity issues for more reliable offline behavior.
**Release Notes · June 4, 2026**
#### New features
**View Quote PDF** — Generate and view a branded [Quote](/workflows/sales-quotes) PDF directly from the Projects page. The PDF includes company details, customer information, materials, rates, add-ons, and pricing, ready to share with customers.
**Rate filters on Dispatch page** — Filter orders on the Dispatch page by rate status to quickly find orders missing Customer, Vendor, or Driver rates.
**Required invite type for new users** — When creating a new user, the Invite Type (Email or SMS) is now required and prominently displayed. This prevents cases where new users were created without receiving their invitation.
#### Improvements
* Default pickup and drop-off sites now load more reliably on order and project forms.
**Release Notes · June 2, 2026**
#### New features
**Idle time tracking on Live Map** — Trucks on the live map now display real-time idle status with a yellow indicator. Idle periods are highlighted on the map and route history, making it easy to spot when trucks are stationary. Offline periods are automatically filtered out for accuracy.
**CSV export for approvals and settlements** — You can now [export](/workflows/exports-reports) data to CSV from the Approve Jobs, Approve Work, Payables, Receivables, and Settlements pages.
**Default pickup and drop-off sites on maps** — Default pickup and drop-off sites for orders now appear directly on the map for quick reference.
#### Improvements
* Paused job status now appears on the Driver Timeline scrubber.
* Reconciliation state is now visible on Settlement rows.
* Autocomplete dropdowns now show stack name and external ID for easier identification.
* Order metrics timestamps now display in the order's local timezone.
* The job approval list now supports sorting.
* Orders can now be filtered by external IDs.
* Updated the [Apex](/integrations/apex-command-alkon) integration.
# Release Notes · July 2026
Source: https://docs.tread.ai/release-notes/2026-07
Tread releases in July 2026: 6 web, 5 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · July 31, 2026**
#### New features
**Parent-company consolidated billing: consolidated view** — Parent companies can now view a consolidated roll-up of invoices and settlements across all child terminals from a single headquarters view. Filter by location to drill into specific terminal billing data, with an origin-company indicator on each line item. See [multi-entity billing](/specialized/multi-entity-billing).
#### Improvements
* The Vendor Approved Tickets Report now includes a "Ticket Flagged" column for tracking flagged tickets.
* File upload error messages now display properly when validation fails (for example, wrong format or corrupt file), instead of silently discarding the upload.
**Release Notes · July 30, 2026 · v1.116.0**
#### New features
**Dark mode** — The Tread mobile app now supports dark mode across all screens, following your device's system appearance setting.
**Offline timesheet creation** — Drivers can now create timesheets while offline. Timesheets are queued locally and automatically synced when connectivity is restored. See [offline mode](/mobile/offline-mode).
**Release Notes · July 30, 2026**
#### New features
**Material rate auto-population** — The order form now automatically fills the correct material buy/sell price based on the most specific matching rate. When multiple rates exist for a material, the system picks the right one by customer, project, and site specificity, so the most targeted rate always wins.
**Rate visibility controls for drivers** — Admins can now set "Hide Rates" on driver-role users from the driver creation and edit forms. Drivers keep their role while being prevented from seeing financial rate information.
#### Improvements
* Rates History: event descriptions now show the rate card name, rule, and job number; the full timeline loads instead of truncating at 25 records; and internal system rows are filtered out.
* Rate card provenance on hover in the dispatch jobs table: see which rate card each party's rate came from, plus a new "Rates Set" indicator on project and order cards.
* A Material Rates panel is added to the Site form for viewing, adding, and editing rates in place.
* Default pickup/dropoff sites are now shown inline below site selectors.
* An "Each" unit of measure is added for orders.
* Resend email/SMS invitations is now available for drivers in Settings.
* Exact search filters for ticket number, order number, or TRD ID work independently.
* Add-ons can now be deleted from Settings.
* The "Ask Tread" assistant is docked as a bottom bar and no longer overlaps page actions.
* Simplified rate card creation form (removed unused Equipment, Equipment Type, and Service Class fields).
**Release Notes · July 27, 2026 · v1.115.0**
#### Improvements
* Polished the in-app turn-by-turn navigation interface for a smoother driving experience.
**Release Notes · July 22, 2026 · v1.114.0**
#### Improvements
* The Moves order form now requires both pickup and dropoff contacts before submission, ensuring dispatch teams have site contact information upfront.
* Upgraded to the new Google Maps rendering engine (Navigation SDK) on Android, fixing map-load crashes and improving map reliability.
**Release Notes · July 22, 2026**
#### New features
**Selective rate apply: impact side sheet and order-level cascade** — Major expansion of the selective rate apply feature. The rate-change impact preview now opens as a detailed side sheet showing affected orders with dispatch number, status, and site info. Admins can filter by date range and selectively exclude orders. Add-on changes and rate card additions and deletions now trigger the impact dialog (not just rate-value edits), and the cascade now works at the order level, not just from the project form. See [how rate changes flow](/workflows/how-rate-changes-flow).
**Live Map: color-coded truck pins** — A new "Color trucks by destination" toggle on the Live Map. Truck pins are color-coded by load phase (heading to pickup vs heading to dropoff), making fleet status visible at a glance.
**Driver and vendor onboarding banners** — The Drivers and Vendors pages now display collapsible share banners with quick links to the Tread driver mobile app and the [vendor onboarding guide](/vendor-guide/getting-started).
#### Improvements
* The Hauler rate type card is now available on the order form and project form.
* Navigation tabs now respond to clicks across the full tab area, eliminating dead clicks.
* Dispatch list auto-refresh no longer causes flicker or list jumps.
* Driver activation status is now exposed on the API (enables the resend-invitation flow).
* Soft-deleted records (Projects, Orders, Jobs, Tickets) are now retrievable via the API.
* Ticket file attachments now use soft delete to prevent accidental data loss.
**Release Notes · July 17, 2026 · v1.113.0**
#### New features
**Expanded offline editing** — Drivers can now edit load and ticket notes, and manage signatures while offline, extending the [offline capabilities](/mobile/offline-mode) introduced in the previous release.
**Timesheet time ticket number capture** — Timesheet attachments now automatically capture the time ticket number in its own dedicated field using AI scanning, making it easier for the back office to locate and match timesheets.
#### Improvements
* The Per Hour timesheet card now shows for external and hauler hourly drivers.
* Foremen can no longer see customer or vendor rates on order and job detail screens.
* The Ticket Approver role now displays correctly on mobile.
* The Edit Ticket and Load sheet opens instantly while offline (removed a roughly 15-second stall).
* Graceful recovery when jobs, loads, or tickets are deleted or unassigned server-side, instead of stale-data errors.
**Release Notes · July 16, 2026**
#### New features
**Selective rate apply for projects** — A new project-level toggle, "Apply rate changes to existing orders", lets admins control whether project rate changes cascade to existing orders or only apply to new ones. Orders can be pinned to their current rates when project pricing is updated. See [how rate changes flow](/workflows/how-rate-changes-flow).
**Ticket Approver role** — A new dedicated [role](/concepts/roles-permissions) for team members who review and approve loads. Ticket Approvers can view orders, jobs, and loads, and manage load approvals, without access to settings or other configuration.
**AI ticket scanning custom instructions** — Admins can now add custom instructions for AI-powered ticket scanning under Settings > Agents, tailoring how scanned tickets are read and processed for your business. See [agent configurations](/onboarding/agent-configurations).
**Order importer: department support** — The [order importer](/api-reference/importer-apis) now supports setting the Department field via ingest payloads.
#### Improvements
* Added São Paulo (America/Sao\_Paulo) to the timezone picker in user settings.
* Load summary validations are now supported on the web.
* Reports now include the requested equipment type name field.
* Reports now include external ID and ticket external vendor ID fields.
* Driver Resource Usage Logs are now auto-generated when a hired-truck job reaches In Review.
**Release Notes · July 8, 2026**
#### New features
**Rate History timeline** — View the full history of rate and pricing changes on your orders and jobs. See who made each change, when it happened, and the before and after values, all displayed in your local timezone. Access it from the order detail or load drawer.
**Project delivery tracker** — The order form now shows a material delivery summary when you select a project, making it easy to see how much has been delivered versus what was quoted.
#### Improvements
* [PaverTracker](/integrations/paver-tracker) site sync can now be toggled per order directly from the order form.
* A new "Service Class" filter on the Dispatch page for easier order filtering.
* The date is now shown alongside the time in the Ticket Drawer for better context.
* When adding a user, you can now send both SMS and email invitations at once.
* The [Catena Telematics](/integrations/telematics) integration card now shows real fleet connection status, with an improved setup flow and the legacy card removed.
* New user SMS notifications now include a training video link.
* Sparse location pings are now visible on the route map for better trip coverage.
* Vendors' "+Add Load" button is disabled once the requested load limit is reached.
* "Reached Pickup" and "Left Pickup" order metrics now use pickup-specific data for improved accuracy.
**Release Notes · July 2, 2026**
#### Improvements
* The [phase code](/concepts/phase-codes) selector now supports searching by phase code number in addition to description, making it faster to find codes when you know the number.
**Release Notes · July 1, 2026 · v1.112.1**
#### Improvements
* The Charge To list for Moves dispatch now correctly shows only Pickup, Dropoff, and Split options.
# Release Notes · August 2026
Source: https://docs.tread.ai/release-notes/2026-08
Tread releases in August 2026: 7 web, 1 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · August 27, 2026**
#### New features
**Dispatch enhancements** — Preview [order attachments](/workflows/order-attachments) directly from the dispatch card's paperclip icon. Auto-expand search now clearly shows the widened scope with a "Back" action. Bulk Edit on the jobs table now supports inline rate editing and editable Materials.
**Quote PDF: delivered price table** — [Quote](/workflows/sales-quotes) PDFs now combine material and freight rates into a single "Delivered/Landed Price" table with equipment type per line, giving customers a cleaner pricing view.
#### Improvements
* Rate card popovers can now be dismissed by clicking outside, not just with Escape.
* Project material rates now display per material row on the order form.
* Order notes are now included in order reports.
**Release Notes · August 18, 2026**
#### New features
**Rate changes checkbox: order-level rate control** — The "Apply rate changes to existing orders" checkbox on the order form now lets you disconnect an order's rates from its project. When unchecked, rate edits save directly to the order instead of cascading from the project, giving billers explicit control over order-level pricing. The impact side sheet explains the change clearly. See [how rate changes flow](/workflows/how-rate-changes-flow).
**Approve Jobs: cleaner queue** — The Approve Jobs queue now filters out rejected jobs and jobs with no driver or vendor assigned, so billers only see work that can be actioned. The Loads view also excludes loads from filtered jobs, and summary counts now match the visible rows.
**AI timesheet drawer** — The timesheet drawer has a cleaner layout and an expandable panel showing AI extraction details. You can now open the timesheet drawer directly from the Approve Work and Approve Jobs timesheet lists.
#### Improvements
* Digital tickets now show when they were created, alongside the ticket date.
* You can now remove default sites that were auto-added in the New Order and New Project dialogs.
* Dark mode improvements: better elevation, input surface tokens, and consistent color handling.
* Project reports now include prevailing wage status.
* The Dispatch page loads faster (removed a duplicate API call on page load).
**Release Notes · August 13, 2026**
#### New features
**Rate History: "Matched On" indicator** — Rate History entries now show exactly why a rate card matched a job, displaying the matching conditions (for example, truck type, material, equipment) as chips beneath each rate change. This makes it easier to understand rate behavior and resolve billing disputes.
#### Improvements
* AI timesheet scanning now writes extracted text to the correct fields, improving accuracy when reviewing AI-processed timesheets.
* You can now add rate cards to completed orders. Previously the "Add another rate" button was incorrectly hidden after an order was marked complete.
**Release Notes · August 12, 2026**
#### Improvements
**AI timesheet scanning: smarter AM/PM detection** — The AI scanner now uses contextual clues (total hours, typical shift patterns) to correctly determine whether extracted times are AM or PM. Previously it could misread afternoon times as early morning.
**Order ingest API: multi-material support** — The [orders ingest endpoint](/api-reference/importer-apis) now accepts a materials array, allowing integration partners to send multiple materials with quantities and units on a single order, matching the existing project ingest capability.
**Release Notes · August 10, 2026 · v1.117.0**
#### New features
**Cascade rate changes on mobile** — The "Apply rate changes to existing orders" checkbox is now available on the Create, Copy & Edit, and Edit order forms in the mobile app. Before saving, an impact bottom sheet shows exactly which orders and jobs will be affected by the rate change, so you can review before confirming.
**Order form draft autosave** — Order forms now survive backgrounding the app. If you switch to another app or take a call mid-form, your in-progress input is preserved when you return. Both [foreman](/workflows/foreman) and dispatcher create-order forms are covered. A save/discard prompt appears when you navigate away via the back button or gesture.
#### Improvements
* Timesheet forms (Job + Time Log) are restyled with cleaner headers showing the order name or time log date for context, plus a new Total Hours field on the Time Log form.
* Digital tickets now capture where the driver was when they saved, so the server can stamp the ticket with GPS coordinates for auditing.
* Site addresses are tap-to-copy again.
* Removed the "Synced with Project", "Frozen on Complete", and "Stamped to Order" chips from the order form rates section for a cleaner layout.
**Release Notes · August 10, 2026**
#### New features
**Change job status from the Approve Jobs page** — Dispatchers can now change a job's status directly from the Approve Jobs page (Approvals > Approve Jobs) without navigating back to Dispatch. The status dropdown on each job row is now fully interactive.
#### Improvements
* Rate fields are now properly hidden from API responses when users don't have permission to view them. Previously, hidden rates could appear as \$0.00 or cause display errors in certain views.
* PDF and bulk download reliability improved. Fixed processing issues that could cause job card downloads to fail or time out on larger documents.
**Release Notes · August 7, 2026**
#### New features
**Self-serve AI scanning instructions** — When you notice a ticket scanning issue, you can now edit your company's AI scanning instructions directly from the ticket drawer. No need to navigate to Settings → Agents. See [agent configurations](/onboarding/agent-configurations).
#### Improvements
* "First truck left pickup" on the dispatch board now correctly shows the first truck's departure time and is available on 98% of orders (previously showed the last truck and was blank on most orders).
**Release Notes · August 5, 2026**
#### New features
**Consolidated settlement creation** — Parent companies can now create consolidated settlements that roll up billing-approved work from child terminals into a single settlement per customer. A Location column has also been added to the Invoices grid for location-based filtering, matching the existing Settlements grid. See [multi-entity billing](/specialized/multi-entity-billing).
**"Apply rate changes" checkbox on all order forms** — The "Apply rate changes to existing orders" checkbox is now available on the Create Order, Copy & Edit Order, and completed order forms. Previously it only appeared when editing an existing order.
#### Improvements
* Rates History now shows entries for jobs that inherit rates from their parent order. These previously appeared blank.
* A Tread ID column is added to the Customers tab in Settings, making it easy to identify connected companies at a glance.
# Release Notes · September 2026
Source: https://docs.tread.ai/release-notes/2026-09
Tread releases in September 2026: 10 web, 1 mobile. Use the Web and Mobile filters to narrow the list.
**Release Notes · September 29, 2026**
#### New features
**Search by PO or Job Number** — The Dispatch board and [Approve Jobs](/workflow/approvals/jobs) now match on an order's PO / Job Number and on a project's PO, not just the dispatch number. Edits to a PO show up in search right away, and older records become searchable once the one-time reindex finishes.
**Edit an Order Without Leaving Approvals** — The order summary card on [Approve Jobs](/workflow/approvals/jobs) now has an Edit Order button that opens the full order form in place, so approvers can correct an order without switching over to Dispatch.
**Three More Self-Serve Settings** — Three behaviors that previously needed a request to Tread are now admin toggles under Settings › Configuration: whether new orders default to Running, whether canceled and rejected orders appear in the Orders tab filter, and whether the driver Trailer picker and Trailer column are shown. Nothing changes until an admin changes it.
#### Improvements
* Material, project and equipment filter dropdowns now load in about a second on very large accounts, instead of failing to load at all.
* Report Settings now offers a Builder content type, so self-serve report-builder rows can be created and saved.
**Release Notes · September 25, 2026**
#### New features
**Equipment Owner Filter** — A new Equipment Owner filter on Dispatch, Approve Jobs and Invoices lets you narrow to work running on your own trucks or on a specific vendor's. The selection sticks across reloads and matches the CSV export.
**Built-In Diesel Price Indexes** — Tread now ships diesel price indexes for 10 U.S. regions, refreshed weekly from the U.S. Energy Information Administration, that any company can attach to a [fuel surcharge schedule](/specialized/fuel-surcharges). They appear as read-only with a sync marker, and your own custom indexes work exactly as before.
**Self-Serve Order Requirements** — Three more behaviors that previously required a request to Tread are now admin toggles under Settings › Configuration: require an Order Name on every order, require a Service Class on every order, and start dispatch order cards collapsed. What you see today stays the same until an admin changes it.
**Build a Report for Everyone** — Build a Report is now available to every company under Dashboard, rather than internal users only, so you can assemble your own reports.
**Projects Site Filters** — The Projects page can now be filtered by pick-up site and drop-off site, with chips that persist and clear like the rest of the filters.
#### Improvements
* Dispatch pages load noticeably faster and no longer time out on large accounts.
* Timesheets that record total hours but no net hours now fill in the net automatically, subtracting a break when it fits inside the shift — a net you entered by hand is never overwritten.
* The Display area of Settings › Configuration is reorganized from one long checkbox list into clear groups, including a grid showing which columns appear on the Orders and Jobs dispatch tables.
* The compact Tread Agent chat panel can now be dragged anywhere on screen by its header, and reopens where you left it.
* Removing the customer or vendor role from an account is now blocked while that account is still attached to active orders or jobs.
* Removed an empty gap that appeared above column headers on tables shown without a toolbar.
**Release Notes · September 22, 2026**
#### New features
**Dispatch Filters That Narrow Each Other** — Dispatch filter dropdowns now respect every filter you already have applied — including the search box, requester, order state, department and equipment type — and related filters narrow one another, so picking a pickup site limits the dropoff list to the sites actually paired with it. Dropdowns also no longer shrink in a way that hid an option you had already selected.
**Self-Serve Pickup & Dropoff Column** — Hiding the Pickup & Dropoff column on Dispatch order cards is now an admin toggle under Settings › Configuration instead of a Tread-managed switch. What you see today stays the same until an admin changes it.
**Release Notes · September 21, 2026**
#### New features
**Smarter Dispatch Filters** — Dispatch filter dropdowns now only offer values that actually exist under your other active filters, so you stop scrolling past options that would return nothing. New Equipment and Collaborator filters have been added, and the Customer and Vendor dropdowns can be narrowed by typing.
**Self-Serve Dispatch Display Settings** — Four Dispatch display options moved from Tread-managed switches to admin toggles under Settings › Configuration: hiding Start Time, Material and Equipment Type on order cards, and showing the Truck & Trailer column on the jobs table. What you see today stays the same until an admin changes it.
**Stop the Tread Agent Mid-Answer** — A Stop button now lets you end a Tread Agent response while it is still being written. Whatever it produced is kept and the input box re-enables, so you can rephrase without waiting for a long answer to finish.
#### Improvements
* Dispatch pages that depend on job statistics load noticeably faster under heavy load.
* A Tread Agent error is now a compact message with a link to start a new chat, instead of a large block of text.
* Settings › API Credentials has a new "Copy as LLM Prompt" button that copies a ready-made brief for pointing an AI coding assistant at the Tread API — the brief never includes your key.
* Truncated company names in the company picker now show the full name on hover.
* Rows in the top-right account menu have consistent spacing and alignment.
**Release Notes · September 17, 2026**
#### New features
**Dispatch order sort** — Admins can now set how the Dispatch Orders list is sorted — by dispatch number, highest first, or by most recently created — from Administration › Configuration. This previously required a request to Tread. Your current sort order is unchanged.
**Release Notes · September 16, 2026**
#### New features
**Digital ticket view default** — The default digital ticket view is now an admin-visible toggle under Settings › Configuration, so companies can set it themselves instead of requesting a change.
#### Improvements
* Settings › Integrations reads more cleanly, with redundant vendor and section labels removed.
**Release Notes · September 15, 2026**
#### New features
**Payment Terms** — Create and manage payment terms directly in Tread. A new settings page lets you define terms with a company default. Payment terms can be imported from [QuickBooks](/integrations/quickbooks), mapped on the QuickBooks mapping page, and assigned on settlements to automatically calculate due dates.
**Per-load fuel surcharge schedule** — [Fuel surcharge schedules](/specialized/fuel-surcharges) now support a per-load type: a flat dollar amount per load, tiered by fuel price index, alongside the existing percentage and per-unit options.
**Dismiss AI reviews** — Approvers can now dismiss an AI review on any ticket if the result isn't relevant, keeping the approval queue clean. AI review badges have also been refined for clarity.
**Materials filter in Approve Jobs** — A new Materials filter on the Approve Jobs page lets you filter by material for faster approvals.
**In-product Help Center** — A Help Center icon now appears in the product, linking directly to training materials at docs.tread.ai.
#### Improvements
* Broker Fees vendor and customer lists are now sorted alphabetically and include a search box.
* Tread Agent now streams its reasoning to the chat and shows clearer activity descriptions instead of technical tool names.
* Messaging recipient pickers on web now include shared drivers and owner-operators.
**Release Notes · September 10, 2026**
#### New features
**Ticket approval controls** — The Approve button now always appears alongside AI reviews, so approvers can stamp their own sign-off without hunting for a dropdown. You can also dismiss an AI review on any ticket if the result isn't relevant.
#### Improvements
* Freight rate cards now label the customer-rate quantity as "Quoted Quantity" for clarity.
* The order card company chip now shows the full owning account name on hover instead of truncating.
* Load Reports now include a potential duplicate ticket flag for reporting dashboards.
**Release Notes · September 8, 2026**
#### New features
**QuickBooks mapping redesign** — The [QuickBooks](/integrations/quickbooks) mapping page has been rebuilt with a Tread-first layout. Customers, Vendors, Items, and Ledger tabs now show your Tread entities as rows with QuickBooks matches picked per row. A new Advanced Configuration menu lets you choose whether QuickBooks assigns its own document numbers on exported invoices and bills.
#### Improvements
* The equipment dialog now includes an "Owned by" picker to assign truck ownership to a connected vendor, with clearer fleet attribution and an explained empty state when no trucks are available.
* Job exports now include Pickup Site Address and Dropoff Site Address columns.
* Configurable export columns are now available to all companies. No setting required.
* Dispatchers can see when a driver's location is approximate, surfaced as a GPS accuracy indicator in the location popover.
* The Tread Agent now finds records by name correctly and shows clear error details when an action fails, so it can self-correct instead of giving vague responses.
* The project "Rate History" tab is renamed "Timeline" for clarity.
* The Actions column on data grids now stays pinned to the far right and is properly sized.
**Release Notes · September 5, 2026 · v1.118.0**
#### New features
**Order rate change controls** — Unchecking "Apply rate changes to the project and other existing orders" now keeps the change on that order alone and stops it from tracking the project's rates. A clearer impact sheet shows exactly what will be affected before anything cascades. See [how rate changes flow](/workflows/how-rate-changes-flow).
#### Improvements
* Hourly drivers get clearer timesheet entry points on the job Info tab, and only see "Log Your Hours" when the rate that pays them is hourly.
* Create Driver, Add Account, Create Site, and Copy & Edit Order forms now keep your input across an app background or restart.
* Drivers on approximate location are now prompted to restore precise location, so their tracking stops going stale.
* Time Log now shows the stop time you saved instead of the current time.
**Release Notes · September 3, 2026**
#### New features
**Equipment ownership: internal and vendor trucks** — The [Equipment](/concepts/equipment) page now has dedicated Internal Trucks and Vendor Trucks tabs, replacing the old Visibility filter. Designate which connected vendor owns each piece of equipment. The correct owner and "Shared by" details appear from every seat in the sharing chain, including CSV import and export.
**Settings → Billing** — Billing contacts can now view and pay Tread invoices directly from Settings → Billing. See open and paid invoices, set up bank payments (ACH), view your bank account on file, and access the billing portal, all self-serve.
**Deleted Records** — A new Settings → Deleted Records page lets you browse discarded Orders, Jobs, Projects, and Tickets in a tabbed view. Ticket images display as thumbnails with a lightbox for full-size viewing.
**Dispatch Drivers: Orders view** — The unassigned column on Dispatch → Drivers now has an Orders sub-tab alongside Jobs. Orders are grouped into cards showing order details and customer, with a persistent view toggle.
#### Improvements
* Settlement line items for Per Hour jobs now show the timesheet number, making it easier to trace hours back to the source document.
* The Add On assignment form is simplified: Add On Types default to all, and you can create new Add Ons inline without leaving the form.
* Quote PDF: combined-rate notes are now footnoted with an asterisk to the specific line items they apply to.
* Quote PDF: freight lines now show estimated quantity and line totals when a rate card quantity is set.
* Payment terms now appear on settlement PDFs for QuickBooks-connected companies.
* Material pickers on orders now show materials from the order's owning company, so vendor-side users see the correct options.
**Release Notes · September 2, 2026**
#### Improvements
* Live ETA recalculation is now rate-limited to reduce unnecessary API calls, with an immediate bypass for leg changes such as arrival or departure.
* The geofence pipeline now recovers missed first pickups when a driver loads at the pickup site before tapping "start job".
* Device permission tracking now captures whether a driver granted precise or approximate location.
**Release Notes · September 1, 2026**
#### New features
**HaulWare ticket export** — Companies using HaulWare (FreightWare) can now configure the integration from Settings → Integrations. Approved tickets export automatically on approval or via a nightly batch, with exactly-once delivery and full status tracking.
**QuickBooks integration: payment terms and invoice details** — Select payment terms when exporting settlements to [QuickBooks](/integrations/quickbooks). Invoice line items now include date of service, dispatch number, and settlement notes in the memo. Settlements now support due dates and payee-facing notes on PDFs.
#### Improvements
* Approve Jobs: the timesheet number now appears on the timesheet row and in the detail modal.
* Approve Jobs: the Map + Hours workspace has an improved layout and readability.
* The QuickBooks refresh button now shows syncing state, disables during sync, and stamps the last-updated time.
* Chat: images and files now render inline in message threads with a lightbox for full-size viewing.
* The data grid pager is redesigned as a cleaner labeled segment control below the table.
* Connected vendors can now mark receivables settlements as paid.
* Ticket drawer prev/next now navigates across orders regardless of load states.
# Release Notes · October 2026
Source: https://docs.tread.ai/release-notes/2026-10
Tread releases in October 2026. Use the Web and Mobile filters to narrow the list.
**Release Notes · October 21, 2026**
#### New features
**Export settlements to QuickBooks in bulk** — Billers can now select multiple settlements on Payables or Receivables and send them all to [QuickBooks](/integrations/quickbooks) in one action, instead of exporting them one at a time. A summary afterward shows how many succeeded, how many were skipped and why, and the rows update as it runs.
**A default tax rate schedule for untaxed lines** — Canadian QuickBooks exports no longer block or go out blank when a line has no tax. Settings → QuickBooks → Advanced gains a "Default Untaxed Tax Rate Schedule" picker, and until it's set, an export that needs it fails with a clear explanation instead of a silent problem.
**Email a quote PDF to your customer** — The [Quotes](/workflows/sales-quotes) menu on a project now offers "Email PDF" alongside "View PDF." The recipient is prefilled from the account's primary contact, and the subject and note can be edited before sending.
**Clear a false duplicate flag on a ticket** — A ticket wrongly flagged as a duplicate can be cleared with one click. The red Duplicate chip is replaced by who dismissed it and when, with an Undo — and the flag comes back on its own if a genuinely matching ticket turns up later.
#### Improvements
* Dispatch Orders and Assigned Orders load noticeably faster and scroll more smoothly on large boards.
* Live job ETAs can now be calculated with real truck dimensions instead of generic car routing, giving more accurate arrival times where equipment types have their dimensions filled in.
* Scanned ticket units and quantities now follow the job's rate, so fewer tickets need correcting by hand afterward.
* For Fast-Weigh customers, vendor voids now void the matching Tread ticket and vendor revisions update it, instead of both waiting for someone to handle them manually.
* The Projects page gains a Material filter.
* CSV imports for drivers, vendors, customers, and sites now accept common US phone formats instead of rejecting them.
* Browser tabs now show the page you're on, and the Tread favicon is visible in dark mode.
* GIF and WebP images are no longer accepted anywhere in the product — use PNG or JPEG instead.
**Release Notes · October 19, 2026 · v1.120.0**
#### New features
**Dispatch back on the bottom bar** — People who both drive and dispatch now keep Dispatch on the bottom bar instead of having to dig for it, with Live Map and Account moved into More. Drive-only users see the same Assigned, History, Messages and Account tabs as before.
**Material and requested amount on the assigned job card** — The assigned job card now shows the job's own material and requested amount under the pickup site, so a driver can see what they are hauling and how much without opening the job.
**Project and order attachments on mobile** — Dispatchers and foremen can now open project and order attachments from the order Details tab, instead of switching to a computer to look at a file.
#### Improvements
* Photo readability checks are more accurate on iPhone and flag far fewer good ticket and timesheet photos as unusable.
**Release Notes · October 15, 2026**
#### New features
**Search and paging that reach every record** — Search boxes across Settings, Administration and Approvals now search every record on the server instead of only the rows currently on screen, and screens that were silently capped now have a working pager. Departments, Materials, Equipment, Labels, Capacity Breakdown, Automatic Settlement Add-Ons, Admin Connections, Tickets Review and Driver Day all moved over. Search is also roughly six times faster and shows a spinner while it runs.
**Auto-assign equipment to jobs is now your setting** — Having a driver's truck and trailer attach to a job automatically used to require a request to Tread. It is now a toggle in Settings → Configuration that an admin can turn on or off at any time.
#### Improvements
* Settlements can now be sorted by "For" — the vendor or driver on payables, the customer on receivables — ascending or descending, across every page.
* [QuickBooks](/integrations/quickbooks) line descriptions can include a job's ticket numbers and pay time, with an Advanced option to list ticket numbers by load, by job, or both.
* Selecting specific jobs and clicking "Send all" no longer asks for an extra confirmation.
* The "Require approval to settle" checkbox is hidden until the billing work behind it is live, so it can no longer be switched on with no effect.
* The Tread logo on the loading screen is now visible in dark mode.
**Release Notes · October 12, 2026**
#### New features
**Email settlements to customers and vendors** — [Settlements](/workflows/billing/create-and-send-settlements) can now be emailed straight from Tread with the PDF attached, one at a time or in bulk from the selection bar. A preview shows who will receive what before anything sends, the subject line is editable, and a new permission controls who can send.
**Dispatch status filtering** — Dispatch status counts are now clickable and return exactly the jobs they represent, including vendor-shared jobs. Counts appear when a single day is selected, so the number on the panel and the list below it always agree.
**QuickBooks service date and richer line descriptions** — Exported invoice and bill lines from [QuickBooks](/integrations/quickbooks) can now include order PO, project name, pickup and drop-off sites, driver, delivered quantity, a job's ticket numbers, and its pay start and end times. A new setting sends the job date as the Service Date on invoice lines. Companies that have not changed their configuration see no difference.
**Dismiss false duplicate ticket flags** — A ticket wrongly flagged as a possible duplicate can now be marked "Not a duplicate" and cleared, with the record showing who cleared it and when. A genuinely new or edited match flags it again.
**Customizable table columns** — Tables across Settings, Administration, and Approvals now carry a Columns menu to show, hide, and reorder columns, plus drag-to-resize, and your layout survives a reload. Search, paging, and row actions work exactly as before.
**Recurring settlement add-ons** — "Broker Fees" is now "Recurring Settlement Add-Ons," with a banner explaining how it works so it can be found for truck rental, supplemental pay, and credits too. The installments field shows the split math as you type, and the two installment columns are now one ("3 of 10" or "Ongoing").
#### Improvements
* Load notes now flow through to payroll and load reports, including on loads created before this change.
* Approving a load now clears its AI "needs review" flag, so approved loads drop out of the flagged filter.
* User CSV import accepts everyday US phone formats, explains rejected rows in plain language, and no longer reports a partly failed import as a success.
* Settings › Units and profile notification preferences now use a tick-to-save table instead of Edit/Save/Cancel.
* The order form's "apply rate changes" default is now an admin-controlled company setting under Settings › Configuration › Display.
* Material Types can now be sorted by name, so new types are no longer stranded on the last page.
* Fast-Weigh deliveries now carry the name of the person who entered the order and a drop-off contact line.
* Ticket webhooks now include the ticket number and quantity.
* Settlement PDFs download as just the display ID, without the `settlement-` prefix.
* The "Your files are ready" toast now clears itself after 3 seconds.
**Release Notes · October 7, 2026 · v1.119.0**
#### New features
**Truck name plates on maps** — Truck numbers now appear directly on map pins, on both Live Map and the order map. Dispatchers can tell trucks apart at a glance instead of tapping each one.
**Blurry photo warning** — The app now checks a ticket or timesheet photo before it uploads and warns the driver if it looks too blurry to read, so unusable images get retaken on site instead of discovered in the back office.
#### Improvements
* The bottom bar now caps at five tabs, with the rest moved into a new More tab, fixing cramped and clipped labels, especially in Spanish and at larger text sizes.
* The default [digital ticket](/specialized/digital-tickets) view is now a company setting admins can change in Settings themselves, instead of a hidden toggle that needed a request.
* When a driver's session expires, the app stops retrying queued location uploads instead of retrying indefinitely. Queued locations are kept and resume after sign-in.
**Release Notes · October 6, 2026**
#### New features
**Sage exports for settlements** — Settlements can now be exported to [Sage](/integrations/sage) directly from the bulk actions bar, with a format picker when more than one format is enabled. Re-exporting warns first, and every settlement row shows whether and when it was last exported.
**Driver-reported times on hours approvals** — Approvers now see each driver-submitted timesheet's own start, end and total on the job, alongside its image. A single action copies those times onto the job's billable hours, warning first if it would overwrite a manual adjustment.
**QuickBooks line description settings** — Companies can now choose which fields appear in exported invoice and bill line descriptions, and in what order, with a live preview and separate setups for receivables and payables. Leave it alone and descriptions stay exactly as they are today.
**Order actions on Approve Jobs** — The order card on [Approve Jobs](/workflow/approvals/jobs) now carries the same three-dot actions menu as Dispatch — text all drivers, duplicate or copy-and-edit the order, download files and job card PDFs, and cancel the order without leaving Approvals.
#### Improvements
* The "Collapse order cards by default" setting now applies to Approve Jobs, Payables and Receivables as well as Dispatch, and your expand/collapse choice survives filter changes, searches and refreshes.
* Selecting a customer account on the Create/Edit Project and Order forms now shows that account's notes right below it.
* The delete confirmation on the Projects page now names the project you are about to delete.
* Bulk "Download job card PDFs" has moved into the Export Jobs dropdown.
* Fuel Price Index and Fuel Surcharge Schedule tables now load one page at a time, so they stay fast as price history grows.
* Drivers flagged with "hide rates" no longer see their own pay rate on jobs and loads in the mobile app.
# Changelog
Source: https://docs.tread.ai/resources/changelog
Product updates and customer-facing changes to the Tread platform.
> [!TIP]
>
> For every web deploy and mobile release as it ships, see [Release Notes](/release-notes).
**May 1, 2026**
#### Documentation
* Launched [docs.tread.ai](https://docs.tread.ai) — Tread's public customer documentation site. Coverage includes [core concepts](/concepts/overview), [the 5-step quickstart](/quickstart), [onboarding](/onboarding/company-hierarchy), [daily workflow guides](/workflows/create-a-project), [specialized workflows](/specialized/back-hauls), [integrations](/integrations/quickbooks), and the full [API reference](/api-reference/introduction).
* Added a [glossary](/resources/glossary) covering 49 terms — Tread-specific concepts and bulk-aggregates industry terminology.
* Added [common setup mistakes](/resources/common-mistakes) — anonymized lessons from real customer go-lives.
**June 2026**
#### Quoting
* [Sales Quotes](/workflows/sales-quotes) general availability — quote, price from Project Rates, generate a PDF, and convert to an active project from a single screen. Email-send directly to the customer is not yet live; download and send the PDF in the meantime.
**July 2026**
#### Documentation
* Reviewed the docs against the live product and support data, page by page.
* Rewrote [Prevailing Wage](/specialized/prevailing-wage) for the shipped feature — project flag, PW rate schedules, benefit credits, and overtime rules, with screenshots.
* Expanded [Mobile Troubleshooting](/mobile/troubleshooting) with the fixes support uses most — sign-in alternatives, GPS status checks, and device support.
* Documented [bulk CSV import](/onboarding/master-data/overview) — templates, column reference, per-row validation, and failed-row retry.
* Refreshed the [Driver App](/mobile/driver-app) and [Foreman App](/workflows/foreman) pages and corrected [glossary](/resources/glossary) and [setup-mistakes](/resources/common-mistakes) entries to match the product.
## Subscribe
* **In-app:** turn on release notifications in **Settings → Notifications** in Tread Horizon.
* **Account team:** your CSM emails major changes that affect billing, dispatch, or compliance.
## Related
* [Release Notes](/release-notes)
* [FAQ](/resources/faq)
* [Common Setup Mistakes](/resources/common-mistakes)
# Common Setup Mistakes
Source: https://docs.tread.ai/resources/common-mistakes
What customers wish they had known on day one.
These warnings come from real customers. Names are anonymized.
## Hierarchy
> [!WARNING]
>
> **Always create entities at the parent level, then share down.**
> A multi-region producer set up drivers, vendors, equipment, and customers at the child-company level. Dispatchers couldn't assign drivers across divisions, mobile users couldn't see internal drivers, and payroll couldn't pull a clean hours report.
> The fix took two days of back-end migration to lift everything to the parent and re-share. See [Companies & Hierarchy](/concepts/companies-hierarchy).
> [!WARNING]
>
> **Flat is the default. Use parent/child only for true regional splits.**
> A complex multi-entity hauler ran three legal entities with terminals as child companies. The hierarchy was justified, but the cutover slipped from December to February while data cascading and per-customer billing rules got cleaned up.
> If your dispatchers and AP team operate as one group, stay flat — the training and data overhead of parent/child is real.
## Master data
> [!WARNING]
>
> **Set up Equipment Types before Equipment.**
> Capacity and unit of measure live on the Equipment Type. If you skip the type and create equipment first, material tracking breaks and you can't load-balance trucks by capacity.
> Build types first, then add trucks against them. See [Equipment Types](/onboarding/master-data/equipment-types).
> [!WARNING]
>
> **Geofence type changes affect historical data.**
> Switching a site's geofence from a circle to a polygon retroactively changes which past loads counted as "on site." This shows up as load-count discrepancies in old reports.
> Pick the geofence shape during onboarding and leave it alone. See [Sites & Geofences](/concepts/sites-geofences).
> [!WARNING]
>
> **Build PW rate schedules — the project flag alone does not price the work.**
> A public-works contractor flagged the project as prevailing wage and assumed rates followed. They didn't — pricing comes from the PW fields on rate schedules. Loads billed at standard rates and the contractor had to redo three weeks of settlements.
> Flag the project, then set up PW rate schedules for the equipment types and materials that qualify. See [Prevailing Wage](/specialized/prevailing-wage).
## Billing
> [!WARNING]
>
> **Approve before you settle.**
> Tickets that don't show up on a settlement are almost always tickets that haven't been approved. Approvals run in three tiers: shift, job, and load. All three must complete before a load is settle-eligible.
> Check the Approvals queue first. See [Timesheet Approvals](/concepts/tickets-timesheets).
> [!WARNING]
>
> **Commission applies to the line item, not the invoice total.**
> A trucking customer set a 20% commission expecting it to apply to the invoice total. Tread applied it to each line item. The numbers matched on small jobs but diverged on multi-line settlements.
> Test commission on the settlement side, not the invoice side, before go-live. See [Settlements & Driver Pay](/concepts/settlements-driver-pay).
> [!WARNING]
>
> **Void-and-redo is the only correction path.**
> You cannot edit an approved settlement in place. To fix a mistake, void the settlement, unapprove the affected lines, change the data, re-approve, and create a new settlement.
> Voided settlements stay in the system under the Void filter for audit.
> [!WARNING]
>
> **One job, one invoice. Plan accordingly.**
> Tread does not split a single job across multiple invoices. If a customer needs separate invoices for separate scopes, build separate jobs.
> Decide the invoice cut points when you set up the project, not at billing time.
> [!WARNING]
>
> **Fuel surcharge has three pieces — set up all three.**
> A fuel surcharge needs a Fuel Price Index (the weekly diesel reference), a Surcharge Schedule (the price-to-surcharge table), and an Add-On that applies it to an order. Setting up only the Add-On gives you a flat fee, not a real surcharge.
> Update the index weekly. See [Manage Rates, Add-Ons, Fees](/concepts/rates-add-ons).
> [!WARNING]
>
> **A per-ton price that already includes material double-bills if you also set a Material rate.**
> A producer quoted one per-ton price that covered both material and freight. Tread added the Material rate on top, so the invoice came out high.
> Split the price instead. Set the Freight rate to the freight share and keep the Material rate. Then, on the Order, uncheck **Itemize Material Rate** so the invoice shows one line. See [Rates & Add-Ons](/concepts/rates-add-ons).
> [!WARNING]
>
> **Hand-added add-ons don't carry when you copy an order.**
> Copying an order prices the new day's jobs from the project and order setup. [Add-Ons](/concepts/rates-add-ons) set up on rates apply again; add-ons added by hand to individual jobs don't carry over. A multi-state aggregate hauler copied orders day-to-day and settlements came up short by the fuel surcharge.
> Set recurring charges as Add-Ons on the rate, not by hand per job. After copying, confirm the add-on lines before you settle. See [Manage Rates, Add-Ons, Fees](/workflows/manage-rates).
## Drivers & vendors
> [!WARNING]
>
> **Drivers must never see customer billing rates.**
> A national hauler ran a beta where a driver accidentally saw a customer rate. The feature was pulled the same day. Driver-facing rates show driver pay only; customer rates and markups are role-restricted.
> Test visibility settings against a real driver login before you roll out. See [Roles & Permissions](/concepts/roles-permissions).
> [!WARNING]
>
> **Deactivate drivers — don't delete them.**
> Deleting a driver locks the phone number and blocks reuse. This is the single most common support request.
> Deactivate the user instead. History stays intact and the phone number frees up. See [Adding Drivers](/onboarding/master-data/drivers).
> [!WARNING]
>
> **Vendor adoption takes four weeks. Stay firm.**
> A regional aggregate hauler pushed subhaulers onto Tread and saw heavy resistance for the first month — drivers skipping ticket photos, vendors calling the dispatcher to complain. The customer held the line: app-only tickets, no paper backup. After four weeks, adoption stuck.
> Customers who follow this pattern see zero churn. Customers who blink end up with a hybrid system that costs more than either approach. See [Driver App](/mobile/driver-app).
> [!WARNING]
>
> **Shared drivers get dispatched directly. Vendors assign their own driver.**
> A Shared Driver — a driver another company shares to you, like an Owner-Operator — accepts jobs like your own internal driver. A Vendor receives the job and picks which of their drivers takes it. Confusing the two leaves jobs sitting unassigned.
> Mark the relationship correctly when you create the vendor. See [Vendors](/onboarding/master-data/vendors) and [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
> [!WARNING]
>
> **AI ticket review is informational, not a gate.**
> The Ticket Chaser flags duplicate ticket numbers, quantity outliers, and date mismatches. These are hints, not blocks. A bulk-aggregate customer ignored several flags as false positives during go-live and approved the loads.
> Train approvers to read flags and use judgment. Don't wait for a clean queue. See [AI Data Collection & Approvals](/workflows/track-drivers-collect-tickets).
> [!WARNING]
>
> **Internal drivers should see their own pay rate.**
> Only customer-side rates are role-gated. Internal drivers need to see what they're earning per load or per hour for their own tracking — restricting it makes them call the office for every paycheck.
> Leave driver-pay visibility on for internal drivers. Lock down customer billing rates separately. See [Roles & Permissions](/concepts/roles-permissions).
> [!WARNING]
>
> **Adding a person under the wrong role.**
> A regional contractor added new hires under Vendors instead of as internal drivers, then couldn't dispatch them. The fix is to edit the role on the User record from Settings → Users — not delete and re-add.
> Deleting locks the phone number and blocks the correction. See [Roles & Permissions](/concepts/roles-permissions).
## Master data
> [!WARNING]
>
> **Vendor name or EIN changes need a new vendor record.**
> Editing a vendor's legal name or EIN on the existing record breaks 1099 history. The vendor's prior pay statements end up under the new name and the prior EIN disappears.
> Create a new vendor record for the new entity, deactivate the old one, and migrate active jobs. See [Vendors](/onboarding/master-data/vendors).
> [!WARNING]
>
> **Order timezones use the project's site timezone, not the dispatcher's.**
> A dispatcher in Chicago dispatching a Phoenix project sees order times in Phoenix time. This catches teams off guard when one office runs work across regions.
> Confirm the project's site timezone before reading start and end times. See [Sites & Geofences](/concepts/sites-geofences).
## Billing
> [!WARNING]
>
> **Don't attach pricing-sheet PDFs to projects.**
> Project attachments are visible to drivers assigned to the project — including driver-app users on the jobsite. A customer rate sheet attached as "for reference" is a leak waiting to happen.
> Keep pricing in the rate card record, not in project attachments. See [Rates & Add-Ons](/concepts/rates-add-ons).
> [!WARNING]
>
> **Rate precedence: site rate schedule wins, then project, then customer.**
> When a rate looks like it "disappeared" or "reappeared," it's almost always precedence. A site-level schedule overrides a project rate, and a project rate overrides a customer rate. First match wins.
> Trace from the most specific scope down. See [Rates & Add-Ons](/concepts/rates-add-ons).
## Dispatch
> [!WARNING]
>
> **Bulk-editing load counts can reset to 1 if save races order resync.**
> Editing load counts in bulk while another user resyncs the order can land a stale value back on the order — sometimes resetting counts to 1.
> Refresh between batch edits and confirm counts before dispatching. See [Create Project → Order → Dispatch](/workflows/create-a-project).
> [!WARNING]
>
> **Adding a driver mid-day to an active digital-ticket order may force scale-ticket mode.**
> On an active digital-ticket job, adding a fresh driver after the first ticket has been captured can flip the new driver's session into scale-ticket mode. The driver ends up taking photos of nothing.
> Restart the job for the new driver instead of re-adding them mid-shift. See [Digital Tickets](/specialized/digital-tickets).
> [!WARNING]
>
> **Live map shows non-dispatched trucks if telematics is streaming them.**
> A truck on a [telematics](/integrations/telematics) feed appears on the live map even when it isn't dispatched to anything in Tread. The map is a vehicle view, not an active-dispatch view.
> Filter by status if you want only active dispatches. See [Track Drivers & Collect Tickets](/workflows/track-drivers-collect-tickets).
## Related
* [FAQ](/resources/faq)
* [Glossary](/resources/glossary)
# FAQ
Source: https://docs.tread.ai/resources/faq
Common questions from new customers.
## Setup
> **In what order should I set up master data?**
>
> Users first, Equipment Types, Equipment, then Drivers, Customers, Vendors, Materials, Sites, and finally optional items like Departments and Service Classes. Equipment Types must exist before you can add Equipment. See [Master Data Overview](/onboarding/master-data/overview).
> **Flat or parent/child hierarchy?**
>
> Flat is the default and right for almost everyone. Use parent/child only for real regional splits with separate dispatchers, billing, and AP. See [Companies & Hierarchy](/concepts/companies-hierarchy).
> **Where do I create drivers, vendors, and equipment?**
>
> At the parent company. Share down to child companies that need them. Creating at the child level is the most common setup mistake — it blocks cross-division dispatch and breaks reporting.
> **What's the difference between a Project and an Order?**
>
> A Project is a long-running container or template— the customer, the site, the rates, the materials. An Order is the daily work that runs against the project. One project can have hundreds of orders. See [Orders & Projects](/concepts/orders-projects).
> **Do I need a geofence on every site?**
>
> Yes. A geofence (a virtual fence around a site) is what triggers automatic load start and end. Without it, drivers have to start, progress and end every load manually. See [Sites & Geofences](/concepts/sites-geofences).
> **How do I change my company name or the phone number on my account?**
>
> Contact Tread support. Your own company name and account phone number aren't editable in the app today.
>
> Send support the new value. They apply it, and for a phone-number change they send a fresh SMS invite — sign in with the new number once it arrives.
>
> This is different from renaming a *vendor* you added, which you can do yourself from **Settings → Vendors**.
> **How do I change color mode (dark/light)?**
>
> Both the web app and the mobile driver app have a color mode setting. Pick **System**, **Light**, or **Dark** on either one. System follows your device setting.
>
> **On the web app:** go to **Settings → User Profile → Appearance**.
>
> 
>
> **In the mobile driver app:** open the **Account** tab and tap the **Appearance** row, below Timezone and Language. The row shows the current choice — for example, **Appearance: System**. Pick a mode from the sheet that opens. The change applies right away, and works with no service.
>
> 
>
> Your choice saves to your user account, so it follows you across devices and between the app and the web app.
>
> **Don't see Appearance?** Dark mode is still rolling out, and the app needs to be up to date. If the setting is missing on web or in the app, it isn't enabled for your company yet — contact Tread support. Until it is, the app stays light no matter what your phone is set to. If the web app looks dark or has inverted colors and Appearance is set to Light, check your device or browser display settings.
> **Job Site not showing for New Order**
>
> Reload the browser page, then reopen the order form. A site added while the app was already open — by you in another tab, or by a teammate — may not appear in the list until the page reloads.
>
> If the site is still missing after a reload, check these:
>
> * **The site is active.** The New Order site list only shows active sites. Reactivate it under **Settings → Sites**.
> * **You're on the right company.** The list only shows sites on the company the order is under. See [Companies & Hierarchy](/concepts/companies-hierarchy).
> * **The list is still loading.** Sites load a page at a time as you scroll. Keep scrolling before you decide a site is missing.
>
> Still missing? Open a support chat with the site name and the company you're creating the order under. See [Sites & Geofences](/concepts/sites-geofences).
## Billing
> **When can I invoice a customer?**
>
> After the load is approved. Approvals run in three tiers: shift, job, and load. Tickets that don't appear on a settlement are almost always tickets that haven't been approved yet. See [Settlements & Driver Pay](/concepts/settlements-driver-pay).
> **How do I fix an approved settlement?**
>
> Void it. Tread doesn't edit approved settlements in place. Void, unapprove the lines, fix the data, re-approve, and create a new settlement. Voided settlements stay under the Void filter for audit.
> **I accidentally deleted a digital ticket. Can I restore it?**
>
> Yes — deleted tickets aren't gone. Tread keeps an audit trail of ticket deletions, and support can usually recover a recently deleted ticket. Open a support chat and include the order, the driver, the load number, and the rough deletion time. To prevent the next one, review who has delete permission on tickets. See [Roles & Permissions](/concepts/roles-permissions) and [Digital Tickets](/specialized/digital-tickets).
> **When is a ticket considered a duplicate?**
>
> When another ticket on your account has the same ticket number and a service date within 7 days of it. Both tickets get a red **Duplicate** warning on the load, and the **Potential Duplicates** filter lists everything flagged.
>
> What counts as a match:
>
> * **Formatting is ignored.** `A-1234`, `a1234`, and `A 1234` are all the same number.
> * **The check covers your whole account**, not one order or project. A number reused on another project still flags.
> * **Tickets with no service date** are compared to each other. Two undated tickets sharing a number both flag.
> * **Each pair is checked separately**, so a long run can chain. Tickets on day 1, day 7, and day 13 all flag, even though the first and last are 12 days apart.
>
> This is a warning, not a block. Tread still lets the ticket be created and approved, so an approver should compare the two before it reaches billing. Correct the ticket number or the service date and the flag clears on its own. See [Digital Tickets](/specialized/digital-tickets).
> **How do fuel surcharges work?**
>
> Three pieces:
>
> * A Fuel Price Index (the weekly diesel reference)
> * A Surcharge Schedule (the price-to-surcharge table).
> * Add-On that applies the schedule to an order.
> * Update the index weekly. \
> See [Manage Rates, Add-Ons, Fees](/concepts/rates-add-ons).
> **Can I split one job across two invoices?**
>
> No. One job is one invoice. If a customer needs separate invoices for different scopes, build separate jobs.
> **How does commission on driver pay work?**
>
> Commission applies to the line item, not the invoice total. If you set a 20% commission, each line carries its own 20% calculation. Test commission on the settlement side before go-live.
> **Can I export billing to my accounting system?**
>
> Yes — QuickBooks (via Rutter), Sage 300, Vista, Foundation, and Spectrum. See [Integrations](/integrations/quickbooks).
> **What can I edit on an order after I've dispatched or completed it?**
>
> Drivers, equipment, target loads, drop-off site, and notes stay editable mid-shift — see [Intra-Day Changes](/specialized/intra-day-changes). The customer on an in-progress or completed order is not self-serve editable; contact Tread support to swap the customer. Approved settlements can't be edited in place. Void and re-approve to fix billing. See [Settlements & Driver Pay](/concepts/settlements-driver-pay).
## Drivers & Vendors
> **What's the difference between a vendor and an owner-operator?**
>
> A vendor is a hauling company you sub-dispatch to. An owner-operator (O\&O) is a single driver who owns their truck and runs for you directly. Owner-operators get dispatched like internal drivers; vendors receive a job and assign their own driver.
> **What's the difference between an internal and an external truck?**
>
> An internal truck is [Equipment](/concepts/equipment) on your own account, run by your own drivers. An external truck belongs to a [vendor](/onboarding/master-data/vendors) — an account you send dispatches to, instead of assigning your own driver. A subhauler with one truck who runs for you directly is an owner-operator (O\&O): a vendor with a single driver, dispatched like your own. See [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
> **Can I dispatch directly to a driver on a vendor's account?**
>
> Yes, if the vendor shares that driver to you. The shared driver then appears in your Assign list and you dispatch them like your own. Otherwise the vendor accepts the job and assigns one of their drivers. See [Dispatching to Drivers and Vendors](/concepts/dispatching-drivers-vendors).
> **How do I remove a driver who left?**
>
> Deactivate the driver. If the driver is a user in your account the driver can be "Deactivated", if the driver was added as Owner Operator you can "Remove Share". Deactivation removes the account from the system, Remove Share removes access to the driver in your account.
> **A driver can't sign in — can loads still move?**
>
> Yes. A dispatcher can accept the job and advance its status step by step from the Dispatch page, on the driver's behalf, until the sign-in issue is fixed. See [Mobile Troubleshooting](/mobile/troubleshooting).
> **Can I reject a job after accepting it?**
>
> No. Once you accept a job, **Reject** is gone — the app only offers **Start**. Contact your dispatcher: they can un-assign you from the job or cancel it. Going off duty does not release an accepted job, so it stays yours until the dispatcher acts. See [Drivers: Accept & Start Jobs](/workflows/drivers-accept-and-start-jobs).
> **I accidentally ended my job. Can it be restored?**
>
> Yes, but not from the app. A driver cannot undo it — ask your dispatcher to contact the sender, as they will be able to restore the completed job.
> **How long does it take vendors and drivers to adopt the app?**
>
> Plan for four weeks to get used to the app. The dispatcher holds the line: tickets and signatures come from the app, no paper backup. Customers who hold this line see zero churn after the first month.
> **Can drivers see the customer billing rate?**
>
> No, and they must not. Driver-facing rates show the driver pay rate only. Customer rates and markups are role-restricted. See [Roles & Permissions](/concepts/roles-permissions).
> **A driver I'm hiring already worked at another Tread company. How do I add them?**
>
> Contact Tread support. Drivers do not have a self-serve Connect flow yet — vendors and customers do. When you try to add a driver whose phone is already on another Tread account, you'll see "phone number already taken." Tread support links the existing record across companies, so the driver keeps one app login. Send the driver's name, phone number, and your company. See [Driver Lifecycle](/concepts/driver-lifecycle).
> **I added someone as a vendor (or owner-operator) by mistake. How do I change them to a driver?**
>
> A common mix-up: a new hire gets created under Vendors or as an Owner-Operator instead of as an internal driver. Open Settings → Drivers, find the person, locate the 3 dots and select Remove Share. \
> Contact Tread support and provide the driver details. Tread Support will be able to help reset the account so you can add the driver as a User in your account.
> **How do I rename a vendor or merge duplicate driver profiles?**
>
> To rename a vendor whose legal name and EIN are unchanged, edit the company name from Settings → Vendors. If the legal name or EIN changed, create a new vendor record and deactivate the old. 1099s tie to the EIN at the time of payment — editing in place misreports prior pay. To merge two duplicate profiles, contact Tread support. Merging touches dispatch history, app logins, and pay records, so it isn't self-serve. See [Driver Lifecycle](/concepts/driver-lifecycle).
> **I'm adding a vendor or broker and the email is already taken. What now?**
>
> That email already belongs to a Tread account, which means the company is already on Tread. Don't create a second record — connect to the one that exists.
>
> Ask the vendor or broker for their **Tread ID**. They find it in their account settings. Then go to **Settings → Vendors → +Connect**, enter the Tread ID, and confirm their details. Brokers connect the same way as vendors. See [Connect a Vendor Using Tread ID](/workflows/connect-vendor-tread-id).
>
> If you already have a manual record for them under a different name, merge or archive it before connecting. Still stuck? Contact Tread support with the company name and the email.
## Dispatch
> **A ticket was logged on the wrong order. Can I move it?**
>
> Yes, and you can do it yourself. There is no single "move" button, so you re-add the [ticket](/concepts/tickets-timesheets) on the right job and remove it from the wrong one.
>
> 1. Open the ticket on the wrong job and download the ticket image.
> 2. In **Approvals**, open the correct job and add a ticket, uploading the image you saved. Confirm the ticket number appears, then close.
> 3. Check the ticket now shows on the correct job, then remove it from the wrong job.
>
> If the load is already approved, click **Unapprove** on it first. If it has already been settled, unapprove the invoice line and redo the settlement. See [Redo an Approved Settlement](/workflows/billing/redo-a-approved-settlement).
>
> Moving a ticket changes what it bills against, so double-check the order before you re-add it. For other changes you can make yourself mid-shift, see [Intra-Day Changes](/specialized/intra-day-changes).
## Integrations
> **Which accounting systems does Tread connect to?**
>
> QuickBooks (via Rutter), Sage 300, Vista Viewpoint, Foundation, and Spectrum. The data flows one way: Tread to your accounting system. See [Integrations Overview](/onboarding/integrations).
> **Which telematics providers are supported?**
>
> Samsara, Motive, Geotab, and more than 300 other ELD and telematics providers. Telematics gives Tread the truck's GPS and engine state, which powers the live map and auto-geofence triggers. See [Telematics & ELD](/integrations/telematics#supported-providers) for the list.
> **Does Tread integrate with HCSS HeavyJob?**
>
> Yes. The HCSS integration is bidirectional — jobs, cost codes, equipment hours, and timecards sync between systems. See [HCSS HeavyJob](/integrations/hcss).
> **Can I use Tread without an accounting integration?**
>
> Yes. Most customers run for weeks on CSV exports before connecting accounting. The export covers customers, invoices, bills, and settlements.
## Mobile
> **How does a driver log in for the first time?**
>
> The driver signs in with the mobile phone number on their Driver record — the number the Admin entered when adding them. Tread texts a one-time code to that number to confirm it. Drivers invited by email can also sign in with a password or a magic link.
>
> Most first-login failures come from a number mismatch. If the driver types a different number than the one on file, no code arrives. Check the [Driver record](/onboarding/master-data/drivers) matches the phone in the driver's hand.
>
> Still no code after 60 seconds? See [Mobile Troubleshooting](/mobile/troubleshooting).
> **What devices does the Tread app run on?**
>
> iPhone (iOS 16 and newer) and Android (7.0 and newer). Android 10 or newer is recommended — older Android devices run the app but battery and GPS performance degrade. See [Mobile Troubleshooting](/mobile/troubleshooting) for the full list of unsupported devices.
> **Does the app work without service?**
>
> Yes. Drivers can capture tickets, signatures, and timesheet photos offline. Tread queues the data and uploads when service returns.
> **Why didn't a load auto-start?**
>
> Almost always a geofence problem. Either the site has no geofence, the radius is too small, or the driver's GPS is disabled. Check the site, then the driver's location permission. See [Sites & Geofences](/concepts/sites-geofences).
> **"Location sharing stopped, tap to resume" — what does this mean?**
>
> This usually means the Tread app was closed while the driver still had an active job. Location sharing pauses when the app closes, and reopening the app resumes it. To prevent it, drivers should keep the app open for the length of the job.
>
> It can also show when:
>
> * **The driver's phone had no signal for an extended period** — about 5 minutes or more.
> * **The driver denied location permission.**
>
> To check whether a driver has granted location permission, open the **Driver Compliance** report (scroll to the bottom) — see [Reports](/workflows/exports-reports) — or check the status icon next to the driver on the driver list. For permission fixes, see [Mobile Troubleshooting](/mobile/troubleshooting).
> **Can a foreman create orders from the app?**
>
> Yes. A user with the foreman role can create orders, dispatch trucks, and approve work from the same Tread mobile app drivers use. See [Foreman App](/workflows/foreman).
> **A driver isn't getting the verification code. What now?**
>
> Quick checks before opening a ticket:
>
> * Wait 60 seconds, then tap **Resend code**.
> * Confirm the phone number on file matches the SIM in the phone.
> * Ask whether the driver ever replied **STOP** to a Tread text. That unsubscribes the number and blocks login codes, even though the app blames the phone number. The driver replies **START** in the same thread the old codes came from.
> * For Spanish-speaking drivers, switch the app language under Settings → Idioma.
>
> Full fix list at [Mobile Troubleshooting](/mobile/troubleshooting).
> **The app says "Storage full." How do I fix it?**
>
> Tread needs at least 800 MB of free storage on the phone to save data, photos, and tickets. Below that, the app shows a **Storage full** screen and pauses until space is freed.
>
> To free up space:
>
> * Delete apps you no longer use.
> * Delete or back up old photos and videos — they usually take the most space.
> * Clear app caches (Android only).
>
> Then return to Tread and tap **Restart**. For step-by-step device guides, see [Apple (iPhone & iPad)](https://support.apple.com/guide/iphone/manage-storage-on-iphone-iph47c931112/ios) or [Android](https://support.google.com/android/answer/7431795).
> **Unable to install the app on Android — "Tread app will be available for download shortly"**
>
> This usually means the Google Play Store itself has been disabled on the phone, so no app — Tread included — can install or update.
>
> **Re-enable the Play Store:**
>
> 1. Open the phone's **Settings** app.
> 2. Tap **Apps** or **App Management**.
> 3. Find **Google Play Store** in the list.
> 4. Tap it, then tap **Enable** if it shows as disabled.
>
> Reopen the Play Store and try installing Tread again.
## Notifications
> **Why is everyone in my company suddenly getting dispatch or job text alerts?**
>
> Who receives each alert is set per user, not company-wide. Tread sends operational alerts — new dispatches, unassigned jobs, approvals — and each user has their own notification preferences.
>
> If too many people are getting texts, an Admin opens **Settings → Users**, edits each affected user, and turns off the alert types they don't need.
>
> Role also affects the volume. A user with a dispatcher or admin [role](/concepts/roles-permissions) receives more operational alerts than a driver.
> **How do I stop getting texts or emails I don't want?**
>
> Change your notification preferences. Tread can alert you by push, SMS, and email for events like a driver accepting or rejecting a job. Each person sets their own preferences, so turning yours off won't change a teammate's. Open **Settings**, find your notification preferences, and uncheck the alerts you don't want.
> **Which number do Tread texts come from? Can I save it?**
>
> It depends on the text. Ticket Chaser texts come from your company's own Driver Agent number, listed in **Settings → Agents**, and drivers can save it. Dispatch alerts, app invites, and login codes come from shared Tread numbers that can differ from one driver to the next. Texts are sent in English. See [Text Messages from Tread](/resources/text-messages).
## Pricing
> **How is Tread priced?**
>
> Pricing is per truck per month, with a platform fee. Talk to your account executive for a quote — pricing varies by trucks under management, integrations, and contract length.
> **Do you charge per driver or per vendor?**
>
> No. The license is on trucks under dispatch, not on user seats. Dispatchers, foremen, billing leads, and connected customers don't add to the count.
> **Is there a free trial?**
>
> Tread runs proof-of-value pilots — usually 30 to 60 days against one yard or one customer. Talk to sales.
## Related
* [Glossary](/resources/glossary)
* [Common Setup Mistakes](/resources/common-mistakes)
# Glossary
Source: https://docs.tread.ai/resources/glossary
Every Tread-specific term, in plain English.
## A
**Add-On** — A line item added to a rate, like a fuel surcharge, demurrage fee, or wash-out charge. [Learn more](/concepts/rates-add-ons)
**Apex / Command / Integra** — Command Alkon ticketing systems. Many producers migrate to Tread from one of these. Tread imports historical tickets and replaces day-of dispatch and ticket capture.
**Approval** — The act of confirming work is correct before it bills. Tread approves at three tiers: shift, job, and load. [Learn more](/concepts/tickets-timesheets)
**As Directed** — A placeholder material, haul-from, or haul-to used on long-running projects where the actual product or destination changes day to day. The daily order resolves the placeholder before dispatch.
## B
**BME** — A leased-truck pool entity used at multi-entity haulers. Trucks belong to the BME and are leased to the operating companies that dispatch them.
## C
**Class Five** — A Minnesota-spec base aggregate (crushed rock under MnDOT class 5). Common term in Twin Cities and greater MN markets.
**Connected Customer** — A customer that has its own Tread login. They see their orders, GPS, and tickets in real time. [Learn more](/onboarding/master-data/customers)
**Connected Vendor** — A hauler your company shares jobs with through Tread. The vendor accepts the job and either runs it or sub-dispatches. [Learn more](/onboarding/master-data/vendors)
## D
**DBE** — Disadvantaged Business Enterprise. A federal certification used to track minority-owned, women-owned, and small-business participation on public-works jobs. Drives prevailing-wage and reporting compliance. [Learn more](/specialized/prevailing-wage)
**Department** — An optional grouping for reporting. Used to slice revenue, hours, or loads by business unit. [Learn more](/onboarding/master-data/departments-labels-classes)
**Driver Pay** — The pay a driver earns for their work. Calculated from the driver-side rate on the order, not the customer-side rate. [Learn more](/concepts/settlements-driver-pay)
## E
**End Dump** — An open-top trailer with a hydraulic lift that dumps from the rear. The standard aggregate truck type across most North American markets.
**Equipment** — A truck, trailer, or paver tracked in Tread. Equipment belongs to an Equipment Type. [Learn more](/onboarding/master-data/equipment)
**Equipment Type** — The category an equipment belongs to (Tri-Axle Dump, Belly Dump, Tractor). Capacity and unit of measure live on the type. [Learn more](/onboarding/master-data/equipment-types)
## F
**Fines / Screenings** — Small aggregate, often a byproduct of crushing larger rock. Sold as a separate material with its own rate and unit of measure.
**Foreman** — A user role for jobsite supervisors. Foremen create orders, dispatch trucks, and approve work from the mobile app. [Learn more](/workflows/foreman)
**Fuel Surcharge** — A pass-through fee tied to the price of diesel. Set up as three pieces: a Fuel Price Index, a Surcharge Schedule, and an Add-On. [Learn more](/concepts/rates-add-ons)
## G
**Geofence** — A virtual fence around a site. Triggers automatic load start and end when a truck enters or leaves. [Learn more](/concepts/sites-geofences)
**Geofence Timer** — The number of seconds a truck must stay inside or outside a geofence before Tread fires the start or end event. Filters out drive-bys. [Learn more](/onboarding/platform-configurations)
## I
**Internal Driver** — A driver on your own company that you dispatch directly. Contrast with a Shared Driver (from a partner) or a Vendor. [Learn more](/concepts/dispatching-drivers-vendors)
**ITO** — Independent Trucking Contractor. A driver-owner that runs as a single-truck vendor, similar to an O\&O but contracted as a vendor rather than dispatched directly.
## J
**Job** — One driver's assignment for one order. An order with ten trucks has ten jobs. [Learn more](/concepts/orders-projects)
## L
**Label** — A color-coded tag on orders, projects, jobs, drivers, equipment, customers, or vendors. Used for filtering and dispatch flow. [Learn more](/concepts/custom-labels)
**Live Map** — The dispatch screen that shows every active truck on a map. [Learn more](/workflows/track-drivers-collect-tickets)
**Load** — One pickup-to-drop-off cycle. A job has many loads. [Learn more](/concepts/tickets-timesheets)
## M
**Material** — What you haul (sand, asphalt, concrete, dirt). Materials carry a unit of measure. [Learn more](/onboarding/master-data/materials)
**Multis** — Multi-driver vendors. Shorthand for vendors that run more than one truck and dispatch their own drivers, as opposed to single-truck owner-operators.
## O
**O\&O / Owner-Operator** — A driver who owns their truck and runs for you directly. Dispatched like an internal driver. [Learn more](/concepts/companies-hierarchy)
**Order** — One day's work on a project. The unit dispatchers create and assign drivers to. [Learn more](/concepts/orders-projects)
## P
**Paver Tracker** — Telemetry from a paver. Tread uses it for paving stats and for moving geofences on linear paving jobs. [Learn more](/integrations/paver-tracker)
**Pneumatics** — Sealed pressurized tank trailers used to haul cement, lime, fly ash, and other powdered or granular materials. A separate equipment type from end dumps and belly dumps.
**Prevailing Wage (PW)** — A government-mandated wage rate on public-works jobs. Flagged on the project; rates come from the PW fields on rate schedules, which can apply per equipment type or per material — not per driver. [Learn more](/specialized/prevailing-wage)
**Project** — A long-running container for a customer engagement. Holds the rates, the materials, and the sites. Orders run against the project. [Learn more](/concepts/orders-projects)
## R
**RAP** — Recycled Asphalt Pavement. Reclaimed asphalt that's milled, processed, and re-used as a base or mix component. Tracked as its own material with its own rate.
**Rate Card** — A saved set of customer-, vendor-, or driver-side rates. Apply by default or per project. [Learn more](/concepts/rates-add-ons)
## S
**Scale Ticket** — The pre-Tread paper ticket from the producer's scale house. Captures truck, material, weight, and time. Tread digitizes scale tickets through OCR or direct integration. [Learn more](/concepts/tickets-timesheets)
**Service Class** — An optional code on a job for accounting (Trucking, Paving, Demolition). Maps to cost codes in your accounting system. [Learn more](/onboarding/master-data/departments-labels-classes)
**Settlement** — The output document. Receivables for a customer become an invoice. Payables for a driver or vendor become a pay statement. [Learn more](/concepts/settlements-driver-pay)
**Shared Driver** — A driver another company shares to you, so you assign them directly like your own. An Owner-Operator is the most common case. [Learn more](/concepts/dispatching-drivers-vendors)
**Shift** — One driver's full day. Spans multiple jobs and loads. [Learn more](/concepts/tickets-timesheets)
**Site** — A physical pickup or drop-off location. Sites carry a geofence and a lat/long. [Learn more](/concepts/sites-geofences)
**Split Flag** — A configuration that flags loads that should split across multiple invoices or settlements (different materials, different customers, different cost codes). [Learn more](/onboarding/platform-configurations)
## T
**Telematics** — GPS and engine data from a truck's onboard hardware (Samsara, Geotab). Powers the live map and auto-geofence triggers. [Learn more](/integrations/telematics)
**Ticket** — Proof of a load. Either a scale ticket (paper or digital) or the driver's logged hours. [Learn more](/concepts/tickets-timesheets)
**Ticket Chaser** — The Tread agent that reads scale tickets, queues exceptions, and pre-fills approval data. [Learn more](/workflows/track-drivers-collect-tickets)
**Trackit** — Command Alkon's telematics product. A common pre-Tread system that customers replace or run alongside Tread during cutover.
**Tread Customer** — Your own account. Creates Projects and Orders and sends dispatches to Drivers or Vendors. Sits between the Connected Customer and the Vendor in the Connected Ecosystem. [Learn more](/concepts/connected-ecosystem)
## U
**Unit of Measure (UoM)** — How you count a load (ton, cubic yard, hour, load). Lives on the Equipment Type and on the Material. Mismatches throw a warning at approval.
## V
**Vendor** — A hauling company that runs jobs for you. Receives dispatches and assigns its own drivers. See also Connected Vendor. [Learn more](/onboarding/master-data/vendors)
## Related
* [FAQ](/resources/faq)
* [Common Setup Mistakes](/resources/common-mistakes)
# Text Messages from Tread
Source: https://docs.tread.ai/resources/text-messages
Which phone numbers Tread texts come from, which ones you can save, and which language Tread messages are sent in.
Tread texts drivers and office users so nobody has to call to share a dispatch, a login code, or a missing ticket. Different texts come from different numbers. Only one of them belongs to your company.
## Which number sends each text
| Text | When it's sent | Sent from |
| - | - | - |
| App invite | An Admin sends a new user an SMS invite to download the app | Tread's notification numbers |
| Login code | A user signs in with their phone number | Tread's login service, a separate number |
| Dispatch alerts | A dispatch is sent, accepted, rejected, or canceled, per each user's notification preferences | Tread's notification numbers |
| Dispatch with reply Yes/No | The driver has **Enable Text To Accept** turned on and can accept a dispatch by text | Tread's Text To Accept numbers |
| **Message driver** | A dispatcher sends a driver a message from Tread | Tread's notification numbers |
| [Ticket Chaser](/specialized/ai-ticket-chaser) and Driver Agent | A load is missing its ticket, or a driver texts the agent | Your company's own Driver Agent number |
Tread's notification numbers are a group of local numbers. Two drivers can get texts from different numbers, depending on where they are.
## Common questions
> **Can I save a Tread number as a contact?**
>
> Yes for your Driver Agent number. It's your company's own number and doesn't change. Drivers should save it so they know Ticket Chaser texts come from Tread.
>
> For other texts, save the number a driver actually receives texts from. Don't share one number with every driver, because the number can be different from one driver to the next.
> **Where do I find my company's Driver Agent number?**
>
> Open **Settings → Agents**. The **Driver Agent** card lists the phone number(s) drivers text to upload tickets. It only appears once Tread has turned on Ticket Chaser for your account. See [Agent Configurations](/onboarding/agent-configurations).
> **A driver blocked a Tread number. How do they get texts again?**
>
> Unblock the number in the phone's blocked list, then text **START** to it. If the driver replied STOP to a Tread text, texting START to the same number turns texts back on.
>
> If the driver doesn't know which number they blocked, contact Tread support with the driver's name and phone number.
> **Can drivers reply to Tread texts?**
>
> Only to two kinds. Drivers with **Enable Text To Accept** reply Yes or No to accept or decline a dispatch. Drivers reply to Ticket Chaser with photos of their tickets. Replies to other texts don't reach your dispatchers. Drivers should use the app or call the office instead.
> **Can I change who gets these texts?**
>
> Each user sets their own notification preferences for dispatch alerts. App invites, login codes, and Ticket Chaser texts aren't part of those preferences. See the [FAQ](/resources/faq#notifications).
## Language
Texts and push notifications from Tread are in English, whatever language the app is set to. Some emails can be in Spanish or French.
| Message | Language |
| - | - |
| Text messages (SMS), including login codes | English |
| Push notifications | English |
| Job emails (new request, accepted, rejected, canceled, completed) | English |
| "New order created" and "New project created" emails | The recipient's account language. The subject, button, section headings, and footer are translated. Field names stay in English |
| Compliance document expiring email | Subject in the recipient's account language. The body is in English |
| Settlement emails | Subject and short message in the language of the person who sends them |
Details your team types, such as site names, notes, and messages to drivers, appear exactly as entered.
Each user's account language is English by default. Spanish and French are also supported. To change it, contact Tread support.
The driver app is available in English, Spanish, and Punjabi. A driver picks the language in the app's settings. That choice only changes the app screens on their phone. It doesn't change their account language, texts, or push notifications. The web app is in English.
> [!TIP]
>
> For drivers who read Spanish or Punjabi first, set the app language when they install it. The screens they use every day will be in their language, even though texts and push notifications stay in English.
## Related
* [AI Ticket Chaser](/specialized/ai-ticket-chaser)
* [Agent Configurations](/onboarding/agent-configurations)
* [Mobile Troubleshooting](/mobile/troubleshooting)
* [FAQ](/resources/faq)
# Batch update AddOnCharges for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{driver-day-id}/add_on_charges
Batch update `AddOnCharges` for a `DriverDay`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/add_on_charges
Batch update `AddOnCharges` for an `Job`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-settlement
/api-reference/openapi.json patch /v1/settlements/{settlement-id}/add_on_charges
Batch update `AddOnCharges` for a `Settlement`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Settlement (Company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-settlement-company-scoped
/api-reference/openapi.json patch /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Batch update `AddOnCharges` for a `Settlement` using company-scoped endpoint.
This endpoint allows parent companies to manage add-on charges for settlements belonging to their child companies.
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Batch update `AddOnCharges` for an `Invoice` for a `Company`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Create an AddOnCharge for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/add_on_charges
Create an `AddOnCharge` for a `DriverDay`.
This endpoint is used to apply an `AddOnCharge` for a `DriverDay`.
# Create an AddOnCharge for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/add_on_charges
Create an `AddOnCharge` for a `Job`.
This endpoint is used to request an `AddOnCharge` for a `Job` that can be applied on a billing object.
# Create an AddOnCharge for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-settlement
/api-reference/openapi.json post /v1/settlements/{settlement-id}/add_on_charges
Create an `AddOnCharge` for a `Settlement`.
This endpoint is used to apply an `AddOnCharge` for an `Settlement`.
# Create an AddOnCharge for a Settlement (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-settlement-company-scoped
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Create an `AddOnCharge` for a `Settlement` within a specific company scope.
This endpoint is used to apply an `AddOnCharge` for a `Settlement`.
# Create an AddOnCharge for an Invoice (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-an-invoice-company-scoped
/api-reference/openapi.json post /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Create an `AddOnCharge` for an `Invoice` within a specific company scope.
This endpoint is used to apply an `AddOnCharge` for an `Invoice`.
# Delete an AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/delete-an-addoncharge
/api-reference/openapi.json delete /v1/add_on_charges/{id}
Delete an `AddOnCharge`
# Retrieve a single AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-a-single-addoncharge
/api-reference/openapi.json get /v1/add_on_charges/{id}
Retrieve a single `AddOnCharge` by ID
# Retrieve AddOnCharges for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/add_on_charges
Retrieve `AddOnCharges` for a `DriverDay`.
This endpoint returns the applied `AddOnCharges` for a `DriverDay`.
# Retrieve AddOnCharges for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/add_on_charges
Retrieve `AddOnCharges` for a `Job`.
This endpoint returns the requested `AddOnCharges` for a `Job`.
# Retrieve AddOnCharges for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/add_on_charges
Retrieve `AddOnCharges` for a `Settlement`.
This endpoint returns the applied `AddOnCharges` for a `Settlement`.
# Retrieve AddOnCharges for a Settlement (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-settlement-company-scoped
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Retrieve `AddOnCharges` for a `Settlement` within a specific company context.
This endpoint returns the applied `AddOnCharges` for a `Settlement` and validates that the company_id is authorized for the current user.
# Retrieve AddOnCharges for an Invoice (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-an-invoice-company-scoped
/api-reference/openapi.json get /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Retrieve `AddOnCharges` for an `Invoice` within a specific company context.
This endpoint returns the applied `AddOnCharges` for an `Invoice` and validates that the company_id is authorized for the current user.
# Update an AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/update-an-addoncharge
/api-reference/openapi.json patch /v1/add_on_charges/{id}
Update an `AddOnCharge`
# Create an AddOn
Source: https://docs.tread.ai/api-reference/addons/create-an-addon
/api-reference/openapi.json post /v1/add_ons
Create an `AddOn`
# Create an AddOn for a Company
Source: https://docs.tread.ai/api-reference/addons/create-an-addon-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/add_ons
Create an `AddOn` for a `Company`
# Delete AutoAddOn for a Customer Account
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-customer-account
/api-reference/openapi.json delete /v1/accounts/{account-id}/auto_add_ons/{auto-add-on-id}/customer_add_on
Delete `AutoAddOn` for a `Customer Account`
# Delete AutoAddOn for a Driver
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-driver
/api-reference/openapi.json delete /v1/drivers/{driver-id}/auto_add_ons/{id}
Delete `AutoAddOn` for a `Driver`
# Delete AutoAddOn for a Vendor Account
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-vendor-account
/api-reference/openapi.json delete /v1/accounts/{account-id}/auto_add_ons/{auto-add-on-id}/vendor_add_on
Delete `AutoAddOn` for a `Vendor Account`
# Retrieve a single AddOn
Source: https://docs.tread.ai/api-reference/addons/retrieve-a-single-addon
/api-reference/openapi.json get /v1/add_ons/{id}
Retrieve `AddOn` by ID
# Retrieve AddOns that belong to a Company
Source: https://docs.tread.ai/api-reference/addons/retrieve-addons-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons
Retrieve `AddOns` that belong to a `Company`.
# Retrieve AddOns visible to the current Company
Source: https://docs.tread.ai/api-reference/addons/retrieve-addons-visible-to-the-current-company
/api-reference/openapi.json get /v1/add_ons
Retrieve `AddOns` visible to the current authenticated `Company`.
# Retrieve AutoAddOns for a Driver
Source: https://docs.tread.ai/api-reference/addons/retrieve-autoaddons-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/auto_add_ons
Retrieve `AutoAddOns` for a `Driver`
# Retrieve AutoAddOns for an Account
Source: https://docs.tread.ai/api-reference/addons/retrieve-autoaddons-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/auto_add_ons
Retrieve `AutoAddOns` for an `Account`
# Retrieve fuel surcharge rate for an AddOn
Source: https://docs.tread.ai/api-reference/addons/retrieve-fuel-surcharge-rate-for-an-addon
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons/{id}/fuel_surcharge_rate
Retrieve fuel surcharge rate for a FuelSurcharge type AddOn for a given date. The AddOn must have `add_on_rate_type` of `FuelSurcharge` and have an associated `fuel_surcharge_schedule`.
# Update an AddOn
Source: https://docs.tread.ai/api-reference/addons/update-an-addon
/api-reference/openapi.json patch /v1/add_ons/{id}
Update an `AddOn` by ID.
# Create an Agave-LinkedAccount for the current Company
Source: https://docs.tread.ai/api-reference/agave/create-an-agave-linkedaccount-for-the-current-company
/api-reference/openapi.json post /v1/agave/linked_accounts
Create an `Agave-LinkedAccount` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Create an AgaveLinkToken for the current Company
Source: https://docs.tread.ai/api-reference/agave/create-an-agavelinktoken-for-the-current-company
/api-reference/openapi.json post /v1/agave/link_tokens
Create an `AgaveLinkToken` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Delete an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/delete-an-agave-linkedaccount
/api-reference/openapi.json delete /v1/agave/linked_accounts/{id}
Delete an `Agave-LinkedAccount` by id.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Enqueue data import from an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/enqueue-data-import-from-an-agave-linkedaccount
/api-reference/openapi.json put /v1/agave/linked_accounts/{linked-account-id}/import
Enqueue data import for an `Agave-LinkedAccount`
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Customers for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-customers-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/customers
Retrieve `Agave-Customers` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Items for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-items-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items
Retrieve `Agave-Items` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-LedgerAccounts for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-ledgeraccounts-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/ledger_accounts
Retrieve `Agave-LedgerAccounts` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-LinkedAccounts for the current Company
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-linkedaccounts-for-the-current-company
/api-reference/openapi.json get /v1/agave/linked_accounts
Retrieve `Agave-LinkedAccounts` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Vendors for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-vendors-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/vendors
Retrieve `Agave-Vendors` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on AddOns scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/typeahead-search-on-addons-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items/add_ons/typeahead
`Typeahead` search on `AddOns` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on Services scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/typeahead-search-on-services-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items/services/typeahead
`Typeahead` search on `Services` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Customer
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-customer
/api-reference/openapi.json patch /v1/agave/customers/{id}
Update an `Agave-Customer`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Item
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-item
/api-reference/openapi.json patch /v1/agave/items/{id}
Update an `Agave-Item`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-LedgerAccount
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-ledgeraccount
/api-reference/openapi.json patch /v1/agave/ledger_accounts/{id}
Update an `Agave-LedgerAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Vendor
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-vendor
/api-reference/openapi.json patch /v1/agave/vendors/{id}
Update an `Agave-Vendor`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Create AutoAddOnAssignment for a Driver
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-driver
/api-reference/openapi.json post /v1/drivers/{driver-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Driver`
# Create AutoAddOnAssignment for a Job
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Job`
# Create AutoAddOnAssignment for a JobAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-jobassignment
/api-reference/openapi.json post /v1/job_assignments/{job-assignment-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `JobAssignment`
# Create AutoAddOnAssignment for a Project
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Project`
# Create AutoAddOnAssignment for a Rate
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-rate
/api-reference/openapi.json post /v1/rates/{rate-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Rate`
# Create AutoAddOnAssignment for an Order
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Order`
# Create AutoAddOnAssignment for an Order for a Company
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Order`
# Create AutoAddOnAssignments for a SiteRateSchedule
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignments-for-a-siterateschedule
/api-reference/openapi.json post /v1/site_rate_schedules/{site-rate-schedule-id}/auto_add_on_assignments
Create `AutoAddOnAssignments` for a `SiteRateSchedule`
# Create AutoAddOnAssignments for an Account
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignments-for-an-account
/api-reference/openapi.json post /v1/accounts/{account-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Account`
# Delete AutoAddOnAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/delete-autoaddonassignment
/api-reference/openapi.json delete /v1/auto_add_on_assignments/{id}
Delete `AutoAddOnAssignment` by ID
# Get AutoAddOnAssignments for a Driver
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Driver`
# Get AutoAddOnAssignments for a Job
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Job`
# Get AutoAddOnAssignments for a JobAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-jobassignment
/api-reference/openapi.json get /v1/job_assignments/{job-assignment-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `JobAssignment`
# Get AutoAddOnAssignments for a Project
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Project`
# Get AutoAddOnAssignments for a Rate
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-rate
/api-reference/openapi.json get /v1/rates/{rate-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Rate`
# Get AutoAddOnAssignments for a SiteRateSchedule
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-siterateschedule
/api-reference/openapi.json get /v1/site_rate_schedules/{site-rate-schedule-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `SiteRateSchedule`
# Get AutoAddOnAssignments for an Account
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Account`
# Get AutoAddOnAssignments for an Order
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Order`
# Get AutoAddOnAssignments for an Order for a Company
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Order`
# Update AutoAddOnAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/update-autoaddonassignment
/api-reference/openapi.json patch /v1/auto_add_on_assignments/{id}
Update `AutoAddOnAssignment` by ID
# Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/order-phases
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/phases
This returns all the `Phases` for an `Order`
# Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/order-phases-1
/api-reference/openapi.json get /v1/orders/{order-id}/phases
This returns all the `Phases` for an `Order`
# Project Phases
Source: https://docs.tread.ai/api-reference/typeaheads/project-phases
/api-reference/openapi.json get /v1/projects/{project-id}/phases
This returns all the `Phases` for a `Project`.
# Retrieve Sites based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/sites/dispatch
Returns `Sites`, but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs.
# Retrieve Sites based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-1
/api-reference/openapi.json get /v1/sites/dispatch/typeahead
Returns `Sites` in a typeahead style but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs.
# Retrieve Sites based on the current Dispatch results for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/dispatch
Returns `Sites`, but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Retrieve Sites based on the current Dispatch results for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-for-a-company-1
/api-reference/openapi.json get /v1/companies/{company-id}/sites/dispatch/typeahead
Returns `Sites` in a typeahead style but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on DriverDay Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-driverday-phases
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for a `DriverDay` visible to the currently authenticated `Company`.
This returns all the `Phases` across `Orders` for the `Jobs` that are in a `DriverDay`.
# Typeahead search on Drivers for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-drivers-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers/typeahead
Typeahead search against the `first_name` and `last_name` properties on `Drivers` for a managed company. This includes both drivers owned by the managed company and drivers shared with the managed company.
# Typeahead search on Equipment
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment
/api-reference/openapi.json get /v1/equipment/typeahead
Typeahead search against the `name` property for `Equipment` visible to the currently authenticated `Company`.
# Typeahead search on Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/typeahead
Typeahead search against the `name` and `external_id` properties on `Equipment` for a managed company. This includes both equipment owned by the managed company and equipment shared with the managed company.
# Typeahead search on EquipmentType
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype
/api-reference/openapi.json get /v1/equipment_types/typeahead
Typeahead search against the `name` property for `EquipmentType` visible to the currently authenticated `Company`.
# Typeahead search on EquipmentType for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment_types/typeahead
Typeahead search against the `name` property on `EquipmentType` for a `Company`.
# Typeahead search on EquipmentType for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment_types/typeahead
Typeahead search against the `name` property on `EquipmentType` for a managed company.
# Typeahead search on Jobs
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-jobs
/api-reference/openapi.json get /v1/jobs/typeahead
Deprecated in favor of `GET /v1/companies/{company-id}/jobs/typeahead`. Typeahead search against the `job_id` property for `Jobs` visible to the currently authenticated `Company`.
# Typeahead search on Material for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-material-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/materials/typeahead
Typeahead search against the `name` property on `Material` for a `Company`.
# Typeahead search on MaterialRates for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-materialrates-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_rates/typeahead
`search[site][query]` is a typeahead against the `MaterialRate`'s `Site`'s `name`
# Typeahead search on Materials
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-materials
/api-reference/openapi.json get /v1/materials/typeahead
Typeahead search against the `name` property for `Material` visible to the currently authenticated `Company`.
# Typeahead search on Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-order-phases
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Order` visible to a `Company`.
# Typeahead search on Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-order-phases-1
/api-reference/openapi.json get /v1/orders/{order-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Order` visible to the currently authenticated `Company`.
# Typeahead search on Project Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-project-phases
/api-reference/openapi.json get /v1/projects/{project-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Project` visible to the currently authenticated `Company`.
# Typeahead search on Projects
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects
/api-reference/openapi.json get /v1/projects/typeahead
Typeahead search against the `name` or `external_id` property for `Projects` visible to the currently authenticated `Company`.
# Typeahead search on Projects for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/projects/typeahead
Typeahead search against the `name` or `external_id` property on `Projects` for a `Company`.
# Typeahead search on Projects for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects-for-a-company-1
/api-reference/openapi.json get /v1/projects/external_ids/typeahead
Typeahead search against the `external_id` property all `Projects` that belong to current `Company`.
# Typeahead search on Rates
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-rates
/api-reference/openapi.json get /v1/rates/typeahead
Typeahead search against the `name` property for `Rates` visible to the currently authenticated `Company`
# Typeahead search on Rates for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-rates-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/rates/typeahead
Typeahead search on `Rates` for a `Company`
# Typeahead search on ServiceClasses
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-serviceclasses
/api-reference/openapi.json get /v1/service_classes/typeahead
Typeahead search against the `name` property for `ServiceClass` visible to the currently authenticated `Company`.
# Typeahead search on ServiceClasses for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-serviceclasses-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/service_classes/typeahead
Typeahead search against the `name` property on `ServiceClass` for a `Company`
# Typeahead search on Services
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-services
/api-reference/openapi.json get /v1/services/typeahead
Typeahead search against the `name` property for `Services` visible to the currently authenticated `Company`.
# Typeahead search on Services for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-services-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/services/typeahead
Typeahead search against the `name` property on `Services` for a `Company`.
# Typeahead search on Sites
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-sites
/api-reference/openapi.json get /v1/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` visible to the currently authenticated `Company`.
# Typeahead search on Sites for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-sites-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property on `Sites` for a `Company`.
# Typeahead search on Traffic Control Plans
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-traffic-control-plans
/api-reference/openapi.json get /v1/traffic_control_plans/typeahead
Typeahead search against the `name` property for `Traffic Control Plans` visible to the currently authenticated `Company`.
# Typeahead search on Users
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-users
/api-reference/openapi.json get /v1/users/typeahead
Typeahead search against the `first_name` and `last_name` property for `Users` visible to the currently authenticated `Company`.
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Typeahead search on Users for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-users-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/users/typeahead
Typeahead search against the `first_name` and `last_name` property on `Users` for a `Company`.
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Delete a AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/delete-a-accountexternaltruckidentifier
/api-reference/openapi.json delete /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Delete a `AccountExternalTruckIdentifier` by ID
# Retrieve a single AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/retrieve-a-single-accountexternaltruckidentifier
/api-reference/openapi.json get /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Retrieve `AccountExternalTruckIdentifier` by ID
# Retrieve AccountExternalTruckIdentifiers that belong to a Company
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/retrieve-accountexternaltruckidentifiers-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/account_external_truck_identifiers
Retrieve `AccountExternalTruckIdentifier` for a `Company`.
Filter usage:
* to filter by account id: `filter[account_id]=account_id`
* to filter for records missing a company share: `filter[missing_company_share]=true`
# Update a AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/update-a-accountexternaltruckidentifier
/api-reference/openapi.json patch /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Update a `AccountExternalTruckIdentifier` by ID
# Delete an auth token
Source: https://docs.tread.ai/api-reference/authentication/delete-an-auth-token
/api-reference/openapi.json delete /v1/auth/login
This endpoints revokes the `session_jwt` passed in the Authorization header.
# Forgot Password
Source: https://docs.tread.ai/api-reference/authentication/forgot-password
/api-reference/openapi.json post /v1/auth/forgot_password
This endpoint accepts an `email` of the `User` which will be sent a reset password link from Stytch.
# Generate an auth token
Source: https://docs.tread.ai/api-reference/authentication/generate-an-auth-token
/api-reference/openapi.json post /v1/auth/login
This endpoint takes an `email` and `password`, and if a `User` exists with the given data it returns a `session_jwt` for usage with the API. This `session_jwt` should be added to the headers of further requests like so:
```
Authorization: Bearer
```
# Login with a magic link token
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-magic-link-token
/api-reference/openapi.json post /v1/auth/magic_link/login
Login with a magic link token.
# Login with a one-time password received via SMS
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-one-time-password-received-via-sms
/api-reference/openapi.json post /v1/auth/otp_sms/login
Login with a one-time password received via SMS.
# Login with a sso token
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-sso-token
/api-reference/openapi.json post /v1/auth/sso/login
Login with a sso token.
# Reset Password
Source: https://docs.tread.ai/api-reference/authentication/reset-password
/api-reference/openapi.json post /v1/auth/reset_password
This endpoint accepts a `password_reset_token`, which comes from the reset password link from Stytch, and also accepts a `password` which will be set as the new password. This endpoint returns a valid `session_jwt` for the `User`.
# Retrieve a list of AuthMethods for a given email
Source: https://docs.tread.ai/api-reference/authentication/retrieve-a-list-of-authmethods-for-a-given-email
/api-reference/openapi.json post /v1/auth_methods
Retrive a list of `AuthMethods` for a given `email`
# Retrieve a list of SSOConnections for a given email
Source: https://docs.tread.ai/api-reference/authentication/retrieve-a-list-of-ssoconnections-for-a-given-email
/api-reference/openapi.json post /v1/sso_connections
Retrive a list of `SSOConnections` for a given `email`
# Send a magic link email
Source: https://docs.tread.ai/api-reference/authentication/send-a-magic-link-email
/api-reference/openapi.json post /v1/auth/magic_link
Send a magic link email
# Send a one-time password via SMS
Source: https://docs.tread.ai/api-reference/authentication/send-a-one-time-password-via-sms
/api-reference/openapi.json post /v1/auth/otp_sms
Send a one-time password via SMS.
# User sign up
Source: https://docs.tread.ai/api-reference/authentication/user-sign-up
/api-reference/openapi.json post /v1/auth/signup
This endpoint takes a `password` and a `magic_links_token` from the invite email in order to successfully register the `User` in Stytch. This endpoint returns a valid `session_jwt` for the `User`.
# Create a Company
Source: https://docs.tread.ai/api-reference/companies/create-a-company
/api-reference/openapi.json post /v1/companies
Create a new `Company`
This endpoint requires the `create_company` permission
# Create a managed Company
Source: https://docs.tread.ai/api-reference/companies/create-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{id}
Create a managed `Company` for another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Delete a Company
Source: https://docs.tread.ai/api-reference/companies/delete-a-company
/api-reference/openapi.json delete /v1/companies/{id}
Delete a `Company` by ID
This endpoint requires the `delete_company` permission
# Delete a managed Company
Source: https://docs.tread.ai/api-reference/companies/delete-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{id}
Delete a managed `Company` from another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Retrieve a Company by Tread ID
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-company-by-tread-id
/api-reference/openapi.json get /v1/companies/tread_id/{tread-id}
Retrieve a `Company` by a `Tread ID`.
This endpoint requires the `connect_companies` `IamPermission`.
# Retrieve a list of Companies
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-list-of-companies
/api-reference/openapi.json get /v1/companies
Retrieve `Companies` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `legal_name`
* `dba_name`
* `parent_company:legal_name`
* `type`
* `saas_billing_plan`
* `usage_status`
# Retrieve a single Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-single-company
/api-reference/openapi.json get /v1/companies/{id}
Retrieve a `Company` by ID
# Retrieve a single managed Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-single-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{id}
Retrieve a managed `Company` by ID.
# Retrieve connected Companies For a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-connected-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/connected_companies
Retrieve connected `Companies` For a `Company`
# Retrieve connected Companies for a Managed Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-connected-companies-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/connected_companies
Retrieve connected `Companies` for a Managed `Company`
# Retrieve managed Companies for a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-managed-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies
Retrieve managed `Companies` for another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Retrieve the logo for a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-the-logo-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/logo
Retrieve the logo for a `Company`.
# Return child Companies that belong to a Company
Source: https://docs.tread.ai/api-reference/companies/return-child-companies-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/children
Return child `Companies` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `legal_name`
* `dba_name`
* `parent_company:legal_name`
* `type`
* `saas_billing_plan`
* `usage_status`
# Typeahead search connected Companies for a Managed Company
Source: https://docs.tread.ai/api-reference/companies/typeahead-search-connected-companies-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/connected_companies/typeahead
Typeahead search against the `legal_name` property on connected `Companies` for a Managed `Company`.
# Typeahead search on connected Companies for a Company
Source: https://docs.tread.ai/api-reference/companies/typeahead-search-on-connected-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/connected_companies/typeahead
Typeahead search against the `legal_name` property on connected `Companies` for a given `Company`.
# Update a Company
Source: https://docs.tread.ai/api-reference/companies/update-a-company
/api-reference/openapi.json patch /v1/companies/{id}
Update a `Company` by ID
This endpoint requires the `edit_company` permission
# Update the logo for a Company
Source: https://docs.tread.ai/api-reference/companies/update-the-logo-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/logo
Add or replace the `logo` for a `Company`.
This endpoint requires the `edit_company` `IamPermission`
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `logo` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `logo` must be a file.
In both cases the following restrictions apply:
* `logo` cannot be larger than 100kb.
* `logo` must be one of the following image types: `png`, `jpeg`, `gif`.
# Retrieve CompanyDayJobStat
Source: https://docs.tread.ai/api-reference/companydayjobstats/retrieve-companydayjobstat
/api-reference/openapi.json get /v1/companies/{company-id}/company_day_job_stats/{date}
Retrieve `CompanyDayJobStat` for a `Company` on a given `Date`
# Create a Company Share
Source: https://docs.tread.ai/api-reference/companyshares/create-a-company-share
/api-reference/openapi.json post /v1/companies/{company-id}/company_shares
Create a `CompanyShare`.
This endpoint requires the `create_companyshare` permission.
# Create CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/create-companyshare-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares
Create a `CompanyShare` for a Managed Company
This endpoint requires the `create_company_share` permission
# Delete a CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/delete-a-companyshare
/api-reference/openapi.json delete /v1/company_shares/{id}
Deprecated in favor of "Delete a `CompanyShare` as a `Company`"
Delete a `CompanyShare`.
This endpoint requires the `delete_companyshare` permission.
# Delete a CompanyShare as a Company
Source: https://docs.tread.ai/api-reference/companyshares/delete-a-companyshare-as-a-company
/api-reference/openapi.json delete /v1/companies/{company-id}/company_shares/{id}
Delete a `CompanyShare` as a `Company`.
This endpoint requires the `delete_companyshare` permission.
# Delete CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/delete-companyshare-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Delete `CompanyShare` by ID for a Managed Company
This endpoint requires the `delete_company_share` permission
# Retrieve a single CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-a-single-companyshare
/api-reference/openapi.json get /v1/company_shares/{id}
Retrieve a single `CompanyShare` by ID.
# Retrieve CompanyShare by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshare-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Retrieve `CompanyShare` by ID for a Managed Company
# Retrieve CompanyShares for a Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/company_shares
Retrieve `CompanyShares` for a `Company`.
Note that the `sender_company_id` and `receiver_company_id` filters are mutually exclusive with `between_company_id`.
# Retrieve CompanyShares for a Driver
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/company_shares
Retrieve `CompanyShares` for a `Driver`
# Retrieve CompanyShares for a Foreman
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-foreman
/api-reference/openapi.json get /v1/foremen/{foreman-id}/company_shares
Retrieve `CompanyShares` for a `Foreman`
# Retrieve CompanyShares for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares
Retrieve `CompanyShares` for a managed company. This includes both shares sent by the managed company and shares received by the managed company.
# Retrieve CompanyShares for a Site
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-site
/api-reference/openapi.json get /v1/sites/{site-id}/company_shares
Retrieve `CompanyShares` for a `Site`
# Retrieve CompanyShares for an Equipment
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-an-equipment
/api-reference/openapi.json get /v1/equipment/{equipment-id}/company_shares
Retrieve `CompanyShares` for an `Equipment`
# Update a CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/update-a-companyshare
/api-reference/openapi.json patch /v1/company_shares/{id}
Deprecated in favor of "Update a `CompanyShare` as a `Company`"
Update a `CompanyShare`.
This endpoint requires the `edit_company_share` permission.
Note that `external_id` can only be updated by the receiver `Company`.
# Update a CompanyShare as a Company
Source: https://docs.tread.ai/api-reference/companyshares/update-a-companyshare-as-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/company_shares/{id}
Update a `CompanyShare` as a `Company`.
This endpoint requires the `edit_company_share` permission.
Note that `external_id` can only be updated by the receiver `Company`.
# Update CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/update-companyshare-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Update `CompanyShare` by ID for a Managed Company
This endpoint requires the `edit_company_share` permission
# Check Compliance Status
Source: https://docs.tread.ai/api-reference/compliance/check-compliance-status
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_check
Check compliance status for a job assignment.
Requires `compliance_read` permission.
# Create a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/create-a-compliance-document-type
/api-reference/openapi.json post /v1/companies/{company-id}/compliance_document_types
Create a new compliance document type.
Requires `compliance_write` permission.
# Delete a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/delete-a-compliance-document-type
/api-reference/openapi.json delete /v1/companies/{company-id}/compliance_document_types/{id}
Delete a compliance document type (soft delete).
Requires `compliance_write` permission.
# Retrieve a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/retrieve-a-compliance-document-type
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_document_types/{id}
Retrieve a compliance document type by ID.
Requires `compliance_read` permission.
# Retrieve Compliance Document Types
Source: https://docs.tread.ai/api-reference/compliance/retrieve-compliance-document-types
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_document_types
Retrieve compliance document types for the company.
Requires `compliance_read` permission.
# Update a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/update-a-compliance-document-type
/api-reference/openapi.json patch /v1/companies/{company-id}/compliance_document_types/{id}
Update a compliance document type.
Requires `compliance_write` permission.
# Create Compliance Document for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-account
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/{account-id}/compliance_documents
Create Compliance Document for Account
# Create Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-equipment
/api-reference/openapi.json post /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents
Create Compliance Document for Equipment
# Create Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-user
/api-reference/openapi.json post /v1/companies/{company-id}/users/{user-id}/compliance_documents
Create Compliance Document for User
# Delete Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document
/api-reference/openapi.json delete /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Delete Compliance Document
# Delete Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document-for-equipment
/api-reference/openapi.json delete /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Delete Compliance Document for Equipment
# Delete Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document-for-user
/api-reference/openapi.json delete /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Delete Compliance Document for User
# Get Compliance Checklist for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-account
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/checklist
Get Compliance Checklist for Account
# Get Compliance Checklist for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/checklist
Get Compliance Checklist for Equipment
# Get Compliance Checklist for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents/checklist
Get Compliance Checklist for User
# List Compliance Documents for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-account
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents
List Compliance Documents for Account
# List Compliance Documents for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents
List Compliance Documents for Equipment
# List Compliance Documents for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents
List Compliance Documents for User
# Show Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Show Compliance Document
# Show Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Show Compliance Document for Equipment
# Show Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Show Compliance Document for User
# Update Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document
/api-reference/openapi.json patch /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Update Compliance Document
# Update Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document-for-equipment
/api-reference/openapi.json patch /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Update Compliance Document for Equipment
# Update Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document-for-user
/api-reference/openapi.json patch /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Update Compliance Document for User
# Create a Department for a Company
Source: https://docs.tread.ai/api-reference/departments/create-a-department-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/departments
Create a `Department` for a `Company`
This endpoint requires the `create_department` permission
# Create a new Department
Source: https://docs.tread.ai/api-reference/departments/create-a-new-department
/api-reference/openapi.json post /v1/departments
Create a new `Department`
This endpoint requires the `create_department` permission
# Delete a Department
Source: https://docs.tread.ai/api-reference/departments/delete-a-department
/api-reference/openapi.json delete /v1/departments/{id}
Delete a `Department` by ID
This endpoint requires the `delete_department` permission
# Retrieve a single Department
Source: https://docs.tread.ai/api-reference/departments/retrieve-a-single-department
/api-reference/openapi.json get /v1/departments/{id}
Retrieve a single `Department` by ID
# Retrieve Departments that belong to a Company
Source: https://docs.tread.ai/api-reference/departments/retrieve-departments-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/departments
Retrieve `Department`s for a `Company`.
# Retrieve Departments that belong to the current Company
Source: https://docs.tread.ai/api-reference/departments/retrieve-departments-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/departments
Retrieve `Department`s that belong to the current `Company`.
# Update a Department
Source: https://docs.tread.ai/api-reference/departments/update-a-department
/api-reference/openapi.json patch /v1/departments/{id}
Update `Department` by ID
This endpoint requires the `edit_department` permission
# Retrieve DriverDays that belong to a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverdays-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days
Retrieve `DriverDays` that belong to a `Company` by `ID`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `driver.first_name`
* `driver.last_name`
* `vendor_account.name`
* `equipment_external_ids`
# Bulk download FileAttachments
Source: https://docs.tread.ai/api-reference/fileattachments/bulk-download-fileattachments
/api-reference/openapi.json post /v1/bulk_downloads
This endpoint starts a bulk download of `FileAttachments`.
The `job_ids` and `filter[jobs]` params are mutually exclusive and at least one of these is required.
On success the caller should subscribe to the `BulkDownloadResult` `RTU` using the `id` in the response.
# Create a DirectUpload
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-directupload
/api-reference/openapi.json post /v1/direct_uploads
Create a `DirectUpload`.
The `checksum` _must_ be calculated exactly the way `rails` expects it ([javascript example](https://github.com/rails/rails/blob/main/activestorage/app/javascript/activestorage/file_checksum.js)).
You should upload the file to `direct_upload.url` using any provided headers from `direct_upload.headers`.
Once this is done you can use `signed_id` in place of a file in any endpoint that accepts file uploads.
# Create a FileAttachment on a DriverDay
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/file_attachments
Create a `FileAttachment` related to a `DriverDay`. Requires permission to create attachment on `DriverDay`—`create_driver_day_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on a Job
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/file_attachments
Create a `FileAttachment` related to an `Job`. Requires permission to create attachment on `Job`—`create_job_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on a Load
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-load
/api-reference/openapi.json post /v1/loads/{load-id}/file_attachments
Create a `FileAttachment` related to an `Load`. Requires permission to create attachment on `Load`—`create_load_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on a Project
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/file_attachments
Create a `FileAttachment` related to a `Project`. Requires permission to create attachment on `Project`—`create_project_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on an Order
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/file_attachments
Create a `FileAttachment` related to an `Order`. Requires permission to create attachment on `Order`—`create_order_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on an Order for a Company
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/file_attachments
Create a `FileAttachment` related to an `Order`. Requires permission to create attachment on `Order`—`create_order_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Delete a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/delete-a-fileattachment-by-id
/api-reference/openapi.json delete /v1/file_attachments/{id}
Delete `FileAttachment` by ID. Requires permission to delete attachment on a particular object:
For Projects: `delete_project_attachments`\
For Orders:`delete_order_attachments`\
For Jobs: `delete_job_attachments`\
For Loads: `delete_load_attachments`\
For Driver Days: `delete_driver_day_attachments`\
For Settlements: `delete_settlement_attachments`\
Drivers and Foremen that have this permission, can only delete `FileAttachments` that they have added.
# Retrieve a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-a-fileattachment-by-id
/api-reference/openapi.json get /v1/file_attachments/{id}
Read a specific `FileAttachment`
# Retrieve all associated FileAttachments for a Job
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-associated-fileattachments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/files
This endpoint retrieves all associated `FileAttachments` for a `Job`, specifically:
* all `FileAttachments` on the `Job`
* all `FileAttachments` on the `Job's` `Loads`
* all `FileAttachments` on `Tickets` connected to this `Job`
# Retrieve all FileAttachments for a given DriverDay
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/file_attachments
Retrieve all `FileAttachments` for a given `DriverDay`
# Retrieve all FileAttachments for a given Job
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-job
/api-reference/openapi.json get /v1/jobs/{job-id}/file_attachments
Retrieve all `FileAttachments` for a given `Job`
# Retrieve all FileAttachments for a given Load
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-load
/api-reference/openapi.json get /v1/loads/{load-id}/file_attachments
Retrieve all `FileAttachments` for a given `Load`
# Retrieve all FileAttachments for a given Order
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-order
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/file_attachments
Retrieve all `FileAttachments` for a given `Order`
# Retrieve all FileAttachments for a given Order
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-order-1
/api-reference/openapi.json get /v1/orders/{order-id}/file_attachments
Retrieve all `FileAttachments` for a given `Order`
# Retrieve all FileAttachments for a given Project
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-project
/api-reference/openapi.json get /v1/projects/{project-id}/file_attachments
Retrieve all `FileAttachments` for a given `Project`
# Update a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/update-a-fileattachment-by-id
/api-reference/openapi.json patch /v1/file_attachments/{id}
Update `FileAttachment` by ID. Requires permission to edit attachment on a particular object:
For Projects: `edit_project_attachments`\
For Orders: `edit_order_attachments`\
For Jobs: `edit_job_attachments`\
For Loads: `edit_load_attachments`\
For Driver Days: `edit_driver_day_attachments`\
For Settlements: `edit_settlement_attachments`\
Drivers and Foremen that have this permission, can only edit `FileAttachments` that they have added.
# Approve a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/approve-a-driverday-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/approve
Approve a `DriverDay` by ID as a `Company`
This endpoint requires the `approve_driver_day` permission.
# Retrieve ApprovalAssignments for a Driver Day
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-driver-day
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/approvals
Deprecated in favor of "Retrieve `ApprovalAssignments` for a `DriverDay` as a `Company`"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `DriverDay`
# Retrieve ApprovalAssignments for a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-driverday-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/approvals
Retrieve `ApprovalAssignments` for a `DriverDay` as a `Company`
# Retrieve ApprovalAssignments for a Job
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/approvals
Deprecated in favor of "Retrieve ApprovalAssignments for a Job for a Company"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `Job`
# Retrieve ApprovalAssignments for a Job for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/approvals
Retrieve all `ApprovalAssignments` visible to the specified `Company` for a `Job`
# Retrieve ApprovalAssignments for a Load
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/approvals
Deprecated in favor of "Retrieve ApprovalAssignments for a Load for a Company"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `Load`
# Retrieve ApprovalAssignments for a Load for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-load-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/loads/{load-id}/approvals
Retrieve all `ApprovalAssignments` visible to the specified `Company` for a `Load`
# Retrieve ApprovalStatus for a Driver Day
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-driver-day
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/approval_status
Deprecated in favor of "Retrieve `ApprovalStatus` for a visible `DriverDay` for a Company"
Retrieve `ApprovalStatus` for a visible `DriverDay`
# Retrieve ApprovalStatus for a Driver Day for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-driver-day-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/approval_status
Retrieve `ApprovalStatus` for a visible `DriverDay` for a specific `Company`
# Retrieve ApprovalStatus for a Job
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/approval_status
Deprecated in favor of "Retrieve `ApprovalStatus` for a visible `Job` for a Company"
Retrieve `ApprovalStatus` for a visible `Job`
# Retrieve ApprovalStatus for a Job for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/approval_status
Retrieve `ApprovalStatus` for a visible `Job` for a specific `Company`
# Unapprove a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/unapprove-a-driverday-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/unapprove
Unapprove a `DriverDay` by ID as a `Company`
This endpoint requires the `approve_driver_day` permission.
# Approve a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/approve-a-driverday
/api-reference/openapi.json put /v1/driver_days/{driver-day-id}/approve
Deprecated in favor of "Approve a `DriverDay` as a `Company`"
Approve a `DriverDay` by ID
This endpoint requires the `approve_driver_day` permission.
# Create or update the DriverSignature on a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/create-or-update-the-driversignature-on-a-driverday
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/driver
Create or update the `DriverSignature` on a `DriverDay`.
# Create or update the DropoffSignature on a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/create-or-update-the-dropoffsignature-on-a-driverday
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `DriverDay`.
# Delete the DriverSignature from a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/delete-the-driversignature-from-a-driverday
/api-reference/openapi.json delete /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/driver
Delete the `DriverSignature` from a `DriverDay`.
# Delete the DropoffSignature from a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/delete-the-dropoffsignature-from-a-driverday
/api-reference/openapi.json delete /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/dropoff
Delete the `DropoffSignature` from a `DriverDay`.
# Mark the current DriverDay as off duty
Source: https://docs.tread.ai/api-reference/driverdays/mark-the-current-driverday-as-off-duty
/api-reference/openapi.json put /v1/users/me/driver_day/off_duty
Mark the current `DriverDay` as off duty by calling the `DriverDayService.off_duty!` service method.
This endpoint requires the `Driver` role
# Retrieve all Signatures for a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-all-signatures-for-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures
Retrieve all `Signatures` for a `DriverDay`
# Retrieve current User's DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-current-users-driverday
/api-reference/openapi.json get /v1/users/me/driver_day
Retrieve current `User`'s `DriverDay`
# Retrieve current User's Previous DriverDays
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-current-users-previous-driverdays
/api-reference/openapi.json get /v1/users/me/driver_days/previous
Retrieve current `User`'s Previous `DriverDays`. It does not include the current `DriverDay` for the current `User`.
# Retrieve DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverday
/api-reference/openapi.json get /v1/driver_days/{id}
Retrieve `DriverDay` by ID
# Retrieve DriverDays visible to the current Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverdays-visible-to-the-current-company
/api-reference/openapi.json get /v1/driver_days
Retrieve `DriverDays` visible to the current authenticated `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `driver.first_name`
* `driver.last_name`
* `vendor_account.name`
* `equipment_external_ids`
# Retrieve FileAttachments for all Jobs in a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-fileattachments-for-all-jobs-in-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/jobs/file_attachments
Retrieve all `FileAttachments` for `Jobs` that belong to a `DriverDay`. This includes file attachments attached to the jobs themselves, as well as attachments on loads and tickets within those jobs.
# Retrieve Jobs that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-jobs-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/jobs
Retrieve `Jobs` that belong to a `DriverDay`
# Retrieve Jobs that belong to a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-jobs-that-belong-to-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/jobs
Retrieve `Jobs` that belong to a `DriverDay` for a `Company`
# Retrieve Payable Invoices for a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-payable-invoices-for-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/invoices/payables
Retrieve `Payable Invoices` for a `DriverDay` for a `Company`
# Retrieve Receivable Invoices for a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-receivable-invoices-for-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/invoices/receivables
Retrieve `Receivable Invoices` for a `DriverDay` for a `Company`
# Start or resume the current DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/start-or-resume-the-current-driverday
/api-reference/openapi.json put /v1/users/me/driver_day/on_duty
Start or resume the current `DriverDay`.
This endpoint requires the `Driver` role
# Typeahead search on DriverDays by Company
Source: https://docs.tread.ai/api-reference/driverdays/typeahead-search-on-driverdays-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/typeahead
Typeahead search against the `driver_day_id` property for `DriverDays` visible to the currently authenticated `Company`.
# Unapprove a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/unapprove-a-driverday
/api-reference/openapi.json put /v1/driver_days/{driver-day-id}/unapprove
Deprecated in favor of "Unapprove a `DriverDay` as a `Company`"
Unapprove a `DriverDay` by ID
This endpoint requires the `approve_driver_day` permission.
# Update a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/update-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{id}
Update a `DriverDay` by ID
# Update Driver to Break State for Current Driver Day
Source: https://docs.tread.ai/api-reference/driverdays/update-driver-to-break-state-for-current-driver-day
/api-reference/openapi.json put /v1/users/me/driver_day/break
Updates the current authenticated driver to break state for their active `DriverDay`.
This endpoint requires the `Driver` role
# Retrieve a Driver by ID
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id
/api-reference/openapi.json get /v1/drivers/{id}
Deprecated in favor of "Retrieve a `Driver` by ID for a `Company`"
Retrieve a `Driver` by ID
# Retrieve a Driver by ID for a Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/{id}
Retrieve a `Driver` by ID for a `Company`
# Retrieve a Driver by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers/{id}
Retrieve a `Driver` by ID for a Managed Company
# Retrieve Drivers for a Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-drivers-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/drivers
Retrieve `Drivers` for a `Company`.
# Retrieve Drivers for a Managed Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-drivers-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers
Retrieve `Drivers` for a managed company. This includes both drivers owned by the managed company and drivers shared with the managed company.
# Search Drivers based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/drivers/search-drivers-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/faceted_search
Searches `Drivers` in a typeahead style but instead of all `Drivers` for a `Company` this returns all `Drivers` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on Drivers
Source: https://docs.tread.ai/api-reference/drivers/typeahead-search-on-drivers
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/typeahead
Typeahead search against the `first_name` and `last_name` property on `Drivers` for a `Company`.
# Update a Driver's State to off_duty
Source: https://docs.tread.ai/api-reference/drivers/update-a-drivers-state-to-off_duty
/api-reference/openapi.json put /v1/drivers/{driver-id}/driver_state/off_duty
Update the status of a `driver` to `off_duty`.
This endpoint requires the `edit_user` permission.
# Calculate GeofenceTriggers for a Job
Source: https://docs.tread.ai/api-reference/geofencetriggers/calculate-geofencetriggers-for-a-job
/api-reference/openapi.json post /v1/companies/{company-id}/jobs/{job-id}/geofence_triggers
Calculate `GeofenceTriggers` for a `Job` based on the strategy.
- `historical`: Returns existing non-skipped geofence triggers for the job
- `naive`: Calculates geofence triggers using naive strategy (requires `delay_seconds`)
- `accuracy_strict`: Calculates geofence triggers using accuracy strict strategy (requires `delay_seconds`)
# Generate GeofenceTriggers for Drivers
Source: https://docs.tread.ai/api-reference/geofencetriggers/generate-geofencetriggers-for-drivers
/api-reference/openapi.json post /v1/companies/{company-id}/drivers/geofence_triggers
Generate `GeofenceTriggers` for `Drivers` based on the provided `NextBillionGeofences`.
The `GeofenceTriggers` are not persisted.
# Generate GeofenceTriggers for Equipment
Source: https://docs.tread.ai/api-reference/geofencetriggers/generate-geofencetriggers-for-equipment
/api-reference/openapi.json post /v1/companies/{company-id}/equipment/geofence_triggers
Generate `GeofenceTriggers` for `Equipment` based on the provided `NextBillionGeofences`.
The `GeofenceTriggers` are not persisted.
# Accept a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/accept-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/accept
Accept a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Approve a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/approve-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/approve
Approve a `Job` by ID as a Company.
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Arrive to site for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/arrive-to-site-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/arrive
Arrive to `site` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Assign a vendor to a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/assign-a-vendor-to-a-job-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/assign_vendor
Assign a `driver` to an `Account`, with `vendor` type for a company
This endpoint requires the `assign_job` `IAmPermission`
# Bulk Accept Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-accept-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_accept
Accept multiple `Jobs` based on the given `job_ids` asynchronously as a Company.
To accept a `Job` successfully, the principal should either be the `Driver` of the `Job` or has an `edit_job` permission.
# Bulk Assign Drivers to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-drivers-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign_drivers
Assigns a list of multiple `Jobs` to the given `Driver` asynchronously as a Company.
This endpoint requires the `assign_job` permission
# Bulk Assign Vendor to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendor-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign
Assigns multiple `Jobs` to the given `Vendor` asynchronously as a Company.
This endpoint requires the `edit_job` permission
Deprecated in favor of `PUT /v1/jobs/bulk_assign_vendors`
# Bulk Assign Vendors to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendors-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign_vendors
Assigns a list of multiple `Jobs` to the given `Vendor` asynchronously as a Company.
This endpoint requires the `assign_job` permission
# Bulk cancel Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-cancel-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_cancel
Bulk cancel multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `cancel_job` permission.
# Bulk Copy Assignments as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-copy-assignments-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_copy_assignments
Bulk Copy `JobAssignments` asynchronously as a Company.
This endpoint requires the `edit_job` permission
# Bulk delete Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-delete-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_delete
Bulk delete multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `delete_job` permission.
# Bulk Send Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_send
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` based on the given `job_ids` and `order_ids` asynchronously as a Company.
This endpoint requires the `edit_job` permission
# Bulk Send Jobs for a Day
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs-for-a-day
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_send_day
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` for the given `date` asynchronously as a Company.
This endpoint requires the `edit_job` permission.
# Bulk unassign Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-unassign-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_unassign
Bulk unassign multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `assign_job` permission.
# Bulk Update Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-update-jobs
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/bulk_update
Bulk update multiple `Jobs` with attributes defined in `data` asynchronously.
This endpoint requires the `edit_job` permission.
Bulk Updatable attributes: `notes`
# Cancel a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/cancel-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/cancel
Cancel a `Job` by ID as a Company
This endpoint requires the `cancel_job` permission
# Complete a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/complete-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/complete
Complete a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Complete Load for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/complete-load-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/complete_load
Load `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Create a new Job for an Order for a Company
Source: https://docs.tread.ai/api-reference/jobs/create-a-new-job-for-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/jobs
Create a new `Job` for an `Order`.
This endpoint requires the `create_job` `IamPermission`.
# Create or update the DriverSignature on a Job
Source: https://docs.tread.ai/api-reference/jobs/create-or-update-the-driversignature-on-a-job
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/signatures/driver
Create or update the `DriverSignature` on a `Job`.
# Create or update the DropoffSignature on a Job
Source: https://docs.tread.ai/api-reference/jobs/create-or-update-the-dropoffsignature-on-a-job
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `Job`.
# Delete the DriverSignature from a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-the-driversignature-from-a-job
/api-reference/openapi.json delete /v1/companies/{company-id}/jobs/{job-id}/signatures/driver
Delete the `DriverSignature` from a `Job`.
# Delete the DropoffSignature from a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-the-dropoffsignature-from-a-job
/api-reference/openapi.json delete /v1/companies/{company-id}/jobs/{job-id}/signatures/dropoff
Delete the `DropoffSignature` from a `Job`.
# Flag a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/flag-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/flag
Flag a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Get Device Status for a Driver
Source: https://docs.tread.ai/api-reference/jobs/get-device-status-for-a-driver
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/{driver-id}/device_status
Get GPS data and other data like device permissions for a Driver. Requires driver authorization.
# Get Device Status for Job
Source: https://docs.tread.ai/api-reference/jobs/get-device-status-for-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/device_status
Get GPS data and other data like device permissions for a Job. Requires job authorization.
# Load Material for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/load-material-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/load_material
Load `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Move to Site for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/move-to-site-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/enroute
Move to `site` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pay a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/pay-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/pay
Pay a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Reject a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/reject-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/reject
Reject a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Remove flag for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/remove-flag-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/remove_flag
Remove flag for a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Remove signoff for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/remove-signoff-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/remove_signoff
Remove signoff for a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Request a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/request-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/request
Request a `Job` by ID to assigned `driver_id` on the job.
This endpoint requires the `edit_job` permission
# Resume a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/resume-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/resume
Resume a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Retrieve a Job with Invoices for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-job-with-invoices-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/invoicing
Retrieve a `Job` with `Receivable` and `Payable` `Invoices` for a `Company`
# Retrieve a single Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-single-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{id}
Retrieve `Job` by ID for a Company
# Retrieve all JobEvents that belong to a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-jobevents-that-belong-to-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/job_events
Retrieve `Job` `Job-Events` by `ID` for a `Company`
# Retrieve all Signatures for a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-signatures-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/signatures
Retrieve all `Signatures` for a `Job`
# Retrieve Jobs that belong to an Order as a specific Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-belong-to-an-order-as-a-specific-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/jobs
Retrieve `Jobs` that belong to an `Order` and is visible to the currently authenticated Company.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieves Jobs that belong to a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieves-jobs-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs
Retrieve `Jobs` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Review a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/review-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/review
Sets the `Job` by ID to `in_review` state as a Company.
This endpoint requires the `edit_job` permission
# Sign off a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/sign-off-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/sign_off
Sign off a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Typeahead search on Jobs by Company
Source: https://docs.tread.ai/api-reference/jobs/typeahead-search-on-jobs-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/typeahead
Typeahead search against the `job_id` property for `Jobs` visible to the currently authenticated `Company`.
# Unapprove a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/unapprove-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unapprove
Unapprove a `Job` by ID as a Company.
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Unassign the Driver or Vendor from a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/unassign-the-driver-or-vendor-from-a-job-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unassign
Unassign a `vendor` for a `Job` by ID for a Company
This endpoint requires the `assign_job` permission
# Unload the Material for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/unload-the-material-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unload_material
Unload `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Update a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/update-a-job-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/{id}
Update a `Job` by ID for a Compan
This endpoint requires the `edit_job` permission.
If setting the `driver_id`, the `assign_job` permission is also required.
# Retrieve latest Location Histories for a Company
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-latest-location-histories-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/location_histories/latest
Retrieve latest `LocationHistories` for a `Company`.
# Retrieve latest Location Histories for a Company
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-latest-location-histories-for-a-company-1
/api-reference/openapi.json get /v1/location_histories/latest
Retrieve latest `LocationHistories` for a `Company`.
# Retrieve Location Histories for a DriverDay
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/location_histories
Retrieve `LocationHistories` for a `DriverDay`.
# Retrieve Location Histories for a Job
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/location_histories
Retrieve `LocationHistories` for a `Job`.
# Retrieve Location Histories for a Moving Site on a Job
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-moving-site-on-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/moving_sites/{moving-site-id}/location_histories
Retrieve `LocationHistories` for a `MovingSite` on a `Job`.
# Retrieve TravelledDistances that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `DriverDay`
# Retrieve TravelledDistances that belong to a Job
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `Job`
# Retrieve TravelledDistances that belong to a Load
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-load
/api-reference/openapi.json get /v1/companies/{company-id}/loads/{load-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `Load`
# Retrieve TravelledDistances that belong to an Order
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-an-order
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/travelled_distances
Retrieve `TravelledDistances` that belong to an `Order`
# Activate an Equipment
Source: https://docs.tread.ai/api-reference/equipment/activate-an-equipment
/api-reference/openapi.json put /v1/equipment/{equipment-id}/activate
Activate an `Equipment`
This endpoint requires the `edit_equipment` permission
# Assign Equipment to a Job
Source: https://docs.tread.ai/api-reference/equipment/assign-equipment-to-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/additional_equipment
Assign additional `Equipment` to a `Job`
This endpoint requires the `edit_job_equipment` permission
# Assign Equipment to a Job
Source: https://docs.tread.ai/api-reference/equipment/assign-equipment-to-a-job-1
/api-reference/openapi.json post /v1/jobs/{job-id}/equipment
Assign `Equipment` to a `Job`
This endpoint requires the `edit_job_equipment` permission
# Create an Equipment for a Company
Source: https://docs.tread.ai/api-reference/equipment/create-an-equipment-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/equipment
Create an `Equipment` for a `Company`
This endpoint requires the `create_equipment` permission
# Create an Equipment in the current Company
Source: https://docs.tread.ai/api-reference/equipment/create-an-equipment-in-the-current-company
/api-reference/openapi.json post /v1/equipment
Create an `Equipment` in the current `Company`
This endpoint requires the `create_equipment` permission
# Create Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/create-equipment-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment
Create an `Equipment` for a Managed `Company`
This endpoint requires the `create_equipment` permission
# Deactivate an Equipment
Source: https://docs.tread.ai/api-reference/equipment/deactivate-an-equipment
/api-reference/openapi.json put /v1/equipment/{equipment-id}/deactivate
Deactivate an `Equipment`
This endpoint requires the `edit_equipment` permission
# Delete an Equipment
Source: https://docs.tread.ai/api-reference/equipment/delete-an-equipment
/api-reference/openapi.json delete /v1/equipment/{id}
Delete an `Equipment`
This endpoint required the `delete_equipment` permission
# Delete Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/delete-equipment-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Delete `Equipment` by ID for a Managed Company
This endpoint requires the `delete_equipment` permission
# Retrieve a list of Equipment
Source: https://docs.tread.ai/api-reference/equipment/retrieve-a-list-of-equipment
/api-reference/openapi.json get /v1/equipment
Retrieve `Equipment` visible to a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `external_id`
* `license_number`
* `name`
# Retrieve a single Equipment
Source: https://docs.tread.ai/api-reference/equipment/retrieve-a-single-equipment
/api-reference/openapi.json get /v1/equipment/{id}
Deprecated in favor of "Retrieve `Equipment` by ID for a `Company`"
Retrieve an `Equipment` by ID
# Retrieve Equipment by ID for a Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{id}
Retrieve `Equipment` by ID for a `Company`
# Retrieve Equipment by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Retrieve `Equipment` by ID for a Managed Company
# Retrieve Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment
Retrieve `Equipment` for a managed company. This includes both equipment owned by the managed company and equipment shared with the managed company.
# Retrieve Equipment that belong to a Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment
Retrieve `Equipment` for a `Company`
# Update an Equipment
Source: https://docs.tread.ai/api-reference/equipment/update-an-equipment
/api-reference/openapi.json patch /v1/equipment/{id}
Update `Equipment` by ID
This endpoint required the `edit_equipment` permission
# Update Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/update-equipment-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Update `Equipment` by ID for a Managed Company
This endpoint requires the `edit_equipment` permission
# Create an EquipmentType for a Company
Source: https://docs.tread.ai/api-reference/equipmenttype/create-an-equipmenttype-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/equipment_types
Create an `EquipmentType` for a `Company`
This endpoint requires the `create_equipment_type` permission
# Create an EquipmentType in the current Company
Source: https://docs.tread.ai/api-reference/equipmenttype/create-an-equipmenttype-in-the-current-company
/api-reference/openapi.json post /v1/equipment_types
Create an `EquipmentType` in the current `Company`
This endpoint requires the `create_equipment_type` permission
# Delete an EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/delete-an-equipmenttype
/api-reference/openapi.json delete /v1/equipment_types/{id}
Delete `EquipmentType` by ID
This endpoint requires the `delete_equipment_type` permission
# Retrieve a single EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-a-single-equipmenttype
/api-reference/openapi.json get /v1/equipment_types/{id}
Retrieve `EquipmentType` by `ID`
# Retrieve EquipmentTypes for a Company
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-equipmenttypes-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment_types
Retrieve `EquipmentTypes` for a `Company`.
# Retrieve EquipmentTypes for a Managed Company
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-equipmenttypes-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment_types
Retrieve `EquipmentTypes` for a managed company.
# Update an EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/update-an-equipmenttype
/api-reference/openapi.json patch /v1/equipment_types/{id}
Update `EquipmentType` by ID
This endpoint requires the `edit_equipment_type` permission
# Retrieve a Foreman by ID for a Company
Source: https://docs.tread.ai/api-reference/foremen/retrieve-a-foreman-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/{id}
Retrieve a `Driver` by ID for a `Company`
# Retrieve Foremen for a Company
Source: https://docs.tread.ai/api-reference/foremen/retrieve-foremen-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/foremen
Retrieve `Foremen` for a `Company`
# Search Foremen based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/foremen/search-foremen-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/faceted_search
Searches `Foremen` in a typeahead style but instead of all `Foremen` for a `Company` this returns all `Foremen` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on Foremen
Source: https://docs.tread.ai/api-reference/foremen/typeahead-search-on-foremen
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/typeahead
Typeahead search against the `first_name` and `last_name` property on `Foremen` for a `Company`.
# Create a FuelPrice for a FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelprice-for-a-fuelpriceindex
/api-reference/openapi.json post /v1/fuel_price_indices/{fuel-price-index-id}/fuel_prices
Create a `FuelPrice` for a `FuelPriceIndex`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelPriceIndex for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelpriceindex-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/fuel_price_indices
Create a `FuelPriceIndex` for a `Company`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelSurchargeSchedule for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelsurchargeschedule-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/fuel_surcharge_schedules
Create a `FuelSurchargeSchedule` for a `Company`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelSurchargeSchedulePrice for a FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelsurchargescheduleprice-for-a-fuelsurchargeschedule
/api-reference/openapi.json post /v1/fuel_surcharge_schedules/{fuel-surcharge-schedule-id}/fuel_surcharge_schedule_prices
Create a `FuelSurchargeSchedulePrice` for a `FuelSurchargeSchedule`
This endpoint requires the `create_fuel_price_indices` permission
# Delete FuelPrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelprice
/api-reference/openapi.json delete /v1/fuel_prices/{id}
Delete `FuelPrice` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelpriceindex
/api-reference/openapi.json delete /v1/fuel_price_indices/{id}
Delete `FuelPriceIndex` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelsurchargeschedule
/api-reference/openapi.json delete /v1/fuel_surcharge_schedules/{id}
Delete `FuelSurchargeSchedule` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelSurchargeSchedulePrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelsurchargescheduleprice
/api-reference/openapi.json delete /v1/fuel_surcharge_schedule_prices/{id}
Delete `FuelSurchargeSchedulePrice` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Retrieve Fuel Prices that belong to a FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuel-prices-that-belong-to-a-fuelpriceindex
/api-reference/openapi.json get /v1/fuel_price_indices/{fuel-price-index-id}/fuel_prices
Retrieve `FuelPrices` that belong to a `FuelPriceIndex`
# Retrieve FuelPriceIndices that belong to a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelpriceindices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_price_indices
Retrieve `FuelPriceIndices` for a `Company`
# Retrieve FuelSurchargeSchedulePrices that belong to a FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelsurchargescheduleprices-that-belong-to-a-fuelsurchargeschedule
/api-reference/openapi.json get /v1/fuel_surcharge_schedules/{fuel-surcharge-schedule-id}/fuel_surcharge_schedule_prices
Retrieve `FuelSurchargeSchedulePrices` that belong to a `FuelSurchargeSchedule`
# Retrieve FuelSurchargeSchedules that belong to a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelsurchargeschedules-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_surcharge_schedules
Retrieve `FuelSurchargeSchedules` for a `Company`
# Typeahead search on FuelPriceIndex for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/typeahead-search-on-fuelpriceindex-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_price_indices/typeahead
Typeahead search against the `name` property on `FuelPriceIndex` for a `Company`.
# Typeahead search on FuelSurchargeSchedule for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/typeahead-search-on-fuelsurchargeschedule-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_surcharge_schedules/typeahead
Typeahead search against the `name` property on `FuelSurchargeSchedule` for a `Company`.
# Update FuelPrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelprice
/api-reference/openapi.json patch /v1/fuel_prices/{id}
Update `FuelPrice` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelpriceindex
/api-reference/openapi.json patch /v1/fuel_price_indices/{id}
Update `FuelPriceIndex` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelsurchargeschedule
/api-reference/openapi.json patch /v1/fuel_surcharge_schedules/{id}
Update `FuelSurchargeSchedule` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelSurchargeSchedulePrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelsurchargescheduleprice
/api-reference/openapi.json patch /v1/fuel_surcharge_schedule_prices/{id}
Update `FuelSurchargeSchedulePrice` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Retrieve IamRoles that belong to a Company
Source: https://docs.tread.ai/api-reference/iamroles/retrieve-iamroles-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/iam_roles
Retrieve `IamRoles` for a `Company`
# Accept a Job
Source: https://docs.tread.ai/api-reference/jobs/accept-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/accept
Accept a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Approve a Job
Source: https://docs.tread.ai/api-reference/jobs/approve-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/approve
Approve a `Job` by ID
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Arrive to site for a Job
Source: https://docs.tread.ai/api-reference/jobs/arrive-to-site-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/arrive
Arrive to `site` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Assign a vendor to a Job
Source: https://docs.tread.ai/api-reference/jobs/assign-a-vendor-to-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/assign_vendor
Assign a `driver` to an `Account`, with `vendor` type
This endpoint requires the `assign_job` `IAmPermission`
# Assign Phase to a Job
Source: https://docs.tread.ai/api-reference/jobs/assign-phase-to-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/phase
Assign a `Phase` to a `Job` which belongs to the `Job`'s `Order`.
This endpoint requires the `edit_job_phase` permission
# Bulk Accept Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-accept-jobs
/api-reference/openapi.json put /v1/jobs/bulk_accept
Accept multiple `Jobs` based on the given `job_ids` asynchronously.
To accept a `Job` successfully, the principal should either be the `Driver` of the `Job` or has an `edit_job` permission.
# Bulk Assign Drivers to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-drivers-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign_drivers
Assigns a list of multiple `Jobs` to the given `Driver` asynchronously.
This endpoint requires the `assign_job` permission
# Bulk Assign Vendor to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendor-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign
Assigns multiple `Jobs` to the given `Vendor` asynchronously.
This endpoint requires the `edit_job` permission
Deprecated in favor of `PUT /v1/jobs/bulk_assign_vendors`
# Bulk Assign Vendors to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendors-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign_vendors
Assigns a list of multiple `Jobs` to the given `Vendor` asynchronously.
This endpoint requires the `assign_job` permission
# Bulk Copy Assignments
Source: https://docs.tread.ai/api-reference/jobs/bulk-copy-assignments
/api-reference/openapi.json put /v1/jobs/bulk_copy_assignments
Bulk Copy `JobAssignments` asynchronously.
This endpoint requires the `edit_job` permission
# Bulk delete Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-delete-jobs
/api-reference/openapi.json put /v1/jobs/bulk_delete
Bulk delete multiple `Jobs` by `id` asynchronously.
This endpoint requires the `delete_job` permission.
# Bulk Send Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs
/api-reference/openapi.json put /v1/jobs/bulk_send
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` based on the given `job_ids` and `order_ids` asynchronously.
This endpoint requires the `edit_job` permission
# Bulk send SMS to job's drivers
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-sms-to-jobs-drivers
/api-reference/openapi.json put /v1/jobs/bulk_driver_sms
Bulk send sms text to `Job`'s `drivers`.
# Bulk Update Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-update-jobs-1
/api-reference/openapi.json patch /v1/jobs/bulk_update
Bulk update multiple `Jobs` with attributes defined in `data` asynchronously.
This endpoint requires the `edit_job` permission.
Bulk Updatable attributes: `notes`
# Cancel a Job
Source: https://docs.tread.ai/api-reference/jobs/cancel-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/cancel
Cancel a `Job` by ID
This endpoint requires the `cancel_job` permission
# Complete a Job
Source: https://docs.tread.ai/api-reference/jobs/complete-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/complete
Complete a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Complete Load for a Job
Source: https://docs.tread.ai/api-reference/jobs/complete-load-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/complete_load
Load `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Copy a Job
Source: https://docs.tread.ai/api-reference/jobs/copy-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/copy
Creates a new `Job` with the same attributes as the job with provided `job-id`.
# Create a new Job for an Order
Source: https://docs.tread.ai/api-reference/jobs/create-a-new-job-for-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/jobs
Create a new `Job` for an `Order`.
This endpoint requires the `create_job` `IamPermission`.
# Delete a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-a-job
/api-reference/openapi.json delete /v1/jobs/{id}
Delete a `Job` by ID
This endpoint requires the `delete_job` permission
# Flag a Job by ID
Source: https://docs.tread.ai/api-reference/jobs/flag-a-job-by-id
/api-reference/openapi.json put /v1/jobs/{job-id}/flag
Flag a `Job` by ID
This endpoint requires the `edit_job` permission
# Load Material for a Job
Source: https://docs.tread.ai/api-reference/jobs/load-material-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/load_material
Load `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Move to Site for a Job
Source: https://docs.tread.ai/api-reference/jobs/move-to-site-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/enroute
Move to `site` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pause a Job
Source: https://docs.tread.ai/api-reference/jobs/pause-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/pause
Pause a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pay a Job
Source: https://docs.tread.ai/api-reference/jobs/pay-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/pay
Pay a `Job` by ID
This endpoint requires the `edit_job` permission
# Reject a Job
Source: https://docs.tread.ai/api-reference/jobs/reject-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/reject
Reject a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Remove flag for a Job
Source: https://docs.tread.ai/api-reference/jobs/remove-flag-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/remove_flag
Remove flag for a `Job` by ID
This endpoint requires the `edit_job` permission
# Remove signoff for a Job
Source: https://docs.tread.ai/api-reference/jobs/remove-signoff-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/remove_signoff
Remove signoff for a `Job` by ID
This endpoint requires the `edit_job` permission
# Request a Job
Source: https://docs.tread.ai/api-reference/jobs/request-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/request
Request a `Job` by ID to assigned `driver_id` on the job.
This endpoint requires the `edit_job` permission
# Resume a Job
Source: https://docs.tread.ai/api-reference/jobs/resume-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/resume
Resume a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Retrieve a single Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-single-job
/api-reference/openapi.json get /v1/jobs/{id}
Retrieve `Job` by ID
# Retrieve all JobEvents that belong to a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-jobevents-that-belong-to-a-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/job_events
Retrieve `Job` `Job-Events` by `ID`
# Retrieve Jobs for the current Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-for-the-current-company
/api-reference/openapi.json get /v1/jobs
Retrieve `Jobs` for the current `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs for the current Company for approval
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-for-the-current-company-for-approval
/api-reference/openapi.json get /v1/jobs/approval
Retrieve completed `Jobs` for the current `Company` which are ready for the `Foreman` to approve.
# Retrieve Jobs that are assigned to the current User
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-are-assigned-to-the-current-user
/api-reference/openapi.json get /v1/jobs/assigned
Retrieve current `User`'s `Jobs`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs that belong to an Order
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-belong-to-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/jobs
Retrieve `Jobs` that belong to an `Order` and is visible to the currently authenticated Company.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs where the current User is a Collaborator
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-collaborator
/api-reference/openapi.json get /v1/jobs/collaborator
Retrieve `Jobs` where the current `User` is a `Collaborator`
# Retrieve Jobs where the current User is a Driver
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-driver
/api-reference/openapi.json get /v1/jobs/driver
Retrieve `Jobs` where the current `User` is a `Driver`
# Retrieve Jobs where the current User is a Foreman
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-foreman
/api-reference/openapi.json get /v1/jobs/foreman
Retrieve `Jobs` where the current `User` is a `Foreman`
# Retrieve Jobs where the current User is a Salesperson
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-salesperson
/api-reference/openapi.json get /v1/jobs/salesperson
Retrieve `Jobs` where the current `User` is a `Salesperson`
# Retrieve Jobs with Invoices that belong to an Order as a specific Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-with-invoices-that-belong-to-an-order-as-a-specific-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/jobs/invoicing
Retrieve `Jobs` with `Receivable` and `Payable` `Invoices` that belong to an `Order` as a specific `Company`
# Retrieve Location Histories for a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-location-histories-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/location_histories
Retrieve `LocationHistories` for a `Job`.
# Retrieve Location Histories For MovingSite on A Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-location-histories-for-movingsite-on-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/moving_sites/{moving-site-id}/location_histories
Retrieve `LocationHistory` of a `MovingSite` for a `Job`.
# Retrieve the Timeline of a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/timeline
Retrieve `Job`'s Timeline by ID
# Retrieve the Timeline of an Order
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/timeline
Retrieve `Orders`'s Timeline by ID
# Retrieve the Timeline of an Order for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/timeline
Retrieve `Orders`'s Timeline by ID
# Review a Job
Source: https://docs.tread.ai/api-reference/jobs/review-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/review
Sets the `Job` by ID to `in_review` state.
This endpoint requires the `edit_job` permission
# Send SMS to a driver of a Job
Source: https://docs.tread.ai/api-reference/jobs/send-sms-to-a-driver-of-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/driver_sms
Send sms text to `driver` of a `Job`.
# Sign off a Job
Source: https://docs.tread.ai/api-reference/jobs/sign-off-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/sign_off
Sign off a `Job` by ID
This endpoint requires the `edit_job` permission
# Unapprove a Job
Source: https://docs.tread.ai/api-reference/jobs/unapprove-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unapprove
Unapprove a `Job` by ID
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Unassign the Driver or Vendor from a Job
Source: https://docs.tread.ai/api-reference/jobs/unassign-the-driver-or-vendor-from-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unassign
Unassign a `vendor` for a `Job` by ID
This endpoint requires the `assign_job` permission
# Unload the Material for a Job
Source: https://docs.tread.ai/api-reference/jobs/unload-the-material-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unload_material
Unload `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Update a Job
Source: https://docs.tread.ai/api-reference/jobs/update-a-job
/api-reference/openapi.json patch /v1/jobs/{id}
Update a `Job` by ID
This endpoint requires the `edit_job` permission.
If setting the `driver_id`, the `assign_job` permission is also required.
# Retrieve all IamRoles
Source: https://docs.tread.ai/api-reference/iamroles/retrieve-all-iamroles
/api-reference/openapi.json get /v1/iam_roles
Retrieve `IamRoles` for the users company along with all system roles
# Approve an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/approve-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/approve
Approve an `Invoice` for a `Company` by ID
# Approve the Invoice as the Customer for a Company
Source: https://docs.tread.ai/api-reference/invoices/approve-the-invoice-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/customer_approve
Approve the `Invoice` as the `Customer` for a `Company` by ID
# Batch update InvoiceLineItems for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/batch-update-invoicelineitems-for-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items
Batch update `InvoiceLineItems` for an `Invoice` for a `Company`.
This endpoint allows updating, creating, deleting `InvoiceLineItems` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
- no need to provide the `rate_type` field
e.g.
```json
invoice_line_items: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If deleting existing records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
invoice_line_items: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
## This section is deprecated
#### We are still accepting `rate_type` but it will have no effect. It will be removed in one of the next releases.
If creating new records (for cases where the `Invoice` `rate_type` grouping changes):
- must provide the `rate_type`
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
rate_type: "RatePerTon",
invoice_line_items: [
{
"quantity": 20.25,
"rate": 12.5
},
{
"quantity": 22.50,
"rate": 12.5
}
]
```
# Export an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/export-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/export
Export an `Invoice` for a `Company` by ID
# Generate InvoiceLineItems for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/generate-invoicelineitems-for-an-invoice-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items/generate
Generate `InvoiceLineItems` for an `Invoice` for a `Company`
This endpoint only generates the `InvoiceLineItems` based on the inputs and does not store any data on the backend
# Pay an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/pay-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/pay
Pay an `Invoice` for a `Company` by ID
# Pay the Invoice as the Customer for a Company
Source: https://docs.tread.ai/api-reference/invoices/pay-the-invoice-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/customer_pay
Pay the `Invoice` as the `Customer` for a `Company` by ID
# Retrieve a Payable Invoice for a given DriverDay
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/payable
Retrieve a `Payable Invoice` for a given `DriverDay`.
# Retrieve a Payable Invoice for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/payable
Retrieve a `Payable Invoice` for a given `Job` for a `Company`.
This can be a `Payable` for a `Vendor` or a `Driver`.
# Retrieve a Payable Invoice for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/payable
Retrieve a `Payable Invoice` for a given `Job`.
This can be a `Payable` for a `Vendor` or a `Driver`.
# Retrieve a Receivable for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-receivable-for-a-given-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/receivable
Retrieve a `Receivable Invoice` for a given `Job` for a `Company`
# Retrieve a Receivable for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-receivable-for-a-given-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/receivable
Retrieve a `Receivable Invoice` for a given `Job`
# Retrieve all InvoiceLineItems that belongs to an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-all-invoicelineitems-that-belongs-to-an-invoice-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items
Retrieve all `InvoiceLineItem` for an `Invoice` for a `Company`
# Retrieve Invoices that belong to a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-invoices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/invoices
Retrieve `Invoices` that visible to a `Company`
# Retrieve Invoices that belong to Jobs on an Order for a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-invoices-that-belong-to-jobs-on-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/invoices
Retrieve `Invoices` that are on `Jobs` tied to an `Order` for a specific `Company`.
# Send the Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/send-the-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/send_invoice
Send the `Invoice` for a `Company` by ID
# Unapprove an Invoice as a Company
Source: https://docs.tread.ai/api-reference/invoices/unapprove-an-invoice-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/unapprove
Unapprove an `Invoice` by ID as a `Company`
# Update an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/update-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{id}
Update an `Invoice` by ID for a `Company`
This endpoint requires the `edit_invoice` permission
# Void an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/void-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/void
Void an `Invoice` for a `Company` by ID
# Retrieve the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/retrieve-the-jobsummary-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/summary
Retrieve the `JobSummary` for a `Job` for a `Company`.
A `JobSummary` will only exist for a `Job` in the `completed` state.
# Retrieve the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/retrieve-the-jobsummary-for-a-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/summary
Retrieve the `JobSummary` for a `Job`.
A `JobSummary` will only exist for a `Job` in the `completed` state.
# Update the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/update-the-jobsummary-for-a-job
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/{job-id}/summary
Update the `JobSummary` for a `Job`.
This endpoint requires the `edit_job_summary` `IamPermission`.
# Update the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/update-the-jobsummary-for-a-job-1
/api-reference/openapi.json patch /v1/jobs/{job-id}/summary
Update the `JobSummary` for a `Job`.
This endpoint requires the `edit_job_summary` `IamPermission`.
# Create a KML/KMZ file for a Company
Source: https://docs.tread.ai/api-reference/kmlfiles/create-a-kmlkmz-file-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/kml_files
Create a `KML`/`KMZ` file that belongs to a `Company`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Delete a KMLFile
Source: https://docs.tread.ai/api-reference/kmlfiles/delete-a-kmlfile
/api-reference/openapi.json delete /v1/kml_files/{id}
Delete a `KMLFile` by `ID`
# Retrieve KML/KMZ files that belong to a Company
Source: https://docs.tread.ai/api-reference/kmlfiles/retrieve-kmlkmz-files-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/kml_files
Retrieve `KML`/`KMZ` files for a `Company`.
# Update a KMLFile
Source: https://docs.tread.ai/api-reference/kmlfiles/update-a-kmlfile
/api-reference/openapi.json patch /v1/kml_files/{id}
Update `KMLFile` by `ID`
# Create a new Label
Source: https://docs.tread.ai/api-reference/labels/create-a-new-label
/api-reference/openapi.json post /v1/companies/{company-id}/labels
Create a new `Label`
This endpoint requires the `manage_labels` permission
# Delete a Label
Source: https://docs.tread.ai/api-reference/labels/delete-a-label
/api-reference/openapi.json delete /v1/companies/{company-id}/labels/{id}
Delete a `Label` by ID (soft delete)
This endpoint requires the `manage_labels` permission
# Retrieve a single Label
Source: https://docs.tread.ai/api-reference/labels/retrieve-a-single-label
/api-reference/openapi.json get /v1/companies/{company-id}/labels/{id}
Retrieve a single `Label` by ID
This endpoint requires the `manage_labels` permission
# Retrieve Labels for the Company
Source: https://docs.tread.ai/api-reference/labels/retrieve-labels-for-the-company
/api-reference/openapi.json get /v1/companies/{company-id}/labels
Retrieve `Label`s for the specified `Company`.
This endpoint requires the `manage_labels` permission
# Update a Label
Source: https://docs.tread.ai/api-reference/labels/update-a-label
/api-reference/openapi.json patch /v1/companies/{company-id}/labels/{id}
Update a `Label` by ID
This endpoint requires the `manage_labels` permission
# Add a new load to a Job
Source: https://docs.tread.ai/api-reference/loads/add-a-new-load-to-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/loads
Create a `Load` by for a `Job`
This endpoint requires the `create_loads` permission
# Approve a Load
Source: https://docs.tread.ai/api-reference/loads/approve-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/approve
Approve a `Load` by ID
This endpoint requires the `approve_load` permission.
# Approve a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/approve-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/approve
Approve a `Load` by ID as a `Company`
This endpoint requires the `approve_load` permission.
# Complete a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/complete-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/complete
Complete a `Load` by ID as a `Company`
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Create or update the DriverSignature on a Load
Source: https://docs.tread.ai/api-reference/loads/create-or-update-the-driversignature-on-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/signatures/driver
Create or update the `DriverSignature` on a `Load`.
# Create or update the DropoffSignature on a Load
Source: https://docs.tread.ai/api-reference/loads/create-or-update-the-dropoffsignature-on-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `Load`.
# Delete a Load
Source: https://docs.tread.ai/api-reference/loads/delete-a-load
/api-reference/openapi.json delete /v1/loads/{id}
Delete a `Load` by ID
This endpoint requires the `delete_load` permission
# Delete the DriverSignature from a Load
Source: https://docs.tread.ai/api-reference/loads/delete-the-driversignature-from-a-load
/api-reference/openapi.json delete /v1/loads/{load-id}/signatures/driver
Delete the `DriverSignature` from a `Load`.
# Delete the DropoffSignature from a Load
Source: https://docs.tread.ai/api-reference/loads/delete-the-dropoffsignature-from-a-load
/api-reference/openapi.json delete /v1/loads/{load-id}/signatures/dropoff
Delete the `DropoffSignature` from a `Load`
# Retrieve a single Load
Source: https://docs.tread.ai/api-reference/loads/retrieve-a-single-load
/api-reference/openapi.json get /v1/loads/{id}
Retrieve `Load` by ID
# Retrieve all Signatures for a Load
Source: https://docs.tread.ai/api-reference/loads/retrieve-all-signatures-for-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/signatures
Retrieve all `Signatures` for a `Load`
# Retrieve Loads for the current Company for approval
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-for-the-current-company-for-approval
/api-reference/openapi.json get /v1/loads/approval
Retrieve completed `Loads` for the current `Company` which are ready for the `Foreman` to approve.
# Retrieve Loads of a Job
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/loads
Retrieve `Loads` of a `Job`.
# Retrieve Loads of a Job for a Company
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/loads
Retrieve `Loads` of a `Job` for a `Company`.
# Retrieve Loads of a Settlement
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-settlement
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/loads
Retrieve `Loads` of all `Orders` belonging to a `Settlement`.
# Retrieve Loads of an Order
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/loads
Retrieve `Loads` of an `Order`.
# Retrieve Loads of an Order for a Company
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/loads
Retrieve `Loads` of an `Order` for a `Company`.
# Typeahead search on Loads by Company
Source: https://docs.tread.ai/api-reference/loads/typeahead-search-on-loads-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/loads/typeahead
Typeahead search against the `load_id` property for `Loads` visible to the currently authenticated `Company`.
# Unapprove a Load
Source: https://docs.tread.ai/api-reference/loads/unapprove-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/unapprove
Unapprove a `Load` by ID
This endpoint requires the `approve_load` permission.
# Unapprove a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/unapprove-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/unapprove
Unapprove a `Load` by ID as a `Company`
This endpoint requires the `approve_load` permission.
# Update a Load
Source: https://docs.tread.ai/api-reference/loads/update-a-load
/api-reference/openapi.json patch /v1/loads/{id}
Update a `Load` by ID
This endpoint requires the `edit_load` permission
# Create a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/create-a-materialrate
/api-reference/openapi.json post /v1/material_rates
Create a `MaterialRate`.
This endpoint requires the `create_material_rate` permission.
# Create a MaterialRate within a Company context
Source: https://docs.tread.ai/api-reference/materialrates/create-a-materialrate-within-a-company-context
/api-reference/openapi.json post /v1/companies/{company-id}/material_rates
Create a `MaterialRate` within a specific `Company` context.
This endpoint requires the `create_material_rate` permission.
# Delete a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/delete-a-materialrate
/api-reference/openapi.json delete /v1/material_rates/{id}
Delete a `MaterialRate` by ID.
This endpoint requires the `edit_material_rate` permission.
# Retrieve a single MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-a-single-materialrate
/api-reference/openapi.json get /v1/material_rates/{id}
Retrieve a `MaterialRate` by ID.
# Retrieve MaterialRates of a Project
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-materialrates-of-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/material_rates
Retrieve `MaterialRates` of a `Project`.
# Retrieve MaterialRates that belong to a Company
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-materialrates-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_rates
Retrieve `MaterialRates` for a `Company`.
- When retrieving `Company`-default `MaterialRates`, use `filter[default_only]=true`.
- When retrieving `Customer Account`-specific `MaterialRates`, use `filter[customer_account_id]=customer_account_uuid`.
# Update a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/update-a-materialrate
/api-reference/openapi.json patch /v1/material_rates/{id}
Update a `MaterialRate` by ID.
This endpoint requires the `edit_material_rate` permission.
# Create a Material for a Company
Source: https://docs.tread.ai/api-reference/materials/create-a-material-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/materials
Create `Materials` for a `Company`
This endpoint requires the `create_materials` permission
# Retrieve Materials that belong to a Company
Source: https://docs.tread.ai/api-reference/materials/retrieve-materials-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/materials
Retrieve `Materials` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `external_id`
* `material_type.name`
# Retrieve Materials that belong to the current Company
Source: https://docs.tread.ai/api-reference/materials/retrieve-materials-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/materials
Retrieve `Materials` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `external_id`
* `material_type.name`
# Retrieve a list of MaterialTypes
Source: https://docs.tread.ai/api-reference/materialtype/retrieve-a-list-of-materialtypes
/api-reference/openapi.json get /v1/material_types
Get list of all `MaterialTypes`
# Retrieve MaterialTypes for a Company
Source: https://docs.tread.ai/api-reference/materialtype/retrieve-materialtypes-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_types
Retrieve `MaterialTypes` for a `Company`
# Create a ResourceScope
Source: https://docs.tread.ai/api-reference/resourcescopes/create-a-resourcescope
/api-reference/openapi.json post /v1/users/{user-id}/resource_scopes
Create a `ResourceScope`.
This endpoint requires the `create_resource_scope` permission.
# Create a ResourceScope for a User in a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/create-a-resourcescope-for-a-user-in-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/resource_scopes
Create a `ResourceScope` for a `User` in a managed company.
This endpoint requires the `create_resource_scope` permission.
# Delete a ResourceScope
Source: https://docs.tread.ai/api-reference/resourcescopes/delete-a-resourcescope
/api-reference/openapi.json delete /v1/resource_scopes/{id}
Delete a `ResourceScope`.
This endpoint requires the `delete_resource_scope` permission.
# Delete a ResourceScope for a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/delete-a-resourcescope-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/resource_scopes/{id}
Delete a `ResourceScope` for a user in a managed company.
This endpoint requires the `delete_resource_scope` permission.
# Retrieve ResourceScopes for a User
Source: https://docs.tread.ai/api-reference/resourcescopes/retrieve-resourcescopes-for-a-user
/api-reference/openapi.json get /v1/users/{user-id}/resource_scopes
Retrieve `ResourceScopes` for a `User`.
# Retrieve ResourceScopes for a User in a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/retrieve-resourcescopes-for-a-user-in-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/resource_scopes
Retrieve `ResourceScopes` for a `User` in a managed company.
# Bulk Create Historical Locations
Source: https://docs.tread.ai/api-reference/users/bulk-create-historical-locations
/api-reference/openapi.json post /v1/users/me/locations
Record historical location data for a User's Mobile Device
# Create a User
Source: https://docs.tread.ai/api-reference/users/create-a-user
/api-reference/openapi.json post /v1/users
Create a `User`
This endpoint requires the `create_user` permission
# Create Scheduled Time Off
Source: https://docs.tread.ai/api-reference/users/create-scheduled-time-off
/api-reference/openapi.json post /v1/users/{user-id}/scheduled_time_offs
Create a Scheduled Time Off for a `User`
# Create User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/create-user-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/users
Create a `User` for a Managed Company
This endpoint requires the `create_user` permission
# Delete a Scheduled Time Off
Source: https://docs.tread.ai/api-reference/users/delete-a-scheduled-time-off
/api-reference/openapi.json delete /v1/users/{user-id}/scheduled_time_offs/{id}
Delete Scheduled Time Off for a `User`
# Delete a User
Source: https://docs.tread.ai/api-reference/users/delete-a-user
/api-reference/openapi.json delete /v1/users/{id}
Delete a `User` by ID
This endpoint requires the `delete_user` permission
# Delete User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/delete-user-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Delete `User` by ID for a Managed Company
This endpoint requires the `delete_user` permission
# Impersonate a User
Source: https://docs.tread.ai/api-reference/users/impersonate-a-user
/api-reference/openapi.json post /v1/users/{user-id}/impersonations
Impersonate a `User`.
This endpoint requires the `impersonate` `IamPermission`.
# Mark Schedule Available
Source: https://docs.tread.ai/api-reference/users/mark-schedule-available
/api-reference/openapi.json put /v1/users/{user-id}/scheduled_time_offs/available
Mark current `User` as available and disable any `Scheduled Time Off`
# Mark Schedule Unavailable
Source: https://docs.tread.ai/api-reference/users/mark-schedule-unavailable
/api-reference/openapi.json put /v1/users/{user-id}/scheduled_time_offs/unavailable
Mark current `User` as unavailable and create a new `Scheduled time off`
# Retrieve current User's Access
Source: https://docs.tread.ai/api-reference/users/retrieve-current-users-access
/api-reference/openapi.json get /v1/users/me/access
Retrieve current `User`'s `Access`
# Retrieve Permissions granted to the current User
Source: https://docs.tread.ai/api-reference/users/retrieve-permissions-granted-to-the-current-user
/api-reference/openapi.json get /v1/users/me/iam_permissions
Retrieve the current authenticated users permissions
# Retrieve Scheduled Time Offs for a User
Source: https://docs.tread.ai/api-reference/users/retrieve-scheduled-time-offs-for-a-user
/api-reference/openapi.json get /v1/users/{user-id}/scheduled_time_offs
Retrieve all active `ScheduledTimeOffs` visible to your `Company` for a `User`
# Retrieve the current User
Source: https://docs.tread.ai/api-reference/users/retrieve-the-current-user
/api-reference/openapi.json get /v1/users/me
Retrieve the current authenticated `User`
# Retrieve User
Source: https://docs.tread.ai/api-reference/users/retrieve-user
/api-reference/openapi.json get /v1/users/{id}
Retrieve a `User` by ID
# Retrieve User by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/users/retrieve-user-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Retrieve `User` by ID for a Managed Company
# Retrieve Users for a Managed Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users
Retrieve `Users` for a managed company.
# Retrieve Users that belong to a Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/users
Retrieve `Users` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `first_name`
* `last_name`
* `email`
* `phone`
* `company.legal_name`
* `iam_roles.name`
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Retrieve Users that belong to the current Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/users
Retrieve `Users` visible to your `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `first_name`
* `last_name`
* `email`
* `phone`
* `company.legal_name`
* `iam_roles.name`
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
- `filter[label_ids]` array are applied as `OR` in the query
# Revokes all active B2B and B2B sessions for the given User
Source: https://docs.tread.ai/api-reference/users/revokes-all-active-b2b-and-b2b-sessions-for-the-given-user
/api-reference/openapi.json delete /v1/users/{user-id}/sessions
This endpoint revokes all active B2B and B2C sessions for the given `User`
# Send an Email Invite to a User
Source: https://docs.tread.ai/api-reference/users/send-an-email-invite-to-a-user
/api-reference/openapi.json put /v1/users/{user-id}/invite/email
This endpoint sends an Email invite to a `User` asynchronously.
# Send an Email Invite to a User in a Managed Company
Source: https://docs.tread.ai/api-reference/users/send-an-email-invite-to-a-user-in-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/invite/email
This endpoint sends an Email invite to a `User` in a Managed Company asynchronously.
# Send an SMS Invite to a User
Source: https://docs.tread.ai/api-reference/users/send-an-sms-invite-to-a-user
/api-reference/openapi.json put /v1/users/{user-id}/invite/sms
This endpoint sends an SMS invite to a `User` asynchronously.
# Send an SMS Invite to a User in a Managed Company
Source: https://docs.tread.ai/api-reference/users/send-an-sms-invite-to-a-user-in-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/invite/sms
This endpoint sends an SMS invite to a `User` in a Managed Company asynchronously.
# Set Current Location
Source: https://docs.tread.ai/api-reference/users/set-current-location
/api-reference/openapi.json post /v1/users/me/location
Set the current location for a User's Mobile Device
# Typeahead search Users for a Managed Company
Source: https://docs.tread.ai/api-reference/users/typeahead-search-users-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/typeahead
Typeahead search for `Users` in a managed company
# Update a User
Source: https://docs.tread.ai/api-reference/users/update-a-user
/api-reference/openapi.json patch /v1/users/{id}
Update a `User` by ID
A `User` can always update their own `Equipment` via the `equipment_id` /`additional_equipment_ids` properties.
Any other updates require the `edit_user` permission.
# Update User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/update-user-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Update `User` by ID for a Managed Company
A `User` can always update their own `Equipment` via the `equipment_id` /`additional_equipment_ids` properties.
Any other updates require the `edit_user` permission.
# Activate a Material
Source: https://docs.tread.ai/api-reference/materials/activate-a-material
/api-reference/openapi.json put /v1/materials/{material-id}/activate
Activate a `Material` by ID
This endpoint requires the `edit_material` permission
# Create a Material
Source: https://docs.tread.ai/api-reference/materials/create-a-material
/api-reference/openapi.json post /v1/materials
Create a new Material
This endpoint requires the `create_materials` permission
# Deactivate a Material
Source: https://docs.tread.ai/api-reference/materials/deactivate-a-material
/api-reference/openapi.json put /v1/materials/{material-id}/deactivate
Deactivate a `Material` by ID
This endpoint requires the `edit_material` permission
# Delete a Material
Source: https://docs.tread.ai/api-reference/materials/delete-a-material
/api-reference/openapi.json delete /v1/materials/{id}
Delete a `Material` by ID
This endpoint requires the `delete_material` permission
# Retrieve a single Material
Source: https://docs.tread.ai/api-reference/materials/retrieve-a-single-material
/api-reference/openapi.json get /v1/materials/{id}
Retrieve a `Material` by ID
# Update a Material
Source: https://docs.tread.ai/api-reference/materials/update-a-material
/api-reference/openapi.json patch /v1/materials/{id}
Update `Material` by ID
This endpoint required the `edit_material` permission
# Create a Report Category
Source: https://docs.tread.ai/api-reference/omnireports/create-a-report-category
/api-reference/openapi.json post /v1/companies/{company-id}/report_categories
Create a `Report Category`
# Create Omni Report for a Company
Source: https://docs.tread.ai/api-reference/omnireports/create-omni-report-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/omni_reports
Create `Omni Report` for a `Company`
# Delete Omni Report
Source: https://docs.tread.ai/api-reference/omnireports/delete-omni-report
/api-reference/openapi.json delete /v1/omni_reports/{id}
Delete `Omni Report` by `ID`
# Delete ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/delete-reportcategory
/api-reference/openapi.json delete /v1/report_categories/{id}
Delete `ReportCategory` by `ID`
# Retrieve all Omni Reports that belong to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omni-reports-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/omni_reports
Retrieve `Omni Reports` that belong to `Company` by `ID`.
This endpoint requires the `view_report` permission.
# Retrieve all Omni Reports visible to the current Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omni-reports-visible-to-the-current-company
/api-reference/openapi.json get /v1/omni_reports
Retrieve all `Omni Reports` visible to the current `Company`
This endpoint requires the `view_report` permission
# Retrieve all OmniReports that are under a ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omnireports-that-are-under-a-reportcategory
/api-reference/openapi.json get /v1/report_categories/{report-category-id}/omni_reports
Retrieve all `OmniReports` that are under a `ReportCategory`
This endpoint requires the `view_report` permission
# Retrieve all OmniReports under a ReportCategory that belong to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omnireports-under-a-reportcategory-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/report_categories/{report-category-id}/omni_reports
Retrieve all `OmniReports` under a `ReportCategory` that belong to a `Company`
This endpoint requires the `view_report` permission
# Retrieve embedded link for Omni Report by Report Name
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-embedded-link-for-omni-report-by-report-name
/api-reference/openapi.json get /v1/omni_reports/{id}
Retrieve embedded link for Omni Report by `ID`
This endpoint requires the `view_report` permission
# Retrieve embedded link for Omni Report that belongs to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-embedded-link-for-omni-report-that-belongs-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/omni_reports/{id}
Retrieve embedded link for Omni Report by `ID` that is scoped to a `Company` and their child `Companies`.
This endpoint requires the `view_report` permission.
# Retrieve ReportCategories for a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-reportcategories-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/report_categories
Retrieve `ReportCategories` for a `Company`
# Update Omni Report
Source: https://docs.tread.ai/api-reference/omnireports/update-omni-report
/api-reference/openapi.json patch /v1/omni_reports/{id}
Update `OmniReport` by `ID`
# Update ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/update-reportcategory
/api-reference/openapi.json patch /v1/report_categories/{id}
Update `ReportCategory` by `ID`
# Accept an Order
Source: https://docs.tread.ai/api-reference/orders/accept-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/accept
Accept an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Accept an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/accept-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/accept
Accept an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Calculate estimated Route time and distance
Source: https://docs.tread.ai/api-reference/orders/calculate-estimated-route-time-and-distance
/api-reference/openapi.json post /v1/route_estimate
Calculate estimated `Route` `time` and `distance`
# Cancel an Order
Source: https://docs.tread.ai/api-reference/orders/cancel-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/cancel
Cancel an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Cancel an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/cancel-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/cancel
Cancel an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Complete an Order
Source: https://docs.tread.ai/api-reference/orders/complete-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/complete
Complete an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Complete an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/complete-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/complete
Complete an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Copy an Order
Source: https://docs.tread.ai/api-reference/orders/copy-an-order
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/copy
Copy an existing `Order`.
This endpoint required the `create_order` `IamPermission`.
# Copy an Order
Source: https://docs.tread.ai/api-reference/orders/copy-an-order-1
/api-reference/openapi.json post /v1/orders/{order-id}/copy
Copy an existing `Order`.
This endpoint required the `create_order` `IamPermission`.
# Create an Order
Source: https://docs.tread.ai/api-reference/orders/create-an-order
/api-reference/openapi.json post /v1/orders
Create a new `Order`
This endpoint requires the `create_order` permission
# Create an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/create-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders
Create a new `Order`
This endpoint requires the `create_order` permission
# Generate estimated Order values
Source: https://docs.tread.ai/api-reference/orders/generate-estimated-order-values
/api-reference/openapi.json post /v1/companies/{company-id}/orders/estimate
Generates estimated `Order` values.
One of `total_loads`, `total_units`, or `truck_quantity` must be set in the request.
# Generate estimated Order values
Source: https://docs.tread.ai/api-reference/orders/generate-estimated-order-values-1
/api-reference/openapi.json post /v1/orders/estimate
Generates estimated `Order` values.
One of `total_loads`, `total_units`, or `truck_quantity` must be set in the request.
# Hold an Order
Source: https://docs.tread.ai/api-reference/orders/hold-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/hold
Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Hold an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/hold-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/hold
Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Reject an Order
Source: https://docs.tread.ai/api-reference/orders/reject-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/reject
Reject an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Reject an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/reject-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/reject
Reject an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Request an Order
Source: https://docs.tread.ai/api-reference/orders/request-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/request
Request an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Request an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/request-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/request
Request an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Retrieve a single Order
Source: https://docs.tread.ai/api-reference/orders/retrieve-a-single-order
/api-reference/openapi.json get /v1/orders/{id}
Retrieve `Order` by ID
# Retrieve a single Order for a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-a-single-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{id}
Retrieve `Order` by ID
# Retrieve Orders based on Invoices that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-invoices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/invoicing
Retrieve `Orders` based on `Invoices` grouped by `Orders` that belong to `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
Invoice datagrid search (`search[invoice][datagrid]`) queries against the following properties:
* `job_id`
* `customer_account_name`
* `vendor_account_name`
* `driver_name`
* `order_id`
* `order_external_id`
* `order_name`
* `project_name`
* `project_external_id`
* `dispatch_number_name`
# Retrieve Orders based on Jobs for the current Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-jobs-for-the-current-company
/api-reference/openapi.json get /v1/orders/dispatch
Retrieve `Orders` based on `Jobs` grouped by `Orders` for the current `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
# Retrieve Orders based on Jobs that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-jobs-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch
Retrieve `Orders` based on `Jobs` grouped by `Orders` that belong to `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
# Retrieve Orders that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders
Retrieve `Orders` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
* `dispatch_number`
# Retrieve Orders that belong to the current Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/orders
Retrieve `Orders` visible to the currently authenticated `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
* `dispatch_number`
# Search Dispatch Numbers based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/orders/search-dispatch-numbers-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch_numbers/faceted_search
Searches `DispatchNumbers` in a typeahead style but instead of all `DispatchNumbers` for a `Company` this returns all `DispatchNumbers` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Send SMS to a driver of all the Jobs of an Order
Source: https://docs.tread.ai/api-reference/orders/send-sms-to-a-driver-of-all-the-jobs-of-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/driver_sms
Send sms text to `driver` of all `Job`s of an `Order`.
# Send SMS to a driver of all the Jobs of an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/send-sms-to-a-driver-of-all-the-jobs-of-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/driver_sms
Send sms text to `driver` of all `Job`s of an `Order`.
# Simulate an Order
Source: https://docs.tread.ai/api-reference/orders/simulate-an-order
/api-reference/openapi.json post /v1/companies/{company-id}/orders/simulate_order
Simulate an `Order` being dispatched and completed
# Start an Order
Source: https://docs.tread.ai/api-reference/orders/start-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/start
Start an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Start an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/start-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/start
Start an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Typeahead search on Materials that belong to Order's Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-materials-that-belong-to-orders-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/materials/typeahead
Typeahead search against the `name` property for `Materials` that belong to the `Order`'s `Company`
# Typeahead search on Materials that belong to Order's Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-materials-that-belong-to-orders-company-1
/api-reference/openapi.json get /v1/orders/{order-id}/materials/typeahead
Typeahead search against the `name` property for `Materials` that belong to the `Order`'s `Company`
# Typeahead search on Orders by Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-orders-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/typeahead
Typeahead search against the `order_id` property for `Orders` visible to the currently authenticated `Company`.
# Typeahead search on Orders' Dispatch Number by Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-orders-dispatch-number-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch_numbers/typeahead
Typeahead search against the `dispatch_number` property on `Orders` by current `Company`.
# Update an Order
Source: https://docs.tread.ai/api-reference/orders/update-an-order
/api-reference/openapi.json patch /v1/orders/{id}
Update `Order` by ID
This endpoint requires the `edit_order` permission _or_ the `edit_order_pre_accept` permission, which only allows editing if the Order is in `created`, `pending_request` or `rejected` state
# Update an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/update-an-order-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/orders/{id}
Update `Order` by ID
This endpoint requires the `edit_order` permission _or_ the `edit_order_pre_accept` permission, which only allows editing if the Order is in `created`, `pending_request` or `rejected` state
# Weather Hold an Order
Source: https://docs.tread.ai/api-reference/orders/weather-hold-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/weather_hold
Weather Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Weather Hold an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/weather-hold-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/weather_hold
Weather Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Activate a Site
Source: https://docs.tread.ai/api-reference/sites/activate-a-site
/api-reference/openapi.json put /v1/sites/{site-id}/activate
Activate a `Site` by ID
This endpoint requires the `edit_site` permission
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given order.
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order-1
/api-reference/openapi.json put /v1/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given order.
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order-2
/api-reference/openapi.json put /v1/projects/{project-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Project`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given project.
# Assign Contacts for a Site
Source: https://docs.tread.ai/api-reference/sites/assign-contacts-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/contacts/bulk_assign
Assigns `Contacts` for a `Site`
# Bulk assign Additional Geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/bulk-assign-additional-geofences-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/additional_geofences/bulk_assign
Bulk assign `Additional Geofences` for a `Site` by `ID`
This will rewrite all `Additional Geofences` for the `Site` with payload data.
# Create a new Site
Source: https://docs.tread.ai/api-reference/sites/create-a-new-site
/api-reference/openapi.json post /v1/sites
Create a new `Site`
# Create an Additional Geofence for a Site
Source: https://docs.tread.ai/api-reference/sites/create-an-additional-geofence-for-a-site
/api-reference/openapi.json post /v1/sites/{site-id}/additional_geofences
Create an `Additional Geofence` for a `Site`
# Deactivate a Site
Source: https://docs.tread.ai/api-reference/sites/deactivate-a-site
/api-reference/openapi.json put /v1/sites/{site-id}/deactivate
Deactivate a `Site` by ID
This endpoint requires the `edit_site` permission
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order
/api-reference/openapi.json delete /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order-1
/api-reference/openapi.json delete /v1/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order-2
/api-reference/openapi.json delete /v1/projects/{project-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a Site by ID
Source: https://docs.tread.ai/api-reference/sites/delete-a-site-by-id
/api-reference/openapi.json delete /v1/sites/{id}
Delete a `Site` by ID
This endpoint requires the `delete_site` permission
# Retrieve a single Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-a-single-site
/api-reference/openapi.json get /v1/sites/{id}
Retrieve a `Site` by ID
# Retrieve a single Site for a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-a-single-site-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{id}
Retrieve a `Site` by ID for a `Company`
# Retrieve additional geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-additional-geofences-for-a-site
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/additional_geofences
Retrieve additional `geofences` for a `Site` by `site_id`
# Retrieve additional geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-additional-geofences-for-a-site-1
/api-reference/openapi.json get /v1/sites/{site-id}/additional_geofences
Retrieve additional `geofences` for a `Site` by `site_id`
# Retrieve an Additional Geofence by ID
Source: https://docs.tread.ai/api-reference/sites/retrieve-an-additional-geofence-by-id
/api-reference/openapi.json get /v1/sites/{site-id}/additional_geofences/{id}
Retrieve an `Geofence` for a `Site` by `ID`
# Retrieve Contacts for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-contacts-for-a-site
/api-reference/openapi.json get /v1/sites/{site-id}/contacts
Retrieve all `Contacts` visible to your `Company` for a `Site`
# Retrieve Contacts for a Site within a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-contacts-for-a-site-within-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/contacts
Retrieve all `Contacts` for a `Site` within a specific `Company`. This endpoint includes explicit company-level authorization to ensure the site belongs to the specified company.
# Retrieve default sites for a project, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-a-project-given-a-waypoint-type
/api-reference/openapi.json get /v1/projects/{project-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Project`, given a particular 'WaypointType'.
# Retrieve default sites for an order, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-an-order-given-a-waypoint-type
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Order`, given a particular 'WaypointType'.
# Retrieve default sites for an order, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-an-order-given-a-waypoint-type-1
/api-reference/openapi.json get /v1/orders/{order-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Order`, given a particular 'WaypointType'.
# Retrieve SiteEquipmentStats for given Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-siteequipmentstats-for-given-site
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/stats
Retrieve `SiteEquipmentStats` for given `Site` by `ID`.
# Retrieve Sites that belong to a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-sites-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites
Retrieve `Sites` for a `Company`.
# Retrieve Sites that belong to the current Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-sites-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/sites
Retrieve `Site` for a `Company`.
# Typeahead search on Sites that belong to Order's Company
Source: https://docs.tread.ai/api-reference/sites/typeahead-search-on-sites-that-belong-to-orders-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` that belong to the `Order`'s `Company`
# Typeahead search on Sites that belong to Order's Company
Source: https://docs.tread.ai/api-reference/sites/typeahead-search-on-sites-that-belong-to-orders-company-1
/api-reference/openapi.json get /v1/orders/{order-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` that belong to the `Order`'s `Company`
# Update a Site
Source: https://docs.tread.ai/api-reference/sites/update-a-site
/api-reference/openapi.json patch /v1/sites/{id}
Update `Site` by ID
This endpoint required the 'edit_site' permission
# Update an Additional Geofence for a Site
Source: https://docs.tread.ai/api-reference/sites/update-an-additional-geofence-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/additional_geofences/{id}
Update an `Additional Geofence` for a `Site` by `ID`
# Create a Ticket
Source: https://docs.tread.ai/api-reference/tickets/create-a-ticket
/api-reference/openapi.json post /v1/tickets
Create a `Ticket`
This endpoint requires the `create_ticket` permission
# Delete a Ticket
Source: https://docs.tread.ai/api-reference/tickets/delete-a-ticket
/api-reference/openapi.json delete /v1/tickets/{id}
Delete a `Ticket` by ID
This endpoint requires the `delete_ticket` permission
# Retrieve a single Ticket
Source: https://docs.tread.ai/api-reference/tickets/retrieve-a-single-ticket
/api-reference/openapi.json get /v1/tickets/{id}
Retrieve `Ticket` by ID
# Retrieve Ticket Rollup Summary for an Order
Source: https://docs.tread.ai/api-reference/tickets/retrieve-ticket-rollup-summary-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/tickets/rollup_summary
Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
# Retrieve Ticket Rollup Summary for an Order for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-ticket-rollup-summary-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/tickets/rollup_summary
Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
# Retrieve Tickets for a Job
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/tickets
Retrive `Tickets` for a `Job`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets for a Settlement for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/tickets
Retrieve `Tickets` for a `Settlement`.
# Retrieve Tickets for an Order
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/tickets
Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets for an Order for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/tickets
Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets that belong to a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/tickets
Retrieve `Tickets` that belong to a `Company` by `ID`
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets that belong to the current Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/tickets
Retrieve `Tickets` for a `Company`
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve the current driver_state
Source: https://docs.tread.ai/api-reference/driverstateevent/retrieve-the-current-driver_state
/api-reference/openapi.json get /v1/users/me/driver_state
Retrieve the current driver_state of the `User` if user is a `driver`.
This endpoint requires the `Driver` role
# Retrieve the time driver logged today
Source: https://docs.tread.ai/api-reference/driverstateevent/retrieve-the-time-driver-logged-today
/api-reference/openapi.json get /v1/users/me/driver_state/time_logged
Retrieve the time in minutes the `driver` was on_duty today.
This endpoint requires the `Driver` role
# Update Driver State to break
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-break
/api-reference/openapi.json put /v1/users/me/driver_state/break
This endpoint will update the status of a `driver` to `break`.
This endpoint requires the `Driver` role
# Update Driver State to off_duty
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-off_duty
/api-reference/openapi.json put /v1/users/me/driver_state/off_duty
This endpoint will update the status of a `driver` to `off_duty`.
This endpoint requires the `Driver` role
# Update Driver State to on_duty
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-on_duty
/api-reference/openapi.json put /v1/users/me/driver_state/on_duty
This endpoint will update the status of a `driver` to `on_duty`.
This endpoint requires the `Driver` role
# Create a new UserDeviceToken
Source: https://docs.tread.ai/api-reference/integrations/create-a-new-userdevicetoken
/api-reference/openapi.json post /v1/users/me/device_tokens
This endpoint stores the firebase user token on the backend to generate notifications.
# Create a JobAssignment for a Job
Source: https://docs.tread.ai/api-reference/jobassignments/create-a-jobassignment-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/job_assignments
Create a `JobAssignment` for a `Job`.
This endpoint requires the `create_job_assignment` permission.
# Retrieve a single JobAssignment
Source: https://docs.tread.ai/api-reference/jobassignments/retrieve-a-single-jobassignment
/api-reference/openapi.json get /v1/job_assignments/{id}
Retrieve a single `JobAssignment`.
# Retrieve JobAssignments for a Job
Source: https://docs.tread.ai/api-reference/jobassignments/retrieve-jobassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/job_assignments
Retrieve all `JobAssignments` visible to your `Company` for a `Job`
# Update a JobAssignment
Source: https://docs.tread.ai/api-reference/jobassignments/update-a-jobassignment
/api-reference/openapi.json patch /v1/job_assignments/{id}
Update a `Job Assignment` by ID
This endpoint requires the `edit_job_assignment` permission
# Retrieve LineItemTypes
Source: https://docs.tread.ai/api-reference/lineitemtype/retrieve-lineitemtypes
/api-reference/openapi.json get /v1/line_item_types
Retrieve all `LineItemTypes`. LineItemTypes define the types of line items that can appear on settlements (e.g., FreightRateLineItem, MaterialRateLineItem).
# Retrieve all LoadCycles for a Job
Source: https://docs.tread.ai/api-reference/loadcycles/retrieve-all-loadcycles-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/loads/cycles
Retrieve all `LoadCycles` for a `Job`.
A `LoadCycle` is an edge between two consecutive `Loads` that have reached the `arrived_pickup` state on a given `Job`.
The response includes all calculated `LoadCycles` as well as the average time (in minutes).
# Update the LoadSummary for a Load
Source: https://docs.tread.ai/api-reference/loadsummaries/update-the-loadsummary-for-a-load
/api-reference/openapi.json patch /v1/loads/{load-id}/summary
Update the `LoadSummary` for a `Load`.
This endpoint requires the `edit_load_summaries` and `edit_job` `IamPermission`.
# Activate a Project
Source: https://docs.tread.ai/api-reference/projects/activate-a-project
/api-reference/openapi.json put /v1/projects/{project-id}/activate
Activate a `Project`
This endpoint requires the `edit_project` permission
# Create a Project in the current Company
Source: https://docs.tread.ai/api-reference/projects/create-a-project-in-the-current-company
/api-reference/openapi.json post /v1/projects
Create a new `Project`
This endpoint requires the `create_project` permission
# Deactivate a Project
Source: https://docs.tread.ai/api-reference/projects/deactivate-a-project
/api-reference/openapi.json put /v1/projects/{project-id}/deactivate
Deactivate a `Project`
This endpoint requires the `edit_project` permission
# Delete Project
Source: https://docs.tread.ai/api-reference/projects/delete-project
/api-reference/openapi.json delete /v1/projects/{id}
Delete `Project` by ID
This endpoint requires the `delete_project` permission
# Retrieve Project
Source: https://docs.tread.ai/api-reference/projects/retrieve-project
/api-reference/openapi.json get /v1/projects/{id}
Retrieve `Project` by ID
# Retrieve Projects that belong to a Company
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/projects
Retrieve `Projects` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `po_job_number`
* `project_id`
* `company.legal_name`
* `account.name`
* `external_id`
Filter usage:
* to filter a single state: `filter[states][]=active`
* to filter multiple states: `filter[states][]=inactive&filter[states][]=active`
# Retrieve Projects that belong to the current Company
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/projects
Retrieve `Projects` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `po_job_number`
* `project_id`
* `company.legal_name`
* `account.name`
* `external_id`
# Retrieve Projects where the current User is a Salesperson
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-where-the-current-user-is-a-salesperson
/api-reference/openapi.json get /v1/companies/{company-id}/projects/salesperson
Retrieve `Projects` where the current `User` is a `Salesperson`
# Update Project
Source: https://docs.tread.ai/api-reference/projects/update-project
/api-reference/openapi.json patch /v1/projects/{id}
Update `Project` by ID
This endpoint requires the `edit_project` permission
# Copy a Rate
Source: https://docs.tread.ai/api-reference/rates/copy-a-rate
/api-reference/openapi.json post /v1/rates/{rate-id}/copy
Copy a `Rate` to another `Account` or `Driver`
This endpoint requires the `create_rate` permission
Usage:
- provide either `account_id` or `driver_id`
# Create a Rate
Source: https://docs.tread.ai/api-reference/rates/create-a-rate
/api-reference/openapi.json post /v1/rates
Create a `Rate`
This endpoint requires the `create_rate` permission
# Delete a Rate
Source: https://docs.tread.ai/api-reference/rates/delete-a-rate
/api-reference/openapi.json delete /v1/rates/{id}
Delete a `Rate` by ID
This endpoint requires the `delete_rate` permission
# Retrieve a single Rate
Source: https://docs.tread.ai/api-reference/rates/retrieve-a-single-rate
/api-reference/openapi.json get /v1/rates/{id}
Retrieve `Rate` by ID
# Retrieve Rates that belong to a Company
Source: https://docs.tread.ai/api-reference/rates/retrieve-rates-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/rates
Retrieve `Rates` that belong to a `Company`
# Retrieve Rates that belong to the current Company
Source: https://docs.tread.ai/api-reference/rates/retrieve-rates-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/rates
Retrieve `Rates` for a `Company`
# Update a Rate
Source: https://docs.tread.ai/api-reference/rates/update-a-rate
/api-reference/openapi.json patch /v1/rates/{id}
Update a `Rate` by ID
This endpoint requires the `edit_rate` permission
# Batch update ResourceUsageLogs for a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/batch-update-resourceusagelogs-for-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{driver-day-id}/resource_usage_logs
Batch update `ResourceUsageLogs` for a `DriverDay`
This endpoint requires:
- `create_resource_usage_log` `IamPermission` for create
- `edit_resource_usage_log` `IamPermission` for update
- `delete_resource_usage_log` `IamPermission` for delete
# Batch update ResourceUsageLogs for a Job
Source: https://docs.tread.ai/api-reference/resourceusagelogs/batch-update-resourceusagelogs-for-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/resource_usage_logs
Batch update `ResourceUsageLogs` for a `Job`
This endpoint requires:
- `create_resource_usage_log` `IamPermission` for create
- `edit_resource_usage_log` `IamPermission` for update
- `delete_resource_usage_log` `IamPermission` for delete
# Create a ResourceUsageLog for a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/create-a-resourceusagelog-for-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/resource_usage_logs
Create a `ResourceUsageLog` for a `DriverDay`.
This endpoint requires the `create_resource_usage_log` `IamPermission`.
# Delete a ResourceUsageLog by ID
Source: https://docs.tread.ai/api-reference/resourceusagelogs/delete-a-resourceusagelog-by-id
/api-reference/openapi.json delete /v1/resource_usage_logs/{id}
Deletes a `ResourceUsageLog` by `ID`
This endpoint requires the `delete_resource_usage_log` `IamPermission`.
# Retrieve ResourceUsageLogs that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `DriverDay`
# Retrieve ResourceUsageLogs that belong to a Job
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `Job`
# Retrieve ResourceUsageLogs that belong to a Load
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `Load`
# Update a ResourceUsageLog
Source: https://docs.tread.ai/api-reference/resourceusagelogs/update-a-resourceusagelog
/api-reference/openapi.json patch /v1/resource_usage_logs/{id}
Update a `ResourceUsageLog`
This endpoint requires the `edit_resource_usage_log` `IamPermission`.
# Create a new ServiceClass.
Source: https://docs.tread.ai/api-reference/serviceclass/create-a-new-serviceclass
/api-reference/openapi.json post /v1/service_classes
Create a new `ServiceClass`
This endpoint requires the `create_service_class` permission
# Create a ServiceClass for a Company.
Source: https://docs.tread.ai/api-reference/serviceclass/create-a-serviceclass-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/service_classes
Create a `ServiceClass` for a `Company`
This endpoint requires the `create_service_class` permission
# Delete a ServiceClass
Source: https://docs.tread.ai/api-reference/serviceclass/delete-a-serviceclass
/api-reference/openapi.json delete /v1/service_classes/{id}
Delete a `ServiceClass` by ID
This endpoint requires the `delete_service_class` permission
# Retrieve a single ServiceClass.
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-a-single-serviceclass
/api-reference/openapi.json get /v1/service_classes/{id}
Retrieve a single `ServiceClass` by ID
# Retrieve Service Classes that belong to a Company
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-service-classes-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/service_classes
Retrieve `ServiceClass` for a `Company`.
# Retrieve ServiceClasses that belong to the current Company
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-serviceclasses-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/service_classes
Retrieve `ServiceClass`s that belong to the current `Company`.
# Update a ServiceClass
Source: https://docs.tread.ai/api-reference/serviceclass/update-a-serviceclass
/api-reference/openapi.json patch /v1/service_classes/{id}
Update `ServiceClas` by ID
This endpoint requires the `edit_service_class` permission
# Retrieve Services that belong to a Company
Source: https://docs.tread.ai/api-reference/services/retrieve-services-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/services
Retrieve `Services` for a `Company`
# Retrieve Services that belong to the current Company
Source: https://docs.tread.ai/api-reference/services/retrieve-services-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/services
Retrieve `Services` visible to a `Company`
# Approve a Settlement
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/approve
Deprecated in favor of "Approve a `Settlement` by ID as a `Company`".
Approve a `Settlement` by ID
# Approve a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/approve
Approve a `Settlement` by ID as a `Company`
# Approve a Settlement as the Customer
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement-as-the-customer
/api-reference/openapi.json put /v1/settlements/{settlement-id}/customer_approve
Approve a `Settlement` as the `Customer` by ID
# Bulk Create Settlements
Source: https://docs.tread.ai/api-reference/settlements/bulk-create-settlements
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/bulk_create
Bulk Create `Settlements` for `Customers`, `Vendors` and `Drivers`.
# Create a FileAttachment on a Settlement
Source: https://docs.tread.ai/api-reference/settlements/create-a-fileattachment-on-a-settlement
/api-reference/openapi.json post /v1/settlements/{settlement-id}/file_attachments
Create a `FileAttachment` related to a `Settlement`. Requires permission to create attachment on `Project`—`create_settlement_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a Settlement
Source: https://docs.tread.ai/api-reference/settlements/create-a-settlement
/api-reference/openapi.json post /v1/settlements
Create a new `Settlement`
# Create a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/create-a-settlement-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/settlements
Create a `Settlement` from approved `Invoices` for the specified company
# Email a Settlement
Source: https://docs.tread.ai/api-reference/settlements/email-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/email_settlement
Email a `Settlement`
This requires `edit_settlement` permission.
**Deprecated:** Use the company-scoped endpoint `/v1/companies/{company-id}/settlements/{settlement-id}/email_settlement` instead.
# Email a Settlement (Company-scoped)
Source: https://docs.tread.ai/api-reference/settlements/email-a-settlement-company-scoped
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/email_settlement
Email a `Settlement` using company-scoped endpoint
This requires `edit_settlement` permission.
This endpoint allows parent companies to email settlements for their child companies.
# Export Settlement to Agave
Source: https://docs.tread.ai/api-reference/settlements/export-settlement-to-agave
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/export
Export a Settlement to Agave. The export is performed asynchronously.
# Generate new Settlement for Rebill
Source: https://docs.tread.ai/api-reference/settlements/generate-new-settlement-for-rebill
/api-reference/openapi.json post /v1/settlements/{settlement-id}/rebill
Generate new `Settlement` for Rebill
# Get Invoices for a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/get-invoices-for-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/invoices
Get `Invoices` for a `Settlement` for a `Company`
# Get SettlementEmailDeliveries for a Settlement
Source: https://docs.tread.ai/api-reference/settlements/get-settlementemaildeliveries-for-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/settlement_email_deliveries
Get `SettlementEmailDeliveries` for a `Settlement`
# Get SettlementEmailDeliveries for a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/get-settlementemaildeliveries-for-a-settlement-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/settlement_email_deliveries
Get `SettlementEmailDeliveries` for a `Settlement` as a `Company`
# Pay a Settlement
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/pay
Pay a `Settlement` by ID
# Pay a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/pay
Pay a `Settlement` by ID as a `Company`
# Pay a Settlement as the Customer
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-the-customer
/api-reference/openapi.json put /v1/settlements/{settlement-id}/customer_pay
Pay a `Settlement` as the `Customer` by ID
# Pay a Settlement as the Customer for a Company
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/customer_pay
Pay a `Settlement` as the `Customer` by ID for a `Company`
# Rebill a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/rebill-a-settlement-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/rebill
Create a new `Settlement` from a voided `Settlement` for a `Company`
# Rebill Settlement's Invoices Rates
Source: https://docs.tread.ai/api-reference/settlements/rebill-settlements-invoices-rates
/api-reference/openapi.json patch /v1/settlements/{settlement-id}/invoices/rebill_rates
Rebill `Settlement`'s `Invoices` `Rates`
# Retrieve a Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-a-settlement
/api-reference/openapi.json get /v1/settlements/{id}
Retrieve a `Settlement` by ID
# Retrieve a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{id}
Retrieve a `Settlement` by ID for the specified company
# Retrieve all FileAttachments for a given Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-fileattachments-for-a-given-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/file_attachments
Retrieve all `FileAttachments` for a given `Settlement`
# Retrieve all SettlementLineItems that belongs to a Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-settlementlineitems-that-belongs-to-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/settlement_line_items
Retrieve all `SettlementLineItems` that belongs to a `Settlement`.
Notes:
- if the `Settlement`'s configuration has no grouping, then the array response would just contain a single grouped result without the `group` field and the `line_items` would be all the line items.
# Retrieve all SettlementLineItems that belongs to a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-settlementlineitems-that-belongs-to-a-settlement-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/settlement_line_items
Retrieve all `SettlementLineItems` that belongs to a `Settlement` as a `Company`.
Notes:
- if the `Settlement`'s configuration has no grouping, then the array response would just contain a single grouped result without the `group` field and the `line_items` would be all the line items.
# Retrieve payable Settlements visible to a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-payable-settlements-visible-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/payables
Retrieve payable `Settlements` visible to a `Company`
# Retrieve payable Settlements visible to the current Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-payable-settlements-visible-to-the-current-company
/api-reference/openapi.json get /v1/settlements/payables
Retrieve payable `Settlements` visible to the current `Company`
# Retrieve receivable Settlements visible to a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-receivable-settlements-visible-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/receivables
Retrieve receivable `Settlements` visible to a `Company`
# Retrieve receivable Settlements visible to the current Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-receivable-settlements-visible-to-the-current-company
/api-reference/openapi.json get /v1/settlements/receivables
Retrieve receivable `Settlements` visible to the current `Company`
# Send a Settlement
Source: https://docs.tread.ai/api-reference/settlements/send-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/send_settlement
Deprecated in favor of "Send a `Settlement` by ID as a `Company`".
Send a `Settlement` by ID
# Send a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/send-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/send_settlement
Send a `Settlement` by ID as a `Company`
# Unapprove a Settlement
Source: https://docs.tread.ai/api-reference/settlements/unapprove-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/unapprove
Deprecated in favor of "Unapprove a `Settlement` by ID as a `Company`".
Unapprove a `Settlement` by ID
# Unapprove a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/unapprove-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/unapprove
Unapprove a `Settlement` by ID as a `Company`
# Undo pay on a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/undo-pay-on-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/undo_pay
Undo pay on a `Settlement` by ID as a `Company`
# Update a Settlement
Source: https://docs.tread.ai/api-reference/settlements/update-a-settlement
/api-reference/openapi.json patch /v1/settlements/{id}
Update a `Settlement` by ID
# Void a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/void-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/void
Void a `Settlement` by ID as a `Company`
# Void a Settlement by ID
Source: https://docs.tread.ai/api-reference/settlements/void-a-settlement-by-id
/api-reference/openapi.json put /v1/settlements/{settlement-id}/void
Void a `Settlement` by ID
# Create a SiteRateSchedule for a Project
Source: https://docs.tread.ai/api-reference/siterateschedules/create-a-siterateschedule-for-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/site_rate_schedules
Create a `SiteRateSchedule` for a `Project`
# Delete SiteRateSchedule
Source: https://docs.tread.ai/api-reference/siterateschedules/delete-siterateschedule
/api-reference/openapi.json delete /v1/site_rate_schedules/{id}
Delete `SiteRateSchedule` by ID
# Retrieve SiteRateSchedules for a Project
Source: https://docs.tread.ai/api-reference/siterateschedules/retrieve-siterateschedules-for-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/site_rate_schedules
Retrieve `SiteRateSchedules` for a `Project`
# Update SiteRateSchedule
Source: https://docs.tread.ai/api-reference/siterateschedules/update-siterateschedule
/api-reference/openapi.json patch /v1/site_rate_schedules/{id}
Update `SiteRateSchedule` by ID
# Retrieve all Remote Vehicles for a Telematics Fleet visible to the current Company
Source: https://docs.tread.ai/api-reference/telematics/retrieve-all-remote-vehicles-for-a-telematics-fleet-visible-to-the-current-company
/api-reference/openapi.json get /v1/telematics/fleets/{fleet-id}/remote_vehicles
Retrieve all `Remote Vehicles` for a `Telematics Fleet` visible to the current Company
# Retrieve all Telematics Fleets visible to the current Company
Source: https://docs.tread.ai/api-reference/telematics/retrieve-all-telematics-fleets-visible-to-the-current-company
/api-reference/openapi.json get /v1/telematics/fleets
Retrieve `TelematicsFleets` visible to the currently authenticated `Company`.
# Update a Telematics Remote Vehicle
Source: https://docs.tread.ai/api-reference/telematics/update-a-telematics-remote-vehicle
/api-reference/openapi.json patch /v1/telematics/remote_vehicles/{id}
Update a `Telematics Remote Vehicle` by `id`.
This endpoint requires the `edit_telematics_remote_vehicles` permission.
# Approve a Ticket
Source: https://docs.tread.ai/api-reference/tickets/approve-a-ticket
/api-reference/openapi.json put /v1/tickets/{ticket-id}/approve
Approve a `Ticket` by ID
This endpoint requires the `edit_ticket` permission.
# Delete the Image that belongs to a Ticket
Source: https://docs.tread.ai/api-reference/tickets/delete-the-image-that-belongs-to-a-ticket
/api-reference/openapi.json delete /v1/tickets/{ticket-id}/image
Delete the `image` for a `Ticket`.
This endpoint requires the `delete_ticket` `IamPermission`
# Retrieve a single Ticket's AI metadata
Source: https://docs.tread.ai/api-reference/tickets/retrieve-a-single-tickets-ai-metadata
/api-reference/openapi.json get /v1/tickets/{ticket-id}/ai_metadata
Retrieve `Ticket`'s AI metadata by ID
# Update a Ticket
Source: https://docs.tread.ai/api-reference/tickets/update-a-ticket
/api-reference/openapi.json patch /v1/tickets/{id}
Update a `Ticket` by ID
This endpoint requires the `edit_ticket` permission
# Update the Image that belongs to a Ticket
Source: https://docs.tread.ai/api-reference/tickets/update-the-image-that-belongs-to-a-ticket
/api-reference/openapi.json post /v1/tickets/{ticket-id}/image
Add or replace the `image` for a `Ticket`.
This endpoint requires the `edit_ticket` `IamPermission`
The following restrictions apply:
* `image` must be one of the following image types:`jpeg`, `jpg`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `image` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `image` must be a file.
# Void a Ticket
Source: https://docs.tread.ai/api-reference/tickets/void-a-ticket
/api-reference/openapi.json put /v1/tickets/{ticket-id}/void
Void a `Ticket` by ID.
This endpoint requires the `edit_ticket` permission.
# Retrieve a single TwilioIntegration
Source: https://docs.tread.ai/api-reference/twiliointegrations/retrieve-a-single-twiliointegration
/api-reference/openapi.json get /v1/companies/{company-id}/twilio_integrations/{id}
Retrieve a single `TwilioIntegration` by ID
# Retrieve TwilioIntegrations that belong to a Company
Source: https://docs.tread.ai/api-reference/twiliointegrations/retrieve-twiliointegrations-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/twilio_integrations
Retrieve `TwilioIntegration`s for a `Company`.
# Update UserDevicePermissions
Source: https://docs.tread.ai/api-reference/userdevicepermission/update-userdevicepermissions
/api-reference/openapi.json put /v1/users/me/user_device_permissions
This endpoint will be used by the mobile app to update the user's permissions given in the app.
# Bulk update Accounts
Source: https://docs.tread.ai/api-reference/accounts/bulk-update-accounts
/api-reference/openapi.json patch /v1/accounts/bulk_update
Perform select bulk updates to `Accounts`.
Requires the `edit_account` permission.
# Create a connected Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-connected-account
/api-reference/openapi.json post /v1/accounts/connected
Create a connected `Account` between two `Companies`.
This endpoint creates two complimentary connected `Accounts`:
* a "sender" `Account` owned by the `Company` specified by `sender_company_id` which has the provided `sender_account_types`
* a "receiver" `Account` owned by the `Company` specified by `receiver_company_id` which has the opposite `account_types`
The newly created "sender" `Account` is returned.
This endpoint requires the `platform_admin` `IamRole`.
# Create a connected Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-connected-account-1
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/connected
Create a connected `Account` between two `Companies` by use of a `tread_id`.
This endpoint creates two complimentary connected `Accounts`:
* a "sender" `Account` owned by the `Company` specified in the `company-id` path param which has the provided `account_types`.
* a "receiver" `Account` owned by the `Company` specified in the `tread_id` which has the opposite `account_types`
The newly created "sender" `Account` is returned.
This endpoint must be called by a principal authorized to act on behalf of the "sender" `Company`.
This endpoint requires the `connect_companies` `IamPermission`.
# Create a new Account
Source: https://docs.tread.ai/api-reference/accounts/create-a-new-account
/api-reference/openapi.json post /v1/accounts
Create a new `Account`
This endpoint requires the `create_account` permission
# Create Scheduled Time Off
Source: https://docs.tread.ai/api-reference/accounts/create-scheduled-time-off
/api-reference/openapi.json post /v1/accounts/{account-id}/scheduled_time_offs
Create a Scheduled Time Off for an `Account`
# Delete a Scheduled Time Off
Source: https://docs.tread.ai/api-reference/accounts/delete-a-scheduled-time-off
/api-reference/openapi.json delete /v1/accounts/{account-id}/scheduled_time_offs/{id}
Delete Scheduled Time Off for an `Account`
# Delete an Account
Source: https://docs.tread.ai/api-reference/accounts/delete-an-account
/api-reference/openapi.json delete /v1/accounts/{id}
Delete an `Account` by ID
This endpoint requires the `delete_account` permission
# Invite a Company to connect through an Account
Source: https://docs.tread.ai/api-reference/accounts/invite-a-company-to-connect-through-an-account
/api-reference/openapi.json post /v1/accounts/invite
Invite a `Company` which is not yet on the `Tread` platform to connect through an `Account`.
This will create:
* a new `Company` named `name` using `contact` data for `primary_contact ` and `billing_contact`
* a new `User` with information from `contact` that has the `Company Admin` `IamRole`
* a new `Account` owned by the currently authenticated `User`'s `Company` and connected to the newly created `Company`
Note that all fields in `contact` are required.
The following unique constraints must be met or a `422` will be returned:
* `name` must be globally unique to `Companies`
* `contact.email` and `contact.phone` must be globally unique to `Users`
If successful the newly created `Account` will be returned.
This endpoint requires the `create_account` `IamPermission`
# Invite a Company to connect through an Account for a Company
Source: https://docs.tread.ai/api-reference/accounts/invite-a-company-to-connect-through-an-account-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/invite
Invite a `Company` which is not yet on the `Tread` platform to connect through an `Account` for a `Company`.
This will create:
* a new `Company` named `name` using `contact` data for `primary_contact ` and `billing_contact`
* a new `User` with information from `contact` that has the `Company Admin` `IamRole`
* a new `Account` owned by the currently authenticated `User`'s `Company` and connected to the newly created `Company`
Note that all fields in `contact` are required.
The following unique constraints must be met or a `422` will be returned:
* `name` must be globally unique to `Companies`
* `contact.email` and `contact.phone` must be globally unique to `Users`
If successful the newly created `Account` will be returned.
This endpoint requires the `create_account` `IamPermission`
# Mark Schedule Available
Source: https://docs.tread.ai/api-reference/accounts/mark-schedule-available
/api-reference/openapi.json put /v1/accounts/{account-id}/scheduled_time_offs/available
Mark current `Account` as available and disable any `Scheduled Time Off`
# Mark Schedule Unavailable
Source: https://docs.tread.ai/api-reference/accounts/mark-schedule-unavailable
/api-reference/openapi.json put /v1/accounts/{account-id}/scheduled_time_offs/unavailable
Mark current `Account` as unavailable and create a new `Scheduled time off`
# Retrieve a single Account
Source: https://docs.tread.ai/api-reference/accounts/retrieve-a-single-account
/api-reference/openapi.json get /v1/accounts/{id}
Retrieve `Account` by ID
# Retrieve Accounts that belong to a Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-accounts-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts
Retrieve `Accounts` for a `Company`.
Filter usage:
* to filter a single state: `filter[account_types][]=customer`
* to filter multiple states: `filter[account_types][]=customer&filter[account_types][]=vendor`
# Retrieve all Accounts visible to the current Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-all-accounts-visible-to-the-current-company
/api-reference/openapi.json get /v1/accounts
Retrieve `Accounts` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
Filter usage:
* to filter a single state: `filter[account_types][]=customer`
* to filter multiple states: `filter[account_types][]=customer&filter[account_types][]=vendor`
# Retrieve all connected Accounts visible to the current Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-all-connected-accounts-visible-to-the-current-company
/api-reference/openapi.json get /v1/accounts/connected
Retrieve all connected `Accounts` visible to the currently authenticated `Company`.
# Retrieve connected Accounts that belong to a Company
Source: https://docs.tread.ai/api-reference/accounts/retrieve-connected-accounts-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/connected
Retrieve connected `Accounts` for a `Company`.
# Retrieve Scheduled Time Offs for an Account
Source: https://docs.tread.ai/api-reference/accounts/retrieve-scheduled-time-offs-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/scheduled_time_offs
Retrieve all active `ScheduledTimeOffs` visible to your `Company` for an `Account`
# Typeahead search on customer Accounts scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/accounts/typeahead-search-on-customer-accounts-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/customers/accounts/typeahead
`Typeahead` search on customer `Accounts` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on vendor Accounts scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/accounts/typeahead-search-on-vendor-accounts-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/vendors/accounts/typeahead
`Typeahead` search on vendor `Accounts` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update Account for a Managed Company
Source: https://docs.tread.ai/api-reference/accounts/update-account-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/accounts/{id}
Update `Account` by ID for a Managed Company
This endpoint requires the `edit_account` permission
# Update an Account
Source: https://docs.tread.ai/api-reference/accounts/update-an-account
/api-reference/openapi.json patch /v1/accounts/{id}
Update an `Account` by ID.
This endpoint requires the `edit_account` permission
# Health Check
Source: https://docs.tread.ai/api-reference/reflection/health-check
/api-reference/openapi.json get /health
`/health` is used by load balancers in AWS as well as in our Docker image.
# Retrieve Mobile Context
Source: https://docs.tread.ai/api-reference/reflection/retrieve-mobile-context
/api-reference/openapi.json get /v1/mobile_context
Retrieve the current Mobile Context
# Retrieve the current Version
Source: https://docs.tread.ai/api-reference/reflection/retrieve-the-current-version
/api-reference/openapi.json get /version
Retrieve the current `Version`
# Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/order-phases
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/phases
This returns all the `Phases` for an `Order`
# Retrieve Daily Ticket Data Export
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-daily-ticket-data-export
/api-reference/openapi.json get /v1/companies/{company-id}/data_export/tickets/day/{date}
Returns a daily export of `tickets` for given company. Please
note, this endpoint is only available to users authenticating
an `m2m_client`. This endpoint must be configured for customer
by Tread. The file_url is signed and will be valid for 1 hour
from time of api call.
# Retrieve Sites based on the current Dispatch results for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/dispatch
Returns `Sites`, but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Retrieve Sites based on the current Dispatch results for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-for-a-company-1
/api-reference/openapi.json get /v1/companies/{company-id}/sites/dispatch/typeahead
Returns `Sites` in a typeahead style but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on Accounts
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts
/api-reference/openapi.json get /v1/accounts/typeahead
Typeahead search against the `name` property for `Accounts` visible to the currently authenticated `Company`.
# Typeahead search on Accounts for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/typeahead
Typeahead search against the `name` property on `Accounts` for a `Company`.
# Typeahead search on Accounts for a Company with with Capacity Data
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-accounts-for-a-company-with-with-capacity-data
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/capacity/typeahead
Typeahead search against the `name` property on `Accounts` for a `Company`.
Unlike the standard typeahead, this endpoint includes additional fields with capacity data.
Additionally, this endpoint automatically filters to:
- Connnected Accoubts
- Vendor-type Accounts
- Accounts that are currently scheduled on
The `availability` filter can be set to true/false to only include Accounts that are scheduled on or off for the `date` specified. If no `date` is specified then the current day is used.
# Typeahead search on AddOns for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-addons-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons/typeahead
Typeahead search against the `name` property on `AddOn` for a `Company`
# Typeahead search on Children for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-children-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/children/typeahead
Typeahead search against the `legal_name` property on `Children` for a `Company`.
# Typeahead search on Companies
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-companies
/api-reference/openapi.json get /v1/companies/typeahead
Typeahead search against the `legal_name` property for `Companies` visible to the currently authenticated `Company`.
# Typeahead search on Departments by Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-departments-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/departments/typeahead
Typeahead search against the `name` property on `Departments` for a `Company`.
# Typeahead search on DriverDay Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-driverday-phases
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for a `DriverDay` visible to the currently authenticated `Company`.
This returns all the `Phases` across `Orders` for the `Jobs` that are in a `DriverDay`.
# Typeahead search on Drivers for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-drivers-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers/typeahead
Typeahead search against the `first_name` and `last_name` properties on `Drivers` for a managed company. This includes both drivers owned by the managed company and drivers shared with the managed company.
# Typeahead search on Equipment
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment
/api-reference/openapi.json get /v1/equipment/typeahead
Typeahead search against the `name` property for `Equipment` visible to the currently authenticated `Company`.
# Typeahead search on Equipment for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/typeahead
Typeahead search against the `name` property on `Equipment` for a `Company`.
# Typeahead search on Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipment-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/typeahead
Typeahead search against the `name` and `external_id` properties on `Equipment` for a managed company. This includes both equipment owned by the managed company and equipment shared with the managed company.
# Typeahead search on EquipmentType for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment_types/typeahead
Typeahead search against the `name` property on `EquipmentType` for a `Company`.
# Typeahead search on EquipmentType for a Managed Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment_types/typeahead
Typeahead search against the `name` property on `EquipmentType` for a managed company.
# Typeahead search on Material for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-material-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/materials/typeahead
Typeahead search against the `name` property on `Material` for a `Company`.
# Typeahead search on MaterialRates for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-materialrates-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_rates/typeahead
`search[site][query]` is a typeahead against the `MaterialRate`'s `Site`'s `name`
# Typeahead search on Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-order-phases
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Order` visible to a `Company`.
# Typeahead search on Projects for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/projects/typeahead
Typeahead search against the `name` or `external_id` property on `Projects` for a `Company`.
# Typeahead search on Rates for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-rates-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/rates/typeahead
Typeahead search on `Rates` for a `Company`
# Typeahead search on ServiceClasses for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-serviceclasses-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/service_classes/typeahead
Typeahead search against the `name` property on `ServiceClass` for a `Company`
# Typeahead search on Services for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-services-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/services/typeahead
Typeahead search against the `name` property on `Services` for a `Company`.
# Typeahead search on Sites for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-sites-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property on `Sites` for a `Company`.
# Typeahead search on Users for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-users-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/users/typeahead
Typeahead search against the `first_name` and `last_name` property on `Users` for a `Company`.
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Batch update AddOnCharges for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{driver-day-id}/add_on_charges
Batch update `AddOnCharges` for a `DriverDay`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/add_on_charges
Batch update `AddOnCharges` for an `Job`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-settlement
/api-reference/openapi.json patch /v1/settlements/{settlement-id}/add_on_charges
Batch update `AddOnCharges` for a `Settlement`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for a Settlement (Company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-a-settlement-company-scoped
/api-reference/openapi.json patch /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Batch update `AddOnCharges` for a `Settlement` using company-scoped endpoint.
This endpoint allows parent companies to manage add-on charges for settlements belonging to their child companies.
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Batch update AddOnCharges for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/addoncharges/batch-update-addoncharges-for-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Batch update `AddOnCharges` for an `Invoice` for a `Company`
This endpoint allows updating, creating, deleting `AddOnCharges` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If creating new records:
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
add_on_charges: [
{
"quantity": 20.25,
"rate": 12.5,
"add_on_rate_type": "RateForEach"
},
{
"percentage": 10,
"add_on_rate_type": "RatePercentOfTotal"
}
]
```
If deleting exisitng records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
add_on_charges: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
# Create an AddOnCharge for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/add_on_charges
Create an `AddOnCharge` for a `DriverDay`.
This endpoint is used to apply an `AddOnCharge` for a `DriverDay`.
# Create an AddOnCharge for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/add_on_charges
Create an `AddOnCharge` for a `Job`.
This endpoint is used to request an `AddOnCharge` for a `Job` that can be applied on a billing object.
# Create an AddOnCharge for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-settlement
/api-reference/openapi.json post /v1/settlements/{settlement-id}/add_on_charges
Create an `AddOnCharge` for a `Settlement`.
This endpoint is used to apply an `AddOnCharge` for an `Settlement`.
# Create an AddOnCharge for a Settlement (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-a-settlement-company-scoped
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Create an `AddOnCharge` for a `Settlement` within a specific company scope.
This endpoint is used to apply an `AddOnCharge` for a `Settlement`.
# Create an AddOnCharge for an Invoice (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/create-an-addoncharge-for-an-invoice-company-scoped
/api-reference/openapi.json post /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Create an `AddOnCharge` for an `Invoice` within a specific company scope.
This endpoint is used to apply an `AddOnCharge` for an `Invoice`.
# Delete an AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/delete-an-addoncharge
/api-reference/openapi.json delete /v1/add_on_charges/{id}
Delete an `AddOnCharge`
# Retrieve a single AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-a-single-addoncharge
/api-reference/openapi.json get /v1/add_on_charges/{id}
Retrieve a single `AddOnCharge` by ID
# Retrieve AddOnCharges for a DriverDay
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/add_on_charges
Retrieve `AddOnCharges` for a `DriverDay`.
This endpoint returns the applied `AddOnCharges` for a `DriverDay`.
# Retrieve AddOnCharges for a Job
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/add_on_charges
Retrieve `AddOnCharges` for a `Job`.
This endpoint returns the requested `AddOnCharges` for a `Job`.
# Retrieve AddOnCharges for a Settlement
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/add_on_charges
Retrieve `AddOnCharges` for a `Settlement`.
This endpoint returns the applied `AddOnCharges` for a `Settlement`.
# Retrieve AddOnCharges for a Settlement (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-a-settlement-company-scoped
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/add_on_charges
Retrieve `AddOnCharges` for a `Settlement` within a specific company context.
This endpoint returns the applied `AddOnCharges` for a `Settlement` and validates that the company_id is authorized for the current user.
# Retrieve AddOnCharges for an Invoice (company-scoped)
Source: https://docs.tread.ai/api-reference/addoncharges/retrieve-addoncharges-for-an-invoice-company-scoped
/api-reference/openapi.json get /v1/companies/{company-id}/invoices/{invoice-id}/add_on_charges
Retrieve `AddOnCharges` for an `Invoice` within a specific company context.
This endpoint returns the applied `AddOnCharges` for an `Invoice` and validates that the company_id is authorized for the current user.
# Update an AddOnCharge
Source: https://docs.tread.ai/api-reference/addoncharges/update-an-addoncharge
/api-reference/openapi.json patch /v1/add_on_charges/{id}
Update an `AddOnCharge`
# Create an AddOn
Source: https://docs.tread.ai/api-reference/addons/create-an-addon
/api-reference/openapi.json post /v1/add_ons
Create an `AddOn`
# Create an AddOn for a Company
Source: https://docs.tread.ai/api-reference/addons/create-an-addon-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/add_ons
Create an `AddOn` for a `Company`
# Delete AutoAddOn for a Customer Account
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-customer-account
/api-reference/openapi.json delete /v1/accounts/{account-id}/auto_add_ons/{auto-add-on-id}/customer_add_on
Delete `AutoAddOn` for a `Customer Account`
# Delete AutoAddOn for a Driver
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-driver
/api-reference/openapi.json delete /v1/drivers/{driver-id}/auto_add_ons/{id}
Delete `AutoAddOn` for a `Driver`
# Delete AutoAddOn for a Vendor Account
Source: https://docs.tread.ai/api-reference/addons/delete-autoaddon-for-a-vendor-account
/api-reference/openapi.json delete /v1/accounts/{account-id}/auto_add_ons/{auto-add-on-id}/vendor_add_on
Delete `AutoAddOn` for a `Vendor Account`
# Retrieve a single AddOn
Source: https://docs.tread.ai/api-reference/addons/retrieve-a-single-addon
/api-reference/openapi.json get /v1/add_ons/{id}
Retrieve `AddOn` by ID
# Retrieve AddOns that belong to a Company
Source: https://docs.tread.ai/api-reference/addons/retrieve-addons-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons
Retrieve `AddOns` that belong to a `Company`.
# Retrieve AddOns visible to the current Company
Source: https://docs.tread.ai/api-reference/addons/retrieve-addons-visible-to-the-current-company
/api-reference/openapi.json get /v1/add_ons
Retrieve `AddOns` visible to the current authenticated `Company`.
# Retrieve AutoAddOns for a Driver
Source: https://docs.tread.ai/api-reference/addons/retrieve-autoaddons-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/auto_add_ons
Retrieve `AutoAddOns` for a `Driver`
# Retrieve AutoAddOns for an Account
Source: https://docs.tread.ai/api-reference/addons/retrieve-autoaddons-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/auto_add_ons
Retrieve `AutoAddOns` for an `Account`
# Retrieve fuel surcharge rate for an AddOn
Source: https://docs.tread.ai/api-reference/addons/retrieve-fuel-surcharge-rate-for-an-addon
/api-reference/openapi.json get /v1/companies/{company-id}/add_ons/{id}/fuel_surcharge_rate
Retrieve fuel surcharge rate for a FuelSurcharge type AddOn for a given date. The AddOn must have `add_on_rate_type` of `FuelSurcharge` and have an associated `fuel_surcharge_schedule`.
# Update an AddOn
Source: https://docs.tread.ai/api-reference/addons/update-an-addon
/api-reference/openapi.json patch /v1/add_ons/{id}
Update an `AddOn` by ID.
# Create an Agave-LinkedAccount for the current Company
Source: https://docs.tread.ai/api-reference/agave/create-an-agave-linkedaccount-for-the-current-company
/api-reference/openapi.json post /v1/agave/linked_accounts
Create an `Agave-LinkedAccount` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Create an AgaveLinkToken for the current Company
Source: https://docs.tread.ai/api-reference/agave/create-an-agavelinktoken-for-the-current-company
/api-reference/openapi.json post /v1/agave/link_tokens
Create an `AgaveLinkToken` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Delete an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/delete-an-agave-linkedaccount
/api-reference/openapi.json delete /v1/agave/linked_accounts/{id}
Delete an `Agave-LinkedAccount` by id.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Enqueue data import from an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/enqueue-data-import-from-an-agave-linkedaccount
/api-reference/openapi.json put /v1/agave/linked_accounts/{linked-account-id}/import
Enqueue data import for an `Agave-LinkedAccount`
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Customers for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-customers-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/customers
Retrieve `Agave-Customers` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Items for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-items-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items
Retrieve `Agave-Items` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-LedgerAccounts for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-ledgeraccounts-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/ledger_accounts
Retrieve `Agave-LedgerAccounts` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-LinkedAccounts for the current Company
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-linkedaccounts-for-the-current-company
/api-reference/openapi.json get /v1/agave/linked_accounts
Retrieve `Agave-LinkedAccounts` for the current `Company`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Retrieve Agave-Vendors for an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/retrieve-agave-vendors-for-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/vendors
Retrieve `Agave-Vendors` for an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on AddOns scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/typeahead-search-on-addons-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items/add_ons/typeahead
`Typeahead` search on `AddOns` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Typeahead search on Services scoped to an Agave-LinkedAccount
Source: https://docs.tread.ai/api-reference/agave/typeahead-search-on-services-scoped-to-an-agave-linkedaccount
/api-reference/openapi.json get /v1/agave/linked_accounts/{linked-account-id}/items/services/typeahead
`Typeahead` search on `Services` scoped to an `Agave-LinkedAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Customer
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-customer
/api-reference/openapi.json patch /v1/agave/customers/{id}
Update an `Agave-Customer`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Item
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-item
/api-reference/openapi.json patch /v1/agave/items/{id}
Update an `Agave-Item`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-LedgerAccount
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-ledgeraccount
/api-reference/openapi.json patch /v1/agave/ledger_accounts/{id}
Update an `Agave-LedgerAccount`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Update an Agave-Vendor
Source: https://docs.tread.ai/api-reference/agave/update-an-agave-vendor
/api-reference/openapi.json patch /v1/agave/vendors/{id}
Update an `Agave-Vendor`.
This endpoint requires the `manage_accounting_integration` `IamPermission`.
# Delete an auth token
Source: https://docs.tread.ai/api-reference/authentication/delete-an-auth-token
/api-reference/openapi.json delete /v1/auth/login
This endpoints revokes the `session_jwt` passed in the Authorization header.
# Forgot Password
Source: https://docs.tread.ai/api-reference/authentication/forgot-password
/api-reference/openapi.json post /v1/auth/forgot_password
This endpoint accepts an `email` of the `User` which will be sent a reset password link from Stytch.
# Generate an auth token
Source: https://docs.tread.ai/api-reference/authentication/generate-an-auth-token
/api-reference/openapi.json post /v1/auth/login
This endpoint takes an `email` and `password`, and if a `User` exists with the given data it returns a `session_jwt` for usage with the API. This `session_jwt` should be added to the headers of further requests like so:
```
Authorization: Bearer
```
# Login with a magic link token
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-magic-link-token
/api-reference/openapi.json post /v1/auth/magic_link/login
Login with a magic link token.
# Login with a one-time password received via SMS
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-one-time-password-received-via-sms
/api-reference/openapi.json post /v1/auth/otp_sms/login
Login with a one-time password received via SMS.
# Login with a sso token
Source: https://docs.tread.ai/api-reference/authentication/login-with-a-sso-token
/api-reference/openapi.json post /v1/auth/sso/login
Login with a sso token.
# Reset Password
Source: https://docs.tread.ai/api-reference/authentication/reset-password
/api-reference/openapi.json post /v1/auth/reset_password
This endpoint accepts a `password_reset_token`, which comes from the reset password link from Stytch, and also accepts a `password` which will be set as the new password. This endpoint returns a valid `session_jwt` for the `User`.
# Retrieve a list of AuthMethods for a given email
Source: https://docs.tread.ai/api-reference/authentication/retrieve-a-list-of-authmethods-for-a-given-email
/api-reference/openapi.json post /v1/auth_methods
Retrive a list of `AuthMethods` for a given `email`
# Retrieve a list of SSOConnections for a given email
Source: https://docs.tread.ai/api-reference/authentication/retrieve-a-list-of-ssoconnections-for-a-given-email
/api-reference/openapi.json post /v1/sso_connections
Retrive a list of `SSOConnections` for a given `email`
# Send a magic link email
Source: https://docs.tread.ai/api-reference/authentication/send-a-magic-link-email
/api-reference/openapi.json post /v1/auth/magic_link
Send a magic link email
# Send a one-time password via SMS
Source: https://docs.tread.ai/api-reference/authentication/send-a-one-time-password-via-sms
/api-reference/openapi.json post /v1/auth/otp_sms
Send a one-time password via SMS.
# User sign up
Source: https://docs.tread.ai/api-reference/authentication/user-sign-up
/api-reference/openapi.json post /v1/auth/signup
This endpoint takes a `password` and a `magic_links_token` from the invite email in order to successfully register the `User` in Stytch. This endpoint returns a valid `session_jwt` for the `User`.
# Create AutoAddOnAssignment for a Driver
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-driver
/api-reference/openapi.json post /v1/drivers/{driver-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Driver`
# Create AutoAddOnAssignment for a Job
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Job`
# Create AutoAddOnAssignment for a JobAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-jobassignment
/api-reference/openapi.json post /v1/job_assignments/{job-assignment-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `JobAssignment`
# Create AutoAddOnAssignment for a Project
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Project`
# Create AutoAddOnAssignment for a Rate
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-a-rate
/api-reference/openapi.json post /v1/rates/{rate-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for a `Rate`
# Create AutoAddOnAssignment for an Order
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Order`
# Create AutoAddOnAssignment for an Order for a Company
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignment-for-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Order`
# Create AutoAddOnAssignments for a SiteRateSchedule
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignments-for-a-siterateschedule
/api-reference/openapi.json post /v1/site_rate_schedules/{site-rate-schedule-id}/auto_add_on_assignments
Create `AutoAddOnAssignments` for a `SiteRateSchedule`
# Create AutoAddOnAssignments for an Account
Source: https://docs.tread.ai/api-reference/autoaddonassignments/create-autoaddonassignments-for-an-account
/api-reference/openapi.json post /v1/accounts/{account-id}/auto_add_on_assignments
Create `AutoAddOnAssignment` for an `Account`
# Delete AutoAddOnAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/delete-autoaddonassignment
/api-reference/openapi.json delete /v1/auto_add_on_assignments/{id}
Delete `AutoAddOnAssignment` by ID
# Get AutoAddOnAssignments for a Driver
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Driver`
# Get AutoAddOnAssignments for a Job
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Job`
# Get AutoAddOnAssignments for a JobAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-jobassignment
/api-reference/openapi.json get /v1/job_assignments/{job-assignment-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `JobAssignment`
# Get AutoAddOnAssignments for a Project
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Project`
# Get AutoAddOnAssignments for a Rate
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-rate
/api-reference/openapi.json get /v1/rates/{rate-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `Rate`
# Get AutoAddOnAssignments for a SiteRateSchedule
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-a-siterateschedule
/api-reference/openapi.json get /v1/site_rate_schedules/{site-rate-schedule-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for a `SiteRateSchedule`
# Get AutoAddOnAssignments for an Account
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-account
/api-reference/openapi.json get /v1/accounts/{account-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Account`
# Get AutoAddOnAssignments for an Order
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Order`
# Get AutoAddOnAssignments for an Order for a Company
Source: https://docs.tread.ai/api-reference/autoaddonassignments/get-autoaddonassignments-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/auto_add_on_assignments
Get `AutoAddOnAssignments` for an `Order`
# Update AutoAddOnAssignment
Source: https://docs.tread.ai/api-reference/autoaddonassignments/update-autoaddonassignment
/api-reference/openapi.json patch /v1/auto_add_on_assignments/{id}
Update `AutoAddOnAssignment` by ID
# Bulk download FileAttachments
Source: https://docs.tread.ai/api-reference/fileattachments/bulk-download-fileattachments
/api-reference/openapi.json post /v1/bulk_downloads
This endpoint starts a bulk download of `FileAttachments`.
The `job_ids` and `filter[jobs]` params are mutually exclusive and at least one of these is required.
On success the caller should subscribe to the `BulkDownloadResult` `RTU` using the `id` in the response.
# Create a DirectUpload
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-directupload
/api-reference/openapi.json post /v1/direct_uploads
Create a `DirectUpload`.
The `checksum` _must_ be calculated exactly the way `rails` expects it ([javascript example](https://github.com/rails/rails/blob/main/activestorage/app/javascript/activestorage/file_checksum.js)).
You should upload the file to `direct_upload.url` using any provided headers from `direct_upload.headers`.
Once this is done you can use `signed_id` in place of a file in any endpoint that accepts file uploads.
# Create a FileAttachment on a DriverDay
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/file_attachments
Create a `FileAttachment` related to a `DriverDay`. Requires permission to create attachment on `DriverDay`—`create_driver_day_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on an Order for a Company
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/file_attachments
Create a `FileAttachment` related to an `Order`. Requires permission to create attachment on `Order`—`create_order_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Retrieve all FileAttachments for a given DriverDay
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/file_attachments
Retrieve all `FileAttachments` for a given `DriverDay`
# Retrieve all FileAttachments for a given Order
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-order
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/file_attachments
Retrieve all `FileAttachments` for a given `Order`
# Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/order-phases-1
/api-reference/openapi.json get /v1/orders/{order-id}/phases
This returns all the `Phases` for an `Order`
# Project Phases
Source: https://docs.tread.ai/api-reference/typeaheads/project-phases
/api-reference/openapi.json get /v1/projects/{project-id}/phases
This returns all the `Phases` for a `Project`.
# Retrieve Sites based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/sites/dispatch
Returns `Sites`, but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs.
# Retrieve Sites based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/typeaheads/retrieve-sites-based-on-the-current-dispatch-results-1
/api-reference/openapi.json get /v1/sites/dispatch/typeahead
Returns `Sites` in a typeahead style but instead of all `Sites` for a `Company` this returns all `Sites` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs.
# Typeahead search on EquipmentType
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-equipmenttype
/api-reference/openapi.json get /v1/equipment_types/typeahead
Typeahead search against the `name` property for `EquipmentType` visible to the currently authenticated `Company`.
# Typeahead search on Jobs
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-jobs
/api-reference/openapi.json get /v1/jobs/typeahead
Deprecated in favor of `GET /v1/companies/{company-id}/jobs/typeahead`. Typeahead search against the `job_id` property for `Jobs` visible to the currently authenticated `Company`.
# Typeahead search on Materials
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-materials
/api-reference/openapi.json get /v1/materials/typeahead
Typeahead search against the `name` property for `Material` visible to the currently authenticated `Company`.
# Typeahead search on Order Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-order-phases-1
/api-reference/openapi.json get /v1/orders/{order-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Order` visible to the currently authenticated `Company`.
# Typeahead search on Project Phases
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-project-phases
/api-reference/openapi.json get /v1/projects/{project-id}/phases/typeahead
Typeahead search against the `name` property for `Phases` for an `Project` visible to the currently authenticated `Company`.
# Typeahead search on Projects
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects
/api-reference/openapi.json get /v1/projects/typeahead
Typeahead search against the `name` or `external_id` property for `Projects` visible to the currently authenticated `Company`.
# Typeahead search on Projects for a Company
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-projects-for-a-company-1
/api-reference/openapi.json get /v1/projects/external_ids/typeahead
Typeahead search against the `external_id` property all `Projects` that belong to current `Company`.
# Typeahead search on Rates
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-rates
/api-reference/openapi.json get /v1/rates/typeahead
Typeahead search against the `name` property for `Rates` visible to the currently authenticated `Company`
# Typeahead search on ServiceClasses
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-serviceclasses
/api-reference/openapi.json get /v1/service_classes/typeahead
Typeahead search against the `name` property for `ServiceClass` visible to the currently authenticated `Company`.
# Typeahead search on Services
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-services
/api-reference/openapi.json get /v1/services/typeahead
Typeahead search against the `name` property for `Services` visible to the currently authenticated `Company`.
# Typeahead search on Sites
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-sites
/api-reference/openapi.json get /v1/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` visible to the currently authenticated `Company`.
# Typeahead search on Traffic Control Plans
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-traffic-control-plans
/api-reference/openapi.json get /v1/traffic_control_plans/typeahead
Typeahead search against the `name` property for `Traffic Control Plans` visible to the currently authenticated `Company`.
# Typeahead search on Users
Source: https://docs.tread.ai/api-reference/typeaheads/typeahead-search-on-users
/api-reference/openapi.json get /v1/users/typeahead
Typeahead search against the `first_name` and `last_name` property for `Users` visible to the currently authenticated `Company`.
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Delete a AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/delete-a-accountexternaltruckidentifier
/api-reference/openapi.json delete /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Delete a `AccountExternalTruckIdentifier` by ID
# Retrieve a single AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/retrieve-a-single-accountexternaltruckidentifier
/api-reference/openapi.json get /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Retrieve `AccountExternalTruckIdentifier` by ID
# Retrieve AccountExternalTruckIdentifiers that belong to a Company
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/retrieve-accountexternaltruckidentifiers-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/account_external_truck_identifiers
Retrieve `AccountExternalTruckIdentifier` for a `Company`.
Filter usage:
* to filter by account id: `filter[account_id]=account_id`
* to filter for records missing a company share: `filter[missing_company_share]=true`
# Update a AccountExternalTruckIdentifier
Source: https://docs.tread.ai/api-reference/accountexternaltruckidentifier/update-a-accountexternaltruckidentifier
/api-reference/openapi.json patch /v1/companies/{company-id}/account_external_truck_identifiers/{id}
Update a `AccountExternalTruckIdentifier` by ID
# Create a Company
Source: https://docs.tread.ai/api-reference/companies/create-a-company
/api-reference/openapi.json post /v1/companies
Create a new `Company`
This endpoint requires the `create_company` permission
# Create a managed Company
Source: https://docs.tread.ai/api-reference/companies/create-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{id}
Create a managed `Company` for another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Delete a Company
Source: https://docs.tread.ai/api-reference/companies/delete-a-company
/api-reference/openapi.json delete /v1/companies/{id}
Delete a `Company` by ID
This endpoint requires the `delete_company` permission
# Delete a managed Company
Source: https://docs.tread.ai/api-reference/companies/delete-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{id}
Delete a managed `Company` from another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Retrieve a Company by Tread ID
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-company-by-tread-id
/api-reference/openapi.json get /v1/companies/tread_id/{tread-id}
Retrieve a `Company` by a `Tread ID`.
This endpoint requires the `connect_companies` `IamPermission`.
# Retrieve a list of Companies
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-list-of-companies
/api-reference/openapi.json get /v1/companies
Retrieve `Companies` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `legal_name`
* `dba_name`
* `parent_company:legal_name`
* `type`
* `saas_billing_plan`
* `usage_status`
# Retrieve a single Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-single-company
/api-reference/openapi.json get /v1/companies/{id}
Retrieve a `Company` by ID
# Retrieve a single managed Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-a-single-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{id}
Retrieve a managed `Company` by ID.
# Retrieve connected Companies For a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-connected-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/connected_companies
Retrieve connected `Companies` For a `Company`
# Retrieve connected Companies for a Managed Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-connected-companies-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/connected_companies
Retrieve connected `Companies` for a Managed `Company`
# Retrieve managed Companies for a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-managed-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies
Retrieve managed `Companies` for another `Company`.
This endpoint requires the `platform_admin` `IamRole`.
# Retrieve the logo for a Company
Source: https://docs.tread.ai/api-reference/companies/retrieve-the-logo-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/logo
Retrieve the logo for a `Company`.
# Return child Companies that belong to a Company
Source: https://docs.tread.ai/api-reference/companies/return-child-companies-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/children
Return child `Companies` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `legal_name`
* `dba_name`
* `parent_company:legal_name`
* `type`
* `saas_billing_plan`
* `usage_status`
# Typeahead search connected Companies for a Managed Company
Source: https://docs.tread.ai/api-reference/companies/typeahead-search-connected-companies-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/connected_companies/typeahead
Typeahead search against the `legal_name` property on connected `Companies` for a Managed `Company`.
# Typeahead search on connected Companies for a Company
Source: https://docs.tread.ai/api-reference/companies/typeahead-search-on-connected-companies-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/connected_companies/typeahead
Typeahead search against the `legal_name` property on connected `Companies` for a given `Company`.
# Update a Company
Source: https://docs.tread.ai/api-reference/companies/update-a-company
/api-reference/openapi.json patch /v1/companies/{id}
Update a `Company` by ID
This endpoint requires the `edit_company` permission
# Update the logo for a Company
Source: https://docs.tread.ai/api-reference/companies/update-the-logo-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/logo
Add or replace the `logo` for a `Company`.
This endpoint requires the `edit_company` `IamPermission`
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `logo` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `logo` must be a file.
In both cases the following restrictions apply:
* `logo` cannot be larger than 100kb.
* `logo` must be one of the following image types: `png`, `jpeg`, `gif`.
# Retrieve CompanyDayJobStat
Source: https://docs.tread.ai/api-reference/companydayjobstats/retrieve-companydayjobstat
/api-reference/openapi.json get /v1/companies/{company-id}/company_day_job_stats/{date}
Retrieve `CompanyDayJobStat` for a `Company` on a given `Date`
# Create a Company Share
Source: https://docs.tread.ai/api-reference/companyshares/create-a-company-share
/api-reference/openapi.json post /v1/companies/{company-id}/company_shares
Create a `CompanyShare`.
This endpoint requires the `create_companyshare` permission.
# Create CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/create-companyshare-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares
Create a `CompanyShare` for a Managed Company
This endpoint requires the `create_company_share` permission
# Delete a CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/delete-a-companyshare
/api-reference/openapi.json delete /v1/company_shares/{id}
Deprecated in favor of "Delete a `CompanyShare` as a `Company`"
Delete a `CompanyShare`.
This endpoint requires the `delete_companyshare` permission.
# Delete a CompanyShare as a Company
Source: https://docs.tread.ai/api-reference/companyshares/delete-a-companyshare-as-a-company
/api-reference/openapi.json delete /v1/companies/{company-id}/company_shares/{id}
Delete a `CompanyShare` as a `Company`.
This endpoint requires the `delete_companyshare` permission.
# Delete CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/delete-companyshare-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Delete `CompanyShare` by ID for a Managed Company
This endpoint requires the `delete_company_share` permission
# Retrieve a single CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-a-single-companyshare
/api-reference/openapi.json get /v1/company_shares/{id}
Retrieve a single `CompanyShare` by ID.
# Retrieve CompanyShare by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshare-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Retrieve `CompanyShare` by ID for a Managed Company
# Retrieve CompanyShares for a Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/company_shares
Retrieve `CompanyShares` for a `Company`.
Note that the `sender_company_id` and `receiver_company_id` filters are mutually exclusive with `between_company_id`.
# Retrieve CompanyShares for a Driver
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-driver
/api-reference/openapi.json get /v1/drivers/{driver-id}/company_shares
Retrieve `CompanyShares` for a `Driver`
# Retrieve CompanyShares for a Foreman
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-foreman
/api-reference/openapi.json get /v1/foremen/{foreman-id}/company_shares
Retrieve `CompanyShares` for a `Foreman`
# Retrieve CompanyShares for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares
Retrieve `CompanyShares` for a managed company. This includes both shares sent by the managed company and shares received by the managed company.
# Retrieve CompanyShares for a Site
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-a-site
/api-reference/openapi.json get /v1/sites/{site-id}/company_shares
Retrieve `CompanyShares` for a `Site`
# Retrieve CompanyShares for an Equipment
Source: https://docs.tread.ai/api-reference/companyshares/retrieve-companyshares-for-an-equipment
/api-reference/openapi.json get /v1/equipment/{equipment-id}/company_shares
Retrieve `CompanyShares` for an `Equipment`
# Update a CompanyShare
Source: https://docs.tread.ai/api-reference/companyshares/update-a-companyshare
/api-reference/openapi.json patch /v1/company_shares/{id}
Deprecated in favor of "Update a `CompanyShare` as a `Company`"
Update a `CompanyShare`.
This endpoint requires the `edit_company_share` permission.
Note that `external_id` can only be updated by the receiver `Company`.
# Update a CompanyShare as a Company
Source: https://docs.tread.ai/api-reference/companyshares/update-a-companyshare-as-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/company_shares/{id}
Update a `CompanyShare` as a `Company`.
This endpoint requires the `edit_company_share` permission.
Note that `external_id` can only be updated by the receiver `Company`.
# Update CompanyShare for a Managed Company
Source: https://docs.tread.ai/api-reference/companyshares/update-companyshare-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/company_shares/{id}
Update `CompanyShare` by ID for a Managed Company
This endpoint requires the `edit_company_share` permission
# Check Compliance Status
Source: https://docs.tread.ai/api-reference/compliance/check-compliance-status
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_check
Check compliance status for a job assignment.
Requires `compliance_read` permission.
# Create a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/create-a-compliance-document-type
/api-reference/openapi.json post /v1/companies/{company-id}/compliance_document_types
Create a new compliance document type.
Requires `compliance_write` permission.
# Delete a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/delete-a-compliance-document-type
/api-reference/openapi.json delete /v1/companies/{company-id}/compliance_document_types/{id}
Delete a compliance document type (soft delete).
Requires `compliance_write` permission.
# Retrieve a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/retrieve-a-compliance-document-type
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_document_types/{id}
Retrieve a compliance document type by ID.
Requires `compliance_read` permission.
# Retrieve Compliance Document Types
Source: https://docs.tread.ai/api-reference/compliance/retrieve-compliance-document-types
/api-reference/openapi.json get /v1/companies/{company-id}/compliance_document_types
Retrieve compliance document types for the company.
Requires `compliance_read` permission.
# Update a Compliance Document Type
Source: https://docs.tread.ai/api-reference/compliance/update-a-compliance-document-type
/api-reference/openapi.json patch /v1/companies/{company-id}/compliance_document_types/{id}
Update a compliance document type.
Requires `compliance_write` permission.
# Create Compliance Document for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-account
/api-reference/openapi.json post /v1/companies/{company-id}/accounts/{account-id}/compliance_documents
Create Compliance Document for Account
# Create Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-equipment
/api-reference/openapi.json post /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents
Create Compliance Document for Equipment
# Create Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/create-compliance-document-for-user
/api-reference/openapi.json post /v1/companies/{company-id}/users/{user-id}/compliance_documents
Create Compliance Document for User
# Delete Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document
/api-reference/openapi.json delete /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Delete Compliance Document
# Delete Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document-for-equipment
/api-reference/openapi.json delete /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Delete Compliance Document for Equipment
# Delete Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/delete-compliance-document-for-user
/api-reference/openapi.json delete /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Delete Compliance Document for User
# Get Compliance Checklist for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-account
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/checklist
Get Compliance Checklist for Account
# Get Compliance Checklist for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/checklist
Get Compliance Checklist for Equipment
# Get Compliance Checklist for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/get-compliance-checklist-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents/checklist
Get Compliance Checklist for User
# List Compliance Documents for Account
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-account
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents
List Compliance Documents for Account
# List Compliance Documents for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents
List Compliance Documents for Equipment
# List Compliance Documents for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/list-compliance-documents-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents
List Compliance Documents for User
# Show Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document
/api-reference/openapi.json get /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Show Compliance Document
# Show Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document-for-equipment
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Show Compliance Document for Equipment
# Show Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/show-compliance-document-for-user
/api-reference/openapi.json get /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Show Compliance Document for User
# Update Compliance Document
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document
/api-reference/openapi.json patch /v1/companies/{company-id}/accounts/{account-id}/compliance_documents/{id}
Update Compliance Document
# Update Compliance Document for Equipment
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document-for-equipment
/api-reference/openapi.json patch /v1/companies/{company-id}/equipment/{equipment-id}/compliance_documents/{id}
Update Compliance Document for Equipment
# Update Compliance Document for User
Source: https://docs.tread.ai/api-reference/compliancedocuments/update-compliance-document-for-user
/api-reference/openapi.json patch /v1/companies/{company-id}/users/{user-id}/compliance_documents/{id}
Update Compliance Document for User
# Create a Department for a Company
Source: https://docs.tread.ai/api-reference/departments/create-a-department-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/departments
Create a `Department` for a `Company`
This endpoint requires the `create_department` permission
# Create a new Department
Source: https://docs.tread.ai/api-reference/departments/create-a-new-department
/api-reference/openapi.json post /v1/departments
Create a new `Department`
This endpoint requires the `create_department` permission
# Delete a Department
Source: https://docs.tread.ai/api-reference/departments/delete-a-department
/api-reference/openapi.json delete /v1/departments/{id}
Delete a `Department` by ID
This endpoint requires the `delete_department` permission
# Retrieve a single Department
Source: https://docs.tread.ai/api-reference/departments/retrieve-a-single-department
/api-reference/openapi.json get /v1/departments/{id}
Retrieve a single `Department` by ID
# Retrieve Departments that belong to a Company
Source: https://docs.tread.ai/api-reference/departments/retrieve-departments-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/departments
Retrieve `Department`s for a `Company`.
# Retrieve Departments that belong to the current Company
Source: https://docs.tread.ai/api-reference/departments/retrieve-departments-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/departments
Retrieve `Department`s that belong to the current `Company`.
# Update a Department
Source: https://docs.tread.ai/api-reference/departments/update-a-department
/api-reference/openapi.json patch /v1/departments/{id}
Update `Department` by ID
This endpoint requires the `edit_department` permission
# Approve a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/approve-a-driverday
/api-reference/openapi.json put /v1/driver_days/{driver-day-id}/approve
Deprecated in favor of "Approve a `DriverDay` as a `Company`"
Approve a `DriverDay` by ID
This endpoint requires the `approve_driver_day` permission.
# Create or update the DriverSignature on a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/create-or-update-the-driversignature-on-a-driverday
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/driver
Create or update the `DriverSignature` on a `DriverDay`.
# Create or update the DropoffSignature on a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/create-or-update-the-dropoffsignature-on-a-driverday
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `DriverDay`.
# Delete the DriverSignature from a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/delete-the-driversignature-from-a-driverday
/api-reference/openapi.json delete /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/driver
Delete the `DriverSignature` from a `DriverDay`.
# Delete the DropoffSignature from a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/delete-the-dropoffsignature-from-a-driverday
/api-reference/openapi.json delete /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures/dropoff
Delete the `DropoffSignature` from a `DriverDay`.
# Retrieve all Signatures for a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-all-signatures-for-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/signatures
Retrieve all `Signatures` for a `DriverDay`
# Retrieve current User's DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-current-users-driverday
/api-reference/openapi.json get /v1/users/me/driver_day
Retrieve current `User`'s `DriverDay`
# Retrieve DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverday
/api-reference/openapi.json get /v1/driver_days/{id}
Retrieve `DriverDay` by ID
# Retrieve DriverDays that belong to a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverdays-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days
Retrieve `DriverDays` that belong to a `Company` by `ID`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `driver.first_name`
* `driver.last_name`
* `vendor_account.name`
* `equipment_external_ids`
# Retrieve DriverDays visible to the current Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-driverdays-visible-to-the-current-company
/api-reference/openapi.json get /v1/driver_days
Retrieve `DriverDays` visible to the current authenticated `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `driver.first_name`
* `driver.last_name`
* `vendor_account.name`
* `equipment_external_ids`
# Retrieve FileAttachments for all Jobs in a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-fileattachments-for-all-jobs-in-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/jobs/file_attachments
Retrieve all `FileAttachments` for `Jobs` that belong to a `DriverDay`. This includes file attachments attached to the jobs themselves, as well as attachments on loads and tickets within those jobs.
# Retrieve Jobs that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-jobs-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/jobs
Retrieve `Jobs` that belong to a `DriverDay`
# Retrieve Jobs that belong to a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-jobs-that-belong-to-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/jobs
Retrieve `Jobs` that belong to a `DriverDay` for a `Company`
# Retrieve Payable Invoices for a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-payable-invoices-for-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/invoices/payables
Retrieve `Payable Invoices` for a `DriverDay` for a `Company`
# Retrieve Receivable Invoices for a DriverDay for a Company
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-receivable-invoices-for-a-driverday-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/invoices/receivables
Retrieve `Receivable Invoices` for a `DriverDay` for a `Company`
# Typeahead search on DriverDays by Company
Source: https://docs.tread.ai/api-reference/driverdays/typeahead-search-on-driverdays-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/typeahead
Typeahead search against the `driver_day_id` property for `DriverDays` visible to the currently authenticated `Company`.
# Unapprove a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/unapprove-a-driverday
/api-reference/openapi.json put /v1/driver_days/{driver-day-id}/unapprove
Deprecated in favor of "Unapprove a `DriverDay` as a `Company`"
Unapprove a `DriverDay` by ID
This endpoint requires the `approve_driver_day` permission.
# Update a DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/update-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{id}
Update a `DriverDay` by ID
# Update Driver to Break State for Current Driver Day
Source: https://docs.tread.ai/api-reference/driverdays/update-driver-to-break-state-for-current-driver-day
/api-reference/openapi.json put /v1/users/me/driver_day/break
Updates the current authenticated driver to break state for their active `DriverDay`.
This endpoint requires the `Driver` role
# Create a FileAttachment on a Job
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/file_attachments
Create a `FileAttachment` related to an `Job`. Requires permission to create attachment on `Job`—`create_job_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on a Load
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-load
/api-reference/openapi.json post /v1/loads/{load-id}/file_attachments
Create a `FileAttachment` related to an `Load`. Requires permission to create attachment on `Load`—`create_load_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on a Project
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/file_attachments
Create a `FileAttachment` related to a `Project`. Requires permission to create attachment on `Project`—`create_project_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a FileAttachment on an Order
Source: https://docs.tread.ai/api-reference/fileattachments/create-a-fileattachment-on-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/file_attachments
Create a `FileAttachment` related to an `Order`. Requires permission to create attachment on `Order`—`create_order_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Delete a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/delete-a-fileattachment-by-id
/api-reference/openapi.json delete /v1/file_attachments/{id}
Delete `FileAttachment` by ID. Requires permission to delete attachment on a particular object:
For Projects: `delete_project_attachments`\
For Orders:`delete_order_attachments`\
For Jobs: `delete_job_attachments`\
For Loads: `delete_load_attachments`\
For Driver Days: `delete_driver_day_attachments`\
For Settlements: `delete_settlement_attachments`\
Drivers and Foremen that have this permission, can only delete `FileAttachments` that they have added.
# Retrieve a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-a-fileattachment-by-id
/api-reference/openapi.json get /v1/file_attachments/{id}
Read a specific `FileAttachment`
# Retrieve all associated FileAttachments for a Job
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-associated-fileattachments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/files
This endpoint retrieves all associated `FileAttachments` for a `Job`, specifically:
* all `FileAttachments` on the `Job`
* all `FileAttachments` on the `Job's` `Loads`
* all `FileAttachments` on `Tickets` connected to this `Job`
# Retrieve all FileAttachments for a given Job
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-job
/api-reference/openapi.json get /v1/jobs/{job-id}/file_attachments
Retrieve all `FileAttachments` for a given `Job`
# Retrieve all FileAttachments for a given Load
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-load
/api-reference/openapi.json get /v1/loads/{load-id}/file_attachments
Retrieve all `FileAttachments` for a given `Load`
# Retrieve all FileAttachments for a given Order
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-order-1
/api-reference/openapi.json get /v1/orders/{order-id}/file_attachments
Retrieve all `FileAttachments` for a given `Order`
# Retrieve all FileAttachments for a given Project
Source: https://docs.tread.ai/api-reference/fileattachments/retrieve-all-fileattachments-for-a-given-project
/api-reference/openapi.json get /v1/projects/{project-id}/file_attachments
Retrieve all `FileAttachments` for a given `Project`
# Update a FileAttachment by ID
Source: https://docs.tread.ai/api-reference/fileattachments/update-a-fileattachment-by-id
/api-reference/openapi.json patch /v1/file_attachments/{id}
Update `FileAttachment` by ID. Requires permission to edit attachment on a particular object:
For Projects: `edit_project_attachments`\
For Orders: `edit_order_attachments`\
For Jobs: `edit_job_attachments`\
For Loads: `edit_load_attachments`\
For Driver Days: `edit_driver_day_attachments`\
For Settlements: `edit_settlement_attachments`\
Drivers and Foremen that have this permission, can only edit `FileAttachments` that they have added.
# Approve a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/approve-a-driverday-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/approve
Approve a `DriverDay` by ID as a `Company`
This endpoint requires the `approve_driver_day` permission.
# Retrieve ApprovalAssignments for a Driver Day
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-driver-day
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/approvals
Deprecated in favor of "Retrieve `ApprovalAssignments` for a `DriverDay` as a `Company`"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `DriverDay`
# Retrieve ApprovalAssignments for a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-driverday-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/approvals
Retrieve `ApprovalAssignments` for a `DriverDay` as a `Company`
# Retrieve ApprovalAssignments for a Job
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/approvals
Deprecated in favor of "Retrieve ApprovalAssignments for a Job for a Company"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `Job`
# Retrieve ApprovalAssignments for a Job for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/approvals
Retrieve all `ApprovalAssignments` visible to the specified `Company` for a `Job`
# Retrieve ApprovalAssignments for a Load
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/approvals
Deprecated in favor of "Retrieve ApprovalAssignments for a Load for a Company"
Retrieve all `ApprovalAssignments` visible to your `Company` for a `Load`
# Retrieve ApprovalAssignments for a Load for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalassignments-for-a-load-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/loads/{load-id}/approvals
Retrieve all `ApprovalAssignments` visible to the specified `Company` for a `Load`
# Retrieve ApprovalStatus for a Driver Day
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-driver-day
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/approval_status
Deprecated in favor of "Retrieve `ApprovalStatus` for a visible `DriverDay` for a Company"
Retrieve `ApprovalStatus` for a visible `DriverDay`
# Retrieve ApprovalStatus for a Driver Day for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-driver-day-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/approval_status
Retrieve `ApprovalStatus` for a visible `DriverDay` for a specific `Company`
# Retrieve ApprovalStatus for a Job
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/approval_status
Deprecated in favor of "Retrieve `ApprovalStatus` for a visible `Job` for a Company"
Retrieve `ApprovalStatus` for a visible `Job`
# Retrieve ApprovalStatus for a Job for a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/retrieve-approvalstatus-for-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/approval_status
Retrieve `ApprovalStatus` for a visible `Job` for a specific `Company`
# Unapprove a DriverDay as a Company
Source: https://docs.tread.ai/api-reference/approvalassignments/unapprove-a-driverday-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/driver_days/{driver-day-id}/unapprove
Unapprove a `DriverDay` by ID as a `Company`
This endpoint requires the `approve_driver_day` permission.
# Mark the current DriverDay as off duty
Source: https://docs.tread.ai/api-reference/driverdays/mark-the-current-driverday-as-off-duty
/api-reference/openapi.json put /v1/users/me/driver_day/off_duty
Mark the current `DriverDay` as off duty by calling the `DriverDayService.off_duty!` service method.
This endpoint requires the `Driver` role
# Retrieve current User's Previous DriverDays
Source: https://docs.tread.ai/api-reference/driverdays/retrieve-current-users-previous-driverdays
/api-reference/openapi.json get /v1/users/me/driver_days/previous
Retrieve current `User`'s Previous `DriverDays`. It does not include the current `DriverDay` for the current `User`.
# Start or resume the current DriverDay
Source: https://docs.tread.ai/api-reference/driverdays/start-or-resume-the-current-driverday
/api-reference/openapi.json put /v1/users/me/driver_day/on_duty
Start or resume the current `DriverDay`.
This endpoint requires the `Driver` role
# Retrieve a Driver by ID
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id
/api-reference/openapi.json get /v1/drivers/{id}
Deprecated in favor of "Retrieve a `Driver` by ID for a `Company`"
Retrieve a `Driver` by ID
# Retrieve a Driver by ID for a Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/{id}
Retrieve a `Driver` by ID for a `Company`
# Retrieve a Driver by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-a-driver-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers/{id}
Retrieve a `Driver` by ID for a Managed Company
# Retrieve Drivers for a Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-drivers-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/drivers
Retrieve `Drivers` for a `Company`.
# Retrieve Drivers for a Managed Company
Source: https://docs.tread.ai/api-reference/drivers/retrieve-drivers-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/drivers
Retrieve `Drivers` for a managed company. This includes both drivers owned by the managed company and drivers shared with the managed company.
# Search Drivers based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/drivers/search-drivers-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/faceted_search
Searches `Drivers` in a typeahead style but instead of all `Drivers` for a `Company` this returns all `Drivers` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on Drivers
Source: https://docs.tread.ai/api-reference/drivers/typeahead-search-on-drivers
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/typeahead
Typeahead search against the `first_name` and `last_name` property on `Drivers` for a `Company`.
# Update a Driver's State to off_duty
Source: https://docs.tread.ai/api-reference/drivers/update-a-drivers-state-to-off_duty
/api-reference/openapi.json put /v1/drivers/{driver-id}/driver_state/off_duty
Update the status of a `driver` to `off_duty`.
This endpoint requires the `edit_user` permission.
# Calculate GeofenceTriggers for a Job
Source: https://docs.tread.ai/api-reference/geofencetriggers/calculate-geofencetriggers-for-a-job
/api-reference/openapi.json post /v1/companies/{company-id}/jobs/{job-id}/geofence_triggers
Calculate `GeofenceTriggers` for a `Job` based on the strategy.
- `historical`: Returns existing non-skipped geofence triggers for the job
- `naive`: Calculates geofence triggers using naive strategy (requires `delay_seconds`)
- `accuracy_strict`: Calculates geofence triggers using accuracy strict strategy (requires `delay_seconds`)
# Generate GeofenceTriggers for Drivers
Source: https://docs.tread.ai/api-reference/geofencetriggers/generate-geofencetriggers-for-drivers
/api-reference/openapi.json post /v1/companies/{company-id}/drivers/geofence_triggers
Generate `GeofenceTriggers` for `Drivers` based on the provided `NextBillionGeofences`.
The `GeofenceTriggers` are not persisted.
# Generate GeofenceTriggers for Equipment
Source: https://docs.tread.ai/api-reference/geofencetriggers/generate-geofencetriggers-for-equipment
/api-reference/openapi.json post /v1/companies/{company-id}/equipment/geofence_triggers
Generate `GeofenceTriggers` for `Equipment` based on the provided `NextBillionGeofences`.
The `GeofenceTriggers` are not persisted.
# Accept a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/accept-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/accept
Accept a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Approve a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/approve-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/approve
Approve a `Job` by ID as a Company.
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Arrive to site for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/arrive-to-site-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/arrive
Arrive to `site` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Assign a vendor to a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/assign-a-vendor-to-a-job-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/assign_vendor
Assign a `driver` to an `Account`, with `vendor` type for a company
This endpoint requires the `assign_job` `IAmPermission`
# Bulk Accept Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-accept-jobs
/api-reference/openapi.json put /v1/jobs/bulk_accept
Accept multiple `Jobs` based on the given `job_ids` asynchronously.
To accept a `Job` successfully, the principal should either be the `Driver` of the `Job` or has an `edit_job` permission.
# Bulk Accept Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-accept-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_accept
Accept multiple `Jobs` based on the given `job_ids` asynchronously as a Company.
To accept a `Job` successfully, the principal should either be the `Driver` of the `Job` or has an `edit_job` permission.
# Bulk Assign Drivers to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-drivers-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign_drivers
Assigns a list of multiple `Jobs` to the given `Driver` asynchronously.
This endpoint requires the `assign_job` permission
# Bulk Assign Drivers to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-drivers-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign_drivers
Assigns a list of multiple `Jobs` to the given `Driver` asynchronously as a Company.
This endpoint requires the `assign_job` permission
# Bulk Assign Vendor to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendor-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign
Assigns multiple `Jobs` to the given `Vendor` asynchronously.
This endpoint requires the `edit_job` permission
Deprecated in favor of `PUT /v1/jobs/bulk_assign_vendors`
# Bulk Assign Vendor to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendor-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign
Assigns multiple `Jobs` to the given `Vendor` asynchronously as a Company.
This endpoint requires the `edit_job` permission
Deprecated in favor of `PUT /v1/jobs/bulk_assign_vendors`
# Bulk Assign Vendors to Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendors-to-jobs
/api-reference/openapi.json put /v1/jobs/bulk_assign_vendors
Assigns a list of multiple `Jobs` to the given `Vendor` asynchronously.
This endpoint requires the `assign_job` permission
# Bulk Assign Vendors to Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-assign-vendors-to-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_assign_vendors
Assigns a list of multiple `Jobs` to the given `Vendor` asynchronously as a Company.
This endpoint requires the `assign_job` permission
# Bulk cancel Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-cancel-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_cancel
Bulk cancel multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `cancel_job` permission.
# Bulk Copy Assignments
Source: https://docs.tread.ai/api-reference/jobs/bulk-copy-assignments
/api-reference/openapi.json put /v1/jobs/bulk_copy_assignments
Bulk Copy `JobAssignments` asynchronously.
This endpoint requires the `edit_job` permission
# Bulk Copy Assignments as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-copy-assignments-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_copy_assignments
Bulk Copy `JobAssignments` asynchronously as a Company.
This endpoint requires the `edit_job` permission
# Bulk delete Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-delete-jobs
/api-reference/openapi.json put /v1/jobs/bulk_delete
Bulk delete multiple `Jobs` by `id` asynchronously.
This endpoint requires the `delete_job` permission.
# Bulk delete Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-delete-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_delete
Bulk delete multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `delete_job` permission.
# Bulk Send Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs
/api-reference/openapi.json put /v1/jobs/bulk_send
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` based on the given `job_ids` and `order_ids` asynchronously.
This endpoint requires the `edit_job` permission
# Bulk Send Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_send
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` based on the given `job_ids` and `order_ids` asynchronously as a Company.
This endpoint requires the `edit_job` permission
# Bulk Send Jobs for a Day
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-jobs-for-a-day
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_send_day
Send multiple `Driver`-assigned or `Vendor`-assigned `Jobs` for the given `date` asynchronously as a Company.
This endpoint requires the `edit_job` permission.
# Bulk send SMS to job's drivers
Source: https://docs.tread.ai/api-reference/jobs/bulk-send-sms-to-jobs-drivers
/api-reference/openapi.json put /v1/jobs/bulk_driver_sms
Bulk send sms text to `Job`'s `drivers`.
# Bulk unassign Jobs as a Company
Source: https://docs.tread.ai/api-reference/jobs/bulk-unassign-jobs-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/bulk_unassign
Bulk unassign multiple `Jobs` by `id` asynchronously as a Company.
This endpoint requires the `assign_job` permission.
# Bulk Update Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-update-jobs
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/bulk_update
Bulk update multiple `Jobs` with attributes defined in `data` asynchronously.
This endpoint requires the `edit_job` permission.
Bulk Updatable attributes: `notes`
# Bulk Update Jobs
Source: https://docs.tread.ai/api-reference/jobs/bulk-update-jobs-1
/api-reference/openapi.json patch /v1/jobs/bulk_update
Bulk update multiple `Jobs` with attributes defined in `data` asynchronously.
This endpoint requires the `edit_job` permission.
Bulk Updatable attributes: `notes`
# Cancel a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/cancel-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/cancel
Cancel a `Job` by ID as a Company
This endpoint requires the `cancel_job` permission
# Complete a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/complete-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/complete
Complete a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Complete Load for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/complete-load-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/complete_load
Load `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Create a new Job for an Order for a Company
Source: https://docs.tread.ai/api-reference/jobs/create-a-new-job-for-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/jobs
Create a new `Job` for an `Order`.
This endpoint requires the `create_job` `IamPermission`.
# Create or update the DriverSignature on a Job
Source: https://docs.tread.ai/api-reference/jobs/create-or-update-the-driversignature-on-a-job
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/signatures/driver
Create or update the `DriverSignature` on a `Job`.
# Create or update the DropoffSignature on a Job
Source: https://docs.tread.ai/api-reference/jobs/create-or-update-the-dropoffsignature-on-a-job
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `Job`.
# Delete the DriverSignature from a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-the-driversignature-from-a-job
/api-reference/openapi.json delete /v1/companies/{company-id}/jobs/{job-id}/signatures/driver
Delete the `DriverSignature` from a `Job`.
# Delete the DropoffSignature from a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-the-dropoffsignature-from-a-job
/api-reference/openapi.json delete /v1/companies/{company-id}/jobs/{job-id}/signatures/dropoff
Delete the `DropoffSignature` from a `Job`.
# Flag a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/flag-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/flag
Flag a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Get Device Status for a Driver
Source: https://docs.tread.ai/api-reference/jobs/get-device-status-for-a-driver
/api-reference/openapi.json get /v1/companies/{company-id}/drivers/{driver-id}/device_status
Get GPS data and other data like device permissions for a Driver. Requires driver authorization.
# Get Device Status for Job
Source: https://docs.tread.ai/api-reference/jobs/get-device-status-for-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/device_status
Get GPS data and other data like device permissions for a Job. Requires job authorization.
# Load Material for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/load-material-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/load_material
Load `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Move to Site for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/move-to-site-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/enroute
Move to `site` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pay a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/pay-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/pay
Pay a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Reject a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/reject-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/reject
Reject a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Remove flag for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/remove-flag-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/remove_flag
Remove flag for a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Remove signoff for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/remove-signoff-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/remove_signoff
Remove signoff for a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Request a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/request-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/request
Request a `Job` by ID to assigned `driver_id` on the job.
This endpoint requires the `edit_job` permission
# Resume a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/resume-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/resume
Resume a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Retrieve a Job with Invoices for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-job-with-invoices-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/invoicing
Retrieve a `Job` with `Receivable` and `Payable` `Invoices` for a `Company`
# Retrieve a single Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-single-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{id}
Retrieve `Job` by ID for a Company
# Retrieve all JobEvents that belong to a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-jobevents-that-belong-to-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/job_events
Retrieve `Job` `Job-Events` by `ID` for a `Company`
# Retrieve all Signatures for a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-signatures-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/signatures
Retrieve all `Signatures` for a `Job`
# Retrieve Jobs for the current Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-for-the-current-company
/api-reference/openapi.json get /v1/jobs
Retrieve `Jobs` for the current `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs for the current Company for approval
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-for-the-current-company-for-approval
/api-reference/openapi.json get /v1/jobs/approval
Retrieve completed `Jobs` for the current `Company` which are ready for the `Foreman` to approve.
# Retrieve Jobs that are assigned to the current User
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-are-assigned-to-the-current-user
/api-reference/openapi.json get /v1/jobs/assigned
Retrieve current `User`'s `Jobs`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs that belong to an Order as a specific Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-belong-to-an-order-as-a-specific-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/jobs
Retrieve `Jobs` that belong to an `Order` and is visible to the currently authenticated Company.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Jobs where the current User is a Collaborator
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-collaborator
/api-reference/openapi.json get /v1/jobs/collaborator
Retrieve `Jobs` where the current `User` is a `Collaborator`
# Retrieve Jobs where the current User is a Driver
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-driver
/api-reference/openapi.json get /v1/jobs/driver
Retrieve `Jobs` where the current `User` is a `Driver`
# Retrieve Jobs where the current User is a Foreman
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-foreman
/api-reference/openapi.json get /v1/jobs/foreman
Retrieve `Jobs` where the current `User` is a `Foreman`
# Retrieve Jobs where the current User is a Salesperson
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-where-the-current-user-is-a-salesperson
/api-reference/openapi.json get /v1/jobs/salesperson
Retrieve `Jobs` where the current `User` is a `Salesperson`
# Retrieve Jobs with Invoices that belong to an Order as a specific Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-with-invoices-that-belong-to-an-order-as-a-specific-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/jobs/invoicing
Retrieve `Jobs` with `Receivable` and `Payable` `Invoices` that belong to an `Order` as a specific `Company`
# Retrieve the Timeline of an Order for a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/timeline
Retrieve `Orders`'s Timeline by ID
# Retrieves Jobs that belong to a Company
Source: https://docs.tread.ai/api-reference/jobs/retrieves-jobs-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs
Retrieve `Jobs` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Review a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/review-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/review
Sets the `Job` by ID to `in_review` state as a Company.
This endpoint requires the `edit_job` permission
# Sign off a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/sign-off-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/sign_off
Sign off a `Job` by ID as a Company.
This endpoint requires the `edit_job` permission
# Typeahead search on Jobs by Company
Source: https://docs.tread.ai/api-reference/jobs/typeahead-search-on-jobs-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/typeahead
Typeahead search against the `job_id` property for `Jobs` visible to the currently authenticated `Company`.
# Unapprove a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/unapprove-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unapprove
Unapprove a `Job` by ID as a Company.
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Unassign the Driver or Vendor from a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/unassign-the-driver-or-vendor-from-a-job-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unassign
Unassign a `vendor` for a `Job` by ID for a Company
This endpoint requires the `assign_job` permission
# Unload the Material for a Job as a Company
Source: https://docs.tread.ai/api-reference/jobs/unload-the-material-for-a-job-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/jobs/{job-id}/unload_material
Unload `material` for a `Job` by ID as a Company
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Update a Job for a Company
Source: https://docs.tread.ai/api-reference/jobs/update-a-job-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/{id}
Update a `Job` by ID for a Compan
This endpoint requires the `edit_job` permission.
If setting the `driver_id`, the `assign_job` permission is also required.
# Retrieve latest Location Histories for a Company
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-latest-location-histories-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/location_histories/latest
Retrieve latest `LocationHistories` for a `Company`.
# Retrieve latest Location Histories for a Company
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-latest-location-histories-for-a-company-1
/api-reference/openapi.json get /v1/location_histories/latest
Retrieve latest `LocationHistories` for a `Company`.
# Retrieve Location Histories for a DriverDay
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/location_histories
Retrieve `LocationHistories` for a `DriverDay`.
# Retrieve Location Histories for a Job
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/location_histories
Retrieve `LocationHistories` for a `Job`.
# Retrieve Location Histories for a Moving Site on a Job
Source: https://docs.tread.ai/api-reference/locationhistories/retrieve-location-histories-for-a-moving-site-on-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/moving_sites/{moving-site-id}/location_histories
Retrieve `LocationHistories` for a `MovingSite` on a `Job`.
# Retrieve TravelledDistances that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/companies/{company-id}/driver_days/{driver-day-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `DriverDay`
# Retrieve TravelledDistances that belong to a Job
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `Job`
# Retrieve TravelledDistances that belong to a Load
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-a-load
/api-reference/openapi.json get /v1/companies/{company-id}/loads/{load-id}/travelled_distances
Retrieve `TravelledDistances` that belong to a `Load`
# Retrieve TravelledDistances that belong to an Order
Source: https://docs.tread.ai/api-reference/travelleddistances/retrieve-travelleddistances-that-belong-to-an-order
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/travelled_distances
Retrieve `TravelledDistances` that belong to an `Order`
# Activate an Equipment
Source: https://docs.tread.ai/api-reference/equipment/activate-an-equipment
/api-reference/openapi.json put /v1/equipment/{equipment-id}/activate
Activate an `Equipment`
This endpoint requires the `edit_equipment` permission
# Assign Equipment to a Job
Source: https://docs.tread.ai/api-reference/equipment/assign-equipment-to-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/additional_equipment
Assign additional `Equipment` to a `Job`
This endpoint requires the `edit_job_equipment` permission
# Assign Equipment to a Job
Source: https://docs.tread.ai/api-reference/equipment/assign-equipment-to-a-job-1
/api-reference/openapi.json post /v1/jobs/{job-id}/equipment
Assign `Equipment` to a `Job`
This endpoint requires the `edit_job_equipment` permission
# Create an Equipment for a Company
Source: https://docs.tread.ai/api-reference/equipment/create-an-equipment-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/equipment
Create an `Equipment` for a `Company`
This endpoint requires the `create_equipment` permission
# Create an Equipment in the current Company
Source: https://docs.tread.ai/api-reference/equipment/create-an-equipment-in-the-current-company
/api-reference/openapi.json post /v1/equipment
Create an `Equipment` in the current `Company`
This endpoint requires the `create_equipment` permission
# Create Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/create-equipment-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment
Create an `Equipment` for a Managed `Company`
This endpoint requires the `create_equipment` permission
# Deactivate an Equipment
Source: https://docs.tread.ai/api-reference/equipment/deactivate-an-equipment
/api-reference/openapi.json put /v1/equipment/{equipment-id}/deactivate
Deactivate an `Equipment`
This endpoint requires the `edit_equipment` permission
# Delete an Equipment
Source: https://docs.tread.ai/api-reference/equipment/delete-an-equipment
/api-reference/openapi.json delete /v1/equipment/{id}
Delete an `Equipment`
This endpoint required the `delete_equipment` permission
# Delete Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/delete-equipment-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Delete `Equipment` by ID for a Managed Company
This endpoint requires the `delete_equipment` permission
# Retrieve a list of Equipment
Source: https://docs.tread.ai/api-reference/equipment/retrieve-a-list-of-equipment
/api-reference/openapi.json get /v1/equipment
Retrieve `Equipment` visible to a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `external_id`
* `license_number`
* `name`
# Retrieve a single Equipment
Source: https://docs.tread.ai/api-reference/equipment/retrieve-a-single-equipment
/api-reference/openapi.json get /v1/equipment/{id}
Deprecated in favor of "Retrieve `Equipment` by ID for a `Company`"
Retrieve an `Equipment` by ID
# Retrieve Equipment by ID for a Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment/{id}
Retrieve `Equipment` by ID for a `Company`
# Retrieve Equipment by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Retrieve `Equipment` by ID for a Managed Company
# Retrieve Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment
Retrieve `Equipment` for a managed company. This includes both equipment owned by the managed company and equipment shared with the managed company.
# Retrieve Equipment that belong to a Company
Source: https://docs.tread.ai/api-reference/equipment/retrieve-equipment-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment
Retrieve `Equipment` for a `Company`
# Update an Equipment
Source: https://docs.tread.ai/api-reference/equipment/update-an-equipment
/api-reference/openapi.json patch /v1/equipment/{id}
Update `Equipment` by ID
This endpoint required the `edit_equipment` permission
# Update Equipment for a Managed Company
Source: https://docs.tread.ai/api-reference/equipment/update-equipment-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment/{id}
Update `Equipment` by ID for a Managed Company
This endpoint requires the `edit_equipment` permission
# Create an EquipmentType for a Company
Source: https://docs.tread.ai/api-reference/equipmenttype/create-an-equipmenttype-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/equipment_types
Create an `EquipmentType` for a `Company`
This endpoint requires the `create_equipment_type` permission
# Create an EquipmentType in the current Company
Source: https://docs.tread.ai/api-reference/equipmenttype/create-an-equipmenttype-in-the-current-company
/api-reference/openapi.json post /v1/equipment_types
Create an `EquipmentType` in the current `Company`
This endpoint requires the `create_equipment_type` permission
# Delete an EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/delete-an-equipmenttype
/api-reference/openapi.json delete /v1/equipment_types/{id}
Delete `EquipmentType` by ID
This endpoint requires the `delete_equipment_type` permission
# Retrieve a single EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-a-single-equipmenttype
/api-reference/openapi.json get /v1/equipment_types/{id}
Retrieve `EquipmentType` by `ID`
# Retrieve EquipmentTypes for a Company
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-equipmenttypes-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/equipment_types
Retrieve `EquipmentTypes` for a `Company`.
# Retrieve EquipmentTypes for a Managed Company
Source: https://docs.tread.ai/api-reference/equipmenttype/retrieve-equipmenttypes-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/equipment_types
Retrieve `EquipmentTypes` for a managed company.
# Update an EquipmentType
Source: https://docs.tread.ai/api-reference/equipmenttype/update-an-equipmenttype
/api-reference/openapi.json patch /v1/equipment_types/{id}
Update `EquipmentType` by ID
This endpoint requires the `edit_equipment_type` permission
# Retrieve a Foreman by ID for a Company
Source: https://docs.tread.ai/api-reference/foremen/retrieve-a-foreman-by-id-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/{id}
Retrieve a `Driver` by ID for a `Company`
# Retrieve Foremen for a Company
Source: https://docs.tread.ai/api-reference/foremen/retrieve-foremen-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/foremen
Retrieve `Foremen` for a `Company`
# Search Foremen based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/foremen/search-foremen-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/faceted_search
Searches `Foremen` in a typeahead style but instead of all `Foremen` for a `Company` this returns all `Foremen` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Typeahead search on Foremen
Source: https://docs.tread.ai/api-reference/foremen/typeahead-search-on-foremen
/api-reference/openapi.json get /v1/companies/{company-id}/foremen/typeahead
Typeahead search against the `first_name` and `last_name` property on `Foremen` for a `Company`.
# Create a FuelPrice for a FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelprice-for-a-fuelpriceindex
/api-reference/openapi.json post /v1/fuel_price_indices/{fuel-price-index-id}/fuel_prices
Create a `FuelPrice` for a `FuelPriceIndex`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelPriceIndex for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelpriceindex-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/fuel_price_indices
Create a `FuelPriceIndex` for a `Company`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelSurchargeSchedule for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelsurchargeschedule-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/fuel_surcharge_schedules
Create a `FuelSurchargeSchedule` for a `Company`
This endpoint requires the `create_fuel_price_indices` permission
# Create a FuelSurchargeSchedulePrice for a FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/create-a-fuelsurchargescheduleprice-for-a-fuelsurchargeschedule
/api-reference/openapi.json post /v1/fuel_surcharge_schedules/{fuel-surcharge-schedule-id}/fuel_surcharge_schedule_prices
Create a `FuelSurchargeSchedulePrice` for a `FuelSurchargeSchedule`
This endpoint requires the `create_fuel_price_indices` permission
# Delete FuelPrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelprice
/api-reference/openapi.json delete /v1/fuel_prices/{id}
Delete `FuelPrice` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelpriceindex
/api-reference/openapi.json delete /v1/fuel_price_indices/{id}
Delete `FuelPriceIndex` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelsurchargeschedule
/api-reference/openapi.json delete /v1/fuel_surcharge_schedules/{id}
Delete `FuelSurchargeSchedule` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Delete FuelSurchargeSchedulePrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/delete-fuelsurchargescheduleprice
/api-reference/openapi.json delete /v1/fuel_surcharge_schedule_prices/{id}
Delete `FuelSurchargeSchedulePrice` by `ID`
This endpoint requires the `delete_fuel_price_indices` permission
# Retrieve Fuel Prices that belong to a FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuel-prices-that-belong-to-a-fuelpriceindex
/api-reference/openapi.json get /v1/fuel_price_indices/{fuel-price-index-id}/fuel_prices
Retrieve `FuelPrices` that belong to a `FuelPriceIndex`
# Retrieve FuelPriceIndices that belong to a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelpriceindices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_price_indices
Retrieve `FuelPriceIndices` for a `Company`
# Retrieve FuelSurchargeSchedulePrices that belong to a FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelsurchargescheduleprices-that-belong-to-a-fuelsurchargeschedule
/api-reference/openapi.json get /v1/fuel_surcharge_schedules/{fuel-surcharge-schedule-id}/fuel_surcharge_schedule_prices
Retrieve `FuelSurchargeSchedulePrices` that belong to a `FuelSurchargeSchedule`
# Retrieve FuelSurchargeSchedules that belong to a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/retrieve-fuelsurchargeschedules-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_surcharge_schedules
Retrieve `FuelSurchargeSchedules` for a `Company`
# Typeahead search on FuelPriceIndex for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/typeahead-search-on-fuelpriceindex-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_price_indices/typeahead
Typeahead search against the `name` property on `FuelPriceIndex` for a `Company`.
# Typeahead search on FuelSurchargeSchedule for a Company
Source: https://docs.tread.ai/api-reference/fuelsurcharges/typeahead-search-on-fuelsurchargeschedule-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/fuel_surcharge_schedules/typeahead
Typeahead search against the `name` property on `FuelSurchargeSchedule` for a `Company`.
# Update FuelPrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelprice
/api-reference/openapi.json patch /v1/fuel_prices/{id}
Update `FuelPrice` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelPriceIndex
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelpriceindex
/api-reference/openapi.json patch /v1/fuel_price_indices/{id}
Update `FuelPriceIndex` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelSurchargeSchedule
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelsurchargeschedule
/api-reference/openapi.json patch /v1/fuel_surcharge_schedules/{id}
Update `FuelSurchargeSchedule` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Update FuelSurchargeSchedulePrice
Source: https://docs.tread.ai/api-reference/fuelsurcharges/update-fuelsurchargescheduleprice
/api-reference/openapi.json patch /v1/fuel_surcharge_schedule_prices/{id}
Update `FuelSurchargeSchedulePrice` by `ID`
This endpoint requires the `edit_fuel_price_indices` permission
# Retrieve all IamRoles
Source: https://docs.tread.ai/api-reference/iamroles/retrieve-all-iamroles
/api-reference/openapi.json get /v1/iam_roles
Retrieve `IamRoles` for the users company along with all system roles
# Retrieve IamRoles that belong to a Company
Source: https://docs.tread.ai/api-reference/iamroles/retrieve-iamroles-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/iam_roles
Retrieve `IamRoles` for a `Company`
# Approve an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/approve-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/approve
Approve an `Invoice` for a `Company` by ID
# Approve the Invoice as the Customer for a Company
Source: https://docs.tread.ai/api-reference/invoices/approve-the-invoice-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/customer_approve
Approve the `Invoice` as the `Customer` for a `Company` by ID
# Batch update InvoiceLineItems for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/batch-update-invoicelineitems-for-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items
Batch update `InvoiceLineItems` for an `Invoice` for a `Company`.
This endpoint allows updating, creating, deleting `InvoiceLineItems` all at once.
If updating existing records:
- must provide the `id` for each record to be updated
- only provide the fields to be updated
- no need to provide the `rate_type` field
e.g.
```json
invoice_line_items: [
{
"id": "some-uuid"
"quantity": 20.25,
"rate": 15.75
}
]
```
If deleting existing records:
- must provide the `id` and the property `_destroy: 1`
e.g.
```json
invoice_line_items: [
{
"id": "some-uuid"
"_destroy": 1
}
]
```
## This section is deprecated
#### We are still accepting `rate_type` but it will have no effect. It will be removed in one of the next releases.
If creating new records (for cases where the `Invoice` `rate_type` grouping changes):
- must provide the `rate_type`
- must not provide the `id` for each record to be created
- provide all the fields needed for the record
e.g.
```json
rate_type: "RatePerTon",
invoice_line_items: [
{
"quantity": 20.25,
"rate": 12.5
},
{
"quantity": 22.50,
"rate": 12.5
}
]
```
# Export an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/export-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/export
Export an `Invoice` for a `Company` by ID
# Generate InvoiceLineItems for an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/generate-invoicelineitems-for-an-invoice-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items/generate
Generate `InvoiceLineItems` for an `Invoice` for a `Company`
This endpoint only generates the `InvoiceLineItems` based on the inputs and does not store any data on the backend
# Pay an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/pay-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/pay
Pay an `Invoice` for a `Company` by ID
# Pay the Invoice as the Customer for a Company
Source: https://docs.tread.ai/api-reference/invoices/pay-the-invoice-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/customer_pay
Pay the `Invoice` as the `Customer` for a `Company` by ID
# Retrieve a Payable Invoice for a given DriverDay
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/payable
Retrieve a `Payable Invoice` for a given `DriverDay`.
# Retrieve a Payable Invoice for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/payable
Retrieve a `Payable Invoice` for a given `Job` for a `Company`.
This can be a `Payable` for a `Vendor` or a `Driver`.
# Retrieve a Receivable for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-receivable-for-a-given-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/receivable
Retrieve a `Receivable Invoice` for a given `Job` for a `Company`
# Retrieve all InvoiceLineItems that belongs to an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-all-invoicelineitems-that-belongs-to-an-invoice-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/invoices/{invoice-id}/invoice_line_items
Retrieve all `InvoiceLineItem` for an `Invoice` for a `Company`
# Retrieve Invoices that belong to a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-invoices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/invoices
Retrieve `Invoices` that visible to a `Company`
# Retrieve Invoices that belong to Jobs on an Order for a Company
Source: https://docs.tread.ai/api-reference/invoices/retrieve-invoices-that-belong-to-jobs-on-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/invoices
Retrieve `Invoices` that are on `Jobs` tied to an `Order` for a specific `Company`.
# Send the Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/send-the-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/send_invoice
Send the `Invoice` for a `Company` by ID
# Unapprove an Invoice as a Company
Source: https://docs.tread.ai/api-reference/invoices/unapprove-an-invoice-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/unapprove
Unapprove an `Invoice` by ID as a `Company`
# Update an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/update-an-invoice-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/invoices/{id}
Update an `Invoice` by ID for a `Company`
This endpoint requires the `edit_invoice` permission
# Void an Invoice for a Company
Source: https://docs.tread.ai/api-reference/invoices/void-an-invoice-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/invoices/{invoice-id}/void
Void an `Invoice` for a `Company` by ID
# Accept a Job
Source: https://docs.tread.ai/api-reference/jobs/accept-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/accept
Accept a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Approve a Job
Source: https://docs.tread.ai/api-reference/jobs/approve-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/approve
Approve a `Job` by ID
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Arrive to site for a Job
Source: https://docs.tread.ai/api-reference/jobs/arrive-to-site-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/arrive
Arrive to `site` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Assign a vendor to a Job
Source: https://docs.tread.ai/api-reference/jobs/assign-a-vendor-to-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/assign_vendor
Assign a `driver` to an `Account`, with `vendor` type
This endpoint requires the `assign_job` `IAmPermission`
# Assign Phase to a Job
Source: https://docs.tread.ai/api-reference/jobs/assign-phase-to-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/phase
Assign a `Phase` to a `Job` which belongs to the `Job`'s `Order`.
This endpoint requires the `edit_job_phase` permission
# Cancel a Job
Source: https://docs.tread.ai/api-reference/jobs/cancel-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/cancel
Cancel a `Job` by ID
This endpoint requires the `cancel_job` permission
# Complete a Job
Source: https://docs.tread.ai/api-reference/jobs/complete-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/complete
Complete a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Complete Load for a Job
Source: https://docs.tread.ai/api-reference/jobs/complete-load-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/complete_load
Load `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Copy a Job
Source: https://docs.tread.ai/api-reference/jobs/copy-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/copy
Creates a new `Job` with the same attributes as the job with provided `job-id`.
# Create a new Job for an Order
Source: https://docs.tread.ai/api-reference/jobs/create-a-new-job-for-an-order
/api-reference/openapi.json post /v1/orders/{order-id}/jobs
Create a new `Job` for an `Order`.
This endpoint requires the `create_job` `IamPermission`.
# Delete a Job
Source: https://docs.tread.ai/api-reference/jobs/delete-a-job
/api-reference/openapi.json delete /v1/jobs/{id}
Delete a `Job` by ID
This endpoint requires the `delete_job` permission
# Flag a Job by ID
Source: https://docs.tread.ai/api-reference/jobs/flag-a-job-by-id
/api-reference/openapi.json put /v1/jobs/{job-id}/flag
Flag a `Job` by ID
This endpoint requires the `edit_job` permission
# Load Material for a Job
Source: https://docs.tread.ai/api-reference/jobs/load-material-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/load_material
Load `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Move to Site for a Job
Source: https://docs.tread.ai/api-reference/jobs/move-to-site-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/enroute
Move to `site` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pause a Job
Source: https://docs.tread.ai/api-reference/jobs/pause-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/pause
Pause a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Pay a Job
Source: https://docs.tread.ai/api-reference/jobs/pay-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/pay
Pay a `Job` by ID
This endpoint requires the `edit_job` permission
# Reject a Job
Source: https://docs.tread.ai/api-reference/jobs/reject-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/reject
Reject a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Remove flag for a Job
Source: https://docs.tread.ai/api-reference/jobs/remove-flag-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/remove_flag
Remove flag for a `Job` by ID
This endpoint requires the `edit_job` permission
# Remove signoff for a Job
Source: https://docs.tread.ai/api-reference/jobs/remove-signoff-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/remove_signoff
Remove signoff for a `Job` by ID
This endpoint requires the `edit_job` permission
# Request a Job
Source: https://docs.tread.ai/api-reference/jobs/request-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/request
Request a `Job` by ID to assigned `driver_id` on the job.
This endpoint requires the `edit_job` permission
# Resume a Job
Source: https://docs.tread.ai/api-reference/jobs/resume-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/resume
Resume a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Retrieve a single Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-a-single-job
/api-reference/openapi.json get /v1/jobs/{id}
Retrieve `Job` by ID
# Retrieve all JobEvents that belong to a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-all-jobevents-that-belong-to-a-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/job_events
Retrieve `Job` `Job-Events` by `ID`
# Retrieve Jobs that belong to an Order
Source: https://docs.tread.ai/api-reference/jobs/retrieve-jobs-that-belong-to-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/jobs
Retrieve `Jobs` that belong to an `Order` and is visible to the currently authenticated Company.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `order_id`
* `job_id`
* `company.legal_name`
* `account.name`
* `project.name`
* `order.dispatch_number`
* user as driver: `driver.first_name` || `driver.last_name`
* contact as foreman_contact: `foreman_contact.name` || `foreman_contact.email` || `foreman_contact.phone`
* contact as collaborator_contact: `collaborator_contact.name` || `collaborator_contact.email` || `collaborator_contact.phone`
* contact as sales_contact: `sales_contact.name` || `sales_contact.email` || `sales_contact.phone`
* contact as supervisor_contact: `supervisor_contact.name` || `supervisor_contact.email` || `supervisor_contact.phone`
Filter usage:
* to filter a single state: `filter[states][]=created`
* to filter multiple states: `filter[states][]=created&filter[states][]=arrived_dropoff`
# Retrieve Location Histories for a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-location-histories-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/location_histories
Retrieve `LocationHistories` for a `Job`.
# Retrieve Location Histories For MovingSite on A Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-location-histories-for-movingsite-on-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/moving_sites/{moving-site-id}/location_histories
Retrieve `LocationHistory` of a `MovingSite` for a `Job`.
# Retrieve the Timeline of a Job
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/timeline
Retrieve `Job`'s Timeline by ID
# Retrieve the Timeline of an Order
Source: https://docs.tread.ai/api-reference/jobs/retrieve-the-timeline-of-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/timeline
Retrieve `Orders`'s Timeline by ID
# Review a Job
Source: https://docs.tread.ai/api-reference/jobs/review-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/review
Sets the `Job` by ID to `in_review` state.
This endpoint requires the `edit_job` permission
# Send SMS to a driver of a Job
Source: https://docs.tread.ai/api-reference/jobs/send-sms-to-a-driver-of-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/driver_sms
Send sms text to `driver` of a `Job`.
# Sign off a Job
Source: https://docs.tread.ai/api-reference/jobs/sign-off-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/sign_off
Sign off a `Job` by ID
This endpoint requires the `edit_job` permission
# Unapprove a Job
Source: https://docs.tread.ai/api-reference/jobs/unapprove-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unapprove
Unapprove a `Job` by ID
This endpoint requires the `approve_job` permission.
Principals with the `Company Admin` role can specify a specific `approval_type`.
# Unassign the Driver or Vendor from a Job
Source: https://docs.tread.ai/api-reference/jobs/unassign-the-driver-or-vendor-from-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unassign
Unassign a `vendor` for a `Job` by ID
This endpoint requires the `assign_job` permission
# Unload the Material for a Job
Source: https://docs.tread.ai/api-reference/jobs/unload-the-material-for-a-job
/api-reference/openapi.json put /v1/jobs/{job-id}/unload_material
Unload `material` for a `Job` by ID
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Update a Job
Source: https://docs.tread.ai/api-reference/jobs/update-a-job
/api-reference/openapi.json patch /v1/jobs/{id}
Update a `Job` by ID
This endpoint requires the `edit_job` permission.
If setting the `driver_id`, the `assign_job` permission is also required.
# Retrieve a Payable Invoice for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-payable-invoice-for-a-given-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/payable
Retrieve a `Payable Invoice` for a given `Job`.
This can be a `Payable` for a `Vendor` or a `Driver`.
# Retrieve a Receivable for a given Job
Source: https://docs.tread.ai/api-reference/invoices/retrieve-a-receivable-for-a-given-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/receivable
Retrieve a `Receivable Invoice` for a given `Job`
# Retrieve the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/retrieve-the-jobsummary-for-a-job
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/summary
Retrieve the `JobSummary` for a `Job` for a `Company`.
A `JobSummary` will only exist for a `Job` in the `completed` state.
# Retrieve the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/retrieve-the-jobsummary-for-a-job-1
/api-reference/openapi.json get /v1/jobs/{job-id}/summary
Retrieve the `JobSummary` for a `Job`.
A `JobSummary` will only exist for a `Job` in the `completed` state.
# Update the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/update-the-jobsummary-for-a-job
/api-reference/openapi.json patch /v1/companies/{company-id}/jobs/{job-id}/summary
Update the `JobSummary` for a `Job`.
This endpoint requires the `edit_job_summary` `IamPermission`.
# Update the JobSummary for a Job
Source: https://docs.tread.ai/api-reference/jobsummaries/update-the-jobsummary-for-a-job-1
/api-reference/openapi.json patch /v1/jobs/{job-id}/summary
Update the `JobSummary` for a `Job`.
This endpoint requires the `edit_job_summary` `IamPermission`.
# Create a KML/KMZ file for a Company
Source: https://docs.tread.ai/api-reference/kmlfiles/create-a-kmlkmz-file-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/kml_files
Create a `KML`/`KMZ` file that belongs to a `Company`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Delete a KMLFile
Source: https://docs.tread.ai/api-reference/kmlfiles/delete-a-kmlfile
/api-reference/openapi.json delete /v1/kml_files/{id}
Delete a `KMLFile` by `ID`
# Retrieve KML/KMZ files that belong to a Company
Source: https://docs.tread.ai/api-reference/kmlfiles/retrieve-kmlkmz-files-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/kml_files
Retrieve `KML`/`KMZ` files for a `Company`.
# Update a KMLFile
Source: https://docs.tread.ai/api-reference/kmlfiles/update-a-kmlfile
/api-reference/openapi.json patch /v1/kml_files/{id}
Update `KMLFile` by `ID`
# Create a new Label
Source: https://docs.tread.ai/api-reference/labels/create-a-new-label
/api-reference/openapi.json post /v1/companies/{company-id}/labels
Create a new `Label`
This endpoint requires the `manage_labels` permission
# Delete a Label
Source: https://docs.tread.ai/api-reference/labels/delete-a-label
/api-reference/openapi.json delete /v1/companies/{company-id}/labels/{id}
Delete a `Label` by ID (soft delete)
This endpoint requires the `manage_labels` permission
# Retrieve a single Label
Source: https://docs.tread.ai/api-reference/labels/retrieve-a-single-label
/api-reference/openapi.json get /v1/companies/{company-id}/labels/{id}
Retrieve a single `Label` by ID
This endpoint requires the `manage_labels` permission
# Retrieve Labels for the Company
Source: https://docs.tread.ai/api-reference/labels/retrieve-labels-for-the-company
/api-reference/openapi.json get /v1/companies/{company-id}/labels
Retrieve `Label`s for the specified `Company`.
This endpoint requires the `manage_labels` permission
# Update a Label
Source: https://docs.tread.ai/api-reference/labels/update-a-label
/api-reference/openapi.json patch /v1/companies/{company-id}/labels/{id}
Update a `Label` by ID
This endpoint requires the `manage_labels` permission
# Add a new load to a Job
Source: https://docs.tread.ai/api-reference/loads/add-a-new-load-to-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/loads
Create a `Load` by for a `Job`
This endpoint requires the `create_loads` permission
# Approve a Load
Source: https://docs.tread.ai/api-reference/loads/approve-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/approve
Approve a `Load` by ID
This endpoint requires the `approve_load` permission.
# Approve a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/approve-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/approve
Approve a `Load` by ID as a `Company`
This endpoint requires the `approve_load` permission.
# Complete a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/complete-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/complete
Complete a `Load` by ID as a `Company`
This endpoint requires the `edit_job` permission or if the current user is the assigned driver
# Create or update the DriverSignature on a Load
Source: https://docs.tread.ai/api-reference/loads/create-or-update-the-driversignature-on-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/signatures/driver
Create or update the `DriverSignature` on a `Load`.
# Create or update the DropoffSignature on a Load
Source: https://docs.tread.ai/api-reference/loads/create-or-update-the-dropoffsignature-on-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/signatures/dropoff
Create or update the `DropoffSignature` on a `Load`.
# Delete a Load
Source: https://docs.tread.ai/api-reference/loads/delete-a-load
/api-reference/openapi.json delete /v1/loads/{id}
Delete a `Load` by ID
This endpoint requires the `delete_load` permission
# Delete the DriverSignature from a Load
Source: https://docs.tread.ai/api-reference/loads/delete-the-driversignature-from-a-load
/api-reference/openapi.json delete /v1/loads/{load-id}/signatures/driver
Delete the `DriverSignature` from a `Load`.
# Delete the DropoffSignature from a Load
Source: https://docs.tread.ai/api-reference/loads/delete-the-dropoffsignature-from-a-load
/api-reference/openapi.json delete /v1/loads/{load-id}/signatures/dropoff
Delete the `DropoffSignature` from a `Load`
# Retrieve a single Load
Source: https://docs.tread.ai/api-reference/loads/retrieve-a-single-load
/api-reference/openapi.json get /v1/loads/{id}
Retrieve `Load` by ID
# Retrieve all Signatures for a Load
Source: https://docs.tread.ai/api-reference/loads/retrieve-all-signatures-for-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/signatures
Retrieve all `Signatures` for a `Load`
# Retrieve Loads for the current Company for approval
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-for-the-current-company-for-approval
/api-reference/openapi.json get /v1/loads/approval
Retrieve completed `Loads` for the current `Company` which are ready for the `Foreman` to approve.
# Retrieve Loads of a Job
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/loads
Retrieve `Loads` of a `Job`.
# Retrieve Loads of a Job for a Company
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-job-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/jobs/{job-id}/loads
Retrieve `Loads` of a `Job` for a `Company`.
# Retrieve Loads of a Settlement
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-a-settlement
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/loads
Retrieve `Loads` of all `Orders` belonging to a `Settlement`.
# Retrieve Loads of an Order
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/loads
Retrieve `Loads` of an `Order`.
# Retrieve Loads of an Order for a Company
Source: https://docs.tread.ai/api-reference/loads/retrieve-loads-of-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/loads
Retrieve `Loads` of an `Order` for a `Company`.
# Typeahead search on Loads by Company
Source: https://docs.tread.ai/api-reference/loads/typeahead-search-on-loads-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/loads/typeahead
Typeahead search against the `load_id` property for `Loads` visible to the currently authenticated `Company`.
# Unapprove a Load
Source: https://docs.tread.ai/api-reference/loads/unapprove-a-load
/api-reference/openapi.json put /v1/loads/{load-id}/unapprove
Unapprove a `Load` by ID
This endpoint requires the `approve_load` permission.
# Unapprove a Load as a Company
Source: https://docs.tread.ai/api-reference/loads/unapprove-a-load-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/loads/{load-id}/unapprove
Unapprove a `Load` by ID as a `Company`
This endpoint requires the `approve_load` permission.
# Update a Load
Source: https://docs.tread.ai/api-reference/loads/update-a-load
/api-reference/openapi.json patch /v1/loads/{id}
Update a `Load` by ID
This endpoint requires the `edit_load` permission
# Create a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/create-a-materialrate
/api-reference/openapi.json post /v1/material_rates
Create a `MaterialRate`.
This endpoint requires the `create_material_rate` permission.
# Create a MaterialRate within a Company context
Source: https://docs.tread.ai/api-reference/materialrates/create-a-materialrate-within-a-company-context
/api-reference/openapi.json post /v1/companies/{company-id}/material_rates
Create a `MaterialRate` within a specific `Company` context.
This endpoint requires the `create_material_rate` permission.
# Delete a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/delete-a-materialrate
/api-reference/openapi.json delete /v1/material_rates/{id}
Delete a `MaterialRate` by ID.
This endpoint requires the `edit_material_rate` permission.
# Retrieve a single MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-a-single-materialrate
/api-reference/openapi.json get /v1/material_rates/{id}
Retrieve a `MaterialRate` by ID.
# Retrieve MaterialRates of a Project
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-materialrates-of-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/material_rates
Retrieve `MaterialRates` of a `Project`.
# Retrieve MaterialRates that belong to a Company
Source: https://docs.tread.ai/api-reference/materialrates/retrieve-materialrates-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_rates
Retrieve `MaterialRates` for a `Company`.
- When retrieving `Company`-default `MaterialRates`, use `filter[default_only]=true`.
- When retrieving `Customer Account`-specific `MaterialRates`, use `filter[customer_account_id]=customer_account_uuid`.
# Update a MaterialRate
Source: https://docs.tread.ai/api-reference/materialrates/update-a-materialrate
/api-reference/openapi.json patch /v1/material_rates/{id}
Update a `MaterialRate` by ID.
This endpoint requires the `edit_material_rate` permission.
# Activate a Material
Source: https://docs.tread.ai/api-reference/materials/activate-a-material
/api-reference/openapi.json put /v1/materials/{material-id}/activate
Activate a `Material` by ID
This endpoint requires the `edit_material` permission
# Create a Material
Source: https://docs.tread.ai/api-reference/materials/create-a-material
/api-reference/openapi.json post /v1/materials
Create a new Material
This endpoint requires the `create_materials` permission
# Create a Material for a Company
Source: https://docs.tread.ai/api-reference/materials/create-a-material-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/materials
Create `Materials` for a `Company`
This endpoint requires the `create_materials` permission
# Deactivate a Material
Source: https://docs.tread.ai/api-reference/materials/deactivate-a-material
/api-reference/openapi.json put /v1/materials/{material-id}/deactivate
Deactivate a `Material` by ID
This endpoint requires the `edit_material` permission
# Delete a Material
Source: https://docs.tread.ai/api-reference/materials/delete-a-material
/api-reference/openapi.json delete /v1/materials/{id}
Delete a `Material` by ID
This endpoint requires the `delete_material` permission
# Retrieve a single Material
Source: https://docs.tread.ai/api-reference/materials/retrieve-a-single-material
/api-reference/openapi.json get /v1/materials/{id}
Retrieve a `Material` by ID
# Retrieve Materials that belong to a Company
Source: https://docs.tread.ai/api-reference/materials/retrieve-materials-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/materials
Retrieve `Materials` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `external_id`
* `material_type.name`
# Retrieve Materials that belong to the current Company
Source: https://docs.tread.ai/api-reference/materials/retrieve-materials-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/materials
Retrieve `Materials` visible to the currently authenticated `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `external_id`
* `material_type.name`
# Update a Material
Source: https://docs.tread.ai/api-reference/materials/update-a-material
/api-reference/openapi.json patch /v1/materials/{id}
Update `Material` by ID
This endpoint required the `edit_material` permission
# Retrieve a list of MaterialTypes
Source: https://docs.tread.ai/api-reference/materialtype/retrieve-a-list-of-materialtypes
/api-reference/openapi.json get /v1/material_types
Get list of all `MaterialTypes`
# Retrieve MaterialTypes for a Company
Source: https://docs.tread.ai/api-reference/materialtype/retrieve-materialtypes-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/material_types
Retrieve `MaterialTypes` for a `Company`
# Create a Report Category
Source: https://docs.tread.ai/api-reference/omnireports/create-a-report-category
/api-reference/openapi.json post /v1/companies/{company-id}/report_categories
Create a `Report Category`
# Create Omni Report for a Company
Source: https://docs.tread.ai/api-reference/omnireports/create-omni-report-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/omni_reports
Create `Omni Report` for a `Company`
# Delete Omni Report
Source: https://docs.tread.ai/api-reference/omnireports/delete-omni-report
/api-reference/openapi.json delete /v1/omni_reports/{id}
Delete `Omni Report` by `ID`
# Delete ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/delete-reportcategory
/api-reference/openapi.json delete /v1/report_categories/{id}
Delete `ReportCategory` by `ID`
# Retrieve all Omni Reports that belong to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omni-reports-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/omni_reports
Retrieve `Omni Reports` that belong to `Company` by `ID`.
This endpoint requires the `view_report` permission.
# Retrieve all Omni Reports visible to the current Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omni-reports-visible-to-the-current-company
/api-reference/openapi.json get /v1/omni_reports
Retrieve all `Omni Reports` visible to the current `Company`
This endpoint requires the `view_report` permission
# Retrieve all OmniReports under a ReportCategory that belong to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omnireports-under-a-reportcategory-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/report_categories/{report-category-id}/omni_reports
Retrieve all `OmniReports` under a `ReportCategory` that belong to a `Company`
This endpoint requires the `view_report` permission
# Retrieve embedded link for Omni Report by Report Name
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-embedded-link-for-omni-report-by-report-name
/api-reference/openapi.json get /v1/omni_reports/{id}
Retrieve embedded link for Omni Report by `ID`
This endpoint requires the `view_report` permission
# Retrieve embedded link for Omni Report that belongs to a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-embedded-link-for-omni-report-that-belongs-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/omni_reports/{id}
Retrieve embedded link for Omni Report by `ID` that is scoped to a `Company` and their child `Companies`.
This endpoint requires the `view_report` permission.
# Retrieve ReportCategories for a Company
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-reportcategories-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/report_categories
Retrieve `ReportCategories` for a `Company`
# Update Omni Report
Source: https://docs.tread.ai/api-reference/omnireports/update-omni-report
/api-reference/openapi.json patch /v1/omni_reports/{id}
Update `OmniReport` by `ID`
# Update ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/update-reportcategory
/api-reference/openapi.json patch /v1/report_categories/{id}
Update `ReportCategory` by `ID`
# Create a ResourceScope
Source: https://docs.tread.ai/api-reference/resourcescopes/create-a-resourcescope
/api-reference/openapi.json post /v1/users/{user-id}/resource_scopes
Create a `ResourceScope`.
This endpoint requires the `create_resource_scope` permission.
# Create a ResourceScope for a User in a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/create-a-resourcescope-for-a-user-in-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/resource_scopes
Create a `ResourceScope` for a `User` in a managed company.
This endpoint requires the `create_resource_scope` permission.
# Delete a ResourceScope
Source: https://docs.tread.ai/api-reference/resourcescopes/delete-a-resourcescope
/api-reference/openapi.json delete /v1/resource_scopes/{id}
Delete a `ResourceScope`.
This endpoint requires the `delete_resource_scope` permission.
# Delete a ResourceScope for a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/delete-a-resourcescope-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/resource_scopes/{id}
Delete a `ResourceScope` for a user in a managed company.
This endpoint requires the `delete_resource_scope` permission.
# Retrieve ResourceScopes for a User
Source: https://docs.tread.ai/api-reference/resourcescopes/retrieve-resourcescopes-for-a-user
/api-reference/openapi.json get /v1/users/{user-id}/resource_scopes
Retrieve `ResourceScopes` for a `User`.
# Retrieve ResourceScopes for a User in a Managed Company
Source: https://docs.tread.ai/api-reference/resourcescopes/retrieve-resourcescopes-for-a-user-in-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/resource_scopes
Retrieve `ResourceScopes` for a `User` in a managed company.
# Bulk Create Historical Locations
Source: https://docs.tread.ai/api-reference/users/bulk-create-historical-locations
/api-reference/openapi.json post /v1/users/me/locations
Record historical location data for a User's Mobile Device
# Create a User
Source: https://docs.tread.ai/api-reference/users/create-a-user
/api-reference/openapi.json post /v1/users
Create a `User`
This endpoint requires the `create_user` permission
# Create Scheduled Time Off
Source: https://docs.tread.ai/api-reference/users/create-scheduled-time-off
/api-reference/openapi.json post /v1/users/{user-id}/scheduled_time_offs
Create a Scheduled Time Off for a `User`
# Create User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/create-user-for-a-managed-company
/api-reference/openapi.json post /v1/companies/{company-id}/managed_companies/{managed-company-id}/users
Create a `User` for a Managed Company
This endpoint requires the `create_user` permission
# Delete a Scheduled Time Off
Source: https://docs.tread.ai/api-reference/users/delete-a-scheduled-time-off
/api-reference/openapi.json delete /v1/users/{user-id}/scheduled_time_offs/{id}
Delete Scheduled Time Off for a `User`
# Delete a User
Source: https://docs.tread.ai/api-reference/users/delete-a-user
/api-reference/openapi.json delete /v1/users/{id}
Delete a `User` by ID
This endpoint requires the `delete_user` permission
# Delete User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/delete-user-for-a-managed-company
/api-reference/openapi.json delete /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Delete `User` by ID for a Managed Company
This endpoint requires the `delete_user` permission
# Impersonate a User
Source: https://docs.tread.ai/api-reference/users/impersonate-a-user
/api-reference/openapi.json post /v1/users/{user-id}/impersonations
Impersonate a `User`.
This endpoint requires the `impersonate` `IamPermission`.
# Mark Schedule Available
Source: https://docs.tread.ai/api-reference/users/mark-schedule-available
/api-reference/openapi.json put /v1/users/{user-id}/scheduled_time_offs/available
Mark current `User` as available and disable any `Scheduled Time Off`
# Mark Schedule Unavailable
Source: https://docs.tread.ai/api-reference/users/mark-schedule-unavailable
/api-reference/openapi.json put /v1/users/{user-id}/scheduled_time_offs/unavailable
Mark current `User` as unavailable and create a new `Scheduled time off`
# Retrieve current User's Access
Source: https://docs.tread.ai/api-reference/users/retrieve-current-users-access
/api-reference/openapi.json get /v1/users/me/access
Retrieve current `User`'s `Access`
# Retrieve Permissions granted to the current User
Source: https://docs.tread.ai/api-reference/users/retrieve-permissions-granted-to-the-current-user
/api-reference/openapi.json get /v1/users/me/iam_permissions
Retrieve the current authenticated users permissions
# Retrieve Scheduled Time Offs for a User
Source: https://docs.tread.ai/api-reference/users/retrieve-scheduled-time-offs-for-a-user
/api-reference/openapi.json get /v1/users/{user-id}/scheduled_time_offs
Retrieve all active `ScheduledTimeOffs` visible to your `Company` for a `User`
# Retrieve the current User
Source: https://docs.tread.ai/api-reference/users/retrieve-the-current-user
/api-reference/openapi.json get /v1/users/me
Retrieve the current authenticated `User`
# Retrieve User
Source: https://docs.tread.ai/api-reference/users/retrieve-user
/api-reference/openapi.json get /v1/users/{id}
Retrieve a `User` by ID
# Retrieve User by ID for a Managed Company
Source: https://docs.tread.ai/api-reference/users/retrieve-user-by-id-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Retrieve `User` by ID for a Managed Company
# Retrieve Users for a Managed Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users
Retrieve `Users` for a managed company.
# Retrieve Users that belong to a Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/users
Retrieve `Users` for a `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `first_name`
* `last_name`
* `email`
* `phone`
* `company.legal_name`
* `iam_roles.name`
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
# Retrieve Users that belong to the current Company
Source: https://docs.tread.ai/api-reference/users/retrieve-users-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/users
Retrieve `Users` visible to your `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `first_name`
* `last_name`
* `email`
* `phone`
* `company.legal_name`
* `iam_roles.name`
Note:
- `filter[iam_roles]` array are applied as `OR` in the query
- `filter[label_ids]` array are applied as `OR` in the query
# Revokes all active B2B and B2B sessions for the given User
Source: https://docs.tread.ai/api-reference/users/revokes-all-active-b2b-and-b2b-sessions-for-the-given-user
/api-reference/openapi.json delete /v1/users/{user-id}/sessions
This endpoint revokes all active B2B and B2C sessions for the given `User`
# Send an Email Invite to a User
Source: https://docs.tread.ai/api-reference/users/send-an-email-invite-to-a-user
/api-reference/openapi.json put /v1/users/{user-id}/invite/email
This endpoint sends an Email invite to a `User` asynchronously.
# Send an Email Invite to a User in a Managed Company
Source: https://docs.tread.ai/api-reference/users/send-an-email-invite-to-a-user-in-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/invite/email
This endpoint sends an Email invite to a `User` in a Managed Company asynchronously.
# Send an SMS Invite to a User
Source: https://docs.tread.ai/api-reference/users/send-an-sms-invite-to-a-user
/api-reference/openapi.json put /v1/users/{user-id}/invite/sms
This endpoint sends an SMS invite to a `User` asynchronously.
# Send an SMS Invite to a User in a Managed Company
Source: https://docs.tread.ai/api-reference/users/send-an-sms-invite-to-a-user-in-a-managed-company
/api-reference/openapi.json put /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{user-id}/invite/sms
This endpoint sends an SMS invite to a `User` in a Managed Company asynchronously.
# Set Current Location
Source: https://docs.tread.ai/api-reference/users/set-current-location
/api-reference/openapi.json post /v1/users/me/location
Set the current location for a User's Mobile Device
# Typeahead search Users for a Managed Company
Source: https://docs.tread.ai/api-reference/users/typeahead-search-users-for-a-managed-company
/api-reference/openapi.json get /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/typeahead
Typeahead search for `Users` in a managed company
# Update a User
Source: https://docs.tread.ai/api-reference/users/update-a-user
/api-reference/openapi.json patch /v1/users/{id}
Update a `User` by ID
A `User` can always update their own `Equipment` via the `equipment_id` /`additional_equipment_ids` properties.
Any other updates require the `edit_user` permission.
# Update User for a Managed Company
Source: https://docs.tread.ai/api-reference/users/update-user-for-a-managed-company
/api-reference/openapi.json patch /v1/companies/{company-id}/managed_companies/{managed-company-id}/users/{id}
Update `User` by ID for a Managed Company
A `User` can always update their own `Equipment` via the `equipment_id` /`additional_equipment_ids` properties.
Any other updates require the `edit_user` permission.
# Retrieve all OmniReports that are under a ReportCategory
Source: https://docs.tread.ai/api-reference/omnireports/retrieve-all-omnireports-that-are-under-a-reportcategory
/api-reference/openapi.json get /v1/report_categories/{report-category-id}/omni_reports
Retrieve all `OmniReports` that are under a `ReportCategory`
This endpoint requires the `view_report` permission
# Accept an Order
Source: https://docs.tread.ai/api-reference/orders/accept-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/accept
Accept an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Accept an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/accept-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/accept
Accept an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Calculate estimated Route time and distance
Source: https://docs.tread.ai/api-reference/orders/calculate-estimated-route-time-and-distance
/api-reference/openapi.json post /v1/route_estimate
Calculate estimated `Route` `time` and `distance`
# Cancel an Order
Source: https://docs.tread.ai/api-reference/orders/cancel-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/cancel
Cancel an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Cancel an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/cancel-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/cancel
Cancel an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Complete an Order
Source: https://docs.tread.ai/api-reference/orders/complete-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/complete
Complete an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Complete an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/complete-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/complete
Complete an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Copy an Order
Source: https://docs.tread.ai/api-reference/orders/copy-an-order
/api-reference/openapi.json post /v1/companies/{company-id}/orders/{order-id}/copy
Copy an existing `Order`.
This endpoint required the `create_order` `IamPermission`.
# Copy an Order
Source: https://docs.tread.ai/api-reference/orders/copy-an-order-1
/api-reference/openapi.json post /v1/orders/{order-id}/copy
Copy an existing `Order`.
This endpoint required the `create_order` `IamPermission`.
# Create an Order
Source: https://docs.tread.ai/api-reference/orders/create-an-order
/api-reference/openapi.json post /v1/orders
Create a new `Order`
This endpoint requires the `create_order` permission
# Create an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/create-an-order-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/orders
Create a new `Order`
This endpoint requires the `create_order` permission
# Generate estimated Order values
Source: https://docs.tread.ai/api-reference/orders/generate-estimated-order-values
/api-reference/openapi.json post /v1/companies/{company-id}/orders/estimate
Generates estimated `Order` values.
One of `total_loads`, `total_units`, or `truck_quantity` must be set in the request.
# Generate estimated Order values
Source: https://docs.tread.ai/api-reference/orders/generate-estimated-order-values-1
/api-reference/openapi.json post /v1/orders/estimate
Generates estimated `Order` values.
One of `total_loads`, `total_units`, or `truck_quantity` must be set in the request.
# Hold an Order
Source: https://docs.tread.ai/api-reference/orders/hold-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/hold
Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Hold an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/hold-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/hold
Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Reject an Order
Source: https://docs.tread.ai/api-reference/orders/reject-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/reject
Reject an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Reject an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/reject-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/reject
Reject an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Request an Order
Source: https://docs.tread.ai/api-reference/orders/request-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/request
Request an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Request an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/request-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/request
Request an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Retrieve a single Order
Source: https://docs.tread.ai/api-reference/orders/retrieve-a-single-order
/api-reference/openapi.json get /v1/orders/{id}
Retrieve `Order` by ID
# Retrieve a single Order for a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-a-single-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{id}
Retrieve `Order` by ID
# Retrieve Orders based on Invoices that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-invoices-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/invoicing
Retrieve `Orders` based on `Invoices` grouped by `Orders` that belong to `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
Invoice datagrid search (`search[invoice][datagrid]`) queries against the following properties:
* `job_id`
* `customer_account_name`
* `vendor_account_name`
* `driver_name`
* `order_id`
* `order_external_id`
* `order_name`
* `project_name`
* `project_external_id`
* `dispatch_number_name`
# Retrieve Orders based on Jobs for the current Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-jobs-for-the-current-company
/api-reference/openapi.json get /v1/orders/dispatch
Retrieve `Orders` based on `Jobs` grouped by `Orders` for the current `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
# Retrieve Orders based on Jobs that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-based-on-jobs-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch
Retrieve `Orders` based on `Jobs` grouped by `Orders` that belong to `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
# Retrieve Orders that belong to a Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders
Retrieve `Orders` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
* `dispatch_number`
# Retrieve Orders that belong to the current Company
Source: https://docs.tread.ai/api-reference/orders/retrieve-orders-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/orders
Retrieve `Orders` visible to the currently authenticated `Company`
Datagrid search (`search[datagrid]`) queries against the following properties:
* `company_name`
* `account_name`
* `project_name`
* `order_id`
* `project_external_id`
* `dispatch_number`
# Search Dispatch Numbers based on the current Dispatch results
Source: https://docs.tread.ai/api-reference/orders/search-dispatch-numbers-based-on-the-current-dispatch-results
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch_numbers/faceted_search
Searches `DispatchNumbers` in a typeahead style but instead of all `DispatchNumbers` for a `Company` this returns all `DispatchNumbers` that are associated to the dispatch list, where the dispatch list is defined by the `filter` and `search` inputs that belong to a `Company`.
# Send SMS to a driver of all the Jobs of an Order
Source: https://docs.tread.ai/api-reference/orders/send-sms-to-a-driver-of-all-the-jobs-of-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/driver_sms
Send sms text to `driver` of all `Job`s of an `Order`.
# Send SMS to a driver of all the Jobs of an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/send-sms-to-a-driver-of-all-the-jobs-of-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/driver_sms
Send sms text to `driver` of all `Job`s of an `Order`.
# Simulate an Order
Source: https://docs.tread.ai/api-reference/orders/simulate-an-order
/api-reference/openapi.json post /v1/companies/{company-id}/orders/simulate_order
Simulate an `Order` being dispatched and completed
# Start an Order
Source: https://docs.tread.ai/api-reference/orders/start-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/start
Start an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Start an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/start-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/start
Start an `Order`.
This endpoint requires the `edit_order` `IamPermission`.
# Typeahead search on Materials that belong to Order's Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-materials-that-belong-to-orders-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/materials/typeahead
Typeahead search against the `name` property for `Materials` that belong to the `Order`'s `Company`
# Typeahead search on Materials that belong to Order's Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-materials-that-belong-to-orders-company-1
/api-reference/openapi.json get /v1/orders/{order-id}/materials/typeahead
Typeahead search against the `name` property for `Materials` that belong to the `Order`'s `Company`
# Typeahead search on Orders by Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-orders-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/typeahead
Typeahead search against the `order_id` property for `Orders` visible to the currently authenticated `Company`.
# Typeahead search on Orders' Dispatch Number by Company
Source: https://docs.tread.ai/api-reference/orders/typeahead-search-on-orders-dispatch-number-by-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/dispatch_numbers/typeahead
Typeahead search against the `dispatch_number` property on `Orders` by current `Company`.
# Update an Order
Source: https://docs.tread.ai/api-reference/orders/update-an-order
/api-reference/openapi.json patch /v1/orders/{id}
Update `Order` by ID
This endpoint requires the `edit_order` permission _or_ the `edit_order_pre_accept` permission, which only allows editing if the Order is in `created`, `pending_request` or `rejected` state
# Update an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/update-an-order-for-a-company
/api-reference/openapi.json patch /v1/companies/{company-id}/orders/{id}
Update `Order` by ID
This endpoint requires the `edit_order` permission _or_ the `edit_order_pre_accept` permission, which only allows editing if the Order is in `created`, `pending_request` or `rejected` state
# Weather Hold an Order
Source: https://docs.tread.ai/api-reference/orders/weather-hold-an-order
/api-reference/openapi.json put /v1/orders/{order-id}/weather_hold
Weather Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Weather Hold an Order for a Company
Source: https://docs.tread.ai/api-reference/orders/weather-hold-an-order-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/weather_hold
Weather Hold an `Order`
This endpoint requires the `edit_order` `IamPermission`.
# Activate a Project
Source: https://docs.tread.ai/api-reference/projects/activate-a-project
/api-reference/openapi.json put /v1/projects/{project-id}/activate
Activate a `Project`
This endpoint requires the `edit_project` permission
# Create a Project in the current Company
Source: https://docs.tread.ai/api-reference/projects/create-a-project-in-the-current-company
/api-reference/openapi.json post /v1/projects
Create a new `Project`
This endpoint requires the `create_project` permission
# Deactivate a Project
Source: https://docs.tread.ai/api-reference/projects/deactivate-a-project
/api-reference/openapi.json put /v1/projects/{project-id}/deactivate
Deactivate a `Project`
This endpoint requires the `edit_project` permission
# Delete Project
Source: https://docs.tread.ai/api-reference/projects/delete-project
/api-reference/openapi.json delete /v1/projects/{id}
Delete `Project` by ID
This endpoint requires the `delete_project` permission
# Retrieve Project
Source: https://docs.tread.ai/api-reference/projects/retrieve-project
/api-reference/openapi.json get /v1/projects/{id}
Retrieve `Project` by ID
# Retrieve Projects that belong to a Company
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/projects
Retrieve `Projects` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `po_job_number`
* `project_id`
* `company.legal_name`
* `account.name`
* `external_id`
Filter usage:
* to filter a single state: `filter[states][]=active`
* to filter multiple states: `filter[states][]=inactive&filter[states][]=active`
# Retrieve Projects that belong to the current Company
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/projects
Retrieve `Projects` for a `Company`.
Datagrid search (`search[datagrid]`) queries against the following properties:
* `name`
* `po_job_number`
* `project_id`
* `company.legal_name`
* `account.name`
* `external_id`
# Retrieve Projects where the current User is a Salesperson
Source: https://docs.tread.ai/api-reference/projects/retrieve-projects-where-the-current-user-is-a-salesperson
/api-reference/openapi.json get /v1/companies/{company-id}/projects/salesperson
Retrieve `Projects` where the current `User` is a `Salesperson`
# Update Project
Source: https://docs.tread.ai/api-reference/projects/update-project
/api-reference/openapi.json patch /v1/projects/{id}
Update `Project` by ID
This endpoint requires the `edit_project` permission
# Create a Rate
Source: https://docs.tread.ai/api-reference/rates/create-a-rate
/api-reference/openapi.json post /v1/rates
Create a `Rate`
This endpoint requires the `create_rate` permission
# Retrieve Rates that belong to a Company
Source: https://docs.tread.ai/api-reference/rates/retrieve-rates-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/rates
Retrieve `Rates` that belong to a `Company`
# Retrieve Rates that belong to the current Company
Source: https://docs.tread.ai/api-reference/rates/retrieve-rates-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/rates
Retrieve `Rates` for a `Company`
# Activate a Site
Source: https://docs.tread.ai/api-reference/sites/activate-a-site
/api-reference/openapi.json put /v1/sites/{site-id}/activate
Activate a `Site` by ID
This endpoint requires the `edit_site` permission
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order
/api-reference/openapi.json put /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given order.
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order-1
/api-reference/openapi.json put /v1/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given order.
# Add a site to default site list on order
Source: https://docs.tread.ai/api-reference/sites/add-a-site-to-default-site-list-on-order-2
/api-reference/openapi.json put /v1/projects/{project-id}/default_sites/{waypoint-type}/{site-id}
Add a `Site` to the default_site list for an `Project`, given a particular 'WaypointType'.
Note: The underlying site grouping will be created automatically when the first
site is added for a given project.
# Assign Contacts for a Site
Source: https://docs.tread.ai/api-reference/sites/assign-contacts-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/contacts/bulk_assign
Assigns `Contacts` for a `Site`
# Bulk assign Additional Geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/bulk-assign-additional-geofences-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/additional_geofences/bulk_assign
Bulk assign `Additional Geofences` for a `Site` by `ID`
This will rewrite all `Additional Geofences` for the `Site` with payload data.
# Create a new Site
Source: https://docs.tread.ai/api-reference/sites/create-a-new-site
/api-reference/openapi.json post /v1/sites
Create a new `Site`
# Create an Additional Geofence for a Site
Source: https://docs.tread.ai/api-reference/sites/create-an-additional-geofence-for-a-site
/api-reference/openapi.json post /v1/sites/{site-id}/additional_geofences
Create an `Additional Geofence` for a `Site`
# Deactivate a Site
Source: https://docs.tread.ai/api-reference/sites/deactivate-a-site
/api-reference/openapi.json put /v1/sites/{site-id}/deactivate
Deactivate a `Site` by ID
This endpoint requires the `edit_site` permission
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order
/api-reference/openapi.json delete /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order-1
/api-reference/openapi.json delete /v1/orders/{order-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a single site from a default list of an order.
Source: https://docs.tread.ai/api-reference/sites/delete-a-single-site-from-a-default-list-of-an-order-2
/api-reference/openapi.json delete /v1/projects/{project-id}/default_sites/{waypoint-type}/{site-id}
Delete a `Site` to the default_site list for an `Order`, given a particular 'WaypointType'.
# Delete a Site by ID
Source: https://docs.tread.ai/api-reference/sites/delete-a-site-by-id
/api-reference/openapi.json delete /v1/sites/{id}
Delete a `Site` by ID
This endpoint requires the `delete_site` permission
# Retrieve a single Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-a-single-site
/api-reference/openapi.json get /v1/sites/{id}
Retrieve a `Site` by ID
# Retrieve a single Site for a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-a-single-site-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{id}
Retrieve a `Site` by ID for a `Company`
# Retrieve additional geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-additional-geofences-for-a-site
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/additional_geofences
Retrieve additional `geofences` for a `Site` by `site_id`
# Retrieve additional geofences for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-additional-geofences-for-a-site-1
/api-reference/openapi.json get /v1/sites/{site-id}/additional_geofences
Retrieve additional `geofences` for a `Site` by `site_id`
# Retrieve an Additional Geofence by ID
Source: https://docs.tread.ai/api-reference/sites/retrieve-an-additional-geofence-by-id
/api-reference/openapi.json get /v1/sites/{site-id}/additional_geofences/{id}
Retrieve an `Geofence` for a `Site` by `ID`
# Retrieve Contacts for a Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-contacts-for-a-site
/api-reference/openapi.json get /v1/sites/{site-id}/contacts
Retrieve all `Contacts` visible to your `Company` for a `Site`
# Retrieve Contacts for a Site within a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-contacts-for-a-site-within-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/contacts
Retrieve all `Contacts` for a `Site` within a specific `Company`. This endpoint includes explicit company-level authorization to ensure the site belongs to the specified company.
# Retrieve default sites for a project, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-a-project-given-a-waypoint-type
/api-reference/openapi.json get /v1/projects/{project-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Project`, given a particular 'WaypointType'.
# Retrieve default sites for an order, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-an-order-given-a-waypoint-type
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Order`, given a particular 'WaypointType'.
# Retrieve default sites for an order, given a waypoint type.
Source: https://docs.tread.ai/api-reference/sites/retrieve-default-sites-for-an-order-given-a-waypoint-type-1
/api-reference/openapi.json get /v1/orders/{order-id}/default_sites/{waypoint-type}
Retrieve the `Sites` that belong to the default list of an `Order`, given a particular 'WaypointType'.
# Retrieve SiteEquipmentStats for given Site
Source: https://docs.tread.ai/api-reference/sites/retrieve-siteequipmentstats-for-given-site
/api-reference/openapi.json get /v1/companies/{company-id}/sites/{site-id}/stats
Retrieve `SiteEquipmentStats` for given `Site` by `ID`.
# Retrieve Sites that belong to a Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-sites-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/sites
Retrieve `Sites` for a `Company`.
# Retrieve Sites that belong to the current Company
Source: https://docs.tread.ai/api-reference/sites/retrieve-sites-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/sites
Retrieve `Site` for a `Company`.
# Typeahead search on Sites that belong to Order's Company
Source: https://docs.tread.ai/api-reference/sites/typeahead-search-on-sites-that-belong-to-orders-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` that belong to the `Order`'s `Company`
# Typeahead search on Sites that belong to Order's Company
Source: https://docs.tread.ai/api-reference/sites/typeahead-search-on-sites-that-belong-to-orders-company-1
/api-reference/openapi.json get /v1/orders/{order-id}/sites/typeahead
Typeahead search against the `name`, or `external_id` property for `Sites` that belong to the `Order`'s `Company`
# Update a Site
Source: https://docs.tread.ai/api-reference/sites/update-a-site
/api-reference/openapi.json patch /v1/sites/{id}
Update `Site` by ID
This endpoint required the 'edit_site' permission
# Update an Additional Geofence for a Site
Source: https://docs.tread.ai/api-reference/sites/update-an-additional-geofence-for-a-site
/api-reference/openapi.json patch /v1/sites/{site-id}/additional_geofences/{id}
Update an `Additional Geofence` for a `Site` by `ID`
# Approve a Ticket
Source: https://docs.tread.ai/api-reference/tickets/approve-a-ticket
/api-reference/openapi.json put /v1/tickets/{ticket-id}/approve
Approve a `Ticket` by ID
This endpoint requires the `edit_ticket` permission.
# Create a Ticket
Source: https://docs.tread.ai/api-reference/tickets/create-a-ticket
/api-reference/openapi.json post /v1/tickets
Create a `Ticket`
This endpoint requires the `create_ticket` permission
# Delete a Ticket
Source: https://docs.tread.ai/api-reference/tickets/delete-a-ticket
/api-reference/openapi.json delete /v1/tickets/{id}
Delete a `Ticket` by ID
This endpoint requires the `delete_ticket` permission
# Delete the Image that belongs to a Ticket
Source: https://docs.tread.ai/api-reference/tickets/delete-the-image-that-belongs-to-a-ticket
/api-reference/openapi.json delete /v1/tickets/{ticket-id}/image
Delete the `image` for a `Ticket`.
This endpoint requires the `delete_ticket` `IamPermission`
# Retrieve a single Ticket
Source: https://docs.tread.ai/api-reference/tickets/retrieve-a-single-ticket
/api-reference/openapi.json get /v1/tickets/{id}
Retrieve `Ticket` by ID
# Retrieve a single Ticket's AI metadata
Source: https://docs.tread.ai/api-reference/tickets/retrieve-a-single-tickets-ai-metadata
/api-reference/openapi.json get /v1/tickets/{ticket-id}/ai_metadata
Retrieve `Ticket`'s AI metadata by ID
# Retrieve Ticket Rollup Summary for an Order
Source: https://docs.tread.ai/api-reference/tickets/retrieve-ticket-rollup-summary-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/tickets/rollup_summary
Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
# Retrieve Ticket Rollup Summary for an Order for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-ticket-rollup-summary-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/tickets/rollup_summary
Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
# Retrieve Tickets for a Job
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/tickets
Retrive `Tickets` for a `Job`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets for a Settlement for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/tickets
Retrieve `Tickets` for a `Settlement`.
# Retrieve Tickets for an Order
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-an-order
/api-reference/openapi.json get /v1/orders/{order-id}/tickets
Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets for an Order for a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-for-an-order-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/orders/{order-id}/tickets
Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets that belong to a Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/tickets
Retrieve `Tickets` that belong to a `Company` by `ID`
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Retrieve Tickets that belong to the current Company
Source: https://docs.tread.ai/api-reference/tickets/retrieve-tickets-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/tickets
Retrieve `Tickets` for a `Company`
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
# Update a Ticket
Source: https://docs.tread.ai/api-reference/tickets/update-a-ticket
/api-reference/openapi.json patch /v1/tickets/{id}
Update a `Ticket` by ID
This endpoint requires the `edit_ticket` permission
# Update the Image that belongs to a Ticket
Source: https://docs.tread.ai/api-reference/tickets/update-the-image-that-belongs-to-a-ticket
/api-reference/openapi.json post /v1/tickets/{ticket-id}/image
Add or replace the `image` for a `Ticket`.
This endpoint requires the `edit_ticket` `IamPermission`
The following restrictions apply:
* `image` must be one of the following image types:`jpeg`, `jpg`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `image` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `image` must be a file.
# Void a Ticket
Source: https://docs.tread.ai/api-reference/tickets/void-a-ticket
/api-reference/openapi.json put /v1/tickets/{ticket-id}/void
Void a `Ticket` by ID.
This endpoint requires the `edit_ticket` permission.
# Retrieve the current driver_state
Source: https://docs.tread.ai/api-reference/driverstateevent/retrieve-the-current-driver_state
/api-reference/openapi.json get /v1/users/me/driver_state
Retrieve the current driver_state of the `User` if user is a `driver`.
This endpoint requires the `Driver` role
# Retrieve the time driver logged today
Source: https://docs.tread.ai/api-reference/driverstateevent/retrieve-the-time-driver-logged-today
/api-reference/openapi.json get /v1/users/me/driver_state/time_logged
Retrieve the time in minutes the `driver` was on_duty today.
This endpoint requires the `Driver` role
# Update Driver State to break
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-break
/api-reference/openapi.json put /v1/users/me/driver_state/break
This endpoint will update the status of a `driver` to `break`.
This endpoint requires the `Driver` role
# Update Driver State to off_duty
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-off_duty
/api-reference/openapi.json put /v1/users/me/driver_state/off_duty
This endpoint will update the status of a `driver` to `off_duty`.
This endpoint requires the `Driver` role
# Update Driver State to on_duty
Source: https://docs.tread.ai/api-reference/driverstateevent/update-driver-state-to-on_duty
/api-reference/openapi.json put /v1/users/me/driver_state/on_duty
This endpoint will update the status of a `driver` to `on_duty`.
This endpoint requires the `Driver` role
# Create a new UserDeviceToken
Source: https://docs.tread.ai/api-reference/integrations/create-a-new-userdevicetoken
/api-reference/openapi.json post /v1/users/me/device_tokens
This endpoint stores the firebase user token on the backend to generate notifications.
# Create a JobAssignment for a Job
Source: https://docs.tread.ai/api-reference/jobassignments/create-a-jobassignment-for-a-job
/api-reference/openapi.json post /v1/jobs/{job-id}/job_assignments
Create a `JobAssignment` for a `Job`.
This endpoint requires the `create_job_assignment` permission.
# Retrieve a single JobAssignment
Source: https://docs.tread.ai/api-reference/jobassignments/retrieve-a-single-jobassignment
/api-reference/openapi.json get /v1/job_assignments/{id}
Retrieve a single `JobAssignment`.
# Retrieve JobAssignments for a Job
Source: https://docs.tread.ai/api-reference/jobassignments/retrieve-jobassignments-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/job_assignments
Retrieve all `JobAssignments` visible to your `Company` for a `Job`
# Update a JobAssignment
Source: https://docs.tread.ai/api-reference/jobassignments/update-a-jobassignment
/api-reference/openapi.json patch /v1/job_assignments/{id}
Update a `Job Assignment` by ID
This endpoint requires the `edit_job_assignment` permission
# Retrieve LineItemTypes
Source: https://docs.tread.ai/api-reference/lineitemtype/retrieve-lineitemtypes
/api-reference/openapi.json get /v1/line_item_types
Retrieve all `LineItemTypes`. LineItemTypes define the types of line items that can appear on settlements (e.g., FreightRateLineItem, MaterialRateLineItem).
# Retrieve all LoadCycles for a Job
Source: https://docs.tread.ai/api-reference/loadcycles/retrieve-all-loadcycles-for-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/loads/cycles
Retrieve all `LoadCycles` for a `Job`.
A `LoadCycle` is an edge between two consecutive `Loads` that have reached the `arrived_pickup` state on a given `Job`.
The response includes all calculated `LoadCycles` as well as the average time (in minutes).
# Update the LoadSummary for a Load
Source: https://docs.tread.ai/api-reference/loadsummaries/update-the-loadsummary-for-a-load
/api-reference/openapi.json patch /v1/loads/{load-id}/summary
Update the `LoadSummary` for a `Load`.
This endpoint requires the `edit_load_summaries` and `edit_job` `IamPermission`.
# Copy a Rate
Source: https://docs.tread.ai/api-reference/rates/copy-a-rate
/api-reference/openapi.json post /v1/rates/{rate-id}/copy
Copy a `Rate` to another `Account` or `Driver`
This endpoint requires the `create_rate` permission
Usage:
- provide either `account_id` or `driver_id`
# Delete a Rate
Source: https://docs.tread.ai/api-reference/rates/delete-a-rate
/api-reference/openapi.json delete /v1/rates/{id}
Delete a `Rate` by ID
This endpoint requires the `delete_rate` permission
# Retrieve a single Rate
Source: https://docs.tread.ai/api-reference/rates/retrieve-a-single-rate
/api-reference/openapi.json get /v1/rates/{id}
Retrieve `Rate` by ID
# Update a Rate
Source: https://docs.tread.ai/api-reference/rates/update-a-rate
/api-reference/openapi.json patch /v1/rates/{id}
Update a `Rate` by ID
This endpoint requires the `edit_rate` permission
# Batch update ResourceUsageLogs for a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/batch-update-resourceusagelogs-for-a-driverday
/api-reference/openapi.json patch /v1/driver_days/{driver-day-id}/resource_usage_logs
Batch update `ResourceUsageLogs` for a `DriverDay`
This endpoint requires:
- `create_resource_usage_log` `IamPermission` for create
- `edit_resource_usage_log` `IamPermission` for update
- `delete_resource_usage_log` `IamPermission` for delete
# Batch update ResourceUsageLogs for a Job
Source: https://docs.tread.ai/api-reference/resourceusagelogs/batch-update-resourceusagelogs-for-a-job
/api-reference/openapi.json patch /v1/jobs/{job-id}/resource_usage_logs
Batch update `ResourceUsageLogs` for a `Job`
This endpoint requires:
- `create_resource_usage_log` `IamPermission` for create
- `edit_resource_usage_log` `IamPermission` for update
- `delete_resource_usage_log` `IamPermission` for delete
# Create a ResourceUsageLog for a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/create-a-resourceusagelog-for-a-driverday
/api-reference/openapi.json post /v1/driver_days/{driver-day-id}/resource_usage_logs
Create a `ResourceUsageLog` for a `DriverDay`.
This endpoint requires the `create_resource_usage_log` `IamPermission`.
# Delete a ResourceUsageLog by ID
Source: https://docs.tread.ai/api-reference/resourceusagelogs/delete-a-resourceusagelog-by-id
/api-reference/openapi.json delete /v1/resource_usage_logs/{id}
Deletes a `ResourceUsageLog` by `ID`
This endpoint requires the `delete_resource_usage_log` `IamPermission`.
# Retrieve ResourceUsageLogs that belong to a DriverDay
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-driverday
/api-reference/openapi.json get /v1/driver_days/{driver-day-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `DriverDay`
# Retrieve ResourceUsageLogs that belong to a Job
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-job
/api-reference/openapi.json get /v1/jobs/{job-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `Job`
# Retrieve ResourceUsageLogs that belong to a Load
Source: https://docs.tread.ai/api-reference/resourceusagelogs/retrieve-resourceusagelogs-that-belong-to-a-load
/api-reference/openapi.json get /v1/loads/{load-id}/resource_usage_logs
Retrieve `ResourceUsageLogs` that belong to a `Load`
# Update a ResourceUsageLog
Source: https://docs.tread.ai/api-reference/resourceusagelogs/update-a-resourceusagelog
/api-reference/openapi.json patch /v1/resource_usage_logs/{id}
Update a `ResourceUsageLog`
This endpoint requires the `edit_resource_usage_log` `IamPermission`.
# Create a new ServiceClass.
Source: https://docs.tread.ai/api-reference/serviceclass/create-a-new-serviceclass
/api-reference/openapi.json post /v1/service_classes
Create a new `ServiceClass`
This endpoint requires the `create_service_class` permission
# Create a ServiceClass for a Company.
Source: https://docs.tread.ai/api-reference/serviceclass/create-a-serviceclass-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/service_classes
Create a `ServiceClass` for a `Company`
This endpoint requires the `create_service_class` permission
# Delete a ServiceClass
Source: https://docs.tread.ai/api-reference/serviceclass/delete-a-serviceclass
/api-reference/openapi.json delete /v1/service_classes/{id}
Delete a `ServiceClass` by ID
This endpoint requires the `delete_service_class` permission
# Retrieve a single ServiceClass.
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-a-single-serviceclass
/api-reference/openapi.json get /v1/service_classes/{id}
Retrieve a single `ServiceClass` by ID
# Retrieve Service Classes that belong to a Company
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-service-classes-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/service_classes
Retrieve `ServiceClass` for a `Company`.
# Retrieve ServiceClasses that belong to the current Company
Source: https://docs.tread.ai/api-reference/serviceclass/retrieve-serviceclasses-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/service_classes
Retrieve `ServiceClass`s that belong to the current `Company`.
# Update a ServiceClass
Source: https://docs.tread.ai/api-reference/serviceclass/update-a-serviceclass
/api-reference/openapi.json patch /v1/service_classes/{id}
Update `ServiceClas` by ID
This endpoint requires the `edit_service_class` permission
# Retrieve Services that belong to a Company
Source: https://docs.tread.ai/api-reference/services/retrieve-services-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/services
Retrieve `Services` for a `Company`
# Retrieve Services that belong to the current Company
Source: https://docs.tread.ai/api-reference/services/retrieve-services-that-belong-to-the-current-company
/api-reference/openapi.json get /v1/services
Retrieve `Services` visible to a `Company`
# Approve a Settlement
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/approve
Deprecated in favor of "Approve a `Settlement` by ID as a `Company`".
Approve a `Settlement` by ID
# Approve a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/approve
Approve a `Settlement` by ID as a `Company`
# Approve a Settlement as the Customer
Source: https://docs.tread.ai/api-reference/settlements/approve-a-settlement-as-the-customer
/api-reference/openapi.json put /v1/settlements/{settlement-id}/customer_approve
Approve a `Settlement` as the `Customer` by ID
# Bulk Create Settlements
Source: https://docs.tread.ai/api-reference/settlements/bulk-create-settlements
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/bulk_create
Bulk Create `Settlements` for `Customers`, `Vendors` and `Drivers`.
# Create a FileAttachment on a Settlement
Source: https://docs.tread.ai/api-reference/settlements/create-a-fileattachment-on-a-settlement
/api-reference/openapi.json post /v1/settlements/{settlement-id}/file_attachments
Create a `FileAttachment` related to a `Settlement`. Requires permission to create attachment on `Project`—`create_settlement_attachments`.
* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `file` must be the `DirectUpload`'s `signed_id`
* If you're using a file then you must use the `multipart/form-data` mime-type and `file` must be a file.
# Create a Settlement
Source: https://docs.tread.ai/api-reference/settlements/create-a-settlement
/api-reference/openapi.json post /v1/settlements
Create a new `Settlement`
# Create a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/create-a-settlement-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/settlements
Create a `Settlement` from approved `Invoices` for the specified company
# Email a Settlement
Source: https://docs.tread.ai/api-reference/settlements/email-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/email_settlement
Email a `Settlement`
This requires `edit_settlement` permission.
**Deprecated:** Use the company-scoped endpoint `/v1/companies/{company-id}/settlements/{settlement-id}/email_settlement` instead.
# Email a Settlement (Company-scoped)
Source: https://docs.tread.ai/api-reference/settlements/email-a-settlement-company-scoped
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/email_settlement
Email a `Settlement` using company-scoped endpoint
This requires `edit_settlement` permission.
This endpoint allows parent companies to email settlements for their child companies.
# Export Settlement to Agave
Source: https://docs.tread.ai/api-reference/settlements/export-settlement-to-agave
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/export
Export a Settlement to Agave. The export is performed asynchronously.
# Generate new Settlement for Rebill
Source: https://docs.tread.ai/api-reference/settlements/generate-new-settlement-for-rebill
/api-reference/openapi.json post /v1/settlements/{settlement-id}/rebill
Generate new `Settlement` for Rebill
# Get Invoices for a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/get-invoices-for-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/invoices
Get `Invoices` for a `Settlement` for a `Company`
# Get SettlementEmailDeliveries for a Settlement
Source: https://docs.tread.ai/api-reference/settlements/get-settlementemaildeliveries-for-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/settlement_email_deliveries
Get `SettlementEmailDeliveries` for a `Settlement`
# Get SettlementEmailDeliveries for a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/get-settlementemaildeliveries-for-a-settlement-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/settlement_email_deliveries
Get `SettlementEmailDeliveries` for a `Settlement` as a `Company`
# Pay a Settlement
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/pay
Pay a `Settlement` by ID
# Pay a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/pay
Pay a `Settlement` by ID as a `Company`
# Pay a Settlement as the Customer
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-the-customer
/api-reference/openapi.json put /v1/settlements/{settlement-id}/customer_pay
Pay a `Settlement` as the `Customer` by ID
# Pay a Settlement as the Customer for a Company
Source: https://docs.tread.ai/api-reference/settlements/pay-a-settlement-as-the-customer-for-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/customer_pay
Pay a `Settlement` as the `Customer` by ID for a `Company`
# Rebill a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/rebill-a-settlement-for-a-company
/api-reference/openapi.json post /v1/companies/{company-id}/settlements/{settlement-id}/rebill
Create a new `Settlement` from a voided `Settlement` for a `Company`
# Rebill Settlement's Invoices Rates
Source: https://docs.tread.ai/api-reference/settlements/rebill-settlements-invoices-rates
/api-reference/openapi.json patch /v1/settlements/{settlement-id}/invoices/rebill_rates
Rebill `Settlement`'s `Invoices` `Rates`
# Retrieve a Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-a-settlement
/api-reference/openapi.json get /v1/settlements/{id}
Retrieve a `Settlement` by ID
# Retrieve a Settlement for a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-a-settlement-for-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{id}
Retrieve a `Settlement` by ID for the specified company
# Retrieve all FileAttachments for a given Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-fileattachments-for-a-given-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/file_attachments
Retrieve all `FileAttachments` for a given `Settlement`
# Retrieve all SettlementLineItems that belongs to a Settlement
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-settlementlineitems-that-belongs-to-a-settlement
/api-reference/openapi.json get /v1/settlements/{settlement-id}/settlement_line_items
Retrieve all `SettlementLineItems` that belongs to a `Settlement`.
Notes:
- if the `Settlement`'s configuration has no grouping, then the array response would just contain a single grouped result without the `group` field and the `line_items` would be all the line items.
# Retrieve all SettlementLineItems that belongs to a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-all-settlementlineitems-that-belongs-to-a-settlement-as-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/{settlement-id}/settlement_line_items
Retrieve all `SettlementLineItems` that belongs to a `Settlement` as a `Company`.
Notes:
- if the `Settlement`'s configuration has no grouping, then the array response would just contain a single grouped result without the `group` field and the `line_items` would be all the line items.
# Retrieve payable Settlements visible to a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-payable-settlements-visible-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/payables
Retrieve payable `Settlements` visible to a `Company`
# Retrieve payable Settlements visible to the current Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-payable-settlements-visible-to-the-current-company
/api-reference/openapi.json get /v1/settlements/payables
Retrieve payable `Settlements` visible to the current `Company`
# Retrieve receivable Settlements visible to a Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-receivable-settlements-visible-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/settlements/receivables
Retrieve receivable `Settlements` visible to a `Company`
# Retrieve receivable Settlements visible to the current Company
Source: https://docs.tread.ai/api-reference/settlements/retrieve-receivable-settlements-visible-to-the-current-company
/api-reference/openapi.json get /v1/settlements/receivables
Retrieve receivable `Settlements` visible to the current `Company`
# Send a Settlement
Source: https://docs.tread.ai/api-reference/settlements/send-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/send_settlement
Deprecated in favor of "Send a `Settlement` by ID as a `Company`".
Send a `Settlement` by ID
# Send a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/send-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/send_settlement
Send a `Settlement` by ID as a `Company`
# Unapprove a Settlement
Source: https://docs.tread.ai/api-reference/settlements/unapprove-a-settlement
/api-reference/openapi.json put /v1/settlements/{settlement-id}/unapprove
Deprecated in favor of "Unapprove a `Settlement` by ID as a `Company`".
Unapprove a `Settlement` by ID
# Unapprove a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/unapprove-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/unapprove
Unapprove a `Settlement` by ID as a `Company`
# Undo pay on a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/undo-pay-on-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/undo_pay
Undo pay on a `Settlement` by ID as a `Company`
# Update a Settlement
Source: https://docs.tread.ai/api-reference/settlements/update-a-settlement
/api-reference/openapi.json patch /v1/settlements/{id}
Update a `Settlement` by ID
# Void a Settlement as a Company
Source: https://docs.tread.ai/api-reference/settlements/void-a-settlement-as-a-company
/api-reference/openapi.json put /v1/companies/{company-id}/settlements/{settlement-id}/void
Void a `Settlement` by ID as a `Company`
# Void a Settlement by ID
Source: https://docs.tread.ai/api-reference/settlements/void-a-settlement-by-id
/api-reference/openapi.json put /v1/settlements/{settlement-id}/void
Void a `Settlement` by ID
# Create a SiteRateSchedule for a Project
Source: https://docs.tread.ai/api-reference/siterateschedules/create-a-siterateschedule-for-a-project
/api-reference/openapi.json post /v1/projects/{project-id}/site_rate_schedules
Create a `SiteRateSchedule` for a `Project`
# Delete SiteRateSchedule
Source: https://docs.tread.ai/api-reference/siterateschedules/delete-siterateschedule
/api-reference/openapi.json delete /v1/site_rate_schedules/{id}
Delete `SiteRateSchedule` by ID
# Retrieve SiteRateSchedules for a Project
Source: https://docs.tread.ai/api-reference/siterateschedules/retrieve-siterateschedules-for-a-project
/api-reference/openapi.json get /v1/projects/{project-id}/site_rate_schedules
Retrieve `SiteRateSchedules` for a `Project`
# Update SiteRateSchedule
Source: https://docs.tread.ai/api-reference/siterateschedules/update-siterateschedule
/api-reference/openapi.json patch /v1/site_rate_schedules/{id}
Update `SiteRateSchedule` by ID
# Retrieve all Remote Vehicles for a Telematics Fleet visible to the current Company
Source: https://docs.tread.ai/api-reference/telematics/retrieve-all-remote-vehicles-for-a-telematics-fleet-visible-to-the-current-company
/api-reference/openapi.json get /v1/telematics/fleets/{fleet-id}/remote_vehicles
Retrieve all `Remote Vehicles` for a `Telematics Fleet` visible to the current Company
# Retrieve all Telematics Fleets visible to the current Company
Source: https://docs.tread.ai/api-reference/telematics/retrieve-all-telematics-fleets-visible-to-the-current-company
/api-reference/openapi.json get /v1/telematics/fleets
Retrieve `TelematicsFleets` visible to the currently authenticated `Company`.
# Update a Telematics Remote Vehicle
Source: https://docs.tread.ai/api-reference/telematics/update-a-telematics-remote-vehicle
/api-reference/openapi.json patch /v1/telematics/remote_vehicles/{id}
Update a `Telematics Remote Vehicle` by `id`.
This endpoint requires the `edit_telematics_remote_vehicles` permission.
# Retrieve a single TwilioIntegration
Source: https://docs.tread.ai/api-reference/twiliointegrations/retrieve-a-single-twiliointegration
/api-reference/openapi.json get /v1/companies/{company-id}/twilio_integrations/{id}
Retrieve a single `TwilioIntegration` by ID
# Retrieve TwilioIntegrations that belong to a Company
Source: https://docs.tread.ai/api-reference/twiliointegrations/retrieve-twiliointegrations-that-belong-to-a-company
/api-reference/openapi.json get /v1/companies/{company-id}/twilio_integrations
Retrieve `TwilioIntegration`s for a `Company`.
# Update UserDevicePermissions
Source: https://docs.tread.ai/api-reference/userdevicepermission/update-userdevicepermissions
/api-reference/openapi.json put /v1/users/me/user_device_permissions
This endpoint will be used by the mobile app to update the user's permissions given in the app.