{
  "openapi": "3.1.0",
  "info": {
    "title": "Orangescrum Partner API",
    "version": "1.0.0",
    "summary": "59 endpoints for projects, tasks, time logs, users, test management, checklists, and defects.",
    "description": "Every endpoint is a POST. Authenticate with the `X-API-KEY` header.\n\nThe body is always a single `encrypted_data` string: base64 of a 16-byte random IV followed by the AES-256-CBC ciphertext of your JSON payload, keyed on the raw sha256 of your API secret. The fields to put in that payload are given per operation in `x-decrypted-payload`.\n\nRate limits: 120 requests per minute and 5000 per day.\n\nThe API runs on your own Orangescrum host, so set the `host` server variable before use. Human-readable reference: https://www.orangescrum.com/developer/api",
    "contact": {
      "name": "Orangescrum support",
      "email": "support@orangescrum.com",
      "url": "https://www.orangescrum.com/contact-support"
    }
  },
  "externalDocs": {
    "description": "Orangescrum Partner API reference",
    "url": "https://www.orangescrum.com/developer/api"
  },
  "servers": [
    {
      "url": "https://{host}/api/v1/partner",
      "description": "Your Orangescrum instance (Cloud or Self-Hosted).",
      "variables": {
        "host": {
          "default": "app.orangescrum.com",
          "description": "Hostname of your Orangescrum instance."
        }
      }
    }
  ],
  "security": [
    {
      "apiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Validate",
      "description": "A single endpoint to check that your API key and your encryption setup are correct."
    },
    {
      "name": "Projects",
      "description": "Read, create, update, and search projects in the connected Orangescrum account."
    },
    {
      "name": "Tasks",
      "description": "Read, create, update, and search tasks inside a project."
    },
    {
      "name": "Timelogs",
      "description": "Read and record time entries against projects and tasks."
    },
    {
      "name": "Users",
      "description": "Read the people in the connected Orangescrum account. These endpoints are read only."
    },
    {
      "name": "Test cases",
      "description": "Manage test cases, the individual checks that belong to a project and optionally to a test scenario."
    },
    {
      "name": "Test scenarios",
      "description": "Manage test scenarios, the groupings that test cases belong to."
    },
    {
      "name": "Test steps",
      "description": "Manage the ordered steps inside a test case."
    },
    {
      "name": "Checklist configuration",
      "description": "Read how the checklist framework is set up for the account."
    },
    {
      "name": "Checklist groups",
      "description": "Manage the account level catalogue of checklist groups."
    },
    {
      "name": "Checklist templates",
      "description": "Manage reusable checklist templates. A template belongs to a checklist group and holds a list of items."
    },
    {
      "name": "Work item checklists",
      "description": "Read and edit the checklist attached to a single work item, such as a task, story, or defect. Groups and items here live on the work item itself, not in the account catalogue."
    },
    {
      "name": "Defects",
      "description": "Track defects raised against a project, and link them to test cases, test steps, or tasks."
    }
  ],
  "paths": {
    "/validate": {
      "post": {
        "operationId": "validate",
        "summary": "Validate request",
        "description": "Checks the API key, decrypts the payload, and returns the decrypted payload back to you. The payload can contain anything, so there are no required fields.",
        "tags": [
          "Validate"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ValidatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/projects/list": {
      "post": {
        "operationId": "projectsList",
        "summary": "List projects",
        "description": "Returns every project the API key has access to.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ProjectsListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/projects/create": {
      "post": {
        "operationId": "projectsCreate",
        "summary": "Create a project",
        "description": "Creates a new project and returns it.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ProjectsCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/projects/detail": {
      "post": {
        "operationId": "projectsDetail",
        "summary": "Get a project",
        "description": "Returns one project by its unique ID.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ProjectsDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/projects/update": {
      "post": {
        "operationId": "projectsUpdate",
        "summary": "Update a project",
        "description": "Updates the fields you send on an existing project. Fields you leave out are not changed.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ProjectsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/projects/search": {
      "post": {
        "operationId": "projectsSearch",
        "summary": "Search projects",
        "description": "Searches projects by text and returns a paginated list.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ProjectsSearchPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/list": {
      "post": {
        "operationId": "tasksList",
        "summary": "List tasks",
        "description": "Returns a paginated list of tasks, with optional filters.",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TasksListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/create": {
      "post": {
        "operationId": "tasksCreate",
        "summary": "Create a task",
        "description": "Creates a task in a project and returns it.",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TasksCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/detail": {
      "post": {
        "operationId": "tasksDetail",
        "summary": "Get a task",
        "description": "Returns one task by its unique ID.",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TasksDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/update": {
      "post": {
        "operationId": "tasksUpdate",
        "summary": "Update a task",
        "description": "Updates the fields you send on an existing task. Fields you leave out are not changed.",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TasksUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/search": {
      "post": {
        "operationId": "tasksSearch",
        "summary": "Search tasks",
        "description": "Searches tasks by text and returns a paginated list.",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TasksSearchPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/timelogs/list": {
      "post": {
        "operationId": "timelogsList",
        "summary": "List timelogs",
        "description": "Returns a paginated list of time entries, with optional filters.",
        "tags": [
          "Timelogs"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TimelogsListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/timelogs/search": {
      "post": {
        "operationId": "timelogsSearch",
        "summary": "Search timelogs",
        "description": "Searches time entries and returns a paginated list. Takes the same filters as the list endpoint.",
        "tags": [
          "Timelogs"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TimelogsSearchPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/timelogs/detail": {
      "post": {
        "operationId": "timelogsDetail",
        "summary": "Get a timelog",
        "description": "Returns one time entry by its unique ID.",
        "tags": [
          "Timelogs"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TimelogsDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/timelogs/create": {
      "post": {
        "operationId": "timelogsCreate",
        "summary": "Create a timelog",
        "description": "Records a new time entry against a project, and optionally against a task.",
        "tags": [
          "Timelogs"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TimelogsCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/timelogs/update": {
      "post": {
        "operationId": "timelogsUpdate",
        "summary": "Update a timelog",
        "description": "Updates the fields you send on an existing time entry. Fields you leave out are not changed.",
        "tags": [
          "Timelogs"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TimelogsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/users/list": {
      "post": {
        "operationId": "usersList",
        "summary": "List users",
        "description": "Returns a paginated list of users, with optional filters.",
        "tags": [
          "Users"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/UsersListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/users/detail": {
      "post": {
        "operationId": "usersDetail",
        "summary": "Get a user",
        "description": "Returns one user by their unique ID.",
        "tags": [
          "Users"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/UsersDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-cases/list": {
      "post": {
        "operationId": "testCasesList",
        "summary": "List test cases",
        "description": "Returns a paginated list of test cases, with optional filters.",
        "tags": [
          "Test cases"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestCasesListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-cases/create": {
      "post": {
        "operationId": "testCasesCreate",
        "summary": "Create a test case",
        "description": "Creates a test case in a project and returns it.",
        "tags": [
          "Test cases"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestCasesCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-cases/detail": {
      "post": {
        "operationId": "testCasesDetail",
        "summary": "Get a test case",
        "description": "Returns one test case by its unique ID.",
        "tags": [
          "Test cases"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestCasesDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-cases/update": {
      "post": {
        "operationId": "testCasesUpdate",
        "summary": "Update a test case",
        "description": "Updates the fields you send on an existing test case. Fields you leave out are not changed.",
        "tags": [
          "Test cases"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestCasesUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-cases/delete": {
      "post": {
        "operationId": "testCasesDelete",
        "summary": "Delete a test case",
        "description": "Archives a test case, or removes it permanently when hard_delete is true.",
        "tags": [
          "Test cases"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestCasesDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-scenarios/list": {
      "post": {
        "operationId": "testScenariosList",
        "summary": "List test scenarios",
        "description": "Returns a paginated list of test scenarios, with optional filters.",
        "tags": [
          "Test scenarios"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestScenariosListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-scenarios/create": {
      "post": {
        "operationId": "testScenariosCreate",
        "summary": "Create a test scenario",
        "description": "Creates a test scenario in a project and returns it.",
        "tags": [
          "Test scenarios"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestScenariosCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-scenarios/detail": {
      "post": {
        "operationId": "testScenariosDetail",
        "summary": "Get a test scenario",
        "description": "Returns one test scenario by its unique ID.",
        "tags": [
          "Test scenarios"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestScenariosDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-scenarios/update": {
      "post": {
        "operationId": "testScenariosUpdate",
        "summary": "Update a test scenario",
        "description": "Updates the fields you send on an existing test scenario. Fields you leave out are not changed.",
        "tags": [
          "Test scenarios"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestScenariosUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-scenarios/delete": {
      "post": {
        "operationId": "testScenariosDelete",
        "summary": "Delete a test scenario",
        "description": "Archives a test scenario, or removes it permanently when hard_delete is true.",
        "tags": [
          "Test scenarios"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestScenariosDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-steps/list": {
      "post": {
        "operationId": "testStepsList",
        "summary": "List test steps",
        "description": "Returns the steps of one test case, in order and paginated.",
        "tags": [
          "Test steps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestStepsListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-steps/create": {
      "post": {
        "operationId": "testStepsCreate",
        "summary": "Create a test step",
        "description": "Adds a step to a test case. Send a name, a description, or both.",
        "tags": [
          "Test steps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestStepsCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-steps/update": {
      "post": {
        "operationId": "testStepsUpdate",
        "summary": "Update a test step",
        "description": "Updates the fields you send on an existing step. Fields you leave out are not changed.",
        "tags": [
          "Test steps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestStepsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-steps/reorder": {
      "post": {
        "operationId": "testStepsReorder",
        "summary": "Reorder test steps",
        "description": "Sets the order of the steps in a test case. Send the step IDs in the order you want.",
        "tags": [
          "Test steps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestStepsReorderPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/test-steps/delete": {
      "post": {
        "operationId": "testStepsDelete",
        "summary": "Delete a test step",
        "description": "Archives a step, or removes it permanently when hard_delete is true.",
        "tags": [
          "Test steps"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/TestStepsDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/config": {
      "post": {
        "operationId": "checklistsConfig",
        "summary": "Get checklist configuration",
        "description": "Returns the checklist settings for the account, optionally narrowed to one work item type.",
        "tags": [
          "Checklist configuration"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsConfigPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/groups/list": {
      "post": {
        "operationId": "checklistsGroupsList",
        "summary": "List checklist groups",
        "description": "Returns the checklist groups in the account catalogue.",
        "tags": [
          "Checklist groups"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsGroupsListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/groups/create": {
      "post": {
        "operationId": "checklistsGroupsCreate",
        "summary": "Create a checklist group",
        "description": "Adds a new checklist group to the account catalogue.",
        "tags": [
          "Checklist groups"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsGroupsCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/groups/update": {
      "post": {
        "operationId": "checklistsGroupsUpdate",
        "summary": "Update a checklist group",
        "description": "Updates the fields you send on an existing checklist group.",
        "tags": [
          "Checklist groups"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsGroupsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/groups/delete": {
      "post": {
        "operationId": "checklistsGroupsDelete",
        "summary": "Delete a checklist group",
        "description": "Removes a checklist group from the account catalogue.",
        "tags": [
          "Checklist groups"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsGroupsDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/templates/list": {
      "post": {
        "operationId": "checklistsTemplatesList",
        "summary": "List checklist templates",
        "description": "Returns every checklist template in the account. This endpoint takes no parameters.",
        "tags": [
          "Checklist templates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsTemplatesListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/templates/create": {
      "post": {
        "operationId": "checklistsTemplatesCreate",
        "summary": "Create a checklist template",
        "description": "Adds a new checklist template, with its items, to a checklist group.",
        "tags": [
          "Checklist templates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsTemplatesCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/templates/update": {
      "post": {
        "operationId": "checklistsTemplatesUpdate",
        "summary": "Update a checklist template",
        "description": "Updates the fields you send on an existing checklist template.",
        "tags": [
          "Checklist templates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsTemplatesUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/checklists/templates/delete": {
      "post": {
        "operationId": "checklistsTemplatesDelete",
        "summary": "Delete a checklist template",
        "description": "Removes a checklist template from the account.",
        "tags": [
          "Checklist templates"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/ChecklistsTemplatesDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/detail": {
      "post": {
        "operationId": "workItemsChecklistDetail",
        "summary": "Get a work item checklist",
        "description": "Returns the checklist groups, items, and completion counts for one work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/items/add": {
      "post": {
        "operationId": "workItemsChecklistItemsAdd",
        "summary": "Add a checklist item",
        "description": "Adds one item to a checklist group on a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistItemsAddPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/items/update": {
      "post": {
        "operationId": "workItemsChecklistItemsUpdate",
        "summary": "Update a checklist item",
        "description": "Changes the text of one checklist item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistItemsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/items/delete": {
      "post": {
        "operationId": "workItemsChecklistItemsDelete",
        "summary": "Delete a checklist item",
        "description": "Removes one checklist item from a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistItemsDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/items/complete": {
      "post": {
        "operationId": "workItemsChecklistItemsComplete",
        "summary": "Complete a checklist item",
        "description": "Marks a checklist item as done, or reopens it.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistItemsCompletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/add": {
      "post": {
        "operationId": "workItemsChecklistGroupsAdd",
        "summary": "Add a checklist group",
        "description": "Copies a group from the account catalogue onto a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsAddPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/create-custom": {
      "post": {
        "operationId": "workItemsChecklistGroupsCreateCustom",
        "summary": "Create a custom checklist group",
        "description": "Creates a group that exists only on this work item, not in the account catalogue.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsCreateCustomPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/rename": {
      "post": {
        "operationId": "workItemsChecklistGroupsRename",
        "summary": "Rename a checklist group",
        "description": "Changes the name of a checklist group on a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsRenamePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/delete": {
      "post": {
        "operationId": "workItemsChecklistGroupsDelete",
        "summary": "Delete a checklist group",
        "description": "Removes a checklist group, and its items, from a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsDeletePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/reorder": {
      "post": {
        "operationId": "workItemsChecklistGroupsReorder",
        "summary": "Reorder checklist groups",
        "description": "Sets the order of the checklist groups on a work item.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsReorderPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/work-items/checklist/groups/add-from-template": {
      "post": {
        "operationId": "workItemsChecklistGroupsAddFromTemplate",
        "summary": "Add a checklist group from a template",
        "description": "Adds a group to a work item using a checklist template, including all of its items.",
        "tags": [
          "Work item checklists"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/WorkItemsChecklistGroupsAddFromTemplatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/list": {
      "post": {
        "operationId": "defectsList",
        "summary": "List defects",
        "description": "Returns a paginated list of defects, with optional filters.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsListPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/create": {
      "post": {
        "operationId": "defectsCreate",
        "summary": "Create a defect",
        "description": "Raises a new defect in a project and returns it.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsCreatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/detail": {
      "post": {
        "operationId": "defectsDetail",
        "summary": "Get a defect",
        "description": "Returns one defect by its unique ID.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsDetailPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/update": {
      "post": {
        "operationId": "defectsUpdate",
        "summary": "Update a defect",
        "description": "Updates the fields you send on an existing defect. Fields you leave out are not changed.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsUpdatePayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/link": {
      "post": {
        "operationId": "defectsLink",
        "summary": "Link a defect",
        "description": "Links a defect to a test case, a test step, or a task. Send at least one of the three.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsLinkPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/defects/status": {
      "post": {
        "operationId": "defectsStatus",
        "summary": "Set defect status",
        "description": "Changes the status of a defect.",
        "tags": [
          "Defects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptedRequest"
              }
            }
          }
        },
        "x-decrypted-payload": {
          "$ref": "#/components/schemas/DefectsStatusPayload"
        },
        "responses": {
          "200": {
            "description": "The request worked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "The decrypted payload failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-KEY",
        "description": "Your Orangescrum API key. The matching secret is used to encrypt the payload, and is never sent."
      }
    },
    "schemas": {
      "EncryptedRequest": {
        "type": "object",
        "required": [
          "encrypted_data"
        ],
        "additionalProperties": false,
        "properties": {
          "encrypted_data": {
            "type": "string",
            "description": "base64(iv + AES-256-CBC ciphertext) of the JSON payload. The key is the raw sha256 of your API secret (32 bytes); the iv is 16 random bytes prepended to the ciphertext. The payload fields for each operation are in the schema referenced by x-decrypted-payload."
          }
        }
      },
      "SuccessResponse": {
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string"
          },
          "data": {
            "description": "Operation result. Shape depends on the endpoint.",
            "oneOf": [
              {
                "type": "object"
              },
              {
                "type": "array",
                "items": {}
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string",
            "examples": [
              "Invalid API key"
            ]
          }
        }
      },
      "ValidationErrorResponse": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string",
            "examples": [
              "The given data was invalid."
            ]
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "ValidatePayload": {
        "type": "object",
        "title": "Validate request payload",
        "description": "Validate request takes no required payload fields.",
        "properties": {}
      },
      "ProjectsListPayload": {
        "type": "object",
        "title": "List projects payload",
        "description": "Decrypted payload for POST /api/v1/partner/projects/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "filters": {
            "type": "array",
            "items": {},
            "description": "Reserved filter object. It is accepted and validated, but the list is not narrowed by it. Use the search endpoint to filter."
          }
        }
      },
      "ProjectsCreatePayload": {
        "type": "object",
        "title": "Create a project payload",
        "description": "Decrypted payload for POST /api/v1/partner/projects/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Project name. Max 255 characters."
          },
          "short_name": {
            "type": "string",
            "description": "Short code for the project. Max 50 characters."
          },
          "description": {
            "type": "string",
            "description": "Project description."
          },
          "project_type": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ],
            "description": "Project type. Pass the numeric type ID, or a type name to match or create."
          },
          "status": {
            "type": "string",
            "description": "One of: Started, Hold, Stack, Completed."
          },
          "priority": {
            "type": "string",
            "description": "One of: High, Medium, Low."
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Project start date."
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "Project end date. Must be on or after start_date."
          },
          "estimated_hours": {
            "type": "number",
            "description": "Estimated hours. Cannot be negative."
          },
          "status_group_id": {
            "type": "integer",
            "description": "ID of the status group to use."
          }
        }
      },
      "ProjectsDetailPayload": {
        "type": "object",
        "title": "Get a project payload",
        "description": "Decrypted payload for POST /api/v1/partner/projects/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          }
        }
      },
      "ProjectsUpdatePayload": {
        "type": "object",
        "title": "Update a project payload",
        "description": "Decrypted payload for POST /api/v1/partner/projects/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "name": {
            "type": "string",
            "description": "Project name. Max 255 characters."
          },
          "short_name": {
            "type": "string",
            "description": "Short code for the project. Max 50 characters."
          },
          "description": {
            "type": "string",
            "description": "Project description."
          },
          "project_type": {
            "type": "integer",
            "description": "Numeric project type ID."
          },
          "status": {
            "type": "string",
            "description": "One of: Started, Hold, Stack, Completed."
          },
          "priority": {
            "type": "string",
            "description": "One of: High, Medium, Low."
          },
          "isactive": {
            "type": "boolean",
            "description": "Whether the project is active."
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Project start date."
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "Project end date. Must be on or after start_date."
          },
          "estimated_hours": {
            "type": "number",
            "description": "Estimated hours. Cannot be negative."
          }
        }
      },
      "ProjectsSearchPayload": {
        "type": "object",
        "title": "Search projects payload",
        "description": "Decrypted payload for POST /api/v1/partner/projects/search. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "TasksListPayload": {
        "type": "object",
        "title": "List tasks payload",
        "description": "Decrypted payload for POST /api/v1/partner/tasks/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "filters": {
            "type": "array",
            "items": {},
            "description": "Object holding the filter fields below."
          },
          "filters.project_id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ],
            "description": "Unique ID of the project, or its numeric ID."
          },
          "filters.status": {
            "type": "string",
            "description": "One of: Open, Closed."
          },
          "filters.priority": {
            "type": "string",
            "description": "One of: high, medium, low."
          },
          "filters.assign_to": {
            "type": "integer",
            "description": "User ID the task is assigned to."
          },
          "filters.type_id": {
            "type": "integer",
            "description": "Task type ID."
          },
          "filters.case_no": {
            "type": "integer",
            "description": "Task number within the project."
          },
          "filters.q": {
            "type": "string",
            "description": "Search text."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          }
        }
      },
      "TasksCreatePayload": {
        "type": "object",
        "title": "Create a task payload",
        "description": "Decrypted payload for POST /api/v1/partner/tasks/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id",
          "title",
          "type_id",
          "priority"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "title": {
            "type": "string",
            "description": "Task title. Max 255 characters."
          },
          "message": {
            "type": "string",
            "description": "Task description."
          },
          "type_id": {
            "type": "integer",
            "description": "Task type ID."
          },
          "priority": {
            "type": "string",
            "description": "One of: high, medium, low."
          },
          "assign_to": {
            "type": "integer",
            "description": "User ID to assign the task to."
          },
          "estimated_hours": {
            "type": "number",
            "description": "Estimated hours. Cannot be negative."
          },
          "gantt_start_date": {
            "type": "string",
            "format": "date",
            "description": "Task start date."
          },
          "due_date": {
            "type": "string",
            "format": "date",
            "description": "Task due date."
          },
          "completed": {
            "type": "integer",
            "description": "Progress state. One of: 0, 1, 2, 3, 4, 5, 6."
          },
          "legend": {
            "type": "integer",
            "description": "Legend or label ID."
          },
          "custom_status": {
            "type": "string",
            "description": "One of: New, In Progress, Resolved, Closed."
          },
          "parent_task_id": {
            "type": "integer",
            "description": "ID of the parent task, for a subtask."
          },
          "story_point": {
            "type": "number",
            "description": "Story points. Cannot be negative."
          },
          "epic_id": {
            "type": "integer",
            "description": "ID of the epic to link the task to."
          },
          "milestone_id": {
            "type": "integer",
            "description": "ID of the milestone to link the task to."
          },
          "is_recurring": {
            "type": "boolean",
            "description": "Whether the task repeats."
          }
        }
      },
      "TasksDetailPayload": {
        "type": "object",
        "title": "Get a task payload",
        "description": "Decrypted payload for POST /api/v1/partner/tasks/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "task_id"
        ],
        "properties": {
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          }
        }
      },
      "TasksUpdatePayload": {
        "type": "object",
        "title": "Update a task payload",
        "description": "Decrypted payload for POST /api/v1/partner/tasks/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "task_id"
        ],
        "properties": {
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          },
          "title": {
            "type": "string",
            "description": "Task title. Max 255 characters."
          },
          "message": {
            "type": "string",
            "description": "Task description."
          },
          "type_id": {
            "type": "integer",
            "description": "Task type ID."
          },
          "priority": {
            "type": "string",
            "description": "One of: high, medium, low."
          },
          "assign_to": {
            "type": "integer",
            "description": "User ID to assign the task to."
          },
          "estimated_hours": {
            "type": "number",
            "description": "Estimated hours. Cannot be negative."
          },
          "gantt_start_date": {
            "type": "string",
            "format": "date",
            "description": "Task start date."
          },
          "due_date": {
            "type": "string",
            "format": "date",
            "description": "Task due date."
          },
          "completed": {
            "type": "integer",
            "description": "Progress state. One of: 0, 1, 2, 3, 4, 5, 6."
          },
          "legend": {
            "type": "integer",
            "description": "Legend or label ID."
          },
          "custom_status": {
            "type": "string",
            "description": "One of: New, In Progress, Resolved, Closed."
          },
          "status": {
            "type": "string",
            "description": "One of: Open, Closed."
          }
        }
      },
      "TasksSearchPayload": {
        "type": "object",
        "title": "Search tasks payload",
        "description": "Decrypted payload for POST /api/v1/partner/tasks/search. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          },
          "project_id": {
            "type": "string",
            "description": "Unique ID of a project, to limit the search to that project."
          }
        }
      },
      "TimelogsListPayload": {
        "type": "object",
        "title": "List timelogs payload",
        "description": "Decrypted payload for POST /api/v1/partner/timelogs/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "filters": {
            "type": "array",
            "items": {},
            "description": "Object holding the filter fields below."
          },
          "filters.project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "filters.task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          },
          "filters.from": {
            "type": "string",
            "format": "date",
            "description": "Start of the date range."
          },
          "filters.to": {
            "type": "string",
            "format": "date",
            "description": "End of the date range. Must be on or after filters.from."
          },
          "filters.is_billable": {
            "type": "boolean",
            "description": "Only billable or non billable entries."
          },
          "filters.timesheet_flag": {
            "type": "boolean",
            "description": "Only entries on a timesheet."
          },
          "filters.q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          }
        }
      },
      "TimelogsSearchPayload": {
        "type": "object",
        "title": "Search timelogs payload",
        "description": "Decrypted payload for POST /api/v1/partner/timelogs/search. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "filters": {
            "type": "array",
            "items": {},
            "description": "Object holding the filter fields below."
          },
          "filters.project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "filters.task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          },
          "filters.from": {
            "type": "string",
            "format": "date",
            "description": "Start of the date range."
          },
          "filters.to": {
            "type": "string",
            "format": "date",
            "description": "End of the date range. Must be on or after filters.from."
          },
          "filters.is_billable": {
            "type": "boolean",
            "description": "Only billable or non billable entries."
          },
          "filters.timesheet_flag": {
            "type": "boolean",
            "description": "Only entries on a timesheet."
          },
          "filters.q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          }
        }
      },
      "TimelogsDetailPayload": {
        "type": "object",
        "title": "Get a timelog payload",
        "description": "Decrypted payload for POST /api/v1/partner/timelogs/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "timelog_id"
        ],
        "properties": {
          "timelog_id": {
            "type": "string",
            "description": "Unique ID of the time entry."
          }
        }
      },
      "TimelogsCreatePayload": {
        "type": "object",
        "title": "Create a timelog payload",
        "description": "Decrypted payload for POST /api/v1/partner/timelogs/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id",
          "task_date",
          "description"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          },
          "task_date": {
            "type": "string",
            "format": "date",
            "description": "Date the work was done."
          },
          "start_datetime": {
            "type": "string",
            "format": "date",
            "description": "Full start date and time."
          },
          "end_datetime": {
            "type": "string",
            "format": "date",
            "description": "Full end date and time. Must be after start_datetime."
          },
          "start_time": {
            "type": "string",
            "format": "date",
            "description": "Start time in HH:MM:SS format. Required when start_datetime is not sent."
          },
          "end_time": {
            "type": "string",
            "format": "date",
            "description": "End time in HH:MM:SS format. Required when end_datetime is not sent."
          },
          "total_hours": {
            "type": "number",
            "description": "Total hours logged. Cannot be negative."
          },
          "break_time": {
            "type": "number",
            "description": "Break time in hours. Cannot be negative."
          },
          "description": {
            "type": "string",
            "description": "What the time was spent on. Max 1000 characters."
          },
          "is_from_timer": {
            "type": "boolean",
            "description": "Whether the entry came from a running timer."
          },
          "is_billable": {
            "type": "boolean",
            "description": "Whether the time is billable."
          },
          "timesheet_flag": {
            "type": "boolean",
            "description": "Whether the entry belongs to a timesheet."
          },
          "task_status": {
            "type": "integer",
            "description": "Status of the task at the time of logging."
          },
          "pending_status": {
            "type": "integer",
            "description": "Approval status of the entry."
          },
          "approver_id": {
            "type": "integer",
            "description": "User ID of the approver."
          },
          "ip": {
            "type": "string",
            "description": "IP address the entry was logged from. Must be a valid IP."
          }
        }
      },
      "TimelogsUpdatePayload": {
        "type": "object",
        "title": "Update a timelog payload",
        "description": "Decrypted payload for POST /api/v1/partner/timelogs/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "timelog_id"
        ],
        "properties": {
          "timelog_id": {
            "type": "string",
            "description": "Unique ID of the time entry."
          },
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          },
          "task_date": {
            "type": "string",
            "format": "date",
            "description": "Date the work was done."
          },
          "start_datetime": {
            "type": "string",
            "format": "date",
            "description": "Full start date and time."
          },
          "end_datetime": {
            "type": "string",
            "format": "date",
            "description": "Full end date and time. Must be after start_datetime."
          },
          "start_time": {
            "type": "string",
            "format": "date",
            "description": "Start time in HH:MM:SS format."
          },
          "end_time": {
            "type": "string",
            "format": "date",
            "description": "End time in HH:MM:SS format."
          },
          "total_hours": {
            "type": "number",
            "description": "Total hours logged. Cannot be negative."
          },
          "break_time": {
            "type": "number",
            "description": "Break time in hours. Cannot be negative."
          },
          "description": {
            "type": "string",
            "description": "What the time was spent on. Max 1000 characters."
          },
          "is_from_timer": {
            "type": "boolean",
            "description": "Whether the entry came from a running timer."
          },
          "is_billable": {
            "type": "boolean",
            "description": "Whether the time is billable."
          },
          "timesheet_flag": {
            "type": "boolean",
            "description": "Whether the entry belongs to a timesheet."
          },
          "task_status": {
            "type": "integer",
            "description": "Status of the task at the time of logging."
          },
          "pending_status": {
            "type": "integer",
            "description": "Approval status of the entry."
          },
          "approver_id": {
            "type": "integer",
            "description": "User ID of the approver."
          },
          "ip": {
            "type": "string",
            "description": "IP address the entry was logged from. Must be a valid IP."
          }
        }
      },
      "UsersListPayload": {
        "type": "object",
        "title": "List users payload",
        "description": "Decrypted payload for POST /api/v1/partner/users/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "filters": {
            "type": "array",
            "items": {},
            "description": "Object holding the filter fields below."
          },
          "filters.search": {
            "type": "string",
            "description": "Search by name or email."
          },
          "filters.project_id": {
            "type": "string",
            "description": "Unique ID of a project, to return only its members."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "UsersDetailPayload": {
        "type": "object",
        "title": "Get a user payload",
        "description": "Decrypted payload for POST /api/v1/partner/users/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "uniq_id"
        ],
        "properties": {
          "uniq_id": {
            "type": "string",
            "description": "Unique ID of the user."
          }
        }
      },
      "TestCasesListPayload": {
        "type": "object",
        "title": "List test cases payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-cases/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario."
          },
          "status": {
            "type": "string",
            "description": "Test case status. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Test case priority. Max 100 characters."
          },
          "q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          },
          "include_archived": {
            "type": "boolean",
            "description": "Include archived test cases."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "TestCasesCreatePayload": {
        "type": "object",
        "title": "Create a test case payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-cases/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id",
          "name"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "name": {
            "type": "string",
            "description": "Test case name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Test case description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Test case type. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Test case priority. Max 100 characters."
          },
          "severity": {
            "type": "string",
            "description": "Test case severity. Max 100 characters."
          },
          "behaviour": {
            "type": "string",
            "description": "Expected behaviour. Max 100 characters."
          },
          "automation_status": {
            "type": "string",
            "description": "Automation status. Max 100 characters."
          },
          "pre_condition": {
            "type": "string",
            "description": "What must be true before the test runs."
          },
          "post_condition": {
            "type": "string",
            "description": "What should be true after the test runs."
          },
          "expected_result": {
            "type": "string",
            "description": "Expected result. Max 255 characters."
          },
          "status": {
            "type": "string",
            "description": "Test case status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          },
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario to link to."
          },
          "epic_id": {
            "type": "integer",
            "description": "ID of the epic to link to."
          },
          "feature_id": {
            "type": "integer",
            "description": "ID of the feature to link to."
          },
          "story_id": {
            "type": "integer",
            "description": "ID of the story to link to."
          }
        }
      },
      "TestCasesDetailPayload": {
        "type": "object",
        "title": "Get a test case payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-cases/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          }
        }
      },
      "TestCasesUpdatePayload": {
        "type": "object",
        "title": "Update a test case payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-cases/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "name": {
            "type": "string",
            "description": "Test case name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Test case description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Test case type. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Test case priority. Max 100 characters."
          },
          "severity": {
            "type": "string",
            "description": "Test case severity. Max 100 characters."
          },
          "behaviour": {
            "type": "string",
            "description": "Expected behaviour. Max 100 characters."
          },
          "automation_status": {
            "type": "string",
            "description": "Automation status. Max 100 characters."
          },
          "pre_condition": {
            "type": "string",
            "description": "What must be true before the test runs."
          },
          "post_condition": {
            "type": "string",
            "description": "What should be true after the test runs."
          },
          "expected_result": {
            "type": "string",
            "description": "Expected result. Max 255 characters."
          },
          "status": {
            "type": "string",
            "description": "Test case status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          },
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario to link to."
          },
          "epic_id": {
            "type": "integer",
            "description": "ID of the epic to link to."
          },
          "feature_id": {
            "type": "integer",
            "description": "ID of the feature to link to."
          },
          "story_id": {
            "type": "integer",
            "description": "ID of the story to link to."
          }
        }
      },
      "TestCasesDeletePayload": {
        "type": "object",
        "title": "Delete a test case payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-cases/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "hard_delete": {
            "type": "boolean",
            "description": "Set to true to delete permanently instead of archiving."
          }
        }
      },
      "TestScenariosListPayload": {
        "type": "object",
        "title": "List test scenarios payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-scenarios/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "status": {
            "type": "string",
            "description": "Scenario status. Max 50 characters."
          },
          "type": {
            "type": "string",
            "description": "Scenario type. Max 100 characters."
          },
          "q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          },
          "include_archived": {
            "type": "boolean",
            "description": "Include archived scenarios."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "TestScenariosCreatePayload": {
        "type": "object",
        "title": "Create a test scenario payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-scenarios/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id",
          "name"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "name": {
            "type": "string",
            "description": "Scenario name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Scenario description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Scenario type. Max 100 characters."
          },
          "coverage_percentage": {
            "type": "number",
            "description": "Coverage percentage. Between 0 and 100."
          },
          "test_strategy_id": {
            "type": "integer",
            "description": "ID of the test strategy."
          },
          "status": {
            "type": "string",
            "description": "Scenario status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          }
        }
      },
      "TestScenariosDetailPayload": {
        "type": "object",
        "title": "Get a test scenario payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-scenarios/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "scenario_id"
        ],
        "properties": {
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario."
          }
        }
      },
      "TestScenariosUpdatePayload": {
        "type": "object",
        "title": "Update a test scenario payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-scenarios/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "scenario_id"
        ],
        "properties": {
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario."
          },
          "name": {
            "type": "string",
            "description": "Scenario name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Scenario description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Scenario type. Max 100 characters."
          },
          "coverage_percentage": {
            "type": "number",
            "description": "Coverage percentage. Between 0 and 100."
          },
          "test_strategy_id": {
            "type": "integer",
            "description": "ID of the test strategy."
          },
          "status": {
            "type": "string",
            "description": "Scenario status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          }
        }
      },
      "TestScenariosDeletePayload": {
        "type": "object",
        "title": "Delete a test scenario payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-scenarios/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "scenario_id"
        ],
        "properties": {
          "scenario_id": {
            "type": "string",
            "description": "Unique ID of the test scenario."
          },
          "hard_delete": {
            "type": "boolean",
            "description": "Set to true to delete permanently instead of archiving."
          }
        }
      },
      "TestStepsListPayload": {
        "type": "object",
        "title": "List test steps payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-steps/list. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "include_archived": {
            "type": "boolean",
            "description": "Include archived steps."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "TestStepsCreatePayload": {
        "type": "object",
        "title": "Create a test step payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-steps/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "name": {
            "type": "string",
            "description": "Step name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Step description. Max 255 characters. Required when name is not sent."
          },
          "expected_result": {
            "type": "string",
            "description": "Expected result. Max 255 characters."
          },
          "outcome": {
            "type": "string",
            "description": "Actual outcome. Max 255 characters."
          },
          "status": {
            "type": "string",
            "description": "Step status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          }
        }
      },
      "TestStepsUpdatePayload": {
        "type": "object",
        "title": "Update a test step payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-steps/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id",
          "step_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "step_id": {
            "type": "string",
            "description": "Unique ID of the step."
          },
          "name": {
            "type": "string",
            "description": "Step name. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Step description. Max 255 characters."
          },
          "expected_result": {
            "type": "string",
            "description": "Expected result. Max 255 characters."
          },
          "outcome": {
            "type": "string",
            "description": "Actual outcome. Max 255 characters."
          },
          "status": {
            "type": "string",
            "description": "Step status. Max 50 characters."
          },
          "version": {
            "type": "string",
            "description": "Version label. Max 50 characters."
          }
        }
      },
      "TestStepsReorderPayload": {
        "type": "object",
        "title": "Reorder test steps payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-steps/reorder. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id",
          "step_ids",
          "step_ids.*"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "step_ids": {
            "type": "array",
            "items": {},
            "description": "Step IDs in the new order. At least one is required."
          },
          "step_ids.*": {
            "type": "string",
            "description": "Each entry is the unique ID of a step."
          }
        }
      },
      "TestStepsDeletePayload": {
        "type": "object",
        "title": "Delete a test step payload",
        "description": "Decrypted payload for POST /api/v1/partner/test-steps/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "test_case_id",
          "step_id"
        ],
        "properties": {
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case."
          },
          "step_id": {
            "type": "string",
            "description": "Unique ID of the step."
          },
          "hard_delete": {
            "type": "boolean",
            "description": "Set to true to delete permanently instead of archiving."
          }
        }
      },
      "ChecklistsConfigPayload": {
        "type": "object",
        "title": "Get checklist configuration payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/config. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          }
        }
      },
      "ChecklistsGroupsListPayload": {
        "type": "object",
        "title": "List checklist groups payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/groups/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "active_only": {
            "type": "boolean",
            "description": "Return only active groups."
          }
        }
      },
      "ChecklistsGroupsCreatePayload": {
        "type": "object",
        "title": "Create a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/groups/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Group name. Max 255 characters."
          },
          "color": {
            "type": "string",
            "description": "Colour code for the group. Max 16 characters."
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the group is active."
          }
        }
      },
      "ChecklistsGroupsUpdatePayload": {
        "type": "object",
        "title": "Update a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/groups/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "group_id"
        ],
        "properties": {
          "group_id": {
            "type": "integer",
            "description": "ID of the checklist group."
          },
          "name": {
            "type": "string",
            "description": "Group name. Max 255 characters."
          },
          "color": {
            "type": "string",
            "description": "Colour code for the group. Max 16 characters."
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the group is active."
          }
        }
      },
      "ChecklistsGroupsDeletePayload": {
        "type": "object",
        "title": "Delete a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/groups/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "group_id"
        ],
        "properties": {
          "group_id": {
            "type": "integer",
            "description": "ID of the checklist group."
          }
        }
      },
      "ChecklistsTemplatesListPayload": {
        "type": "object",
        "title": "List checklist templates payload",
        "description": "List checklist templates takes no required payload fields.",
        "properties": {}
      },
      "ChecklistsTemplatesCreatePayload": {
        "type": "object",
        "title": "Create a checklist template payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/templates/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "checklist_group_id",
          "name"
        ],
        "properties": {
          "checklist_group_id": {
            "type": "integer",
            "description": "ID of the checklist group."
          },
          "name": {
            "type": "string",
            "description": "Template name. Max 255 characters."
          },
          "auto_attach": {
            "type": "boolean",
            "description": "Attach this template automatically when a matching work item is created."
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the template is active."
          },
          "items": {
            "type": "array",
            "items": {},
            "description": "The checklist items in the template."
          },
          "items.*.label": {
            "type": "string",
            "description": "Text of each item. Max 2000 characters. Required when items is sent."
          }
        }
      },
      "ChecklistsTemplatesUpdatePayload": {
        "type": "object",
        "title": "Update a checklist template payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/templates/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "template_id"
        ],
        "properties": {
          "template_id": {
            "type": "integer",
            "description": "ID of the checklist template."
          },
          "checklist_group_id": {
            "type": "integer",
            "description": "ID of the checklist group."
          },
          "name": {
            "type": "string",
            "description": "Template name. Max 255 characters."
          },
          "auto_attach": {
            "type": "boolean",
            "description": "Attach this template automatically when a matching work item is created."
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the template is active."
          },
          "items": {
            "type": "array",
            "items": {},
            "description": "The checklist items in the template."
          },
          "items.*.label": {
            "type": "string",
            "description": "Text of each item. Max 2000 characters. Required when items is sent."
          }
        }
      },
      "ChecklistsTemplatesDeletePayload": {
        "type": "object",
        "title": "Delete a checklist template payload",
        "description": "Decrypted payload for POST /api/v1/partner/checklists/templates/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "template_id"
        ],
        "properties": {
          "template_id": {
            "type": "integer",
            "description": "ID of the checklist template."
          }
        }
      },
      "WorkItemsChecklistDetailPayload": {
        "type": "object",
        "title": "Get a work item checklist payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          }
        }
      },
      "WorkItemsChecklistItemsAddPayload": {
        "type": "object",
        "title": "Add a checklist item payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/items/add. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id",
          "work_item_group_id",
          "label"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          },
          "work_item_group_id": {
            "type": "integer",
            "description": "ID of the checklist group on the work item."
          },
          "label": {
            "type": "string",
            "description": "Text of the item. Max 2000 characters."
          }
        }
      },
      "WorkItemsChecklistItemsUpdatePayload": {
        "type": "object",
        "title": "Update a checklist item payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/items/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "item_id",
          "label"
        ],
        "properties": {
          "item_id": {
            "type": "integer",
            "description": "ID of the checklist item."
          },
          "label": {
            "type": "string",
            "description": "New text of the item. Max 2000 characters."
          }
        }
      },
      "WorkItemsChecklistItemsDeletePayload": {
        "type": "object",
        "title": "Delete a checklist item payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/items/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "item_id"
        ],
        "properties": {
          "item_id": {
            "type": "integer",
            "description": "ID of the checklist item."
          }
        }
      },
      "WorkItemsChecklistItemsCompletePayload": {
        "type": "object",
        "title": "Complete a checklist item payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/items/complete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "item_id"
        ],
        "properties": {
          "item_id": {
            "type": "integer",
            "description": "ID of the checklist item."
          },
          "is_completed": {
            "type": "boolean",
            "description": "True to mark the item done, false to reopen it."
          }
        }
      },
      "WorkItemsChecklistGroupsAddPayload": {
        "type": "object",
        "title": "Add a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/add. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id",
          "source_group_id"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          },
          "source_group_id": {
            "type": "integer",
            "description": "ID of the catalogue checklist group to copy."
          }
        }
      },
      "WorkItemsChecklistGroupsCreateCustomPayload": {
        "type": "object",
        "title": "Create a custom checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/create-custom. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id",
          "name"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          },
          "name": {
            "type": "string",
            "description": "Group name. Max 255 characters."
          }
        }
      },
      "WorkItemsChecklistGroupsRenamePayload": {
        "type": "object",
        "title": "Rename a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/rename. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_group_id",
          "name"
        ],
        "properties": {
          "work_item_group_id": {
            "type": "integer",
            "description": "ID of the checklist group on the work item."
          },
          "name": {
            "type": "string",
            "description": "New group name. Max 255 characters."
          }
        }
      },
      "WorkItemsChecklistGroupsDeletePayload": {
        "type": "object",
        "title": "Delete a checklist group payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/delete. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_group_id"
        ],
        "properties": {
          "work_item_group_id": {
            "type": "integer",
            "description": "ID of the checklist group on the work item."
          }
        }
      },
      "WorkItemsChecklistGroupsReorderPayload": {
        "type": "object",
        "title": "Reorder checklist groups payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/reorder. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id",
          "group_ids",
          "group_ids.*"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          },
          "group_ids": {
            "type": "array",
            "items": {},
            "description": "Group IDs in the new order. At least one is required."
          },
          "group_ids.*": {
            "type": "integer",
            "description": "Each entry is the ID of a checklist group."
          }
        }
      },
      "WorkItemsChecklistGroupsAddFromTemplatePayload": {
        "type": "object",
        "title": "Add a checklist group from a template payload",
        "description": "Decrypted payload for POST /api/v1/partner/work-items/checklist/groups/add-from-template. Encrypt this object and send it as encrypted_data.",
        "required": [
          "work_item_type",
          "work_item_id",
          "template_id"
        ],
        "properties": {
          "work_item_type": {
            "type": "string",
            "description": "One of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program."
          },
          "work_item_id": {
            "type": "integer",
            "description": "Numeric ID of the work item."
          },
          "template_id": {
            "type": "integer",
            "description": "ID of the checklist template to apply."
          }
        }
      },
      "DefectsListPayload": {
        "type": "object",
        "title": "List defects payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/list. Encrypt this object and send it as encrypted_data.",
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "status": {
            "type": "string",
            "description": "Defect status. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Defect priority. Max 50 characters."
          },
          "severity": {
            "type": "string",
            "description": "Defect severity. Max 50 characters."
          },
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of a linked test case."
          },
          "q": {
            "type": "string",
            "description": "Search text. Max 255 characters."
          },
          "page": {
            "type": "integer",
            "description": "Page number. Starts at 1."
          },
          "per_page": {
            "type": "integer",
            "description": "Results per page. Between 1 and 100."
          }
        }
      },
      "DefectsCreatePayload": {
        "type": "object",
        "title": "Create a defect payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/create. Encrypt this object and send it as encrypted_data.",
        "required": [
          "project_id",
          "title"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "Unique ID of the project."
          },
          "title": {
            "type": "string",
            "description": "Defect title. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Defect description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Defect type. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Defect priority. Max 50 characters."
          },
          "severity": {
            "type": "string",
            "description": "Defect severity. Max 50 characters."
          },
          "status": {
            "type": "string",
            "description": "Defect status. Max 50 characters."
          },
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case to link to."
          },
          "test_step_id": {
            "type": "string",
            "description": "Unique ID of the test step to link to."
          },
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task to link to."
          },
          "epic_id": {
            "type": "integer",
            "description": "ID of the epic to link to."
          },
          "feature_id": {
            "type": "integer",
            "description": "ID of the feature to link to."
          }
        }
      },
      "DefectsDetailPayload": {
        "type": "object",
        "title": "Get a defect payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/detail. Encrypt this object and send it as encrypted_data.",
        "required": [
          "defect_id"
        ],
        "properties": {
          "defect_id": {
            "type": "string",
            "description": "Unique ID of the defect."
          }
        }
      },
      "DefectsUpdatePayload": {
        "type": "object",
        "title": "Update a defect payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/update. Encrypt this object and send it as encrypted_data.",
        "required": [
          "defect_id"
        ],
        "properties": {
          "defect_id": {
            "type": "string",
            "description": "Unique ID of the defect."
          },
          "title": {
            "type": "string",
            "description": "Defect title. Max 255 characters."
          },
          "description": {
            "type": "string",
            "description": "Defect description. Max 255 characters."
          },
          "type": {
            "type": "string",
            "description": "Defect type. Max 50 characters."
          },
          "priority": {
            "type": "string",
            "description": "Defect priority. Max 50 characters."
          },
          "severity": {
            "type": "string",
            "description": "Defect severity. Max 50 characters."
          },
          "status": {
            "type": "string",
            "description": "Defect status. Max 50 characters."
          },
          "epic_id": {
            "type": "integer",
            "description": "ID of the epic to link to."
          },
          "feature_id": {
            "type": "integer",
            "description": "ID of the feature to link to."
          }
        }
      },
      "DefectsLinkPayload": {
        "type": "object",
        "title": "Link a defect payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/link. Encrypt this object and send it as encrypted_data.",
        "required": [
          "defect_id"
        ],
        "properties": {
          "defect_id": {
            "type": "string",
            "description": "Unique ID of the defect."
          },
          "test_case_id": {
            "type": "string",
            "description": "Unique ID of the test case. Required when test_step_id and task_id are both missing."
          },
          "test_step_id": {
            "type": "string",
            "description": "Unique ID of the test step."
          },
          "task_id": {
            "type": "string",
            "description": "Unique ID of the task."
          }
        }
      },
      "DefectsStatusPayload": {
        "type": "object",
        "title": "Set defect status payload",
        "description": "Decrypted payload for POST /api/v1/partner/defects/status. Encrypt this object and send it as encrypted_data.",
        "required": [
          "defect_id",
          "status"
        ],
        "properties": {
          "defect_id": {
            "type": "string",
            "description": "Unique ID of the defect."
          },
          "status": {
            "type": "string",
            "description": "New defect status. Max 50 characters."
          }
        }
      }
    }
  }
}
