/
New API Migration Guide

New API Migration Guide

Welcome to the API migration guide.

 

Document scope

 

Who Should Use This Guide

 

If you're using our API directly via tools like Postman or through scripts, this guide is essential to ensure a smooth transition to the updated API. This migration guide is designed for developers and technical teams who are using our API directly, whether through tools like Postman, custom scripts, or integrated applications.

 

For QAlity Plus Cloud users
Swagger API documentation is now available here: link.

In order to prepare for the upcoming changes, please use the migration guide exclusively.

 

The user interface will not be affected by these changes. You can ignore this guide if you interact with our app primarily through the UI.

 

List of Deprecated Endpoints

 

  • PUT /testStep

  • POST /testStep

  • PUT /testStep/{testStepId}

  • DELETE /testStep/{testStepId}

  • GET /testStep/{testCaseId}

  • GET /testExecution

  • PUT /testExecution/{testExecutionId}

  • POST /testExecution

  • GET /testExecution/{testExecutionId}

  • DELETE /testExecution/{testExecutionId}

  • GET /testExecution/history/{testExecutionId}

  • GET /testExecution/failedSteps/{testCaseId}

  • GET /testExecution/bugsReported/{testCaseId}

  • DELETE /testExecutionIssue

  • POST /testExecutionIssue

  • PUT /testCycles/{testCycleId}

  • POST /testCycleClones

  • POST /testCasesInCycle

  • DELETE /testCasesInCycle/{testCaseInCycleId}

  • GET /testCasesInCycle/{testCaseInCycleId}

  • PUT /folders

  • POST folders/testCases

  • DELETE folders/testCases

  • GET folders/search

  • GET folders

  • PUT /statuses

  • POST /importTestCases

  • POST /bulkTestSteps

  • GET /testExecutionReportCharts

  • POST /testExecutions/bulk

  • PUT /testExecutions/assignee/bulk

  • PUT /testExecutions/status/bulk

  • POST /testExecutions/latest

  • DELETE /deleteTestCycle/{testCycleId}

  • POST /testCycleClones

  • GET /testCycles

  • GET /testCyclesForExecution

  • GET /testCyclesForExecution/{testCaseId}/{testCycleId}

  • GET /traceabilityReport

  • GET /testExecutionReport

  • PUT /testExecution/executionAssignee

  • PUT /testExecutions/{testExecutionId}

 

Detailed Comparison of Old and New Endpoints

Old Endpoint

New Endpoint

Change Description

Old Endpoint

New Endpoint

Change Description

PUT

/testExecutions/{testExecutionId}

PATCH

/testExecutions/{testExecutionId}

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the testExecutionId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ comment: string executionAssignee: string statusId: integer(>0) }

Request example:

curl -X 'PATCH' \ 'https://example.com/testExecutions/123?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "fields": { "comment": "my updated comment", "executionAssignee": "345", "statusId": 1 / } }'

-

PATCH

/testExecutionSteps/bulk

NEW

A new endpoint that will update test execution steps.

Request example:

curl -X 'PUT' \ 'https://example.com/testExecutionSteps/bulk?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '[ { "id": 123, "fields": { "statusId": 2, "comment": "Updated comment", "attachments": "[{\"id\":\"101\"},{\"id\":\"102\"}]" } }, { "id": 124, "fields": { "statusId": 1, "comment": "Another updated comment", "attachments": "[{\"id\":\"103\"},{\"id\":\"104\"}]" } } ]'

Attachments information:

Attachments must match the following regular expression:

