tread.io Projects API
The Projects API from tread.io — 10 operation(s) for projects.
The Projects API from tread.io — 10 operation(s) for projects.
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