openapi: 3.0.3 info: title: Qase TestOps API v1 cases API description: The Qase TestOps API v1 is a token-authenticated REST API for the Qase test management platform. It exposes the core test management domain over HTTPS - Projects, Test Cases, Test Suites, Test Runs, Test Results, Defects, and Test Plans - so teams can create and manage test cases, launch and complete test runs, publish automated test results from CI pipelines, and track defects programmatically. Authentication uses a personal or application API token passed in the `Token` header. Most collection endpoints are scoped by a project code (a 2-10 character identifier), and support limit/offset pagination. This description grounds a representative subset of the full surface documented at developers.qase.io; the machine-readable source specification is published at github.com/qase-tms/specs. version: '1.0' contact: name: Qase url: https://developers.qase.io license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - url: https://api.qase.io/v1 description: Qase TestOps API v1 security: - TokenAuth: [] tags: - name: cases description: Test cases stored in a project repository. paths: /case/{code}: parameters: - $ref: '#/components/parameters/Code' get: operationId: get-cases tags: - cases summary: Get all test cases description: Retrieves all test cases stored in the selected project. parameters: - name: suite_id in: query schema: type: integer - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: A list of test cases. content: application/json: schema: $ref: '#/components/schemas/CaseListResponse' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' post: operationId: create-case tags: - cases summary: Create a new test case description: Creates a test case in the selected project. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CaseCreate' responses: '200': description: The created test case id. content: application/json: schema: $ref: '#/components/schemas/IdResponse' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' /case/{code}/{id}: parameters: - $ref: '#/components/parameters/Code' - $ref: '#/components/parameters/Id' get: operationId: get-case tags: - cases summary: Get a specific test case description: Retrieves a specific test case by id. responses: '200': description: A test case. content: application/json: schema: $ref: '#/components/schemas/CaseResponse' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' patch: operationId: update-case tags: - cases summary: Update a specific test case description: Updates a specific test case by id. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CaseCreate' responses: '200': description: The updated test case id. content: application/json: schema: $ref: '#/components/schemas/IdResponse' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' delete: operationId: delete-case tags: - cases summary: Delete a specific test case description: Deletes a specific test case by id. responses: '200': description: Deletion result. content: application/json: schema: $ref: '#/components/schemas/IdResponse' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' components: schemas: Case: allOf: - $ref: '#/components/schemas/CaseCreate' - type: object properties: id: type: integer CaseListResponse: type: object properties: status: type: boolean result: type: object properties: total: type: integer filtered: type: integer count: type: integer entities: type: array items: $ref: '#/components/schemas/Case' CaseCreate: type: object required: - title properties: title: type: string description: type: string preconditions: type: string postconditions: type: string severity: type: integer priority: type: integer type: type: integer suite_id: type: integer steps: type: array items: type: object additionalProperties: true IdResponse: type: object properties: status: type: boolean example: true result: type: object properties: id: type: integer CaseResponse: type: object properties: status: type: boolean result: $ref: '#/components/schemas/Case' Error: type: object properties: status: type: boolean example: false errorMessage: type: string errorFields: type: array items: type: object additionalProperties: true parameters: Code: name: code in: path required: true description: Code of the project, uppercase, 2-10 characters. schema: type: string Id: name: id in: path required: true description: Identifier of the entity. schema: type: integer Limit: name: limit in: query description: A number of entities in result set. Default is 10, max is 100. schema: type: integer default: 10 maximum: 100 Offset: name: offset in: query description: How many entities should be skipped. Default is 0. schema: type: integer default: 0 responses: TooManyRequests: description: Too Many Requests - the rate limit has been exceeded. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Unauthorized - missing or invalid API token. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' UnprocessableEntity: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: TokenAuth: type: apiKey in: header name: Token description: A personal or application API token. Create it in the Qase app under Settings and pass it in the `Token` header on every request. All requests must use HTTPS.