PUT /v2/testcycles/{key} ignores folderId field and removes folder assignment
SMARTBEAR ZEPHYR SCALE BUG REPORT
==================================
TITLE:
PUT /v2/testcycles/{key} ignores folderId field and removes folder assignment
PRODUCT:
Zephyr Scale Cloud
API VERSION:
v2 (REST API)
DESCRIPTION:
When updating a Test Cycle using the PUT endpoint /v2/testcycles/{key}, the API completely ignores the folderId field in the request body. Additionally, as a side effect of any PUT operation, the cycle's folder assignment is removed (set to null), even when explicitly including the original folderId in the request.
STEPS TO REPRODUCE:
1. Create a Test Cycle with a folder assignment:
POST /v2/testcycles
Content-Type: application/json
{
"name": "Test Cycle Example",
"projectKey": "PROJ",
"folderId": 55869097,
"description": "Test cycle in folder"
}
Response: Cycle created successfully with folder assignment (OK)
2. Verify the cycle has folder assigned:
GET /v2/testcycles/PROJ-R50
Response includes: "folder": {"id": 55869097} (OK)
3. Update the cycle status while preserving folder:
PUT /v2/testcycles/PROJ-R50
Content-Type: application/json
{
"id": 112825457,
"key": "PROJ-R50",
"name": "Test Cycle Example",
"project": {"id": 723549},
"status": {"id": 13932952},
"folderId": 55869097,
"customFields": {"Comment": "Updated via API"}
}
Response: HTTP 200 OK
4. Verify the cycle folder after PUT:
GET /v2/testcycles/PROJ-R50
Response includes: "folder": null (FAILED - folder was removed!)
EXPECTED BEHAVIOR:
- The PUT endpoint should accept and process the folderId field in the request body
- The PUT endpoint should preserve the existing folder assignment if folderId is not provided
- The PUT endpoint should allow moving cycles between folders by specifying a different folderId
ACTUAL BEHAVIOR:
- The folderId field is completely ignored in PUT requests
- Any PUT operation removes the folder assignment (sets to null)
- There is no workaround to update cycle fields while preserving folder
- A second PUT attempt to restore the folder also fails
ATTEMPTED WORKAROUNDS (all failed):
Attempt 1: Send folder as object
Request: {"status": {...}, "folder": {"id": 55869097}}
Result: folder = null
Attempt 2: Send folderId as number
Request: {"status": {...}, "folderId": 55869097}
Result: folder = null
Attempt 3: Minimal body with status only
Request: {"status": {...}}
Result: Error - missing required fields (id, key, name, project, customFields)
Attempt 4: Full body with all required fields + folderId
Request: Complete body with id, key, name, project, status, folderId, customFields
Result: folder = null
Attempt 5: Second PUT to restore folder after status update
Result: folder still null
IMPACT:
- Severity: High
- Workaround: None that preserves both status and folder
- Current mitigation: Skip status updates to preserve folder organization
This breaks CI/CD integrations that need to update cycle status after test execution while maintaining folder organization.
ENVIRONMENT:
- Zephyr Scale Cloud
- API v2
- Project ID: 723549
- Folder IDs tested: 55869097, 55647404
ADDITIONAL INFORMATION:
- POST /v2/testcycles correctly accepts and uses folderId (OK)
- GET /v2/testcycles/{key} correctly returns folder object (OK)
- PUT /v2/testcycles/{key} ignores folderId and clears folder (BUG)
- No documented endpoint exists for /testcycles/{key}/folder to move cycles between folders