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:

PUT

/testExecution/executionAssignee

-

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

GET

/testExecution

GET

/testExecutions

GET

/testExecution/{testExecutionId}

GET

/testExecutions/{testExecutionId}

DELETE
/testExecution/{testExecutionId}

DELETE

/testExecutions/{testExecutionId}

GET

/testExecution/history/{testExecutionId}

GET

/testExecutions/{testExecutionId}/history

PUT

/testStep

PATCH

/testCases/{testCaseId}/testSteps/bulk

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.

Attachments information:

Attachments must match the following regular expression:

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

Examples:

Request example:

GET

/testStep/{testCaseId}

GET

/testCases/{testCaseId}/testSteps

CLOUD

Content type:

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


SERVER

Request example:

POST

/testStep

POST

/testSteps

CLOUD


SERVER

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:

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.


SERVER:

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.

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:

Request example:

DELETE

/testStep/{testStepId}

DELETE

/testSteps/{testStepId}

POST

/bulkTestSteps

POST

/testSteps/bulk

POST

/testExecution

POST

/testExecutions

CLOUD:


SERVER:

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

Query parameter:

Now accepts testCaseId as a query parameter.

GET

/testExecution/bugsReported/{testCaseId}

GET

/testExecutionInsights/reportedBugs?testCaseId=123

Query parameter:

Now accepts testCaseId as a query parameter.

DELETE

/testExecutionIssue

DELETE

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

Query parameter:

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

Request example:

POST

/testExecutionIssue

POST

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

Query parameter:

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

Request example:

PUT

/folders

PATCH

/folders/{folderId}

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.

Request example:

POST

/folders/testCases

POST

/folders/{folderId}/folderAssignments

Request JSON payload:

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

Request example:

DELETE

/folders/testCases

DELETE

/folders/{folderId}/folderAssignments

Request JSON payload:

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

Request example:

GET

/folders/search

-

GET /folders now cover its functionality.

GET

/folders

GET

/folders?name=example&parentId=123

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:

PUT

/statuses

PATCH

/statuses/{statusId}

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.

Request example:

POST

/importTestCases

POST

/testCases/import

GET

/testExecutionReport

GET

/reports/testExecution/table

GET

/testExecutionReportCharts

GET

/reports/testExecution/chart

GET

/traceabilityReport

GET

/reports/traceability/table

POST

/testCasesInCycle

POST

/testCycles/{testCycleId}/testCycleAssignments

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:

DELETE /testCasesInCycle/{testCaseInCycleId}

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

GET /testCasesInCycle/{testCaseInCycleId}

GET

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

GET /testCyclesForExecution/{testCaseId}/{testCycleId}

-

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

-

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

-

Query parameter:

The testCaseId query parameter is removed.

Request example:

PUT

/testCycles/{testCycleId}

PATCH

/testCycles/{testCycleId}

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.

Request example:

POST

/testCycleClones

POST

/testCycles/{testCycleId}/clone

Query parameter:

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

Request example:

DELETE

/deleteTestCycle/{testCycleId}

DELETE

testCycles/{testCycleId}

POST

/testExecutions/latest

POST

/history/testExecutions/latest

CLOUD

No changes.


SERVER

 

PUT

/testExecutions/status/bulk

PUT

/premium/testExecutions/status/bulk

CLOUD

No changes.


SERVER

PUT

/testExecutions/assignee/bulk

PUT

/premium/testExecutions/assignee/bulk

CLOUD

No changes.


SERVER

POST

/testExecutions/bulk

POST

/premium/testExecutions/bulk

CLOUD

No changes.


SERVER