OpenAPI Specification
openapi: 3.0.1
info:
title: Trunk Flaky Tests API
description: HTTP REST API for the Trunk platform. Covers the Flaky Tests API (query test-case state, list quarantined / unhealthy / failing tests, link external tickets) and the Merge Queue API (control the flake-aware parallel merge queue and read its metrics). All requests are authenticated with an organization API token passed in the x-api-token header and return JSON.
termsOfService: https://trunk.io/legal/terms
contact:
name: Trunk Support
url: https://docs.trunk.io
version: '1.0'
servers:
- url: https://api.trunk.io/v1
description: Trunk REST API
security:
- ApiKeyAuth: []
tags:
- name: Flaky Tests
description: Query Flaky Tests state and link tickets.
paths:
/flaky-tests/get-test-details:
post:
operationId: getTestDetails
tags:
- Flaky Tests
summary: Get the details of a test case
description: Fetch detailed metadata for a single test case, including its current status, recent failure rates, most common failures, codeowners, and quarantine state.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- repo
- org_url_slug
- test_id
properties:
repo:
$ref: '#/components/schemas/Repo'
org_url_slug:
type: string
description: Organization slug from Trunk settings.
example: my-trunk-org-slug
test_id:
type: string
format: uuid
description: Stable unique test-case identifier.
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
test:
$ref: '#/components/schemas/TestDetail'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
/flaky-tests/list-quarantined-tests:
post:
operationId: listQuarantinedTests
tags:
- Flaky Tests
summary: Get a list of quarantined tests
description: List tests currently quarantined in a repository, with pagination.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- repo
- org_url_slug
- page_query
properties:
repo:
$ref: '#/components/schemas/Repo'
org_url_slug:
type: string
page_query:
$ref: '#/components/schemas/PageQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
quarantined_tests:
type: array
items:
$ref: '#/components/schemas/TestDetail'
page:
$ref: '#/components/schemas/Page'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/ServerError'
/flaky-tests/list-unhealthy-tests:
post:
operationId: listUnhealthyTests
tags:
- Flaky Tests
summary: Get a list of unhealthy tests
description: List unhealthy tests in a repository, filtered by status (FLAKY or BROKEN), with pagination.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- repo
- org_url_slug
- page_query
- status
properties:
repo:
$ref: '#/components/schemas/Repo'
org_url_slug:
type: string
page_query:
$ref: '#/components/schemas/PageQuery'
status:
type: string
enum:
- FLAKY
- BROKEN
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
tests:
type: array
items:
$ref: '#/components/schemas/TestDetail'
page:
$ref: '#/components/schemas/Page'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/ServerError'
/flaky-tests/list-failing-tests:
post:
operationId: listFailingTests
tags:
- Flaky Tests
summary: Get a list of distinct tests that failed in the given time range
description: List distinct tests that failed within an inclusive start / exclusive end time range, with pagination.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- repo
- org_url_slug
- start_time
- end_time
- page_query
properties:
repo:
$ref: '#/components/schemas/Repo'
org_url_slug:
type: string
start_time:
type: string
format: date-time
description: Inclusive start of the time range.
end_time:
type: string
format: date-time
description: Exclusive end of the time range.
page_query:
$ref: '#/components/schemas/PageQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
tests:
type: array
items:
$ref: '#/components/schemas/TestDetail'
page:
$ref: '#/components/schemas/Page'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/ServerError'
/flaky-tests/link-ticket-to-test-case:
post:
operationId: linkTicketToTestCase
tags:
- Flaky Tests
summary: Link a ticket to a test case
description: Associate an external ticket (e.g. Jira "KAN-123" or Linear "TRUNK-1234") with a Trunk test case.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- repo
- test_case_id
- external_ticket_id
properties:
repo:
$ref: '#/components/schemas/Repo'
test_case_id:
type: string
format: uuid
external_ticket_id:
type: string
example: KAN-123
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
components:
responses:
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ServerError:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Repo:
type: object
required:
- host
- owner
- name
properties:
host:
type: string
description: Repository host, e.g. github.com or gitlab.com.
example: github.com
owner:
type: string
example: my-org
name:
type: string
example: my-repo
Status:
type: object
properties:
value:
type: string
enum:
- HEALTHY
- FLAKY
- BROKEN
reason:
type: string
timestamp:
type: string
format: date-time
Page:
type: object
properties:
total_rows:
type: integer
total_pages:
type: integer
page_index:
type: integer
next_page_token:
type: string
prev_page_token:
type: string
last_page_token:
type: string
TestDetail:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
variant:
type: string
classname:
type: string
file_path:
type: string
status:
$ref: '#/components/schemas/Status'
failure_rate_last_7d:
type: number
failure_rate_last_24h:
type: number
most_common_failures:
type: array
items:
type: object
properties:
summary:
type: string
count:
type: integer
quarantined:
type: boolean
codeowners:
type: array
items:
type: string
pull_requests_impacted_last_7d:
type: integer
html_url:
type: string
ticket:
type: object
properties:
html_url:
type: string
PageQuery:
type: object
required:
- page_size
properties:
page_size:
type: integer
minimum: 1
maximum: 100
page_token:
type: string
Error:
type: object
properties:
message:
type: string
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-token
description: Organization API token from Settings > Organization > General > API.