tread.io Projects API

The Projects API from tread.io — 10 operation(s) for projects.

OpenAPI Specification

treadio-projects-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Horizon API V1 AccountExternalTruckIdentifier Projects API
  version: '1.0'
  contact:
    name: Tread
    url: https://tread.io
    email: developers@tread.io
  description: 'This is the Version 1 implementation.


    When in doubt we default to the practices outlined [here](https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#advanced-queries)'
  license:
    name: Private
    url: https://tread.io
servers:
- description: production
  url: https://api.tread-horizon.com
security:
- bearerAuth: []
tags:
- name: Projects
paths:
  /v1/companies/{company-id}/projects:
    parameters:
    - schema:
        type: string
      name: company-id
      in: path
      required: true
      description: Company ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve Projects that belong to a Company
      tags:
      - Projects
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-companies-company-id-projects
      x-stoplight:
        id: jpaq6qohyjyjo
      description: "Retrieve `Projects` for a `Company`.\n\nDatagrid search (`search[datagrid]`) queries against the following properties:\n * `name`\n * `po_job_number`\n * `project_id`\n * `company.legal_name`\n * `account.name`\n * `external_id`\n\n Filter usage:\n* to filter a single state: `filter[states][]=active`\n* to filter multiple states: `filter[states][]=inactive&filter[states][]=active`"
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-datagrid'
      - schema:
          type: array
        in: query
        name: filter[states]
        description: Project state filters.
      - $ref: '#/components/parameters/filter-requester_ids'
      - $ref: '#/components/parameters/filter-external_ids'
      - $ref: '#/components/parameters/filter-account_ids'
      - $ref: '#/components/parameters/filter-department_ids'
      - $ref: '#/components/parameters/filter-dispatch_number_ids'
      - $ref: '#/components/parameters/filter-po_job_numbers'
      - $ref: '#/components/parameters/filter-service_class_ids'
      - $ref: '#/components/parameters/filter-equipment_type_ids'
      - $ref: '#/components/parameters/filter-foreman_ids'
      - $ref: '#/components/parameters/filter-collaborator_ids'
      - $ref: '#/components/parameters/filter-salesperson_ids'
      - $ref: '#/components/parameters/filter-pickup_site_ids'
      - $ref: '#/components/parameters/filter-dropoff_site_ids'
  /v1/companies/{company-id}/projects/salesperson:
    parameters:
    - schema:
        type: string
        format: uuid
      name: company-id
      in: path
      required: true
      description: Company ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve Projects where the current User is a Salesperson
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    x-stoplight:
                      id: ascxooavwuuwg
                    items:
                      $ref: '#/components/schemas/Project-Read'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-companies-company-id-projects-salesperson
      x-stoplight:
        id: xzzypg34v7p8k
      description: Retrieve `Projects` where the current `User` is a `Salesperson`
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
  /v1/companies/{company-id}/projects/typeahead:
    parameters:
    - schema:
        type: string
      name: company-id
      in: path
      required: true
      description: Company ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Typeahead search on Projects for a Company
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project-Read-Typeahead'
                required:
                - data
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-companies-company-id-projects-typeahead
      description: Typeahead search against the `name` or `external_id` property on `Projects` for a `Company`.
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-query'
      - $ref: '#/components/parameters/filter-account_id'
      - $ref: '#/components/parameters/filter-states'
      - $ref: '#/components/parameters/filter-department_ids'
      x-stoplight:
        id: ovi6a7ram6mq5
      x-internal: true
  /v1/projects:
    parameters:
    - $ref: '#/components/parameters/Accept-Language'
    post:
      summary: Create a Project in the current Company
      operationId: post-v1-projects
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '415':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      x-stoplight:
        id: hzl58l811aajv
      description: 'Create a new `Project`


        This endpoint requires the `create_project` permission'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project-Create'
      tags:
      - Projects
    get:
      summary: Retrieve Projects that belong to the current Company
      operationId: get-v1-projects
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    x-stoplight:
                      id: 596sx9n2ju902
                    type: array
                    items:
                      $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '406':
          $ref: '#/components/responses/Error'
      x-stoplight:
        id: h741en60ac5ld
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-datagrid'
      - $ref: '#/components/parameters/filter-requester_ids'
      - $ref: '#/components/parameters/filter-external_ids'
      - $ref: '#/components/parameters/filter-account_ids'
      - $ref: '#/components/parameters/filter-department_ids'
      - $ref: '#/components/parameters/filter-dispatch_number_ids'
      - $ref: '#/components/parameters/filter-po_job_numbers'
      - $ref: '#/components/parameters/filter-service_class_ids'
      - $ref: '#/components/parameters/filter-equipment_type_ids'
      - $ref: '#/components/parameters/filter-foreman_ids'
      - $ref: '#/components/parameters/filter-collaborator_ids'
      - $ref: '#/components/parameters/filter-salesperson_ids'
      - $ref: '#/components/parameters/filter-pickup_site_ids'
      - $ref: '#/components/parameters/filter-dropoff_site_ids'
      tags:
      - Projects
      description: "Retrieve `Projects` for a `Company`.\n\nDatagrid search (`search[datagrid]`) queries against the following properties:\n * `name`\n * `po_job_number`\n * `project_id`\n * `company.legal_name`\n * `account.name`\n * `external_id`"
  /v1/projects/external_ids/typeahead:
    parameters:
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Typeahead search on Projects for a Company
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project-Read-Typeahead-External-Id'
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-projects-external_ids-typeahead
      description: Typeahead search against the `external_id` property all `Projects` that belong to current `Company`.
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-query'
      - $ref: '#/components/parameters/filter-account_id'
      - $ref: '#/components/parameters/filter-states'
      x-stoplight:
        id: g3c7a95tje9xx
      x-internal: true
  /v1/projects/typeahead:
    parameters:
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Typeahead search on Projects
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project-Read-Typeahead'
                required:
                - data
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-projects-typeahead
      description: 'Typeahead search against the `name` or `external_id` property for `Projects` visible to the currently authenticated `Company`.

        '
      x-internal: true
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      - $ref: '#/components/parameters/search-query'
      - $ref: '#/components/parameters/filter-account_id'
      - $ref: '#/components/parameters/filter-states'
      - $ref: '#/components/parameters/filter-department_ids'
      x-stoplight:
        id: 2bo13xsu452qn
  /v1/projects/{id}:
    parameters:
    - schema:
        type: string
      name: id
      in: path
      required: true
      description: Project ID
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve Project
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-projects-id
      x-stoplight:
        id: uwa6vxp0zgx1s
      description: Retrieve `Project` by ID
    patch:
      summary: Update Project
      operationId: patch-v1-projects-id
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '415':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      x-stoplight:
        id: 05suyjgrih7ay
      tags:
      - Projects
      description: 'Update `Project` by ID


        This endpoint requires the `edit_project` permission'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project-Update'
    delete:
      summary: Delete Project
      operationId: delete-v1-projects-id
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/ModelError'
      x-stoplight:
        id: huc6v88eeafj8
      description: 'Delete `Project` by ID


        This endpoint requires the `delete_project` permission'
      tags:
      - Projects
  /v1/projects/{project-id}/activate:
    parameters:
    - schema:
        type: string
      name: project-id
      in: path
      required: true
      description: Project ID
    - $ref: '#/components/parameters/Accept-Language'
    put:
      summary: Activate a Project
      operationId: put-v1-projects-project-id-activate
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '409':
          $ref: '#/components/responses/StateError'
        '415':
          $ref: '#/components/responses/Error'
      x-stoplight:
        id: 9pbv98fgjhk0o
      tags:
      - Projects
      description: 'Activate a `Project`


        This endpoint requires the `edit_project` permission'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties: {}
  /v1/projects/{project-id}/deactivate:
    parameters:
    - schema:
        type: string
      name: project-id
      in: path
      required: true
      description: Project ID
    - $ref: '#/components/parameters/Accept-Language'
    put:
      summary: Deactivate a Project
      operationId: put-v1-projects-project-id-deactivate
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Project-Read'
                required:
                - data
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
        '409':
          $ref: '#/components/responses/StateError'
        '415':
          $ref: '#/components/responses/Error'
      x-stoplight:
        id: ylrh322g74akl
      tags:
      - Projects
      description: 'Deactivate a `Project`


        This endpoint requires the `edit_project` permission'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties: {}
  /v1/projects/{project-id}/default_sites/{waypoint-type}:
    parameters:
    - schema:
        type: string
        enum:
        - pickup
        - drop_off
      name: waypoint-type
      in: path
      required: true
      description: Waypoint type
    - schema:
        type: string
      name: project-id
      in: path
      required: true
      description: Project Id
    - $ref: '#/components/parameters/Accept-Language'
    get:
      summary: Retrieve default sites for a project, given a waypoint type.
      tags:
      - Projects
      responses:
        '200':
          description: OK
          headers:
            Link:
              schema:
                type: string
              description: Contains prev and next links for pagination
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Site-Read-Nested'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '406':
          $ref: '#/components/responses/Error'
      operationId: get-v1-projects-project-id-default-sites
      parameters:
      - $ref: '#/components/parameters/page-limit'
      - $ref: '#/components/parameters/page-after'
      - $ref: '#/components/parameters/page-before'
      description: 'Retrieve the `Sites` that belong to the default list of an `Project`, given a particular ''WaypointType''.

        '
      x-stoplight:
        id: x9tdnf2b680k9
      x-internal: true
components:
  parameters:
    filter-po_job_numbers:
      name: filter[po_job_numbers]
      in: query
      required: false
      schema:
        type: array
        items:
          type: string
      description: The associated PO/Job Numbers
      x-stoplight:
        id: k8mj3nxp2r7t1
    filter-pickup_site_ids:
      name: filter[pickup_site_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Pickup Site IDs
    search-datagrid:
      name: search[datagrid]
      in: query
      required: false
      schema:
        type: string
      description: Search string for datagrid queries
    filter-account_ids:
      name: filter[account_ids]
      in: query
      required: false
      schema:
        type: string
      description: Account IDs filter
    filter-requester_ids:
      name: filter[requester_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Requester IDs
    filter-equipment_type_ids:
      name: filter[equipment_type_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated EquipmentType IDs
    filter-collaborator_ids:
      name: filter[collaborator_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Collaborator IDs
    filter-service_class_ids:
      name: filter[service_class_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated ServiceClass IDs
      x-stoplight:
        id: r5tp9qwm4j2n8
    filter-account_id:
      name: filter[account_id]
      in: query
      required: false
      schema:
        type: string
      description: Account ID filter
    Accept-Language:
      name: Accept-Language
      in: header
      schema:
        type: string
        default: en
        example: en
      description: 'The Accept-Language request HTTP header indicates the natural language and locale that the client prefers. '
    search-query:
      name: search[query]
      in: query
      required: false
      schema:
        type: string
      description: Search string for queries
    filter-foreman_ids:
      name: filter[foreman_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Foreman IDs
    filter-states:
      name: filter[states]
      in: query
      schema:
        type: array
      description: States based on the resource (e.g. Order states or Job states)
    page-limit:
      name: page[limit]
      in: query
      schema:
        type: integer
        format: int32
        default: 25
        maximum: 100
      description: The maximum number of paginated results to return
    page-after:
      name: page[after]
      in: query
      required: false
      schema:
        type: string
      description: The cursor to start paginating after
    filter-salesperson_ids:
      name: filter[salesperson_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Salesperson IDs
    filter-dropoff_site_ids:
      name: filter[dropoff_site_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Dropoff Site IDs
    filter-dispatch_number_ids:
      name: filter[dispatch_number_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated DispatchNumber IDs
    filter-department_ids:
      name: filter[department_ids]
      in: query
      required: false
      schema:
        type: array
      description: The associated Department IDs. Use 'none' to filter for records without a Department.
    filter-external_ids:
      name: filter[external_ids]
      in: query
      required: false
      schema:
        type: string
      description: The associated External IDs
    page-before:
      name: page[before]
      in: query
      required: false
      schema:
        type: string
      description: The cursor to stop paginating at
  schemas:
    ServiceClass-Read-Nested:
      title: ServiceClass-Read-Nested
      x-stoplight:
        id: ahk4knwjgo1di
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - type: object
        properties:
          name:
            type: string
            description: ServiceClass name.
        required:
        - name
    StateError-Response:
      title: StateError-Response
      x-stoplight:
        id: i0wsk2gmnaqup
      type: object
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/StateError'
      additionalProperties: false
    Project-Read:
      title: Project-Read
      x-stoplight:
        id: 4p869ign045x0
      allOf:
      - $ref: '#/components/schemas/Identifier'
      - $ref: '#/components/schemas/Timestamps'
      - type: object
        x-stoplight:
          id: gfks0fnwa815x
        required:
        - expires_at
        - effective_at
        - name
        - notes
        - order_notes
        - job_notes
        - internal_notes
        - po_job_number
        - external_id
        - state
        - project_id
        - company
        - account
        - phases
        - project_material_totals
        - foremen
        - collaborators
        - salespeople
        - hauler_rate_type
        - job_time
        - order_quantity
        - loads_per_truck
        - truck_count
        - units_per_hour
        - job_quantity
        - customer_rate_value
        - customer_rate_type
        - vendor_rate_value
        - vendor_rate_type
        - driver_rate_value
        - driver_rate_type
        - equipment_type_gross_capacity
        - load_unit_of_measure
        - job_unit_of_measure
        - order_unit_of_measure
        - recurring_loads
        - equipment_type_gross_capacity_unit_of_measure
        - charge_to_account
        - chase_missing_tickets
        - tax_rate
        - tax_freight
        - tax_material
        - tax_add_ons
        properties:
          expires_at:
            type: string
            x-stoplight:
              id: ypo4xculi788q
            nullable: true
          effective_at:
            type: string
            x-stoplight:
              id: fcnvg73e1j3v8
            nullable: true
          name:
            type: string
            x-stoplight:
              id: tld4cn3fzcmf3
          notes:
            type: string
            x-stoplight:
              id: vuyc4o4l7g54t
            nullable: true
          order_notes:
            type: string
            x-stoplight:
              id: 5hb0rlyvc15ao
            nullable: true
          job_notes:
            type: string
            x-stoplight:
              id: qh5hnt19uq4wm
            nullable: true
          internal_notes:
            type: string
            x-stoplight:
              id: s2osoxby50u29
            nullable: true
          po_job_number:
            type: string
            x-stoplight:
              id: ty2kf0ueaq3sw
            nullable: true
          external_id:
            type: string
            x-stoplight:
              id: q22ozbvyys81t
            nullable: true
          state:
            $ref: '#/components/schemas/ProjectState'
          project_id:
            type: string
            x-stoplight:
              id: v0vird4qt9luv
          company:
            $ref: '#/components/schemas/Company-Read-Nested'
          account:
            $ref: '#/components/schemas/Account-Read-Nested'
          contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
          site:
            $ref: '#/components/schemas/Site-Read-Nested'
          phases:
            type: array
            x-stoplight:
              id: v7naa00rm6sdg
            items:
              $ref: '#/components/schemas/Phase-Read'
          project_material_totals:
            type: array
            x-stoplight:
              id: mhaw3k0gg8icd
            items:
              $ref: '#/components/schemas/ProjectMaterialTotal-Read'
          foremen:
            type: array
            x-stoplight:
              id: bln4zo5e9k0cz
            items:
              $ref: '#/components/schemas/Foreman-Read-Nested'
          collaborators:
            type: array
            x-stoplight:
              id: cln4zo5e9k0cz
            items:
              $ref: '#/components/schemas/User-Read-Nested'
          salespeople:
            type: array
            x-stoplight:
              id: zzz4zo5e9k0cz
            items:
              $ref: '#/components/schemas/User-Read-Nested'
          sales_contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
          foreman_contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
          supervisor_contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
          collaborator_contact:
            $ref: '#/components/schemas/Contact-Read-Nested'
          department:
            $ref: '#/components/schemas/Department-Read-Nested'
          customer_rate:
            x-stoplight:
              id: hv0x4x84xjhgv
            anyOf:
            - $ref: '#/components/schemas/RateTime-Read-Nested'
            - $ref: '#/components/schemas/RatePerUnit-Read-Nested'
            - $ref: '#/components/schemas/RateCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatRate-Read-Nested'
          vendor_rate:
            x-stoplight:
              id: zqw55oqzxbjcf
            anyOf:
            - $ref: '#/components/schemas/RateTime-Read-Nested'
            - $ref: '#/components/schemas/RatePerUnit-Read-Nested'
            - $ref: '#/components/schemas/RateCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatRate-Read-Nested'
          driver_rate:
            x-stoplight:
              id: qrkqbxhb0691m
            anyOf:
            - $ref: '#/components/schemas/RateTime-Read-Nested'
            - $ref: '#/components/schemas/RatePerUnit-Read-Nested'
            - $ref: '#/components/schemas/RateCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatCommission-Read-Nested'
            - $ref: '#/components/schemas/RateFlatRate-Read-Nested'
          hauler_rate_type:
            type: string
            nullable: true
          service:
            $ref: '#/components/schemas/Service-Read-Nested'
          service_class:
            $ref: '#/components/schemas/ServiceClass-Read-Nested'
          job_time:
            type: integer
            x-stoplight:
              id: bpeck1k9rmjb3
            nullable: true
          order_quantity:
            type: string
            x-stoplight:
              id: bn2qwdatmex3n
            nullable: true
          equipment_type:
            $ref: '#/components/schemas/EquipmentType-Read-Nested'
          loads_per_truck:
            type: integer
            x-stoplight:
              id: xdjk8r7yzz2jz
            nullable: true
          truck_count:
            type: integer
            x-stoplight:
              id: p54rz53gbe36g
            nullable: true
          units_per_hour:
            type: integer
            x-stoplight:
              id: h4kh0tcu82ni0
            nullable: true
          job_quantity:
            type: string
            x-stoplight:
              id: rkr9r14aihvjs
            nullable: true
          waypoints:
            type: array
            x-stoplight:
              id: dwje8rido05xg
            items:
              $ref: '#/components/schemas/Waypoint-Read-Nested'
          customer_rate_value:
            type: string
            x-stoplight:
              id: syjmuphzgurad
            nullable: true
          customer_rate_type:
            $ref: '#/components/schemas/NullableRateType'
          vendor_rate_value:
            type: string
            x-stoplight:
              id: yhuvkn7bmgb6x
            nullable: true
          vendor_rate_type:
            $ref: '#/components/schemas/NullableRateType'
          driver_rate_value:
            type: string
            x-stoplight:
              id: kirj1xga7eraa
            nullable: true
          driver_rate_ty

# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/treadio/refs/heads/main/openapi/treadio-projects-api-openapi.yml