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
Detailed Comparison of Old and New Endpoints
Old Endpoint | New Endpoint | Change Description |
---|---|---|
PUT /testExecutions/{testExecutionId} | PATCH /testExecutions/{testExecutionId} | MODIFIED Request JSON payload: The 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:
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
|
GET /testExecution | GET /testExecutions | RENAMED |
GET /testExecution/{testExecutionId} | GET /testExecutions/{testExecutionId} | RENAMED |
DELETE | 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 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:
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 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 |
PUT /testStep/{testStepId} | PATCH /testSteps/{testStepId} | CLOUD: MODIFIED The 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 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 Attachments information: Attachments must match the following regular expression: 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 |
GET /testExecution/failedSteps/{testCaseId} | GET /testExecutionInsights/failedSteps?testCaseId=123 | Available exclusively with QAlity Plus! MODIFIED Query parameter: Now accepts |
GET /testExecution/bugsReported/{testCaseId} | GET /testExecutionInsights/reportedBugs?testCaseId=123 | Available exclusively with QAlity Plus! MODIFIED Query parameter: Now accepts |
DELETE /testExecutionIssue | DELETE /testExecutionSteps/{stepId}/linkedIssues/{linkedIssueId} | MODIFIED Query parameter: Now instead of a JSON payload it accepts 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 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 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 {
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 {
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 | GET /folders?name=example&parentId=123 | Available exclusively with QAlity Plus! MODIFIED Query parameters: New query parameters If a 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 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 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: |
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 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 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 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 |