\[(\{\"id\":\"\d+\"\}(,\{\"id\":\"\d+\"\})*|)\]

Examples:

//good Empty list - '[]' Single object - '[{"id":"123"}]' Multiple objects - '[{"id":"123"},{"id":"456"},{"id":"789"}]' //bad Missing Square Brackets - '{"id":"123"}' Missing Quotes Around ID - '[{"id":123}]'

PUT

/testExecution/executionAssignee

-

REMOVED

PATCH /testExecutions/{testExecutionId} now covers its functionality.

GET

/testExecution

GET

/testExecutions

RENAMED

GET

/testExecution/{testExecutionId}

GET

/testExecutions/{testExecutionId}

RENAMED

DELETE
/testExecution/{testExecutionId}

DELETE

/testExecutions/{testExecutionId}

RENAMED

GET

/testExecution/history/{testExecutionId}

GET

/testExecutions/{testExecutionId}/history

RENAMED

PUT

/testStep

PATCH

/testCases/{testCaseId}/testSteps/bulk

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the testCaseId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ position: integer step: string data: string result: string attachments: string }

Attachments information:

Attachments must match the following regular expression:

\[(\{\"id\":\"\d+\"\}(,\{\"id\":\"\d+\"\})*|)\]

Examples:

//good Empty list - '[]' Single object - '[{"id":"123"}]' Multiple objects - '[{"id":"123"},{"id":"456"},{"id":"789"}]' //bad Missing Square Brackets - '{"id":"123"}' Missing Quotes Around ID - '[{"id":123}]'

Request example:

curl -X 'PATCH' \ 'https://example.com/testCases/123/testSteps/bulk?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '[ { "fields": { "position": 1, "step": "updated test step", "data": "updated data", "result": "updated result", "attachments": "[{\"id\":\"103\"},{\"id\":\"104\"}]" }, "id": 11 } ]'

GET

/testStep/{testCaseId}

GET

/testCases/{testCaseId}/testSteps

CLOUD

MODIFIED

Content type:

Previously, the API endpoint returned a Content-Type of text/plain;charset=UTF-8. It now returns application/json.


SERVER

RENAMED

Request example:

curl -X 'GET' \ 'https://example.com/testCases/123/testSteps' \ -H 'accept: */*'

POST

/testStep

POST

/testSteps

CLOUD

RENAMED


SERVER

MODIFIED

Content type:

Previously, the API endpoint returned a Content-Type of text/plain;charset=UTF-8. It now returns application/json.

PUT

/testStep/{testStepId}

PATCH

/testSteps/{testStepId}

CLOUD:

MODIFIED

The id field is no longer needed in the request payload, as the testStepId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ position: integer step: string data: string result: string attachments: string }

SERVER:

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the testStepId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ position: integer step: string data: string result: string attachments: string }

Content type:

Previously, the API endpoint returned a Content-Type of text/plain;charset=UTF-8. It now returns application/json.


Attachments information:

Attachments must match the following regular expression: \[(\{\"id\":\"\d+\"\}(,\{\"id\":\"\d+\"\})*|)\]

Examples:

//good Empty list - '[]' Single object - '[{"id":"123"}]' Multiple objects - '[{"id":"123"},{"id":"456"},{"id":"789"}]' //bad Missing Square Brackets - '{"id":"123"}' Missing Quotes Around ID - '[{"id":123}]'

Request example:

curl -X 'PATCH' \ 'https://example.com/testSteps/123?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d ' { "fields": { "position": 2 "step": "Text step update" "data": "data update" "result": "result update" "attachments": "[{\"id\":\"101\"},{\"id\":\"102\"}]" } } '

DELETE

/testStep/{testStepId}

DELETE

/testSteps/{testStepId}

RENAMED

POST

/bulkTestSteps

POST

/testSteps/bulk

RENAMED

POST

/testExecution

POST

/testExecutions

CLOUD:

RENAMED


SERVER:

MODIFIED

Content type:

Previously, the API endpoint returned a Content-Type of text/plain;charset=UTF-8. It now returns application/json.

GET /testExecution/failedSteps/{testCaseId}

GET

/testExecutionInsights/failedSteps?testCaseId=123

Available exclusively with QAlity Plus!

MODIFIED

Query parameter:

Now accepts testCaseId as a query parameter.

GET

/testExecution/bugsReported/{testCaseId}

GET

/testExecutionInsights/reportedBugs?testCaseId=123

Available exclusively with QAlity Plus!

MODIFIED

Query parameter:

Now accepts testCaseId as a query parameter.

DELETE

/testExecutionIssue

DELETE

/testExecutionSteps/{stepId}/linkedIssues/{linkedIssueId}

MODIFIED

Query parameter:

Now instead of a JSON payload it accepts stepId and linkedIssueId as a query parameter.

Request example:

curl -X 'DELETE' \ 'https://example.com/testExecutionSteps/123/linkedIssues/456?jwt=<your_jwt_token>' \ -H 'accept: */*'

POST

/testExecutionIssue

POST

/testExecutionSteps/{stepId}/linkedIssues/{linkedIssueId}

MODIFIED

Query parameter:

Now instead of a JSON payload it accepts stepId and linkedIssueId as a query parameter.

Request example:

curl -X 'POST' \ 'https://example.com/testExecutionSteps/123/linkedIssues/456?jwt=<your_jwt_token>' \ -H 'accept: */*'

PUT

/folders

PATCH

/folders/{folderId}

Available exclusively with QAlity Plus!

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the folderId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ name: string }

Request example:

curl -X 'PATCH' \ 'https://example.com/folders/123?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d ' { "fields": { "name":"updated name" } } '

POST

/folders/testCases

POST

/folders/{folderId}/folderAssignments

Available exclusively with QAlity Plus!

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the folderId is provided in the URL path.

{ testCasesIds: long[] }

Request example:

curl -X 'POST' \ 'https://example.com/folders/123/folderAssignments?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "testCasesIds": [ 0 ] }'

DELETE

/folders/testCases

DELETE

/folders/{folderId}/folderAssignments

Available exclusively with QAlity Plus!

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the folderId is provided in the URL path.

{ testCasesIds: long[] }

Request example:

curl -X 'DELETE' \ 'https://example.com/folders/123/folderAssignments?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "testCasesInFolderIds": [ 0 ] }'

GET

/folders/search

-

Available exclusively with QAlity Plus!

REMOVED

GET /folders now cover its functionality.

GET

/folders

GET

/folders?name=example&parentId=123

Available exclusively with QAlity Plus!

MODIFIED

Query parameters:

New query parameters name & parentId are both optional.

If a name or parentId is provided, the code uses the specification to fetch folders that match the criteria.

If no parameters are provided, the endpoint behaves as before, fetching all folders with no parent.

Request example:

curl -X 'GET' \ 'https://example.com/folders?name=123&parentId=123?jwt=<your_jwt_token>' \ -H 'accept: */*'

PUT

/statuses

PATCH

/statuses/{statusId}

Available exclusively with QAlity Plus!

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the statusId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ name: string isDefault: boolean colorName: "RED" | "YELLOW" | "GREEN" | "BLUE" | "GRAY" | "MAGENTA" | "TEAL" | "PURPLE" | "ORANGE" | "DARK GRAY" | "LIME" category: "None" | "Failed" | "Passed" position: long }

Request example:

curl -X 'PATCH' \ 'https://example.com/statuses/123?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d ' { "fields": { "name": "updated status name "isDefault": false "colorName": "RED" "category": "Failed" "position": 1 } } '

POST

/importTestCases

POST

/testCases/import

Available exclusively with QAlity Plus!

RENAMED

GET

/testExecutionReport

GET

/reports/testExecution/table

RENAMED

GET

/testExecutionReportCharts

GET

/reports/testExecution/chart

Available exclusively with QAlity Plus!

RENAMED

GET

/traceabilityReport

GET

/reports/traceability/table

Available exclusively with QAlity Plus!

RENAMED

POST

/testCasesInCycle

POST

/testCycles/{testCycleId}/testCycleAssignments

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the testCycleId is provided in the URL path.

Request example:

curl -X 'POST' \ 'https://example.com/testCycles/123/testCycleAssignments?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "testCasesIds": [ 0 ] }'

DELETE /testCasesInCycle/{testCaseInCycleId}

DELETE /testCycles/{testCycleId}/testCycleAssignments/{testCaseInCycleId}

RENAMED

GET /testCasesInCycle/{testCaseInCycleId}

GET

/testCycles/{testCycleId}/testCycleAssignments/{testCaseInCycleId}

RENAMED

GET /testCyclesForExecution/{testCaseId}/{testCycleId}

-

INFORMATION

Deprecated Notice:
This endpoint is no longer supported, and its usage is discouraged. While it still exists, using it is at your own risk, and it may be removed in future updates.

GET

/testCyclesForExecution

-

INFORMATION

This endpoint retrieves a paginated list of test cycles that include the specified test case.

If this test case execution has already been created (someone was assigned, the execution was opened, etc), the cycle will not be included in the returned list.

You need to have browse issue permission in the project that test cycle belongs to.

GET

/testCycles

-

MODIFIED

Query parameter:

The testCaseId query parameter is removed.

Request example:

curl -X 'GET' \ 'https://example.com/testCycles?projectIds=1001&projectIds=1002&name=example&versionId=1&isClosed=true&includeStatuses=false&page=0&size=1&sort=string?jwt=<your_jwt_token>' \ -H 'accept: */*'

PUT

/testCycles/{testCycleId}

PATCH

/testCycles/{testCycleId}

MODIFIED

Request JSON payload:

The id field is no longer needed in the request payload, as the testCycleId is provided in the URL path.

Include only the fields you want to update(partial updates). Fields not included in the JSON will remain unchanged.

{ comment: string name: string dueDate: string(Date) isClosed: boolean versionId: string }

Request example:

curl -X 'PATCH' \ 'https://example.com/testCycles/123?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "fields": { "comment": "updated comment", "name": "updated name" "dueDate": "2024-07-29" "isClosed": false "versionId": "12" } }'

POST

/testCycleClones

POST

/testCycles/{testCycleId}/clone

MODIFIED

Query parameter:

The id field is no longer needed in the query parameter, as the testCycleId is provided in the URL path.

Request example:

curl -X 'POST' \ 'https://example.com/testCycles/5638/clone?jwt=<your_jwt_token>' \ -H 'accept: */*' \ -d ''

DELETE

/deleteTestCycle/{testCycleId}

DELETE

testCycles/{testCycleId}

RENAMED

POST

/testExecutions/latest

POST

/history/testExecutions/latest

Available exclusively with QAlity Plus!

CLOUD

No changes.


SERVER

RENAMED

 

PUT

/testExecutions/status/bulk

PUT

/premium/testExecutions/status/bulk

Available exclusively with QAlity Plus!

CLOUD

No changes.


SERVER

RENAMED

PUT

/testExecutions/assignee/bulk

PUT

/premium/testExecutions/assignee/bulk

Available exclusively with QAlity Plus!

CLOUD

No changes.


SERVER

RENAMED

POST

/testExecutions/bulk

POST

/premium/testExecutions/bulk

Available exclusively with QAlity Plus!

CLOUD

No changes.


SERVER

RENAMED

Related content