openapi: 3.0.1 info: title: Trunk Flaky Tests Merge Queue 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: Merge Queue description: Control the Trunk Merge Queue. paths: /submitPullRequest: post: operationId: submitPullRequest tags: - Merge Queue summary: Submit a pull request to the merge queue requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PullRequestRef' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PullRequestState' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /cancelPullRequest: post: operationId: cancelPullRequest tags: - Merge Queue summary: Cancel a pull request in the merge queue requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PullRequestRef' responses: '200': description: OK '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /getSubmittedPullRequest: post: operationId: getSubmittedPullRequest tags: - Merge Queue summary: Get the state of a submitted pull request requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PullRequestRef' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PullRequestState' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/ServerError' /restartTestsOnPullRequest: post: operationId: restartTestsOnPullRequest tags: - Merge Queue summary: Restart tests on a pull request requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PullRequestRef' responses: '200': description: OK '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /setImpactedTargets: post: operationId: setImpactedTargets tags: - Merge Queue summary: Set the impacted targets for a pull request requestBody: required: true content: application/json: schema: allOf: - $ref: '#/components/schemas/PullRequestRef' - type: object required: - impactedTargets properties: impactedTargets: type: array items: type: string responses: '200': description: OK '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /getMergeQueueTestingDetails: post: operationId: getMergeQueueTestingDetails tags: - Merge Queue summary: Get in-progress merge queue testing details requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QueueRef' responses: '200': description: OK '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /createQueue: post: operationId: createQueue tags: - Merge Queue summary: Create a merge queue requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QueueRef' responses: '200': description: OK '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /getQueue: post: operationId: getQueue tags: - Merge Queue summary: Get a merge queue requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QueueRef' responses: '200': description: OK content: application/json: schema: type: object properties: state: type: string enum: - RUNNING - PAUSED - DRAINING - SWITCHING_MODES '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/ServerError' /updateQueue: post: operationId: updateQueue tags: - Merge Queue summary: Update a merge queue configuration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QueueRef' responses: '200': description: OK '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' /deleteQueue: post: operationId: deleteQueue tags: - Merge Queue summary: Delete a merge queue requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QueueRef' responses: '200': description: OK '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/ServerError' /getMergeQueueMetrics: get: operationId: getMergeQueueMetrics tags: - Merge Queue summary: Get merge queue metrics (Prometheus text exposition format) parameters: - name: repo in: query required: false schema: type: string - name: repoHost in: query required: false schema: type: string responses: '200': description: OK content: text/plain: schema: type: string '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/ServerError' components: schemas: QueueRef: type: object required: - repo - targetBranch properties: repo: $ref: '#/components/schemas/Repo' targetBranch: type: string example: main PullRequestRef: type: object required: - repo - targetBranch - pr properties: repo: $ref: '#/components/schemas/Repo' targetBranch: type: string example: main pr: type: object required: - number properties: number: type: integer 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 PullRequestState: type: object properties: state: type: string enum: - NOT_READY - PENDING - TESTING - TESTS_PASSED - MERGED - FAILED - CANCELLED - PENDING_FAILURE Error: type: object properties: message: type: string 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' securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-token description: Organization API token from Settings > Organization > General > API.