tread.io Tickets API
The Tickets API from tread.io — 14 operation(s) for tickets.
The Tickets API from tread.io — 14 operation(s) for tickets.
openapi: 3.0.3
info:
title: Horizon API V1 AccountExternalTruckIdentifier Tickets 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: Tickets
paths:
/v1/companies/{company-id}/orders/{order-id}/tickets:
parameters:
- schema:
type: string
format: uuid
name: company-id
in: path
required: true
description: Company ID
- schema:
type: string
format: uuid
name: order-id
in: path
required: true
description: Order ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Tickets for an Order for a Company
tags:
- Tickets
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/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-companies-company-id-orders-order-id-id-tickets
description: 'Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
'
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
- schema:
type: string
in: query
name: filter[from_date]
description: Start range of ticket.created_at
- schema:
type: string
in: query
name: filter[to_date]
description: End range of ticket.created_at
- schema:
type: boolean
in: query
name: filter[flagged]
description: Filter to only flagged or un-flagged Tickets
- $ref: '#/components/parameters/filter-sources'
x-stoplight:
id: sxk44khjpj9h8
/v1/companies/{company-id}/orders/{order-id}/tickets/rollup_summary:
parameters:
- schema:
type: string
format: uuid
name: company-id
in: path
required: true
description: Company ID
- schema:
type: string
format: uuid
name: order-id
in: path
required: true
description: Order ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Ticket Rollup Summary for an Order for a Company
tags:
- Tickets
responses:
'200':
description: OK
headers: {}
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/TicketRollupSummary-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-companies-company-id-orders-order-id-id-tickets-rollup-summary
description: 'Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
'
parameters:
- $ref: '#/components/parameters/filter-sources'
x-stoplight:
id: lrtsaqw83ugg6
/v1/companies/{company-id}/settlements/{settlement-id}/tickets:
parameters:
- schema:
type: string
format: uuid
name: company-id
in: path
required: true
description: Company ID
- schema:
type: string
format: uuid
name: settlement-id
in: path
required: true
description: Settlement ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Tickets for a Settlement for a Company
tags:
- Tickets
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/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
operationId: get-v1-companies-company-id-settlements-settlement-id-tickets
x-stoplight:
id: m7n8o9p0q1r2s
x-internal: true
description: Retrieve `Tickets` for a `Settlement`.
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
/v1/companies/{company-id}/tickets:
parameters:
- schema:
type: string
format: uuid
name: company-id
in: path
required: true
description: Company ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Tickets that belong to a Company
tags:
- Tickets
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
x-stoplight:
id: pyvvst6d54d5t
items:
$ref: '#/components/schemas/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-companies-company-id-tickets
x-stoplight:
id: zdk5o9cvbnl7t
description: '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]`'
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
- schema:
type: string
format: date-time
in: query
name: filter[from_date]
description: Start range of ticket.created_at
- schema:
type: string
format: date-time
in: query
name: filter[to_date]
description: End range of ticket.created_at
- schema:
type: boolean
in: query
name: filter[flagged]
description: Filter to only flagged or un-flagged Tickets
- $ref: '#/components/parameters/filter-sources'
/v1/direct_uploads:
parameters:
- $ref: '#/components/parameters/Accept-Language'
post:
summary: Create a DirectUpload
tags:
- Tickets
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/DirectUpload-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'406':
$ref: '#/components/responses/Error'
'415':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: post-v1-direct_uploads
x-stoplight:
id: tgme583womicv
description: '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.'
x-internal: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DirectUpload-Create'
/v1/jobs/{job-id}/tickets:
parameters:
- schema:
type: string
name: job-id
in: path
required: true
description: Job ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Tickets for a Job
tags:
- Tickets
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/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-jobs-job-id-tickets
x-stoplight:
id: mvwxdiz0x5hf8
description: 'Retrive `Tickets` for a `Job`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
'
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
- schema:
type: string
in: query
name: filter[from_date]
description: Start range of ticket.created_at
- schema:
type: string
in: query
name: filter[to_date]
description: End range of ticket.created_at
- schema:
type: boolean
in: query
name: filter[flagged]
description: Filter to only flagged or un-flagged Tickets
- $ref: '#/components/parameters/filter-sources'
/v1/orders/{order-id}/tickets:
parameters:
- schema:
type: string
name: order-id
in: path
required: true
description: Order ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Tickets for an Order
tags:
- Tickets
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/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-orders-order-id-id-tickets
description: 'Retrive `Tickets` for an `Order`.
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`
'
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
- schema:
type: string
in: query
name: filter[from_date]
description: Start range of ticket.created_at
- schema:
type: string
in: query
name: filter[to_date]
description: End range of ticket.created_at
- schema:
type: boolean
in: query
name: filter[flagged]
description: Filter to only flagged or un-flagged Tickets
- $ref: '#/components/parameters/filter-sources'
x-stoplight:
id: ncxsngghpi7ea
deprecated: true
/v1/orders/{order-id}/tickets/rollup_summary:
parameters:
- schema:
type: string
name: order-id
in: path
required: true
description: Order ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve Ticket Rollup Summary for an Order
tags:
- Tickets
responses:
'200':
description: OK
headers: {}
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/TicketRollupSummary-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-orders-order-id-id-tickets-rollup-summary
description: 'Retrive `TicketRollupSummary` for an `Order`.
Filter usage:
* filter on ticket source: `filter[sources]`
'
parameters:
- $ref: '#/components/parameters/filter-sources'
x-stoplight:
id: gflnfaum35oba
deprecated: true
/v1/tickets:
parameters:
- $ref: '#/components/parameters/Accept-Language'
post:
summary: Create a Ticket
operationId: post-v1-tickets
responses:
'201':
description: Created
headers: {}
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Ticket-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'
'415':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
x-stoplight:
id: grug3kaa54qpn
tags:
- Tickets
description: 'Create a `Ticket`
This endpoint requires the `create_ticket` permission'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket-Create'
get:
summary: Retrieve Tickets that belong to the current Company
tags:
- Tickets
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
x-stoplight:
id: tria7go8pqqi9
items:
$ref: '#/components/schemas/Ticket-Read'
'401':
$ref: '#/components/responses/UnauthenticatedError'
'406':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
operationId: get-v1-tickets
x-stoplight:
id: ip4clt2871jqj
description: 'Retrieve `Tickets` for a `Company`
Filter usage:
* to filter a from date: `filter[from_date]`
* to filter a to date: `filter[to_date]`'
parameters:
- $ref: '#/components/parameters/page-limit'
- $ref: '#/components/parameters/page-after'
- $ref: '#/components/parameters/page-before'
- schema:
type: string
in: query
name: filter[from_date]
description: Start range of ticket.created_at
- schema:
type: string
in: query
name: filter[to_date]
description: End range of ticket.created_at
- schema:
type: boolean
in: query
name: filter[flagged]
description: Filter to only flagged or un-flagged Tickets
x-internal: true
/v1/tickets/{id}:
parameters:
- schema:
type: string
name: id
in: path
required: true
description: Ticket ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve a single Ticket
tags:
- Tickets
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Ticket-Read'
required:
- data
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
operationId: get-v1-tickets-id
x-stoplight:
id: l4iqzqn7t4xzj
description: Retrieve `Ticket` by ID
patch:
summary: Update a Ticket
operationId: patch-v1-tickets-id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Ticket-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'
'415':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
x-stoplight:
id: ukwpwcy5dis0t
tags:
- Tickets
description: 'Update a `Ticket` by ID
This endpoint requires the `edit_ticket` permission'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket-Update'
delete:
summary: Delete a Ticket
operationId: delete-v1-tickets-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: yraim58bdmx84
tags:
- Tickets
description: 'Delete a `Ticket` by ID
This endpoint requires the `delete_ticket` permission'
/v1/tickets/{ticket-id}/ai_metadata:
parameters:
- schema:
type: string
name: ticket-id
in: path
required: true
description: Ticket ID
- $ref: '#/components/parameters/Accept-Language'
get:
summary: Retrieve a single Ticket's AI metadata
tags:
- Tickets
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Ticket-Metadata-Read'
required:
- data
'401':
$ref: '#/components/responses/UnauthenticatedError'
'404':
$ref: '#/components/responses/Error'
'406':
$ref: '#/components/responses/Error'
operationId: get-v1-tickets-ticket-id-ai-metadata
x-stoplight:
id: aaaqzqn7t4xzj
description: Retrieve `Ticket`'s AI metadata by ID
/v1/tickets/{ticket-id}/approve:
parameters:
- schema:
type: string
name: ticket-id
in: path
required: true
description: Ticket ID
- $ref: '#/components/parameters/Accept-Language'
put:
summary: Approve a Ticket
operationId: put-v1-tickets-ticket-id-approve
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Ticket-Read'
'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'
description: 'Approve a `Ticket` by ID
This endpoint requires the `edit_ticket` permission.'
requestBody:
content:
application/json:
schema:
type: object
properties: {}
x-stoplight:
id: p7hd8j339m33d
tags:
- Tickets
/v1/tickets/{ticket-id}/image:
parameters:
- schema:
type: string
name: ticket-id
in: path
required: true
description: Ticket ID
- $ref: '#/components/parameters/Accept-Language'
post:
summary: Update the Image that belongs to a Ticket
operationId: post-v1-tickets-ticket-id-image
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Ticket-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'
'415':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/ModelError'
x-stoplight:
id: j9qfptfyqfedu
tags:
- Tickets
description: "Add or replace the `image` for a `Ticket`. \n\nThis endpoint requires the `edit_ticket` `IamPermission`\n\nThe following restrictions apply:\n * `image` must be one of the following image types:`jpeg`, `jpg`.\n\n* If you're using a `DirectUpload` then you must use the `application/json` mime-type and `image` must be the `DirectUpload`'s `signed_id`\n* If you're using a file then you must use the `multipart/form-data` mime-type and `image` must be a file."
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/Ticket-Image-Create'
application/json:
schema:
$ref: '#/components/schemas/Ticket-Image-Create'
delete:
summary: Delete the Image that belongs to a Ticket
operationId: delete-v1-tickets-ticket-id-image
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'
x-stoplight:
id: 0jji2xykebe3z
tags:
- Tickets
description: "Delete the `image` for a `Ticket`. \n\nThis endpoint requires the `delete_ticket` `IamPermission`"
/v1/tickets/{ticket-id}/void:
parameters:
- schema:
type: string
name: ticket-id
in: path
required: true
description: Ticket ID
- $ref: '#/components/parameters/Accept-Language'
put:
summary: Void a Ticket
operationId: put-v1-tickets-ticket-id-void
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Ticket-Read'
'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'
description: 'Void a `Ticket` by ID.
This endpoint requires the `edit_ticket` permission.'
requestBody:
content:
application/json:
schema:
type: object
properties: {}
x-stoplight:
id: 9hs3hplf1xkrm
tags:
- Tickets
components:
schemas:
Ticket-Create:
title: Ticket-Create
x-stoplight:
id: 131qvudbt31h8
type: object
required:
- unit_of_measure
properties:
quantity:
type: number
x-stoplight:
id: 68w2mgm2lle6k
nullable: true
ticket_number:
type: string
x-stoplight:
id: p67knkzoxujnd
nullable: true
unit_of_measure:
$ref: '#/components/schemas/OrderUnitOfMeasure'
job_id:
type: string
x-stoplight:
id: 9m3xrz2jrzpcv
format: uuid
nullable: true
material_id:
type: string
x-stoplight:
id: emc067k3odhah
format: uuid
nullable: true
load_id:
type: string
x-stoplight:
id: qilqgc5qwadfb
format: uuid
nullable: true
printed_at:
type: string
x-stoplight:
id: 2ufj0pk9uzf82
format: date-time
nullable: true
service_date:
type: string
x-stoplight:
id: yimcofg0r55xa
format: date-time
nullable: true
source:
$ref: '#/components/schemas/TicketSource'
additionalProperties: false
TicketRollupSummary-Read:
title: TicketRollupSummary-Read
x-stoplight:
id: 8hl2dv5xu3hc6
type: object
required:
- external_vendor_name
- external_truck_id
- total_tickets_count
- total_tickets_missing_job_count
- total_tickets_quantity
- total_tickets_missing_job_quantity
properties:
external_vendor_name:
type: string
x-stoplight:
id: nym1xtyupjjk0
external_truck_id:
type: string
x-stoplight:
id: ywebg5780jiy3
total_tickets_count:
type: integer
x-stoplight:
id: gqtwnjam89ci4
total_tickets_missing_job_count:
type: integer
x-stoplight:
id: qw71s1luaetyn
total_tickets_quantity:
type: number
x-stoplight:
id: 8slo9pd137h0m
total_tickets_missing_job_quantity:
type: number
x-stoplight:
id: xxy6yaadsn4ty
unit_of_measure:
$ref: '#/components/schemas/OrderUnitOfMeasure'
additionalProperties: false
DirectUpload-Read:
title: DirectUpload-Read
x-stoplight:
id: ge5fs3tk8yb8k
type: object
required:
- id
- byte_size
- checksum
- content_type
- created_at
- filename
- key
- service_name
- signed_id
- direct_upload
properties:
id:
type: string
x-stoplight:
id: lzwkhbbuc30lt
format: uuid
byte_size:
type: integer
x-stoplight:
id: zdq5i2km7dbdd
checksum:
type: string
x-stoplight:
id: pfgyb7ctywy3o
content_type:
type: string
x-stoplight:
id: id6fbesbolbxu
created_at:
type: string
x-stoplight:
id: qkkile7jxkghk
format: date-time
filename:
type: string
x-stoplight:
id: nh2lxjat0biia
key:
type: string
x-stoplight:
id: saakohyy5kvvz
metadata:
type: object
x-stoplight:
id: zlk0ufjqtjaxq
service_name:
type: string
x-stoplight:
id: br0ew9wo8145q
signed_id:
type: string
x-stoplight:
id: zvuflukjwdj16
direct_upload:
type: object
x-stoplight:
id: e4cw0bh9x1t4n
required:
- url
properties:
url:
type: string
x-stoplight:
id: l0qwu7ya2mng0
format: uri
headers:
type: object
x-stoplight:
id: jgxk00g0qfrub
additionalProperties: false
Error-Response:
title: Error-Response
x-stoplight:
id: 52cydhphee3qe
type: object
required:
- error
properties:
error:
$ref: '#/components/schemas/Error'
additionalProperties: false
StateError-Response:
title: StateError-Response
x-stoplight:
id: i0wsk2gmnaqup
type: object
required:
- error
properties:
error:
$ref: '#/components/schemas/StateError'
additionalProperties: false
Error:
title: Error
x-stoplight:
id: 3g57kkik3l464
type: object
description: An Error.
required:
- code
properties:
code:
type: string
x-stoplight:
id: 7o9x1t8v0bgfo
additionalProperties: false
Ticket-Read:
title: Ticket-Read
x-stoplight:
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/treadio/refs/heads/main/openapi/treadio-tickets-api-openapi.yml