From bd21c6ee789ed22d152e5bce256d9c60e5d3d513 Mon Sep 17 00:00:00 2001 From: vihar Date: Sat, 22 Aug 2026 18:28:37 +0530 Subject: [PATCH] developer-docs: publish the REST API OpenAPI 3.0 specification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No machine-readable spec of the public API existed anywhere online — drf-spectacular is disabled on Plane Cloud and the docs only explained self-host generation. Publish the generated spec (130 operations, production server first) at /openapi.json and /openapi.yaml, link it from llms.txt and the API reference, and point the OpenAPI page at the hosted files before the self-host instructions. Generated from makeplane/plane@preview with: ENABLE_DRF_SPECTACULAR=1 python manage.py spectacular Co-authored-by: Cursor --- .oxfmtrc.json | 4 +- .../developer-docs/docs/.vitepress/config.mts | 1 + .../docs/api-reference/introduction.md | 9 + .../docs/dev-tools/openapi-specification.md | 29 +- apps/developer-docs/docs/public/openapi.json | 22496 ++++++++++++++++ apps/developer-docs/docs/public/openapi.yaml | 17183 ++++++++++++ 6 files changed, 39714 insertions(+), 8 deletions(-) create mode 100644 apps/developer-docs/docs/public/openapi.json create mode 100644 apps/developer-docs/docs/public/openapi.yaml diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 43078c0f..c535e9db 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -4,6 +4,8 @@ "pnpm-lock.yaml", "**/.vitepress/cache/**", "**/.vitepress/dist/**", - "**/.turbo/**" + "**/.turbo/**", + "apps/developer-docs/docs/public/openapi.json", + "apps/developer-docs/docs/public/openapi.yaml" ] } diff --git a/apps/developer-docs/docs/.vitepress/config.mts b/apps/developer-docs/docs/.vitepress/config.mts index feb29691..1bd9c42b 100644 --- a/apps/developer-docs/docs/.vitepress/config.mts +++ b/apps/developer-docs/docs/.vitepress/config.mts @@ -88,6 +88,7 @@ export default extendConfig( "- [Roles and permissions](https://docs.plane.so/roles-and-permissions/overview.md): What each workspace and project role is allowed to do.", ].join("\n"), optional: [ + "- [OpenAPI 3.0 specification (JSON)](https://developers.plane.so/openapi.json): Machine-readable description of every Plane REST API endpoint; also available as [YAML](https://developers.plane.so/openapi.yaml).", "- [Complete documentation in one file](https://developers.plane.so/llms-full.txt): Every page of developers.plane.so concatenated as Markdown (about 1.6 MB).", "- [Sitemap](https://developers.plane.so/sitemap.xml): Every page URL on developers.plane.so.", "- [Plane on GitHub](https://github.com/makeplane/plane): Source code, issues, and releases.", diff --git a/apps/developer-docs/docs/api-reference/introduction.md b/apps/developer-docs/docs/api-reference/introduction.md index b9bf82ac..4dc09c85 100644 --- a/apps/developer-docs/docs/api-reference/introduction.md +++ b/apps/developer-docs/docs/api-reference/introduction.md @@ -28,6 +28,15 @@ GET https://api.plane.so/api/v1/workspaces/{workspace_slug}/projects/ If you're using a self-hosted instance of Plane, your API base URL will differ based on your custom domain and setup. ::: +## OpenAPI specification + +The complete API is described by an OpenAPI 3.0 specification — useful for generating clients, validating requests, or giving AI agents a machine-readable view of every endpoint: + +- [openapi.json](https://developers.plane.so/openapi.json) +- [openapi.yaml](https://developers.plane.so/openapi.yaml) + +See [OpenAPI Specification](/dev-tools/openapi-specification) for how the spec is produced and how to generate one from a self-hosted instance. + ## Authentication Our APIs use a key for authentication. The API key should be included in the header of each request to verify the client's identity and permissions. The key should be passed as the value of the `X-API-Key` header. diff --git a/apps/developer-docs/docs/dev-tools/openapi-specification.md b/apps/developer-docs/docs/dev-tools/openapi-specification.md index 932f43f4..a4629564 100644 --- a/apps/developer-docs/docs/dev-tools/openapi-specification.md +++ b/apps/developer-docs/docs/dev-tools/openapi-specification.md @@ -6,9 +6,24 @@ keywords: plane, developer tools, openapi, api specification, swagger, redoc, dr # OpenAPI Specification -Plane uses [drf-spectacular](https://drf-spectacular.readthedocs.io/) to generate an OpenAPI 3.0 specification for the public REST API (`/api/v1/`). The feature is **disabled by default** and must be explicitly enabled. +Plane uses [drf-spectacular](https://drf-spectacular.readthedocs.io/) to generate an OpenAPI 3.0 specification for the public REST API (`/api/v1/`). -## Enable the OpenAPI spec +## Download the published spec + +The specification is published with these docs — point code generators, API clients, and AI agents at either file: + +| Format | URL | +| ------ | ---------------------------------------------------------------------------- | +| JSON | [developers.plane.so/openapi.json](https://developers.plane.so/openapi.json) | +| YAML | [developers.plane.so/openapi.yaml](https://developers.plane.so/openapi.yaml) | + +The published spec lists `https://api.plane.so` (Plane Cloud) as the production server. When self-hosting, replace it with your own domain, or generate the spec from your own instance as described below. + +## Generate the spec from a self-hosted instance + +The schema endpoints are **disabled by default** and must be explicitly enabled. + +### Enable the OpenAPI spec Add the following to your `.env` file (at the project root or `apps/api/.env`): @@ -24,7 +39,7 @@ Then restart the API server so it picks up the new variable. No other environment variables are needed — everything else (schema path prefix, tags, auth schemes, servers) is pre-configured in `apps/api/plane/settings/openapi.py`. -## Access the OpenAPI spec +### Access the OpenAPI spec > Replace `{domain_name}` below with your self-hosted Plane domain (e.g. `plane.example.com`). @@ -36,9 +51,9 @@ Once the API server is running with the variable enabled, three endpoints are av | `GET /api/schema/swagger-ui/` | `https://{domain_name}/api/schema/swagger-ui/` | Interactive Swagger UI | | `GET /api/schema/redoc/` | `https://{domain_name}/api/schema/redoc/` | ReDoc documentation viewer | -## Download the OpenAPI spec +### Download the OpenAPI spec -### Browser +#### Browser Open `https://{domain_name}/api/schema/` and save the page. The default format is YAML. @@ -48,7 +63,7 @@ For JSON, append the `format` query parameter: https://{domain_name}/api/schema/?format=openapi-json ``` -### curl +#### curl ```bash # YAML @@ -58,7 +73,7 @@ curl -o openapi.yaml https://{domain_name}/api/schema/ curl -o openapi.json https://{domain_name}/api/schema/?format=openapi-json ``` -### Management command (offline, no running server required) +#### Management command (offline, no running server required) ```bash # From apps/api/ diff --git a/apps/developer-docs/docs/public/openapi.json b/apps/developer-docs/docs/public/openapi.json new file mode 100644 index 00000000..0cba32ec --- /dev/null +++ b/apps/developer-docs/docs/public/openapi.json @@ -0,0 +1,22496 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "The Plane REST API", + "version": "0.0.1", + "description": "The Plane REST API\n\nVisit our quick start guide and full API documentation at [developers.plane.so](https://developers.plane.so/api-reference/introduction).", + "contact": { + "name": "Plane", + "url": "https://plane.so", + "email": "support@plane.so" + }, + "license": { + "name": "GNU AGPLv3", + "url": "https://github.com/makeplane/plane/blob/preview/LICENSE.txt" + } + }, + "paths": { + "/api/v1/assets/user-assets/": { + "post": { + "operationId": "create_user_asset_upload", + "description": "Generate presigned URL for user asset upload", + "summary": "Generate presigned URL for user asset upload", + "tags": [ + "Assets" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAssetUploadRequest" + }, + "examples": { + "UserAvatarUpload": { + "value": { + "name": "profile.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_AVATAR" + }, + "summary": "User Avatar Upload", + "description": "Example request for uploading a user avatar" + }, + "UserCoverUpload": { + "value": { + "name": "cover.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_COVER" + }, + "summary": "User Cover Upload", + "description": "Example request for uploading a user cover" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/UserAssetUploadRequest" + }, + "examples": { + "UserAvatarUpload": { + "value": { + "name": "profile.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_AVATAR" + }, + "summary": "User Avatar Upload", + "description": "Example request for uploading a user avatar" + }, + "UserCoverUpload": { + "value": { + "name": "cover.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_COVER" + }, + "summary": "User Cover Upload", + "description": "Example request for uploading a user cover" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UserAssetUploadRequest" + }, + "examples": { + "UserAvatarUpload": { + "value": { + "name": "profile.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_AVATAR" + }, + "summary": "User Avatar Upload", + "description": "Example request for uploading a user avatar" + }, + "UserCoverUpload": { + "value": { + "name": "cover.jpg", + "type": "image/jpeg", + "size": 1024000, + "entity_type": "USER_COVER" + }, + "summary": "User Cover Upload", + "description": "Example request for uploading a user cover" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "200": { + "description": "Presigned URL generated successfully" + }, + "400": { + "description": "Validation error occurred with the provided data." + } + } + } + }, + "/api/v1/assets/user-assets/{asset_id}/": { + "patch": { + "operationId": "update_user_asset", + "description": "Mark user asset as uploaded", + "summary": "Mark user asset as uploaded", + "parameters": [ + { + "in": "path", + "name": "asset_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Asset ID", + "required": true, + "examples": { + "ExampleAssetID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example asset ID", + "description": "A typical asset UUID" + } + } + } + ], + "tags": [ + "Assets" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedAssetUpdateRequest" + }, + "examples": { + "UpdateAssetAttributes": { + "value": { + "attributes": { + "name": "updated_profile.jpg", + "type": "image/jpeg", + "size": 1024000 + }, + "entity_type": "USER_AVATAR" + }, + "summary": "Update Asset Attributes", + "description": "Example request for updating asset attributes" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedAssetUpdateRequest" + }, + "examples": { + "UpdateAssetAttributes": { + "value": { + "attributes": { + "name": "updated_profile.jpg", + "type": "image/jpeg", + "size": 1024000 + }, + "entity_type": "USER_AVATAR" + }, + "summary": "Update Asset Attributes", + "description": "Example request for updating asset attributes" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedAssetUpdateRequest" + }, + "examples": { + "UpdateAssetAttributes": { + "value": { + "attributes": { + "name": "updated_profile.jpg", + "type": "image/jpeg", + "size": 1024000 + }, + "entity_type": "USER_AVATAR" + }, + "summary": "Update Asset Attributes", + "description": "Example request for updating asset attributes" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "204": { + "description": "Asset updated successfully" + }, + "404": { + "description": "The requested resource was not found." + } + } + }, + "delete": { + "operationId": "delete_user_asset", + "description": "Delete user asset.\n\nDelete a user profile asset (avatar or cover image) and remove its reference from the user profile.\nThis performs a soft delete by marking the asset as deleted and updating the user's profile.", + "summary": "Delete user asset", + "parameters": [ + { + "in": "path", + "name": "asset_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Asset ID", + "required": true, + "examples": { + "ExampleAssetID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example asset ID", + "description": "A typical asset UUID" + } + } + } + ], + "tags": [ + "Assets" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "204": { + "description": "Asset deleted successfully" + }, + "404": { + "description": "The requested resource was not found." + } + } + } + }, + "/api/v1/users/me/": { + "get": { + "operationId": "get_current_user", + "description": "Retrieve the authenticated user's profile information including basic details.", + "summary": "Get current user", + "tags": [ + "Users" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserLite" + }, + "examples": { + "User": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "avatar": "https://example.com/avatar.jpg", + "avatar_url": "https://example.com/avatar.jpg", + "display_name": "John Doe" + } + } + } + } + }, + "description": "Current user profile" + } + } + } + }, + "/api/v1/workspaces/{slug}/assets/": { + "post": { + "operationId": "create_generic_asset_upload", + "description": "Generate presigned URL for generic asset upload", + "summary": "Generate presigned URL for generic asset upload", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Assets" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenericAssetUploadRequest" + }, + "examples": { + "GenericAssetUploadSerializer": { + "value": { + "name": "image.jpg", + "type": "image/jpeg", + "size": 1024000, + "project_id": "123e4567-e89b-12d3-a456-426614174000", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for uploading a generic asset" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/GenericAssetUploadRequest" + }, + "examples": { + "GenericAssetUploadSerializer": { + "value": { + "name": "image.jpg", + "type": "image/jpeg", + "size": 1024000, + "project_id": "123e4567-e89b-12d3-a456-426614174000", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for uploading a generic asset" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/GenericAssetUploadRequest" + }, + "examples": { + "GenericAssetUploadSerializer": { + "value": { + "name": "image.jpg", + "type": "image/jpeg", + "size": 1024000, + "project_id": "123e4567-e89b-12d3-a456-426614174000", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for uploading a generic asset" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "200": { + "description": "Presigned URL generated successfully" + }, + "400": { + "description": "Validation error" + }, + "404": { + "description": "The requested resource was not found." + }, + "409": { + "description": "Asset with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/assets/{asset_id}/": { + "get": { + "operationId": "get_generic_asset", + "description": "Get presigned URL for asset download", + "summary": "Get presigned URL for asset download", + "parameters": [ + { + "in": "path", + "name": "asset_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Assets" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "200": { + "description": "Presigned download URL generated successfully" + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Asset not found" + } + } + }, + "patch": { + "operationId": "update_generic_asset", + "description": "Update generic asset after upload completion", + "summary": "Update generic asset after upload completion", + "parameters": [ + { + "in": "path", + "name": "asset_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Asset ID", + "required": true, + "examples": { + "ExampleAssetID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example asset ID", + "description": "A typical asset UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Assets" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedGenericAssetUpdateRequest" + }, + "examples": { + "GenericAssetUpdateSerializer": { + "value": { + "is_uploaded": true + }, + "description": "Example request for updating a generic asset" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedGenericAssetUpdateRequest" + }, + "examples": { + "GenericAssetUpdateSerializer": { + "value": { + "is_uploaded": true + }, + "description": "Example request for updating a generic asset" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedGenericAssetUpdateRequest" + }, + "examples": { + "GenericAssetUpdateSerializer": { + "value": { + "is_uploaded": true + }, + "description": "Example request for updating a generic asset" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "204": { + "description": "Asset updated successfully" + }, + "404": { + "description": "Asset not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/invitations/": { + "get": { + "operationId": "workspaces_invitations_list", + "description": "List all workspace invites for a workspace", + "summary": "List workspace invites", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "workspaces" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkspaceInvite" + } + } + } + }, + "description": "Workspace invites" + } + } + }, + "post": { + "operationId": "workspaces_invitations_create", + "description": "Create a workspace invite", + "summary": "Create workspace invite", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "workspaces" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInviteRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInviteRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInviteRequest" + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInvite" + } + } + }, + "description": "Workspace invite" + } + } + } + }, + "/api/v1/workspaces/{slug}/invitations/{pk}/": { + "get": { + "operationId": "workspaces_invitations_retrieve", + "description": "Get a workspace invite by ID", + "summary": "Get workspace invite", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Workspace invite ID", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "workspaces" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInvite" + } + } + }, + "description": "Workspace invite" + } + } + }, + "patch": { + "operationId": "workspaces_invitations_partial_update", + "description": "Update a workspace invite", + "summary": "Update workspace invite", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Workspace invite ID", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "workspaces" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedWorkspaceInviteRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedWorkspaceInviteRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedWorkspaceInviteRequest" + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceInvite" + } + } + }, + "description": "Workspace invite" + } + } + }, + "delete": { + "operationId": "workspaces_invitations_destroy", + "description": "Delete a workspace invite", + "summary": "Delete workspace invite", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Workspace invite ID", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "workspaces" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "204": { + "description": "Workspace invite deleted" + } + } + } + }, + "/api/v1/workspaces/{slug}/issues/{project_identifier}-{issue_identifier}/": { + "get": { + "operationId": "get_workspace_work_item", + "description": "Retrieve a specific work item using workspace slug, project identifier, and issue identifier.", + "summary": "Retrieve work item by identifiers", + "parameters": [ + { + "in": "path", + "name": "issue_identifier", + "schema": { + "type": "integer" + }, + "description": "Issue sequence ID (numeric identifier within project)", + "required": true, + "examples": { + "ExampleIssueIdentifier": { + "value": 123, + "summary": "Example issue identifier", + "description": "A typical issue sequence ID" + } + } + }, + { + "in": "path", + "name": "project_identifier", + "schema": { + "type": "string" + }, + "description": "Project identifier (unique string within workspace)", + "required": true, + "examples": { + "ExampleProjectIdentifier": { + "value": "PROJ", + "summary": "Example project identifier", + "description": "A typical project identifier" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work item details" + }, + "404": { + "description": "Work item not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/issues/search/": { + "get": { + "operationId": "search_work_items", + "description": "Perform semantic search across issue names, sequence IDs, and project identifiers.", + "parameters": [ + { + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + }, + "description": "Maximum number of results to return", + "examples": { + "Default": { + "value": 10 + }, + "MoreResults": { + "value": 50, + "summary": "More results" + } + } + }, + { + "in": "query", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID for filtering results within a specific project", + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "Filter results for this project" + } + } + }, + { + "in": "query", + "name": "search", + "schema": { + "type": "string" + }, + "description": "Search query to filter results by name, description, or identifier", + "required": true, + "examples": { + "NameSearch": { + "value": "bug fix", + "summary": "Name search", + "description": "Search for items containing 'bug fix'" + }, + "SequenceID": { + "value": "123", + "summary": "Sequence ID", + "description": "Search by sequence ID number" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + }, + { + "in": "query", + "name": "workspace_search", + "schema": { + "type": "string" + }, + "description": "Whether to search across entire workspace or within specific project", + "examples": { + "ProjectOnly": { + "value": "false", + "summary": "Project only", + "description": "Search within specific project only" + }, + "WorkspaceWide": { + "value": "true", + "summary": "Workspace wide", + "description": "Search across entire workspace" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueSearch" + }, + "examples": { + "IssueSearchResults": { + "value": { + "issues": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug in user login", + "sequence_id": 123, + "project__identifier": "MAB", + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "workspace__slug": "my-workspace" + }, + { + "id": "550e8400-e29b-41d4-a716-446655440002", + "name": "Add authentication middleware", + "sequence_id": 124, + "project__identifier": "MAB", + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "workspace__slug": "my-workspace" + } + ] + } + } + } + } + }, + "description": "Work item search results" + }, + "400": { + "description": "Bad request - invalid search parameters" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/members/": { + "get": { + "operationId": "get_workspace_members", + "description": "Retrieve all users who are members of the specified workspace.", + "summary": "List workspace members", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/UserLite" + }, + { + "type": "object", + "properties": { + "role": { + "type": "integer", + "description": "Member role in the workspace" + } + } + } + ] + } + }, + "examples": { + "WorkspaceMembers": { + "value": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "email": "john.doe@example.com", + "avatar": "https://example.com/avatar.jpg", + "role": 20 + }, + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "Jane", + "last_name": "Smith", + "display_name": "Jane Smith", + "email": "jane.smith@example.com", + "avatar": "https://example.com/avatar2.jpg", + "role": 15 + } + ] + } + } + } + }, + "description": "List of workspace members with their roles" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/members-lite/": { + "get": { + "operationId": "get_workspace_members_lite", + "description": "Retrieve a paginated, lightweight list of workspace members for pickers and directories.", + "summary": "List workspace members (lite)", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedWorkspaceMemberLite" + }, + "examples": { + "PaginatedWorkspaceMembers(Lite)": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Workspace Members (Lite)" + } + } + } + }, + "description": "Paginated list of workspace members with minimal fields" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/": { + "get": { + "operationId": "list_projects", + "description": "Retrieve all projects in a workspace or get details of a specific project.", + "summary": "List or retrieve projects", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedProjectResponse" + }, + "examples": { + "PaginatedProjects": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Mobile App Backend", + "description": "Backend services for the mobile application", + "identifier": "MAB", + "network": 2 + } + ] + }, + "summary": "Paginated Projects" + } + } + } + }, + "description": "Paginated list of projects" + } + } + }, + "post": { + "operationId": "create_project", + "description": "Create a new project in the workspace with default states and member assignments.", + "summary": "Create project", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectCreateRequest" + }, + "examples": { + "ProjectCreateSerializer": { + "value": { + "name": "New Project", + "description": "New project description", + "identifier": "new-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for creating a project" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ProjectCreateRequest" + }, + "examples": { + "ProjectCreateSerializer": { + "value": { + "name": "New Project", + "description": "New project description", + "identifier": "new-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for creating a project" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ProjectCreateRequest" + }, + "examples": { + "ProjectCreateSerializer": { + "value": { + "name": "New Project", + "description": "New project description", + "identifier": "new-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for creating a project" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + }, + "examples": { + "Project": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Mobile App Development", + "description": "Development of the mobile application", + "identifier": "MAD", + "network": 2, + "project_lead": "550e8400-e29b-41d4-a716-446655440001", + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Project created successfully" + }, + "409": { + "description": "Project name already taken" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects-lite/": { + "get": { + "operationId": "list_projects_lite", + "description": "Retrieve a paginated, lightweight list of projects for pickers and references.", + "summary": "List projects (lite)", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "include_archived", + "schema": { + "type": "boolean" + }, + "description": "Include archived projects in the response. Defaults to false. Each project carries an archived_at timestamp (null when not archived)." + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedProjectLiteResponse" + }, + "examples": { + "PaginatedProjects(Lite)": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Projects (Lite)" + } + } + } + }, + "description": "Paginated list of projects with minimal fields" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{pk}/": { + "get": { + "operationId": "retrieve_project", + "description": "Retrieve details of a specific project.", + "summary": "Retrieve project", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + }, + "examples": { + "Project": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Mobile App Development", + "description": "Development of the mobile application", + "identifier": "MAD", + "network": 2, + "project_lead": "550e8400-e29b-41d4-a716-446655440001", + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Project details" + } + } + }, + "patch": { + "operationId": "update_project", + "description": "Partially update an existing project's properties like name, description, or settings.", + "summary": "Update project", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectUpdateRequest" + }, + "examples": { + "ProjectUpdateSerializer": { + "value": { + "name": "Updated Project", + "description": "Updated project description", + "identifier": "updated-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for updating a project" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectUpdateRequest" + }, + "examples": { + "ProjectUpdateSerializer": { + "value": { + "name": "Updated Project", + "description": "Updated project description", + "identifier": "updated-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for updating a project" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectUpdateRequest" + }, + "examples": { + "ProjectUpdateSerializer": { + "value": { + "name": "Updated Project", + "description": "Updated project description", + "identifier": "updated-project", + "project_lead": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for updating a project" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + }, + "examples": { + "Project": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Mobile App Development", + "description": "Development of the mobile application", + "identifier": "MAD", + "network": 2, + "project_lead": "550e8400-e29b-41d4-a716-446655440001", + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Project updated successfully" + }, + "409": { + "description": "Project name already taken" + } + } + }, + "delete": { + "operationId": "delete_project", + "description": "Permanently remove a project and all its associated data from the workspace.", + "summary": "Delete project", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/archive/": { + "post": { + "operationId": "archive_project", + "description": "Move a project to archived status, hiding it from active project lists.", + "summary": "Archive project", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource archived successfully" + } + } + }, + "delete": { + "operationId": "unarchive_project", + "description": "Restore an archived project to active status, making it available in regular workflows.", + "summary": "Unarchive project", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Projects" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource unarchived successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/archived-cycles/": { + "get": { + "operationId": "list_archived_cycles", + "description": "Retrieve all cycles that have been archived in the project.", + "summary": "List archived cycles", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedArchivedCycleResponse" + }, + "examples": { + "PaginatedArchivedCycles": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Archived Cycles" + } + } + } + }, + "description": "Paginated list of archived cycles" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/archived-cycles/{cycle_id}/unarchive/": { + "delete": { + "operationId": "unarchive_cycle", + "description": "Restore an archived cycle to active status, making it available for regular use.", + "summary": "Unarchive cycle", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource unarchived successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/archived-modules/": { + "get": { + "operationId": "list_archived_modules", + "description": "Retrieve all modules that have been archived in the project.", + "summary": "List archived modules", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedArchivedModuleResponse" + }, + "examples": { + "PaginatedArchivedModules": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Archived Modules" + } + } + } + }, + "description": "Paginated list of archived modules" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/archived-modules/{pk}/unarchive/": { + "delete": { + "operationId": "unarchive_module", + "description": "Restore an archived module to active status, making it available for regular use.", + "summary": "Unarchive module", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "204": { + "description": "No response body" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/": { + "get": { + "operationId": "list_cycles", + "description": "Retrieve all cycles in a project. Supports filtering by cycle status like current, upcoming, completed, or draft.", + "summary": "List cycles", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "cycle_view", + "schema": { + "type": "string" + }, + "description": "Filter cycles by status", + "examples": { + "AllCycles": { + "value": "all", + "summary": "All cycles" + }, + "CurrentCycles": { + "value": "current", + "summary": "Current cycles" + }, + "UpcomingCycles": { + "value": "upcoming", + "summary": "Upcoming cycles" + }, + "CompletedCycles": { + "value": "completed", + "summary": "Completed cycles" + }, + "DraftCycles": { + "value": "draft", + "summary": "Draft cycles" + }, + "IncompleteCycles": { + "value": "incomplete", + "summary": "Incomplete cycles" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedCycleResponse" + }, + "examples": { + "PaginatedCycles": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sprint 1 - Q1 2024", + "description": "First sprint of the quarter focusing on core features", + "start_date": "2024-01-01", + "end_date": "2024-01-14", + "status": "current" + } + ] + }, + "summary": "Paginated Cycles" + } + } + } + }, + "description": "Paginated list of cycles" + } + } + }, + "post": { + "operationId": "create_cycle", + "description": "Create a new development cycle with specified name, description, and date range. Supports external ID tracking for integration purposes.", + "summary": "Create cycle", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CycleCreateRequest" + }, + "examples": { + "CycleCreateSerializer": { + "value": { + "name": "Cycle 1", + "description": "Cycle 1 description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a cycle" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/CycleCreateRequest" + }, + "examples": { + "CycleCreateSerializer": { + "value": { + "name": "Cycle 1", + "description": "Cycle 1 description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a cycle" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/CycleCreateRequest" + }, + "examples": { + "CycleCreateSerializer": { + "value": { + "name": "Cycle 1", + "description": "Cycle 1 description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a cycle" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cycle" + }, + "examples": { + "Cycle": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sprint 1 - Q1 2024", + "description": "First sprint of the quarter focusing on core features", + "start_date": "2024-01-01", + "end_date": "2024-01-14", + "status": "current", + "total_issues": 15, + "completed_issues": 8, + "cancelled_issues": 1, + "started_issues": 4, + "unstarted_issues": 2, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Cycle created" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles-lite/": { + "get": { + "operationId": "list_cycles_lite", + "description": "Retrieve a paginated, lightweight list of cycles in a project for pickers and references.", + "summary": "List cycles (lite)", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedCycleLiteResponse" + }, + "examples": { + "PaginatedCycles(Lite)": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Cycles (Lite)" + } + } + } + }, + "description": "Paginated list of cycles with minimal fields" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/": { + "post": { + "operationId": "archive_cycle", + "description": "Move a completed cycle to archived status for historical tracking. Only cycles that have ended can be archived.", + "summary": "Archive cycle", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource archived successfully" + }, + "400": { + "description": "Cycle cannot be archived" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/": { + "get": { + "operationId": "list_cycle_work_items", + "description": "Retrieve all work items assigned to a cycle.", + "summary": "List cycle work items", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedCycleIssueResponse" + }, + "examples": { + "PaginatedCycleWorkItems": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "cycle": "550e8400-e29b-41d4-a716-446655440001", + "issue": "550e8400-e29b-41d4-a716-446655440002", + "sub_issues_count": 3, + "created_at": "2024-01-01T10:30:00Z" + } + ] + }, + "summary": "Paginated Cycle Work Items" + } + } + } + }, + "description": "Paginated list of cycle work items" + } + } + }, + "post": { + "operationId": "add_cycle_work_items", + "description": "Assign multiple work items to a cycle. Automatically handles bulk creation and updates with activity tracking.", + "summary": "Add Work Items to Cycle", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CycleIssueRequestRequest" + }, + "examples": { + "CycleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding cycle issues" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/CycleIssueRequestRequest" + }, + "examples": { + "CycleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding cycle issues" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/CycleIssueRequestRequest" + }, + "examples": { + "CycleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding cycle issues" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CycleIssue" + }, + "examples": { + "CycleIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "cycle": "550e8400-e29b-41d4-a716-446655440001", + "issue": "550e8400-e29b-41d4-a716-446655440002", + "sub_issues_count": 3, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Cycle work items added" + }, + "400": { + "description": "Required fields are missing" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/": { + "get": { + "operationId": "retrieve_cycle_work_item", + "description": "Retrieve details of a specific cycle work item.", + "summary": "Retrieve cycle work item", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CycleIssue" + }, + "examples": { + "CycleIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "cycle": "550e8400-e29b-41d4-a716-446655440001", + "issue": "550e8400-e29b-41d4-a716-446655440002", + "sub_issues_count": 3, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Cycle work items" + } + } + }, + "delete": { + "operationId": "delete_cycle_work_item", + "description": "Remove a work item from a cycle while keeping the work item in the project.", + "summary": "Delete cycle work item", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/": { + "post": { + "operationId": "transfer_cycle_work_items", + "description": "Move incomplete work items from the current cycle to a new target cycle. Captures progress snapshot and transfers only unfinished work items.", + "summary": "Transfer cycle work items", + "parameters": [ + { + "in": "path", + "name": "cycle_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferCycleIssueRequestRequest" + }, + "examples": { + "TransferCycleIssueRequestSerializer": { + "value": { + "new_cycle_id": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for transferring cycle issues" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/TransferCycleIssueRequestRequest" + }, + "examples": { + "TransferCycleIssueRequestSerializer": { + "value": { + "new_cycle_id": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for transferring cycle issues" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/TransferCycleIssueRequestRequest" + }, + "examples": { + "TransferCycleIssueRequestSerializer": { + "value": { + "new_cycle_id": "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + }, + "description": "Example request for transferring cycle issues" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Success message", + "example": "Success" + } + } + }, + "examples": { + "TransferCycleIssueSuccess": { + "value": { + "message": "Success" + }, + "summary": "Transfer Cycle Issue Success", + "description": "Successful transfer of cycle issues to new cycle" + } + } + } + }, + "description": "Work items transferred successfully" + }, + "400": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Error message", + "example": "New Cycle Id is required" + } + } + }, + "examples": { + "TransferCycleIssueError": { + "value": { + "error": "New Cycle Id is required" + }, + "summary": "Transfer Cycle Issue Error", + "description": "Error when required cycle ID is missing" + }, + "TransferToCompletedCycleError": { + "value": { + "error": "The cycle where the issues are transferred is already completed" + }, + "summary": "Transfer to Completed Cycle Error", + "description": "Error when trying to transfer to a completed cycle" + } + } + } + }, + "description": "Bad request" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/cycles/{pk}/": { + "get": { + "operationId": "retrieve_cycle", + "description": "Retrieve details of a specific cycle by its ID. Supports cycle status filtering.", + "summary": "Retrieve cycle", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cycle" + }, + "examples": { + "Cycle": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sprint 1 - Q1 2024", + "description": "First sprint of the quarter focusing on core features", + "start_date": "2024-01-01", + "end_date": "2024-01-14", + "status": "current", + "total_issues": 15, + "completed_issues": 8, + "cancelled_issues": 1, + "started_issues": 4, + "unstarted_issues": 2, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Cycles" + } + } + }, + "patch": { + "operationId": "update_cycle", + "description": "Modify an existing cycle's properties like name, description, or date range. Completed cycles can only have their sort order changed.", + "summary": "Update cycle", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedCycleUpdateRequest" + }, + "examples": { + "CycleUpdateSerializer": { + "value": { + "name": "Updated Cycle", + "description": "Updated cycle description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a cycle" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedCycleUpdateRequest" + }, + "examples": { + "CycleUpdateSerializer": { + "value": { + "name": "Updated Cycle", + "description": "Updated cycle description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a cycle" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedCycleUpdateRequest" + }, + "examples": { + "CycleUpdateSerializer": { + "value": { + "name": "Updated Cycle", + "description": "Updated cycle description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a cycle" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cycle" + }, + "examples": { + "Cycle": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sprint 1 - Q1 2024", + "description": "First sprint of the quarter focusing on core features", + "start_date": "2024-01-01", + "end_date": "2024-01-14", + "status": "current", + "total_issues": 15, + "completed_issues": 8, + "cancelled_issues": 1, + "started_issues": 4, + "unstarted_issues": 2, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Cycle updated" + } + } + }, + "delete": { + "operationId": "delete_cycle", + "description": "Permanently remove a cycle and all its associated issue relationships", + "summary": "Delete cycle", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Cycles" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/intake-issues/": { + "get": { + "operationId": "get_intake_work_items_list", + "description": "Retrieve all work items in the project's intake queue. Returns paginated results when listing all intake work items.", + "summary": "List intake work items", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Intake" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIntakeIssueResponse" + }, + "examples": { + "PaginatedIntakeWorkItems": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Intake Work Items" + } + } + } + }, + "description": "Paginated list of intake work items" + } + } + }, + "post": { + "operationId": "create_intake_work_item", + "description": "Submit a new work item to the project's intake queue for review and triage. Automatically creates the work item with default triage state and tracks activity.", + "summary": "Create intake work item", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Intake" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntakeIssueCreateRequest" + }, + "examples": { + "IntakeIssueCreateSerializer": { + "value": { + "issue": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium" + } + }, + "description": "Example request for creating an intake issue" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IntakeIssueCreateRequest" + }, + "examples": { + "IntakeIssueCreateSerializer": { + "value": { + "issue": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium" + } + }, + "description": "Example request for creating an intake issue" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IntakeIssueCreateRequest" + }, + "examples": { + "IntakeIssueCreateSerializer": { + "value": { + "issue": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium" + } + }, + "description": "Example request for creating an intake issue" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntakeIssue" + }, + "examples": { + "IntakeIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": 0, + "source": "in_app", + "issue": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "Feature request: Dark mode", + "description": "Add dark mode support to the application", + "priority": "medium", + "sequence_id": 124 + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Intake work item created" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/": { + "get": { + "operationId": "retrieve_intake_work_item", + "description": "Retrieve details of a specific intake work item.", + "summary": "Retrieve intake work item", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Intake" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntakeIssue" + }, + "examples": { + "IntakeIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": 0, + "source": "in_app", + "issue": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "Feature request: Dark mode", + "description": "Add dark mode support to the application", + "priority": "medium", + "sequence_id": 124 + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Intake work item" + } + } + }, + "patch": { + "operationId": "update_intake_work_item", + "description": "Modify an existing intake work item's properties or status for triage processing. Supports status changes like accept, reject, or mark as duplicate.", + "summary": "Update intake work item", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Intake" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIntakeIssueUpdateRequest" + }, + "examples": { + "IntakeIssueUpdateSerializer": { + "value": { + "status": 1, + "issue": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "high" + } + }, + "description": "Example request for updating an intake issue" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIntakeIssueUpdateRequest" + }, + "examples": { + "IntakeIssueUpdateSerializer": { + "value": { + "status": 1, + "issue": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "high" + } + }, + "description": "Example request for updating an intake issue" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIntakeIssueUpdateRequest" + }, + "examples": { + "IntakeIssueUpdateSerializer": { + "value": { + "status": 1, + "issue": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "high" + } + }, + "description": "Example request for updating an intake issue" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntakeIssue" + }, + "examples": { + "IntakeIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": 0, + "source": "in_app", + "issue": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "Feature request: Dark mode", + "description": "Add dark mode support to the application", + "priority": "medium", + "sequence_id": 124 + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Intake work item updated" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "delete": { + "operationId": "delete_intake_work_item", + "description": "Permanently remove an intake work item from the triage queue. Also deletes the underlying work item if it hasn't been accepted yet.", + "summary": "Delete intake work item", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Intake" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/": { + "get": { + "operationId": "list_work_items", + "description": "Retrieve a paginated list of all work items in a project. Supports filtering, ordering, and field selection through query parameters.", + "summary": "List work items", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "external_id", + "schema": { + "type": "string" + }, + "description": "External system identifier for filtering or lookup", + "examples": { + "GitHubIssue": { + "value": "1234567890", + "summary": "GitHub Issue", + "description": "GitHub issue number" + } + } + }, + { + "in": "query", + "name": "external_source", + "schema": { + "type": "string" + }, + "description": "External system source name for filtering or lookup", + "examples": { + "GitHub": { + "value": "github", + "description": "GitHub integration source" + }, + "Jira": { + "value": "jira", + "description": "Jira integration source" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedWorkItemResponse" + }, + "examples": { + "PaginatedWorkItems": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug in user login", + "description": "Users are unable to log in due to authentication service timeout", + "priority": "high", + "sequence_id": 123, + "state": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "In Progress", + "group": "started" + }, + "assignees": [], + "labels": [], + "created_at": "2024-01-15T10:30:00Z" + } + ] + }, + "summary": "Paginated Work Items" + } + } + } + }, + "description": "Paginated list of work items" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item", + "description": "Create a new work item in the specified project with the provided details.", + "summary": "Create work item", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work Item created successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/": { + "get": { + "operationId": "list_work_item_activities", + "description": "Retrieve all activities for a work item. Supports filtering by activity type and date range.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Activity" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueActivityResponse" + }, + "examples": { + "PaginatedIssueActivities": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Issue Activities" + } + } + } + }, + "description": "Paginated list of issue activities" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{pk}/": { + "get": { + "operationId": "retrieve_work_item_activity", + "description": "Retrieve details of a specific activity.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Activity ID", + "required": true, + "examples": { + "ExampleActivityID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example activity ID", + "description": "A typical activity UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Activity" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueActivityDetailResponse" + }, + "examples": { + "WorkItemActivityDetails": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Work Item Activity Details" + } + } + } + }, + "description": "Paginated list of work item activities" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/": { + "get": { + "operationId": "list_work_item_comments", + "description": "Retrieve all comments for a work item.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueCommentResponse" + }, + "examples": { + "PaginatedWorkItemComments": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Work Item Comments" + } + } + } + }, + "description": "Paginated list of work item comments" + } + } + }, + "post": { + "operationId": "create_work_item_comment", + "description": "Add a new comment to a work item with HTML content.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comment created successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{pk}/": { + "get": { + "operationId": "retrieve_work_item_comment", + "description": "Retrieve details of a specific comment.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comments" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "patch": { + "operationId": "update_work_item_comment", + "description": "Modify the content of an existing comment on a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Comment not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comment updated successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_work_item_comment", + "description": "Permanently remove a comment from a work item. Records deletion activity for audit purposes.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Comment not found" + }, + "204": { + "description": "Work item comment deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/": { + "get": { + "operationId": "list_work_item_attachments", + "description": "Retrieve all attachments for a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueAttachment" + }, + "examples": { + "IssueAttachment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "screenshot.png", + "size": 1024000, + "asset_url": "https://s3.amazonaws.com/bucket/screenshot.png?signed-url", + "attributes": { + "name": "screenshot.png", + "type": "image/png", + "size": 1024000 + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item attachment" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_attachment", + "description": "Generate presigned URL for uploading file attachments to a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue or Project or Workspace not found" + }, + "200": { + "description": "Presigned download URL generated successfully" + }, + "400": { + "description": "Validation error" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{pk}/": { + "get": { + "operationId": "retrieve_work_item_attachment", + "description": "Download attachment file. Returns a redirect to the presigned download URL.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "302": { + "description": "Redirect to presigned download URL" + }, + "400": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Error message", + "example": "The asset is not uploaded." + }, + "status": { + "type": "boolean", + "description": "Request status", + "example": false + } + } + }, + "examples": { + "IssueAttachmentNotUploaded": { + "value": { + "error": "The asset is not uploaded.", + "status": false + }, + "summary": "Issue Attachment Not Uploaded", + "description": "Error when trying to download an attachment that hasn't been uploaded yet" + } + } + } + }, + "description": "Asset not uploaded" + } + } + }, + "patch": { + "operationId": "upload_work_item_attachment", + "description": "Mark an attachment as uploaded after successful file transfer to storage.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + }, + "multipart/form-data": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "204": { + "description": "Work item attachment uploaded successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "delete": { + "operationId": "delete_work_item_attachment", + "description": "Permanently remove an attachment from a work item. Records deletion activity for audit purposes.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "204": { + "description": "Work item attachment deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/": { + "get": { + "operationId": "list_work_item_links", + "description": "Retrieve all links associated with a work item. Supports filtering by URL, title, and metadata.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueLinkResponse" + }, + "examples": { + "PaginatedWorkItemLinks": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Work Item Links" + } + } + } + }, + "description": "Paginated list of work item links" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_link", + "description": "Add a new external link to a work item with URL, title, and metadata.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLink" + }, + "examples": { + "IssueLink": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "url": "https://github.com/example/repo/pull/123", + "title": "Fix authentication bug", + "metadata": { + "title": "Fix authentication bug", + "description": "Pull request to fix authentication timeout issue", + "image": "https://github.com/example/repo/avatar.png" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item link created successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{pk}/": { + "get": { + "operationId": "retrieve_work_item_link", + "description": "Retrieve details of a specific work item link.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueLinkDetailResponse" + }, + "examples": { + "WorkItemLinkDetails": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Work Item Link Details" + } + } + } + }, + "description": "Work item link details or paginated list" + } + } + }, + "patch": { + "operationId": "update_issue_link", + "description": "Modify the URL, title, or metadata of an existing issue link.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Link not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLink" + }, + "examples": { + "IssueLink": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "url": "https://github.com/example/repo/pull/123", + "title": "Fix authentication bug", + "metadata": { + "title": "Fix authentication bug", + "description": "Pull request to fix authentication timeout issue", + "image": "https://github.com/example/repo/avatar.png" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Issue link updated successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "delete": { + "operationId": "delete_work_item_link", + "description": "Permanently remove an external link from a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item link not found" + }, + "204": { + "description": "Work item link deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/issues/{pk}/": { + "get": { + "operationId": "retrieve_work_item", + "description": "Retrieve details of a specific work item.", + "summary": "Retrieve work item", + "parameters": [ + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "external_id", + "schema": { + "type": "string" + }, + "description": "External system identifier for filtering or lookup", + "examples": { + "GitHubIssue": { + "value": "1234567890", + "summary": "GitHub Issue", + "description": "GitHub issue number" + } + } + }, + { + "in": "query", + "name": "external_source", + "schema": { + "type": "string" + }, + "description": "External system source name for filtering or lookup", + "examples": { + "GitHub": { + "value": "github", + "description": "GitHub integration source" + }, + "Jira": { + "value": "jira", + "description": "Jira integration source" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "List of issues or issue details" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "patch": { + "operationId": "update_work_item", + "description": "Partially update an existing work item with the provided fields. Supports external ID validation to prevent conflicts.", + "summary": "Partially update work item", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work Item patched successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_work_item", + "description": "Permanently delete an existing work item from the project. Only admins or the item creator can perform this action.", + "summary": "Delete work item", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Only admin or creator can perform this action" + }, + "404": { + "description": "Work item not found" + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/labels/": { + "get": { + "operationId": "list_labels", + "description": "Retrieve all labels in a project. Supports filtering by name and color.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Labels" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedLabelResponse" + }, + "examples": { + "PaginatedLabels": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "bug", + "color": "#ff4444", + "description": "Issues that represent bugs in the system" + } + ] + }, + "summary": "Paginated Labels" + } + } + } + }, + "description": "Paginated list of labels" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_label", + "description": "Create a new label in the specified project with name, color, and description.", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Labels" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "New Label", + "color": "#ff0000", + "description": "New label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a label" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/LabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "New Label", + "color": "#ff0000", + "description": "New label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a label" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/LabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "New Label", + "color": "#ff0000", + "description": "New label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a label" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Label" + }, + "examples": { + "Label": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "bug", + "color": "#ff4444", + "description": "Issues that represent bugs in the system", + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Label created successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Label with the same name already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/labels/{pk}/": { + "get": { + "operationId": "get_labels", + "description": "Retrieve details of a specific label.", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Label ID", + "required": true, + "examples": { + "ExampleLabelID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example label ID", + "description": "A typical label UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Labels" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Label not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Label" + }, + "examples": { + "Label": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "bug", + "color": "#ff4444", + "description": "Issues that represent bugs in the system", + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Labels" + } + } + }, + "patch": { + "operationId": "update_label", + "description": "Partially update an existing label's properties like name, color, or description.", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Label ID", + "required": true, + "examples": { + "ExampleLabelID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example label ID", + "description": "A typical label UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Labels" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedLabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "Updated Label", + "color": "#00ff00", + "description": "Updated label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a label" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedLabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "Updated Label", + "color": "#00ff00", + "description": "Updated label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a label" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedLabelCreateUpdateRequest" + }, + "examples": { + "LabelCreateUpdateSerializer": { + "value": { + "name": "Updated Label", + "color": "#00ff00", + "description": "Updated label description", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a label" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Label not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Label" + }, + "examples": { + "Label": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "bug", + "color": "#ff4444", + "description": "Issues that represent bugs in the system", + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Label updated successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_label", + "description": "Permanently remove a label from the project. This action cannot be undone.", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Label ID", + "required": true, + "examples": { + "ExampleLabelID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example label ID", + "description": "A typical label UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Labels" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Label not found" + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/members/": { + "get": { + "operationId": "get_project_members", + "description": "Retrieve all users who are members of the specified project.", + "summary": "List project members", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserLite" + }, + "examples": { + "ProjectMembers": { + "value": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "email": "john.doe@example.com", + "avatar": "https://example.com/avatar.jpg" + }, + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "Jane", + "last_name": "Smith", + "display_name": "Jane Smith", + "email": "jane.smith@example.com", + "avatar": "https://example.com/avatar2.jpg" + } + ] + } + } + } + }, + "description": "List of project members with their roles" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + } + } + }, + "post": { + "operationId": "create_project_member", + "description": "Create a new project member", + "summary": "Create project member", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member created" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/members/{pk}/": { + "get": { + "operationId": "get_project_member", + "description": "Retrieve a project member by ID.", + "summary": "Get project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + } + } + }, + "patch": { + "operationId": "update_project_member", + "description": "Update a project member", + "summary": "Update project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member updated" + } + } + }, + "delete": { + "operationId": "delete_project_member", + "description": "Delete a project member", + "summary": "Delete project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "204": { + "description": "Project member deleted" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules/": { + "get": { + "operationId": "list_modules", + "description": "Retrieve all modules in a project.", + "summary": "List modules", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedModuleResponse" + }, + "examples": { + "PaginatedModules": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Authentication Module", + "description": "User authentication and authorization features", + "start_date": "2024-01-01", + "target_date": "2024-02-15", + "status": "in_progress" + } + ] + }, + "summary": "Paginated Modules" + } + } + } + }, + "description": "Paginated list of modules" + } + } + }, + "post": { + "operationId": "create_module", + "description": "Create a new project module with specified name, description, and timeline.", + "summary": "Create module", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModuleCreateRequest" + }, + "examples": { + "ModuleCreateSerializer": { + "value": { + "name": "New Module", + "description": "New module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a module" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ModuleCreateRequest" + }, + "examples": { + "ModuleCreateSerializer": { + "value": { + "name": "New Module", + "description": "New module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a module" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ModuleCreateRequest" + }, + "examples": { + "ModuleCreateSerializer": { + "value": { + "name": "New Module", + "description": "New module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a module" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Module" + }, + "examples": { + "Module": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Authentication Module", + "description": "User authentication and authorization features", + "start_date": "2024-01-01", + "target_date": "2024-02-15", + "status": "in-progress", + "total_issues": 12, + "completed_issues": 5, + "cancelled_issues": 0, + "started_issues": 4, + "unstarted_issues": 3, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Module created" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules-lite/": { + "get": { + "operationId": "list_modules_lite", + "description": "Retrieve a paginated, lightweight list of modules in a project for pickers and references.", + "summary": "List modules (lite)", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedModuleLiteResponse" + }, + "examples": { + "PaginatedModules(Lite)": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Modules (Lite)" + } + } + } + }, + "description": "Paginated list of modules with minimal fields" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/": { + "get": { + "operationId": "list_module_work_items", + "description": "Retrieve all work items assigned to a module with detailed information.", + "summary": "List module work items", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "module_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedModuleIssueResponse" + }, + "examples": { + "PaginatedModuleWorkItems": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Module Work Items" + } + } + } + }, + "description": "Paginated list of module work items" + } + } + }, + "post": { + "operationId": "add_module_work_items", + "description": "Assign multiple work items to a module or move them from another module. Automatically handles bulk creation and updates with activity tracking.", + "summary": "Add Work Items to Module", + "parameters": [ + { + "in": "path", + "name": "module_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModuleIssueRequestRequest" + }, + "examples": { + "ModuleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding module issues" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ModuleIssueRequestRequest" + }, + "examples": { + "ModuleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding module issues" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ModuleIssueRequestRequest" + }, + "examples": { + "ModuleIssueRequestSerializer": { + "value": { + "issues": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for adding module issues" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModuleIssue" + }, + "examples": { + "ModuleIssue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "module": "550e8400-e29b-41d4-a716-446655440001", + "issue": "550e8400-e29b-41d4-a716-446655440002", + "sub_issues_count": 2, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Module issues added" + }, + "400": { + "description": "Required fields are missing" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/": { + "delete": { + "operationId": "delete_module_work_item", + "description": "Remove a work item from a module while keeping the work item in the project.", + "summary": "Delete module work item", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "module_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module issue not found" + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules/{pk}/": { + "get": { + "operationId": "retrieve_module", + "description": "Retrieve details of a specific module.", + "summary": "Retrieve module", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Module" + }, + "examples": { + "Module": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Authentication Module", + "description": "User authentication and authorization features", + "start_date": "2024-01-01", + "target_date": "2024-02-15", + "status": "in-progress", + "total_issues": 12, + "completed_issues": 5, + "cancelled_issues": 0, + "started_issues": 4, + "unstarted_issues": 3, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Module" + } + } + }, + "patch": { + "operationId": "update_module", + "description": "Modify an existing module's properties like name, description, status, or timeline.", + "summary": "Update module", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedModuleUpdateRequest" + }, + "examples": { + "ModuleUpdateSerializer": { + "value": { + "name": "Updated Module", + "description": "Updated module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a module" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedModuleUpdateRequest" + }, + "examples": { + "ModuleUpdateSerializer": { + "value": { + "name": "Updated Module", + "description": "Updated module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a module" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedModuleUpdateRequest" + }, + "examples": { + "ModuleUpdateSerializer": { + "value": { + "name": "Updated Module", + "description": "Updated module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a module" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Module" + }, + "examples": { + "Module": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Authentication Module", + "description": "User authentication and authorization features", + "start_date": "2024-01-01", + "target_date": "2024-02-15", + "status": "in-progress", + "total_issues": 12, + "completed_issues": 5, + "cancelled_issues": 0, + "started_issues": 4, + "unstarted_issues": 3, + "backlog_issues": 0, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Module updated successfully" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Module" + }, + "examples": { + "ModuleUpdateSerializer": { + "value": { + "name": "Updated Module", + "description": "Updated module description", + "start_date": "2021-01-01", + "end_date": "2021-01-31", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a module" + } + } + } + }, + "description": "Invalid request data" + }, + "409": { + "description": "Module with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_module", + "description": "Permanently remove a module and all its associated issue relationships.", + "summary": "Delete module", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Only admin or creator can perform this action" + }, + "404": { + "description": "Module not found" + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/modules/{pk}/archive/": { + "post": { + "operationId": "archive_module", + "description": "Move a module to archived status for historical tracking.", + "summary": "Archive module", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Module ID", + "required": true, + "examples": { + "ExampleModuleID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example module ID", + "description": "A typical module UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Modules" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Module not found" + }, + "204": { + "description": "No response body" + }, + "400": { + "description": "Resource cannot be archived in current state" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/project-members/": { + "get": { + "operationId": "get_project_members_2", + "description": "Retrieve all users who are members of the specified project.", + "summary": "List project members", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserLite" + }, + "examples": { + "ProjectMembers": { + "value": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "email": "john.doe@example.com", + "avatar": "https://example.com/avatar.jpg" + }, + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "Jane", + "last_name": "Smith", + "display_name": "Jane Smith", + "email": "jane.smith@example.com", + "avatar": "https://example.com/avatar2.jpg" + } + ] + } + } + } + }, + "description": "List of project members with their roles" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + } + } + }, + "post": { + "operationId": "create_project_member_2", + "description": "Create a new project member", + "summary": "Create project member", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberRequest" + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member created" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/project-members-lite/": { + "get": { + "operationId": "get_project_members_lite", + "description": "Retrieve a paginated, lightweight list of project members for pickers and directories.", + "summary": "List project members (lite)", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedProjectMemberLite" + }, + "examples": { + "PaginatedProjectMembers(Lite)": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Project Members (Lite)" + } + } + } + }, + "description": "Paginated list of project members with minimal fields" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/project-members/{pk}/": { + "get": { + "operationId": "get_project_member_2", + "description": "Retrieve a project member by ID.", + "summary": "Get project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + } + } + }, + "patch": { + "operationId": "update_project_member_2", + "description": "Update a project member", + "summary": "Update project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedProjectMemberRequest" + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + }, + "description": "Project member updated" + } + } + }, + "delete": { + "operationId": "delete_project_member_2", + "description": "Delete a project member", + "summary": "Delete project member", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Members" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "204": { + "description": "Project member deleted" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/states/": { + "get": { + "operationId": "list_states", + "description": "Retrieve all workflow states for a project.", + "summary": "List states", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "States" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedStateResponse" + }, + "examples": { + "PaginatedStates": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "In Progress", + "color": "#ffa500", + "group": "started", + "sequence": 2 + } + ] + }, + "summary": "Paginated States" + } + } + } + }, + "description": "Paginated list of states" + } + } + }, + "post": { + "operationId": "create_state", + "description": "Create a new workflow state for a project with specified name, color, and group.", + "summary": "Create state", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "States" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StateRequest" + }, + "examples": { + "StateCreateSerializer": { + "value": { + "name": "New State", + "color": "#ff0000", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a state" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/StateRequest" + }, + "examples": { + "StateCreateSerializer": { + "value": { + "name": "New State", + "color": "#ff0000", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a state" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/StateRequest" + }, + "examples": { + "StateCreateSerializer": { + "value": { + "name": "New State", + "color": "#ff0000", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a state" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/State" + }, + "examples": { + "State": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "In Progress", + "color": "#f39c12", + "group": "started", + "sequence": 2, + "default": false, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "State created" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "State with the same name already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/states/{state_id}/": { + "get": { + "operationId": "retrieve_state", + "description": "Retrieve details of a specific state.", + "summary": "Retrieve state", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + }, + { + "in": "path", + "name": "state_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "State ID", + "required": true, + "examples": { + "ExampleStateID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example state ID", + "description": "A typical state UUID" + } + } + } + ], + "tags": [ + "States" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/State" + }, + "examples": { + "State": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "In Progress", + "color": "#f39c12", + "group": "started", + "sequence": 2, + "default": false, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "State retrieved" + } + } + }, + "patch": { + "operationId": "update_state", + "description": "Partially update an existing workflow state's properties like name, color, or group.", + "summary": "Update state", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + }, + { + "in": "path", + "name": "state_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "State ID", + "required": true, + "examples": { + "ExampleStateID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example state ID", + "description": "A typical state UUID" + } + } + } + ], + "tags": [ + "States" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedStateRequest" + }, + "examples": { + "StateUpdateSerializer": { + "value": { + "name": "Updated State", + "color": "#00ff00", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a state" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedStateRequest" + }, + "examples": { + "StateUpdateSerializer": { + "value": { + "name": "Updated State", + "color": "#00ff00", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a state" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedStateRequest" + }, + "examples": { + "StateUpdateSerializer": { + "value": { + "name": "Updated State", + "color": "#00ff00", + "group": "backlog", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating a state" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/State" + }, + "examples": { + "State": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "In Progress", + "color": "#f39c12", + "group": "started", + "sequence": 2, + "default": false, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "State updated" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_state", + "description": "Permanently remove a workflow state from a project. Default states and states with existing work items cannot be deleted.", + "summary": "Delete state", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + }, + { + "in": "path", + "name": "state_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "State ID", + "required": true, + "examples": { + "ExampleStateID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example state ID", + "description": "A typical state UUID" + } + } + } + ], + "tags": [ + "States" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + }, + "400": { + "description": "State cannot be deleted" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/summary/": { + "get": { + "operationId": "workspaces_projects_summary_retrieve", + "description": "Get project summary\n\nGet the summary of a project", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "required": true + } + ], + "tags": [ + "workspaces" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "description": "No response body" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/": { + "get": { + "operationId": "list_work_items_2", + "description": "Retrieve a paginated list of all work items in a project. Supports filtering, ordering, and field selection through query parameters.", + "summary": "List work items", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "external_id", + "schema": { + "type": "string" + }, + "description": "External system identifier for filtering or lookup", + "examples": { + "GitHubIssue": { + "value": "1234567890", + "summary": "GitHub Issue", + "description": "GitHub issue number" + } + } + }, + { + "in": "query", + "name": "external_source", + "schema": { + "type": "string" + }, + "description": "External system source name for filtering or lookup", + "examples": { + "GitHub": { + "value": "github", + "description": "GitHub integration source" + }, + "Jira": { + "value": "jira", + "description": "Jira integration source" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedWorkItemResponse" + }, + "examples": { + "PaginatedWorkItems": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug in user login", + "description": "Users are unable to log in due to authentication service timeout", + "priority": "high", + "sequence_id": 123, + "state": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "In Progress", + "group": "started" + }, + "assignees": [], + "labels": [], + "created_at": "2024-01-15T10:30:00Z" + } + ] + }, + "summary": "Paginated Work Items" + } + } + } + }, + "description": "Paginated list of work items" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_2", + "description": "Create a new work item in the specified project with the provided details.", + "summary": "Create work item", + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueRequest" + }, + "examples": { + "IssueCreateSerializer": { + "value": { + "name": "New Issue", + "description": "New issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ], + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating a work item" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Project not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work Item created successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/activities/": { + "get": { + "operationId": "list_work_item_activities_2", + "description": "Retrieve all activities for a work item. Supports filtering by activity type and date range.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Activity" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueActivityResponse" + }, + "examples": { + "PaginatedIssueActivities": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Issue Activities" + } + } + } + }, + "description": "Paginated list of issue activities" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/activities/{pk}/": { + "get": { + "operationId": "retrieve_work_item_activity_2", + "description": "Retrieve details of a specific activity.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Activity ID", + "required": true, + "examples": { + "ExampleActivityID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example activity ID", + "description": "A typical activity UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Activity" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueActivityDetailResponse" + }, + "examples": { + "WorkItemActivityDetails": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Work Item Activity Details" + } + } + } + }, + "description": "Paginated list of work item activities" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/attachments/": { + "get": { + "operationId": "list_work_item_attachments_2", + "description": "Retrieve all attachments for a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueAttachment" + }, + "examples": { + "IssueAttachment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "screenshot.png", + "size": 1024000, + "asset_url": "https://s3.amazonaws.com/bucket/screenshot.png?signed-url", + "attributes": { + "name": "screenshot.png", + "type": "image/png", + "size": 1024000 + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item attachment" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_attachment_2", + "description": "Generate presigned URL for uploading file attachments to a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueAttachmentUploadRequest" + }, + "examples": { + "IssueAttachmentUploadSerializer": { + "value": { + "name": "document.pdf", + "type": "application/pdf", + "size": 1024000, + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue attachment" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue or Project or Workspace not found" + }, + "200": { + "description": "Presigned download URL generated successfully" + }, + "400": { + "description": "Validation error" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/attachments/{pk}/": { + "get": { + "operationId": "retrieve_work_item_attachment_2", + "description": "Download attachment file. Returns a redirect to the presigned download URL.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "302": { + "description": "Redirect to presigned download URL" + }, + "400": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Error message", + "example": "The asset is not uploaded." + }, + "status": { + "type": "boolean", + "description": "Request status", + "example": false + } + } + }, + "examples": { + "IssueAttachmentNotUploaded": { + "value": { + "error": "The asset is not uploaded.", + "status": false + }, + "summary": "Issue Attachment Not Uploaded", + "description": "Error when trying to download an attachment that hasn't been uploaded yet" + } + } + } + }, + "description": "Asset not uploaded" + } + } + }, + "patch": { + "operationId": "upload_work_item_attachment_2", + "description": "Mark an attachment as uploaded after successful file transfer to storage.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + }, + "multipart/form-data": { + "schema": { + "application/json": { + "type": "object", + "properties": { + "is_uploaded": { + "type": "boolean", + "description": "Mark attachment as uploaded" + } + } + } + }, + "examples": { + "ConfirmUpload": { + "value": { + "is_uploaded": true + }, + "description": "Confirm that the attachment has been successfully uploaded" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "204": { + "description": "Work item attachment uploaded successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "delete": { + "operationId": "delete_work_item_attachment_2", + "description": "Permanently remove an attachment from a work item. Records deletion activity for audit purposes.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Attachment ID", + "required": true, + "examples": { + "ExampleAttachmentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example attachment ID", + "description": "A typical attachment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Attachments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Attachment not found" + }, + "204": { + "description": "Work item attachment deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/comments/": { + "get": { + "operationId": "list_work_item_comments_2", + "description": "Retrieve all comments for a work item.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueCommentResponse" + }, + "examples": { + "PaginatedWorkItemComments": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Work Item Comments" + } + } + } + }, + "description": "Paginated list of work item comments" + } + } + }, + "post": { + "operationId": "create_work_item_comment_2", + "description": "Add a new comment to a work item with HTML content.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

New comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for creating an issue comment" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comment created successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/comments/{pk}/": { + "get": { + "operationId": "retrieve_work_item_comment_2", + "description": "Retrieve details of a specific comment.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comments" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "patch": { + "operationId": "update_work_item_comment_2", + "description": "Modify the content of an existing comment on a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueCommentCreateRequest" + }, + "examples": { + "IssueCommentCreateSerializer": { + "value": { + "comment_html": "

Updated comment content

", + "external_id": "1234567890", + "external_source": "github" + }, + "description": "Example request for updating an issue comment" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Comment not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueComment" + }, + "examples": { + "IssueComment": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "comment_html": "

This issue has been resolved by implementing OAuth 2.0 flow.

", + "comment_json": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "This issue has been resolved by implementing OAuth 2.0 flow." + } + ] + } + ] + }, + "actor": { + "id": "550e8400-e29b-41d4-a716-446655440001", + "first_name": "John", + "last_name": "Doe", + "display_name": "John Doe", + "avatar": "https://example.com/avatar.jpg" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item comment updated successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_work_item_comment_2", + "description": "Permanently remove a comment from a work item. Records deletion activity for audit purposes.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Comment ID", + "required": true, + "examples": { + "ExampleCommentID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example comment ID", + "description": "A typical comment UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Comments" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Comment not found" + }, + "204": { + "description": "Work item comment deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/links/": { + "get": { + "operationId": "list_work_item_links_2", + "description": "Retrieve all links associated with a work item. Supports filtering by URL, title, and metadata.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueLinkResponse" + }, + "examples": { + "PaginatedWorkItemLinks": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Paginated Work Item Links" + } + } + } + }, + "description": "Paginated list of work item links" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_link_2", + "description": "Add a new external link to a work item with URL, title, and metadata.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueLinkCreateRequest" + }, + "examples": { + "IssueLinkCreateSerializer": { + "value": { + "url": "https://example.com", + "title": "Example Link" + }, + "description": "Example request for creating an issue link" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLink" + }, + "examples": { + "IssueLink": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "url": "https://github.com/example/repo/pull/123", + "title": "Fix authentication bug", + "metadata": { + "title": "Fix authentication bug", + "description": "Pull request to fix authentication timeout issue", + "image": "https://github.com/example/repo/avatar.png" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Work item link created successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/links/{pk}/": { + "get": { + "operationId": "retrieve_work_item_link_2", + "description": "Retrieve details of a specific work item link.", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedIssueLinkDetailResponse" + }, + "examples": { + "WorkItemLinkDetails": { + "value": { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample Item", + "created_at": "2024-01-15T12:00:00Z" + } + ] + }, + "summary": "Work Item Link Details" + } + } + } + }, + "description": "Work item link details or paginated list" + } + } + }, + "patch": { + "operationId": "update_issue_link_2", + "description": "Modify the URL, title, or metadata of an existing issue link.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueLinkUpdateRequest" + }, + "examples": { + "IssueLinkUpdateSerializer": { + "value": { + "url": "https://example.com", + "title": "Updated Link" + }, + "description": "Example request for updating an issue link" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Link not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueLink" + }, + "examples": { + "IssueLink": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "url": "https://github.com/example/repo/pull/123", + "title": "Fix authentication bug", + "metadata": { + "title": "Fix authentication bug", + "description": "Pull request to fix authentication timeout issue", + "image": "https://github.com/example/repo/avatar.png" + }, + "created_at": "2024-01-01T10:30:00Z", + "updated_at": "2024-01-10T15:45:00Z" + } + } + } + } + }, + "description": "Issue link updated successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "delete": { + "operationId": "delete_work_item_link_2", + "description": "Permanently remove an external link from a work item.", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Link ID", + "required": true, + "examples": { + "ExampleLinkID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example link ID", + "description": "A typical link UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Links" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item link not found" + }, + "204": { + "description": "Work item link deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/relations/": { + "get": { + "operationId": "list_work_item_relations", + "description": "Retrieve all relationships for a work item including blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, and finish_after relations.", + "summary": "List work item relations", + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + }, + "description": "Pagination cursor for getting next set of results", + "examples": { + "NextPageCursor": { + "value": "20:1:0", + "summary": "Next page cursor", + "description": "Cursor format: 'page_size:page_number:offset'" + } + } + }, + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "query", + "name": "per_page", + "schema": { + "type": "integer" + }, + "description": "Number of results per page (default: 20, max: 100)", + "examples": { + "Default": { + "value": 20 + }, + "Maximum": { + "value": 100 + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Relations" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueRelationResponse" + }, + "examples": { + "WorkItemRelationsResponse": { + "value": { + "blocking": [ + { + "project_id": "550e8400-e29b-41d4-a716-446655440010", + "issue_id": "550e8400-e29b-41d4-a716-446655440000" + }, + { + "project_id": "550e8400-e29b-41d4-a716-446655440010", + "issue_id": "550e8400-e29b-41d4-a716-446655440001" + } + ], + "blocked_by": [ + { + "project_id": "550e8400-e29b-41d4-a716-446655440011", + "issue_id": "550e8400-e29b-41d4-a716-446655440002" + } + ], + "duplicate": [], + "relates_to": [ + { + "project_id": "550e8400-e29b-41d4-a716-446655440010", + "issue_id": "550e8400-e29b-41d4-a716-446655440003" + } + ], + "start_after": [], + "start_before": [ + { + "project_id": "550e8400-e29b-41d4-a716-446655440012", + "issue_id": "550e8400-e29b-41d4-a716-446655440004" + } + ], + "finish_after": [], + "finish_before": [] + }, + "summary": "Work Item Relations Response" + } + } + } + }, + "description": "Work item relations grouped by relation type" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "post": { + "operationId": "create_work_item_relation", + "description": "Create relationships between work items. Supports various relation types including blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, and finish_after.", + "summary": "Create work item relation", + "parameters": [ + { + "in": "path", + "name": "issue_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Issue ID", + "required": true, + "examples": { + "ExampleIssueID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example issue ID", + "description": "A typical issue UUID" + } + } + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Item Relations" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueRelationCreateRequest" + }, + "examples": { + "CreateBlockingRelation": { + "value": { + "relation_type": "blocking", + "issues": [ + "550e8400-e29b-41d4-a716-446655440000", + "550e8400-e29b-41d4-a716-446655440001" + ] + }, + "summary": "Create blocking relation" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/IssueRelationCreateRequest" + }, + "examples": { + "CreateBlockingRelation": { + "value": { + "relation_type": "blocking", + "issues": [ + "550e8400-e29b-41d4-a716-446655440000", + "550e8400-e29b-41d4-a716-446655440001" + ] + }, + "summary": "Create blocking relation" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/IssueRelationCreateRequest" + }, + "examples": { + "CreateBlockingRelation": { + "value": { + "relation_type": "blocking", + "issues": [ + "550e8400-e29b-41d4-a716-446655440000", + "550e8400-e29b-41d4-a716-446655440001" + ] + }, + "summary": "Create blocking relation" + } + } + } + }, + "required": true + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Issue not found" + }, + "201": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelation" + } + }, + "examples": { + "RelationsCreated": { + "value": [ + [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug", + "sequence_id": 42, + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "relation_type": "blocked_by", + "state_id": "550e8400-e29b-41d4-a716-446655440002", + "priority": "high", + "created_at": "2024-01-15T10:00:00Z", + "updated_at": "2024-01-15T10:00:00Z", + "created_by": "550e8400-e29b-41d4-a716-446655440004", + "updated_by": "550e8400-e29b-41d4-a716-446655440004" + } + ] + ], + "summary": "Relations created" + } + } + } + }, + "description": "Work item relations created successfully" + }, + "400": { + "description": "Invalid request data provided" + } + } + } + }, + "/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{pk}/": { + "get": { + "operationId": "retrieve_work_item_2", + "description": "Retrieve details of a specific work item.", + "summary": "Retrieve work item", + "parameters": [ + { + "in": "query", + "name": "expand", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of related fields to expand in response", + "examples": { + "ExpandAssignees": { + "value": "assignees", + "summary": "Expand assignees", + "description": "Include full assignee details" + }, + "MultipleExpansions": { + "value": "assignees,labels,state", + "summary": "Multiple expansions", + "description": "Include details for multiple relations" + } + } + }, + { + "in": "query", + "name": "external_id", + "schema": { + "type": "string" + }, + "description": "External system identifier for filtering or lookup", + "examples": { + "GitHubIssue": { + "value": "1234567890", + "summary": "GitHub Issue", + "description": "GitHub issue number" + } + } + }, + { + "in": "query", + "name": "external_source", + "schema": { + "type": "string" + }, + "description": "External system source name for filtering or lookup", + "examples": { + "GitHub": { + "value": "github", + "description": "GitHub integration source" + }, + "Jira": { + "value": "jira", + "description": "Jira integration source" + } + } + }, + { + "in": "query", + "name": "fields", + "schema": { + "type": "string" + }, + "description": "Comma-separated list of fields to include in response", + "examples": { + "BasicFields": { + "value": "id,name,description", + "summary": "Basic fields", + "description": "Include only basic fields" + }, + "WithRelations": { + "value": "id,name,assignees,state", + "summary": "With relations", + "description": "Include fields with relationships" + } + } + }, + { + "in": "query", + "name": "order_by", + "schema": { + "type": "string" + }, + "description": "Field to order results by. Prefix with '-' for descending order", + "examples": { + "CreatedDateDescending": { + "value": "-created_at", + "summary": "Created date descending", + "description": "Most recent items first" + }, + "PriorityAscending": { + "value": "priority", + "summary": "Priority ascending", + "description": "Order by priority (urgent, high, medium, low, none)" + }, + "StateGroup": { + "value": "state__group", + "summary": "State group", + "description": "Order by state group (backlog, unstarted, started, completed, cancelled)" + }, + "AssigneeName": { + "value": "assignees__first_name", + "summary": "Assignee name", + "description": "Order by assignee first name" + } + } + }, + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "List of issues or issue details" + }, + "400": { + "description": "Invalid request data provided" + } + } + }, + "patch": { + "operationId": "update_work_item_2", + "description": "Partially update an existing work item with the provided fields. Supports external ID validation to prevent conflicts.", + "summary": "Partially update work item", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedIssueRequest" + }, + "examples": { + "IssueUpdateSerializer": { + "value": { + "name": "Updated Issue", + "description": "Updated issue description", + "priority": "medium", + "state": "0ec6cfa4-e906-4aad-9390-2df0303a41cd", + "assignees": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41cd" + ], + "labels": [ + "0ec6cfa4-e906-4aad-9390-2df0303a41ce" + ] + }, + "description": "Example request for updating a work item" + } + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Work item not found" + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work Item patched successfully" + }, + "400": { + "description": "Invalid request data provided" + }, + "409": { + "description": "Resource with same external ID already exists" + } + } + }, + "delete": { + "operationId": "delete_work_item_2", + "description": "Permanently delete an existing work item from the project. Only admins or the item creator can perform this action.", + "summary": "Delete work item", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + }, + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID", + "required": true, + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "A typical project UUID" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Only admin or creator can perform this action" + }, + "404": { + "description": "Work item not found" + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/stickies/": { + "get": { + "operationId": "list_stickies", + "description": "List all stickies in the workspace", + "summary": "List stickies", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Stickies" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Sticky" + } + }, + "examples": { + "ListOfStickies": { + "value": [ + { + "grouped_by": "state", + "sub_grouped_by": "priority", + "total_count": 150, + "next_cursor": "20:1:0", + "prev_cursor": "20:0:0", + "next_page_results": true, + "prev_page_results": false, + "count": 20, + "total_pages": 8, + "total_results": 150, + "extra_stats": null, + "results": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sticky 1", + "description_html": "

Sticky 1 description

", + "created_at": "2024-01-01T10:30:00Z" + } + ] + } + ], + "summary": "List of stickies" + } + } + } + }, + "description": "List of stickies" + } + } + }, + "post": { + "operationId": "create_sticky", + "description": "Create a new sticky in the workspace", + "summary": "Create a new sticky", + "parameters": [ + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Stickies" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StickyRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/StickyRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/StickyRequest" + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Sticky" + }, + "examples": { + "Sticky": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sticky 1", + "description_html": "

Sticky 1 description

", + "created_at": "2024-01-01T10:30:00Z" + } + } + } + } + }, + "description": "Sticky created" + } + } + } + }, + "/api/v1/workspaces/{slug}/stickies/{pk}/": { + "get": { + "operationId": "retrieve_sticky", + "description": "Retrieve a sticky by its ID", + "summary": "Retrieve a sticky", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "A UUID string identifying this Sticky.", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Stickies" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Sticky" + }, + "examples": { + "Sticky": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sticky 1", + "description_html": "

Sticky 1 description

", + "created_at": "2024-01-01T10:30:00Z" + } + } + } + } + }, + "description": "Sticky" + } + } + }, + "patch": { + "operationId": "update_sticky", + "description": "Update a sticky by its ID", + "summary": "Update a sticky", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "A UUID string identifying this Sticky.", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Stickies" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PatchedStickyRequest" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/PatchedStickyRequest" + } + }, + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/PatchedStickyRequest" + } + } + } + }, + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Sticky" + }, + "examples": { + "Sticky": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sticky 1", + "description_html": "

Sticky 1 description

", + "created_at": "2024-01-01T10:30:00Z" + } + } + } + } + }, + "description": "Sticky" + } + } + }, + "delete": { + "operationId": "delete_sticky", + "description": "Delete a sticky by its ID", + "summary": "Delete a sticky", + "parameters": [ + { + "in": "path", + "name": "pk", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "A UUID string identifying this Sticky.", + "required": true + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Stickies" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "The requested resource was not found." + }, + "204": { + "description": "Resource deleted successfully" + } + } + } + }, + "/api/v1/workspaces/{slug}/work-items/{project_identifier}-{issue_identifier}/": { + "get": { + "operationId": "get_workspace_work_item_2", + "description": "Retrieve a specific work item using workspace slug, project identifier, and issue identifier.", + "summary": "Retrieve work item by identifiers", + "parameters": [ + { + "in": "path", + "name": "issue_identifier", + "schema": { + "type": "integer" + }, + "description": "Issue sequence ID (numeric identifier within project)", + "required": true, + "examples": { + "ExampleIssueIdentifier": { + "value": 123, + "summary": "Example issue identifier", + "description": "A typical issue sequence ID" + } + } + }, + { + "in": "path", + "name": "project_identifier", + "schema": { + "type": "string" + }, + "description": "Project identifier (unique string within workspace)", + "required": true, + "examples": { + "ExampleProjectIdentifier": { + "value": "PROJ", + "summary": "Example project identifier", + "description": "A typical project identifier" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Issue" + }, + "examples": { + "Issue": { + "value": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Implement user authentication", + "description": "Add OAuth 2.0 authentication flow", + "sequence_id": 1, + "priority": "high", + "assignees": [ + "550e8400-e29b-41d4-a716-446655440001" + ], + "labels": [ + "550e8400-e29b-41d4-a716-446655440002" + ], + "created_at": "2024-01-15T10:30:00Z", + "updated_at": "2024-01-15T10:30:00Z" + } + } + } + } + }, + "description": "Work item details" + }, + "404": { + "description": "Work item not found" + } + } + } + }, + "/api/v1/workspaces/{slug}/work-items/search/": { + "get": { + "operationId": "search_work_items_2", + "description": "Perform semantic search across issue names, sequence IDs, and project identifiers.", + "parameters": [ + { + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + }, + "description": "Maximum number of results to return", + "examples": { + "Default": { + "value": 10 + }, + "MoreResults": { + "value": 50, + "summary": "More results" + } + } + }, + { + "in": "query", + "name": "project_id", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Project ID for filtering results within a specific project", + "examples": { + "ExampleProjectID": { + "value": "550e8400-e29b-41d4-a716-446655440000", + "summary": "Example project ID", + "description": "Filter results for this project" + } + } + }, + { + "in": "query", + "name": "search", + "schema": { + "type": "string" + }, + "description": "Search query to filter results by name, description, or identifier", + "required": true, + "examples": { + "NameSearch": { + "value": "bug fix", + "summary": "Name search", + "description": "Search for items containing 'bug fix'" + }, + "SequenceID": { + "value": "123", + "summary": "Sequence ID", + "description": "Search by sequence ID number" + } + } + }, + { + "in": "path", + "name": "slug", + "schema": { + "type": "string" + }, + "description": "Workspace slug", + "required": true, + "examples": { + "ExampleWorkspace": { + "value": "my-workspace", + "summary": "Example workspace", + "description": "A typical workspace slug" + } + } + }, + { + "in": "query", + "name": "workspace_search", + "schema": { + "type": "string" + }, + "description": "Whether to search across entire workspace or within specific project", + "examples": { + "ProjectOnly": { + "value": "false", + "summary": "Project only", + "description": "Search within specific project only" + }, + "WorkspaceWide": { + "value": "true", + "summary": "Workspace wide", + "description": "Search across entire workspace" + } + } + } + ], + "tags": [ + "Work Items" + ], + "security": [ + { + "ApiKeyAuthentication": [] + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IssueSearch" + }, + "examples": { + "IssueSearchResults": { + "value": { + "issues": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Fix authentication bug in user login", + "sequence_id": 123, + "project__identifier": "MAB", + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "workspace__slug": "my-workspace" + }, + { + "id": "550e8400-e29b-41d4-a716-446655440002", + "name": "Add authentication middleware", + "sequence_id": 124, + "project__identifier": "MAB", + "project_id": "550e8400-e29b-41d4-a716-446655440001", + "workspace__slug": "my-workspace" + } + ] + } + } + } + } + }, + "description": "Work item search results" + }, + "400": { + "description": "Bad request - invalid search parameters" + }, + "401": { + "description": "Authentication credentials were not provided or are invalid." + }, + "403": { + "description": "Permission denied. User lacks required permissions." + }, + "404": { + "description": "Workspace not found" + } + } + } + } + }, + "components": { + "schemas": { + "AccessEnum": { + "enum": [ + "INTERNAL", + "EXTERNAL" + ], + "type": "string", + "description": "* `INTERNAL` - INTERNAL\n* `EXTERNAL` - EXTERNAL" + }, + "Cycle": { + "type": "object", + "description": "Cycle serializer with comprehensive project metrics and time tracking.\n\nProvides cycle details including work item counts by status, progress estimates,\nand time-bound iteration data for project management and sprint planning.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "total_issues": { + "type": "integer", + "readOnly": true + }, + "cancelled_issues": { + "type": "integer", + "readOnly": true + }, + "completed_issues": { + "type": "integer", + "readOnly": true + }, + "started_issues": { + "type": "integer", + "readOnly": true + }, + "unstarted_issues": { + "type": "integer", + "readOnly": true + }, + "backlog_issues": { + "type": "integer", + "readOnly": true + }, + "total_estimates": { + "type": "number", + "format": "double", + "readOnly": true + }, + "completed_estimates": { + "type": "number", + "format": "double", + "readOnly": true + }, + "started_estimates": { + "type": "number", + "format": "double", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "title": "Cycle Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Cycle Description" + }, + "start_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "view_props": {}, + "sort_order": { + "type": "number", + "format": "double" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "progress_snapshot": {}, + "archived_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "logo_props": {}, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + }, + "version": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648 + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "owned_by": { + "type": "string", + "format": "uuid", + "readOnly": true + } + }, + "required": [ + "name" + ] + }, + "CycleCreateRequest": { + "type": "object", + "description": "Serializer for creating cycles with timezone handling and date validation.\n\nManages cycle creation including project timezone conversion, date range validation,\nand UTC normalization for time-bound iteration planning and sprint management.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Cycle Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Cycle Description" + }, + "start_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "owned_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "User who owns the cycle. If not provided, defaults to the current user." + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + } + }, + "required": [ + "name" + ] + }, + "CycleIssue": { + "type": "object", + "description": "Serializer for cycle-issue relationships with sub-issue counting.\n\nManages the association between cycles and work items, including\nhierarchical issue tracking for nested work item structures.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "sub_issues_count": { + "type": "integer", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "issue": { + "type": "string", + "format": "uuid" + }, + "cycle": { + "type": "string", + "format": "uuid", + "readOnly": true + } + }, + "required": [ + "issue" + ] + }, + "CycleIssueRequestRequest": { + "type": "object", + "description": "Serializer for bulk work item assignment to cycles.\n\nValidates work item ID lists for batch operations including\ncycle assignment and sprint planning workflows.", + "properties": { + "issues": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "List of issue IDs to add to the cycle" + } + }, + "required": [ + "issues" + ] + }, + "CycleLite": { + "type": "object", + "description": "Lightweight cycle serializer for minimal data transfer.\n\nProvides essential cycle information without computed metrics,\noptimized for list views and reference lookups.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "name": { + "type": "string", + "title": "Cycle Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Cycle Description" + }, + "start_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "view_props": {}, + "sort_order": { + "type": "number", + "format": "double" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "progress_snapshot": {}, + "archived_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "logo_props": {}, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + }, + "version": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648 + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid" + }, + "workspace": { + "type": "string", + "format": "uuid" + }, + "owned_by": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "name", + "owned_by", + "project", + "workspace" + ] + }, + "EntityTypeEnum": { + "enum": [ + "USER_AVATAR", + "USER_COVER" + ], + "type": "string", + "description": "* `USER_AVATAR` - User Avatar\n* `USER_COVER` - User Cover" + }, + "GenericAssetUploadRequest": { + "type": "object", + "description": "Serializer for generic asset upload requests with project association.\n\nValidates metadata for generating presigned URLs for workspace assets including\nproject association, external system tracking, and file validation for\ndocument management and content storage workflows.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Original filename of the asset" + }, + "type": { + "type": "string", + "minLength": 1, + "description": "MIME type of the file" + }, + "size": { + "type": "integer", + "description": "File size in bytes" + }, + "project_id": { + "type": "string", + "format": "uuid", + "description": "UUID of the project to associate with the asset" + }, + "external_id": { + "type": "string", + "minLength": 1, + "description": "External identifier for the asset (for integration tracking)" + }, + "external_source": { + "type": "string", + "minLength": 1, + "description": "External source system (for integration tracking)" + } + }, + "required": [ + "name", + "size" + ] + }, + "GroupEnum": { + "enum": [ + "backlog", + "unstarted", + "started", + "completed", + "cancelled", + "triage" + ], + "type": "string", + "description": "* `backlog` - Backlog\n* `unstarted` - Unstarted\n* `started` - Started\n* `completed` - Completed\n* `cancelled` - Cancelled\n* `triage` - Triage" + }, + "IntakeIssue": { + "type": "object", + "description": "Comprehensive serializer for intake work items with expanded issue details.\n\nProvides full intake work item data including embedded issue information,\nstatus tracking, and triage metadata for issue queue management.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "issue_detail": { + "allOf": [ + { + "$ref": "#/components/schemas/IssueExpand" + } + ], + "readOnly": true + }, + "inbox": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/IntakeWorkItemStatusEnum" + } + ], + "minimum": -2147483648, + "maximum": 2147483647 + }, + "snoozed_till": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "source_email": { + "type": "string", + "nullable": true + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "extra": {}, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "intake": { + "type": "string", + "format": "uuid" + }, + "issue": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "duplicate_to": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "intake" + ] + }, + "IntakeIssueCreateRequest": { + "type": "object", + "description": "Serializer for creating intake work items with embedded issue data.\n\nManages intake work item creation including nested issue creation,\nstatus assignment, and source tracking for issue queue management.", + "properties": { + "issue": { + "allOf": [ + { + "$ref": "#/components/schemas/IssueForIntakeRequest" + } + ], + "description": "Issue data for the intake issue" + } + }, + "required": [ + "issue" + ] + }, + "IntakeWorkItemStatusEnum": { + "enum": [ + -2, + -1, + 0, + 1, + 2 + ], + "type": "integer", + "description": "* `-2` - Pending\n* `-1` - Rejected\n* `0` - Snoozed\n* `1` - Accepted\n* `2` - Duplicate" + }, + "Issue": { + "type": "object", + "description": "Comprehensive work item serializer with full relationship management.\n\nHandles complete work item lifecycle including assignees, labels, validation,\nand related model updates. Supports dynamic field expansion and HTML content\nprocessing.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "type_id": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "point": { + "type": "integer", + "maximum": 12, + "minimum": 0, + "nullable": true + }, + "name": { + "type": "string", + "title": "Issue Name", + "maxLength": 255 + }, + "description_html": { + "type": "string" + }, + "description_binary": { + "type": "string", + "format": "byte", + "readOnly": true, + "nullable": true + }, + "priority": { + "allOf": [ + { + "$ref": "#/components/schemas/PriorityEnum" + } + ], + "title": "Issue Priority" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "sequence_id": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648, + "title": "Issue Sequence ID" + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "completed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "archived_at": { + "type": "string", + "format": "date", + "nullable": true + }, + "is_draft": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "state": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate_point": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "type": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "IssueActivity": { + "type": "object", + "description": "Serializer for work item activity and change history.\n\nTracks and represents work item modifications, state changes,\nand user interactions for audit trails and activity feeds.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "verb": { + "type": "string", + "title": "Action", + "maxLength": 255 + }, + "field": { + "type": "string", + "nullable": true, + "title": "Field Name", + "maxLength": 255 + }, + "old_value": { + "type": "string", + "nullable": true + }, + "new_value": { + "type": "string", + "nullable": true + }, + "comment": { + "type": "string" + }, + "attachments": { + "type": "array", + "items": { + "type": "string", + "format": "uri", + "maxLength": 200 + }, + "maxItems": 10 + }, + "old_identifier": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "new_identifier": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "epoch": { + "type": "number", + "format": "double", + "nullable": true + }, + "project": { + "type": "string", + "format": "uuid" + }, + "workspace": { + "type": "string", + "format": "uuid" + }, + "issue": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "issue_comment": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "actor": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "project", + "workspace" + ] + }, + "IssueAttachment": { + "type": "object", + "description": "Serializer for work item file attachments.\n\nManages file asset associations with work items including metadata,\nstorage information, and access control for document management.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "attributes": {}, + "asset": { + "type": "string", + "format": "uri" + }, + "entity_type": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "entity_identifier": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "is_deleted": { + "type": "boolean" + }, + "is_archived": { + "type": "boolean" + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "size": { + "type": "number", + "format": "double" + }, + "is_uploaded": { + "type": "boolean" + }, + "storage_metadata": { + "nullable": true + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "user": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "draft_issue": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "issue": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "comment": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "page": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "asset" + ] + }, + "IssueAttachmentUploadRequest": { + "type": "object", + "description": "Serializer for work item attachment upload request validation.\n\nHandles file upload metadata validation including size, type, and external\nintegration tracking for secure work item document attachment workflows.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Original filename of the asset" + }, + "type": { + "type": "string", + "minLength": 1, + "description": "MIME type of the file" + }, + "size": { + "type": "integer", + "description": "File size in bytes" + }, + "external_id": { + "type": "string", + "minLength": 1, + "description": "External identifier for the asset (for integration tracking)" + }, + "external_source": { + "type": "string", + "minLength": 1, + "description": "External source system (for integration tracking)" + } + }, + "required": [ + "name", + "size" + ] + }, + "IssueComment": { + "type": "object", + "description": "Full serializer for work item comments with membership context.\n\nProvides complete comment data including member status, content formatting,\nand edit tracking for collaborative work item discussions.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "is_member": { + "type": "boolean", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "comment_html": { + "type": "string" + }, + "attachments": { + "type": "array", + "items": { + "type": "string", + "format": "uri", + "maxLength": 200 + }, + "maxItems": 10 + }, + "access": { + "$ref": "#/components/schemas/AccessEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "edited_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "description": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "issue": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "actor": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + } + } + }, + "IssueCommentCreateRequest": { + "type": "object", + "description": "Serializer for creating work item comments.\n\nHandles comment creation with JSON and HTML content support,\naccess control, and external integration tracking.", + "properties": { + "comment_json": {}, + "comment_html": { + "type": "string" + }, + "access": { + "$ref": "#/components/schemas/AccessEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + } + }, + "IssueExpand": { + "type": "object", + "description": "Extended work item serializer with full relationship expansion.\n\nProvides work items with expanded related data including cycles, modules,\nlabels, assignees, and states for comprehensive data representation.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "cycle": { + "allOf": [ + { + "$ref": "#/components/schemas/CycleLite" + } + ], + "readOnly": true + }, + "module": { + "allOf": [ + { + "$ref": "#/components/schemas/ModuleLite" + } + ], + "readOnly": true + }, + "labels": { + "type": "string", + "readOnly": true + }, + "assignees": { + "type": "string", + "readOnly": true + }, + "state": { + "allOf": [ + { + "$ref": "#/components/schemas/StateLite" + } + ], + "readOnly": true + }, + "description": { + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "point": { + "type": "integer", + "maximum": 12, + "minimum": 0, + "nullable": true + }, + "name": { + "type": "string", + "title": "Issue Name", + "maxLength": 255 + }, + "description_json": {}, + "description_html": { + "type": "string" + }, + "description_stripped": { + "type": "string", + "nullable": true + }, + "description_binary": { + "type": "string", + "format": "byte", + "readOnly": true, + "nullable": true + }, + "priority": { + "allOf": [ + { + "$ref": "#/components/schemas/PriorityEnum" + } + ], + "title": "Issue Priority" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "sequence_id": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648, + "title": "Issue Sequence ID" + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "completed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "archived_at": { + "type": "string", + "format": "date", + "nullable": true + }, + "is_draft": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate_point": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "type": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "IssueForIntakeRequest": { + "type": "object", + "description": "Serializer for work item data within intake submissions.\n\nHandles essential work item fields for intake processing including\ncontent validation and priority assignment for triage workflows.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Issue Name", + "maxLength": 255 + }, + "description": { + "nullable": true + }, + "description_json": {}, + "description_html": { + "type": "string" + }, + "priority": { + "allOf": [ + { + "$ref": "#/components/schemas/PriorityEnum" + } + ], + "title": "Issue Priority" + } + }, + "required": [ + "name" + ] + }, + "IssueLink": { + "type": "object", + "description": "Full serializer for work item external links.\n\nProvides complete link information including metadata and timestamps\nfor managing external resource associations with work items.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "url": { + "type": "string" + }, + "metadata": {}, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "issue": { + "type": "string", + "format": "uuid", + "readOnly": true + } + }, + "required": [ + "url" + ] + }, + "IssueLinkCreateRequest": { + "type": "object", + "description": "Serializer for creating work item external links with validation.\n\nHandles URL validation, format checking, and duplicate prevention\nfor attaching external resources to work items.", + "properties": { + "title": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "url": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "url" + ] + }, + "IssueRelation": { + "type": "object", + "description": "Serializer for issue relationships showing related issue details.\n\nProvides comprehensive information about related issues including\nproject context, sequence ID, and relationship type.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "project_id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "sequence_id": { + "type": "integer", + "readOnly": true + }, + "relation_type": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + }, + "state_id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "priority": { + "type": "string", + "readOnly": true + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + } + } + }, + "IssueRelationCreateRequest": { + "type": "object", + "description": "Serializer for creating issue relations.\n\nCreates issue relations with the specified relation type and issues.\nValidates relation types and ensures proper issue ID format.", + "properties": { + "relation_type": { + "allOf": [ + { + "$ref": "#/components/schemas/RelationTypeEnum" + } + ], + "description": "Type of relationship between work items\n\n* `blocking` - Blocking\n* `blocked_by` - Blocked By\n* `duplicate` - Duplicate\n* `relates_to` - Relates To\n* `start_before` - Start Before\n* `start_after` - Start After\n* `finish_before` - Finish Before\n* `finish_after` - Finish After" + }, + "issues": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Array of work item IDs to create relations with", + "minItems": 1 + } + }, + "required": [ + "issues", + "relation_type" + ] + }, + "IssueRelationRef": { + "type": "object", + "description": "Project-scoped reference to a related work item.", + "properties": { + "project_id": { + "type": "string", + "format": "uuid", + "description": "Project containing the related work item" + }, + "issue_id": { + "type": "string", + "format": "uuid", + "description": "ID of the related work item" + } + }, + "required": [ + "issue_id", + "project_id" + ] + }, + "IssueRelationResponse": { + "type": "object", + "description": "Serializer for issue relations response showing grouped relation types.\n\nEach list contains project_id and issue_id pairs so clients can resolve\ncross-project relations.", + "properties": { + "blocking": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items blocking this issue" + }, + "blocked_by": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items this issue is blocked by" + }, + "duplicate": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Duplicate work items" + }, + "relates_to": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Related work items" + }, + "start_after": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items that start after this issue" + }, + "start_before": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items that start before this issue" + }, + "finish_after": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items that finish after this issue" + }, + "finish_before": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueRelationRef" + }, + "description": "Work items that finish before this issue" + } + }, + "required": [ + "blocked_by", + "blocking", + "duplicate", + "finish_after", + "finish_before", + "relates_to", + "start_after", + "start_before" + ] + }, + "IssueRequest": { + "type": "object", + "description": "Comprehensive work item serializer with full relationship management.\n\nHandles complete work item lifecycle including assignees, labels, validation,\nand related model updates. Supports dynamic field expansion and HTML content\nprocessing.", + "properties": { + "assignees": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "labels": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "type_id": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "point": { + "type": "integer", + "maximum": 12, + "minimum": 0, + "nullable": true + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Issue Name", + "maxLength": 255 + }, + "description_html": { + "type": "string" + }, + "priority": { + "allOf": [ + { + "$ref": "#/components/schemas/PriorityEnum" + } + ], + "title": "Issue Priority" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "sequence_id": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648, + "title": "Issue Sequence ID" + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "archived_at": { + "type": "string", + "format": "date", + "nullable": true + }, + "is_draft": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "state": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate_point": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "type": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "IssueSearch": { + "type": "object", + "description": "Serializer for work item search result data formatting.\n\nProvides standardized search result structure including work item identifiers,\nproject context, and workspace information for search API responses.", + "properties": { + "id": { + "type": "string", + "description": "Issue ID" + }, + "name": { + "type": "string", + "description": "Issue name" + }, + "sequence_id": { + "type": "string", + "description": "Issue sequence ID" + }, + "project__identifier": { + "type": "string", + "description": "Project identifier" + }, + "project_id": { + "type": "string", + "description": "Project ID" + }, + "workspace__slug": { + "type": "string", + "description": "Workspace slug" + } + }, + "required": [ + "id", + "name", + "project__identifier", + "project_id", + "sequence_id", + "workspace__slug" + ] + }, + "Label": { + "type": "object", + "description": "Full serializer for work item labels with complete metadata.\n\nProvides comprehensive label information including hierarchical relationships,\nvisual properties, and organizational data for work item tagging.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "maxLength": 255 + }, + "description": { + "type": "string" + }, + "color": { + "type": "string", + "maxLength": 255 + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "LabelCreateUpdateRequest": { + "type": "object", + "description": "Serializer for creating and updating work item labels.\n\nManages label metadata including colors, descriptions, hierarchy,\nand sorting for work item categorization and filtering.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "color": { + "type": "string", + "maxLength": 255 + }, + "description": { + "type": "string" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sort_order": { + "type": "number", + "format": "double" + } + }, + "required": [ + "name" + ] + }, + "Module": { + "type": "object", + "description": "Comprehensive module serializer with work item metrics and member management.\n\nProvides complete module data including work item counts by status, member\nrelationships, and progress tracking for feature-based project organization.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "total_issues": { + "type": "integer", + "readOnly": true + }, + "cancelled_issues": { + "type": "integer", + "readOnly": true + }, + "completed_issues": { + "type": "integer", + "readOnly": true + }, + "started_issues": { + "type": "integer", + "readOnly": true + }, + "unstarted_issues": { + "type": "integer", + "readOnly": true + }, + "backlog_issues": { + "type": "integer", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "title": "Module Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Module Description" + }, + "description_text": { + "nullable": true, + "title": "Module Description RT" + }, + "description_html": { + "nullable": true, + "title": "Module Description HTML" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/ModuleStatusEnum" + }, + "view_props": {}, + "sort_order": { + "type": "number", + "format": "double" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "archived_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "logo_props": {}, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "lead": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "ModuleCreateRequest": { + "type": "object", + "description": "Serializer for creating modules with member validation and date checking.\n\nHandles module creation including member assignment validation, date range\nverification, and duplicate name prevention for feature-based\nproject organization setup.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Module Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Module Description" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/ModuleStatusEnum" + }, + "lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "members": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + }, + "required": [ + "name" + ] + }, + "ModuleIssue": { + "type": "object", + "description": "Serializer for module-work item relationships with sub-item counting.\n\nManages the association between modules and work items, including\nhierarchical issue tracking for nested work item structures.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "sub_issues_count": { + "type": "integer", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "module": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "issue": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "issue" + ] + }, + "ModuleIssueRequestRequest": { + "type": "object", + "description": "Serializer for bulk work item assignment to modules.\n\nValidates work item ID lists for batch operations including\nmodule assignment and work item organization workflows.", + "properties": { + "issues": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "List of issue IDs to add to the module" + } + }, + "required": [ + "issues" + ] + }, + "ModuleLite": { + "type": "object", + "description": "Lightweight module serializer for minimal data transfer.\n\nProvides essential module information without computed metrics,\noptimized for list views and reference lookups.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "name": { + "type": "string", + "title": "Module Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Module Description" + }, + "description_text": { + "nullable": true, + "title": "Module Description RT" + }, + "description_html": { + "nullable": true, + "title": "Module Description HTML" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/ModuleStatusEnum" + }, + "view_props": {}, + "sort_order": { + "type": "number", + "format": "double" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "archived_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "logo_props": {}, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid" + }, + "workspace": { + "type": "string", + "format": "uuid" + }, + "lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "members": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "readOnly": true + } + }, + "required": [ + "name", + "project", + "workspace" + ] + }, + "ModuleStatusEnum": { + "enum": [ + "backlog", + "planned", + "in-progress", + "paused", + "completed", + "cancelled" + ], + "type": "string", + "description": "* `backlog` - Backlog\n* `planned` - Planned\n* `in-progress` - In Progress\n* `paused` - Paused\n* `completed` - Completed\n* `cancelled` - Cancelled" + }, + "NetworkEnum": { + "enum": [ + 0, + 2 + ], + "type": "integer", + "description": "* `0` - Secret\n* `2` - Public" + }, + "PaginatedArchivedCycleResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Cycle" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedArchivedModuleResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Module" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedCycleIssueResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Issue" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedCycleLiteResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CycleLite" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedCycleResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Cycle" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIntakeIssueResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntakeIssue" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIssueActivityDetailResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueActivity" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIssueActivityResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueActivity" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIssueCommentResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueComment" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIssueLinkDetailResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueLink" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedIssueLinkResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssueLink" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedLabelResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Label" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedModuleIssueResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Issue" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedModuleLiteResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModuleLite" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedModuleResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Module" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedProjectLiteResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectLite" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedProjectMemberLite": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMemberLiteAPI" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedProjectResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedStateResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/State" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedWorkItemResponse": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Issue" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PaginatedWorkspaceMemberLite": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkspaceMemberLiteAPI" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "PatchedAssetUpdateRequest": { + "type": "object", + "description": "Serializer for asset status updates after successful upload completion.\n\nHandles post-upload asset metadata updates including attribute modifications\nand upload confirmation for S3-based file storage workflows.", + "properties": { + "attributes": { + "description": "Additional attributes to update for the asset" + } + } + }, + "PatchedCycleUpdateRequest": { + "type": "object", + "description": "Serializer for updating cycles with enhanced ownership management.\n\nExtends cycle creation with update-specific features including ownership\nassignment and modification tracking for cycle lifecycle management.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Cycle Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Cycle Description" + }, + "start_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end_date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "owned_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "User who owns the cycle. If not provided, defaults to the current user." + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + } + } + }, + "PatchedGenericAssetUpdateRequest": { + "type": "object", + "description": "Serializer for generic asset upload confirmation and status management.\n\nHandles post-upload status updates for workspace assets including\nupload completion marking and metadata finalization.", + "properties": { + "is_uploaded": { + "type": "boolean", + "default": true, + "description": "Whether the asset has been successfully uploaded" + } + } + }, + "PatchedIntakeIssueUpdateRequest": { + "type": "object", + "description": "Serializer for updating intake work items and their associated issues.\n\nHandles intake work item modifications including status changes, triage decisions,\nand embedded issue updates for issue queue processing workflows.", + "properties": { + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/IntakeWorkItemStatusEnum" + } + ], + "minimum": -2147483648, + "maximum": 2147483647 + }, + "snoozed_till": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "duplicate_to": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "source_email": { + "type": "string", + "nullable": true + }, + "issue": { + "allOf": [ + { + "$ref": "#/components/schemas/IssueForIntakeRequest" + } + ], + "description": "Issue data to update in the intake issue" + } + } + }, + "PatchedIssueCommentCreateRequest": { + "type": "object", + "description": "Serializer for creating work item comments.\n\nHandles comment creation with JSON and HTML content support,\naccess control, and external integration tracking.", + "properties": { + "comment_json": {}, + "comment_html": { + "type": "string" + }, + "access": { + "$ref": "#/components/schemas/AccessEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + } + }, + "PatchedIssueLinkUpdateRequest": { + "type": "object", + "description": "Serializer for updating work item external links.\n\nExtends link creation with update-specific validation to prevent\nURL conflicts and maintain link integrity during modifications.", + "properties": { + "title": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "url": { + "type": "string", + "minLength": 1 + } + } + }, + "PatchedIssueRequest": { + "type": "object", + "description": "Comprehensive work item serializer with full relationship management.\n\nHandles complete work item lifecycle including assignees, labels, validation,\nand related model updates. Supports dynamic field expansion and HTML content\nprocessing.", + "properties": { + "assignees": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "labels": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "type_id": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "point": { + "type": "integer", + "maximum": 12, + "minimum": 0, + "nullable": true + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Issue Name", + "maxLength": 255 + }, + "description_html": { + "type": "string" + }, + "priority": { + "allOf": [ + { + "$ref": "#/components/schemas/PriorityEnum" + } + ], + "title": "Issue Priority" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "sequence_id": { + "type": "integer", + "maximum": 2147483647, + "minimum": -2147483648, + "title": "Issue Sequence ID" + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "archived_at": { + "type": "string", + "format": "date", + "nullable": true + }, + "is_draft": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "state": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate_point": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "type": { + "type": "string", + "format": "uuid", + "nullable": true + } + } + }, + "PatchedLabelCreateUpdateRequest": { + "type": "object", + "description": "Serializer for creating and updating work item labels.\n\nManages label metadata including colors, descriptions, hierarchy,\nand sorting for work item categorization and filtering.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "color": { + "type": "string", + "maxLength": 255 + }, + "description": { + "type": "string" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "parent": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sort_order": { + "type": "number", + "format": "double" + } + } + }, + "PatchedModuleUpdateRequest": { + "type": "object", + "description": "Serializer for updating modules with enhanced validation and member management.\n\nExtends module creation with update-specific validations including\nmember reassignment, name conflict checking,\nand relationship management for module modifications.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Module Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Module Description" + }, + "start_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "target_date": { + "type": "string", + "format": "date", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/ModuleStatusEnum" + }, + "lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "members": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "writeOnly": true + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + } + }, + "PatchedProjectMemberRequest": { + "type": "object", + "description": "Serializer for project members.", + "properties": { + "member": { + "type": "string", + "format": "uuid" + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + } + } + }, + "PatchedProjectUpdateRequest": { + "type": "object", + "description": "Serializer for updating projects with enhanced state and estimation management.\n\nExtends project creation with update-specific validations including default state\nassignment, estimation configuration, and project setting modifications.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Project Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Project Description" + }, + "project_lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "default_assignee": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "identifier": { + "type": "string", + "minLength": 1, + "title": "Project Identifier", + "maxLength": 12 + }, + "icon_prop": { + "nullable": true + }, + "emoji": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "cover_image": { + "type": "string", + "nullable": true + }, + "module_view": { + "type": "boolean" + }, + "cycle_view": { + "type": "boolean" + }, + "issue_views_view": { + "type": "boolean" + }, + "page_view": { + "type": "boolean" + }, + "intake_view": { + "type": "boolean" + }, + "guest_view_all_features": { + "type": "boolean" + }, + "archive_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "close_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "is_issue_type_enabled": { + "type": "boolean" + }, + "is_time_tracking_enabled": { + "type": "boolean" + }, + "default_state": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate": { + "type": "string", + "format": "uuid", + "nullable": true + } + } + }, + "PatchedStateRequest": { + "type": "object", + "description": "Serializer for work item states with default state management.\n\nHandles state creation and updates including default state validation\nand automatic default state switching for workflow management.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "State Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "State Description" + }, + "color": { + "type": "string", + "minLength": 1, + "title": "State Color", + "maxLength": 255 + }, + "sequence": { + "type": "number", + "format": "double" + }, + "group": { + "$ref": "#/components/schemas/GroupEnum" + }, + "is_triage": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + } + }, + "PatchedStickyRequest": { + "type": "object", + "description": "Base serializer providing common functionality for all model serializers.\n\nFeatures field filtering, dynamic expansion of related fields, and standardized\nprimary key handling for consistent API responses across the application.", + "properties": { + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": {}, + "description_html": { + "type": "string" + }, + "description_stripped": { + "type": "string", + "nullable": true + }, + "logo_props": {}, + "color": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "background_color": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Last Modified By" + } + } + }, + "PatchedWorkspaceInviteRequest": { + "type": "object", + "description": "Serializer for workspace invites.", + "properties": { + "email": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + } + } + }, + "PriorityEnum": { + "enum": [ + "urgent", + "high", + "medium", + "low", + "none" + ], + "type": "string", + "description": "* `urgent` - Urgent\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `none` - None" + }, + "Project": { + "type": "object", + "description": "Comprehensive project serializer with metrics and member context.\n\nProvides complete project data including member counts, cycle/module totals,\ndeployment status, and user-specific context for project management.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "total_members": { + "type": "integer", + "readOnly": true + }, + "total_cycles": { + "type": "integer", + "readOnly": true + }, + "total_modules": { + "type": "integer", + "readOnly": true + }, + "is_member": { + "type": "boolean", + "readOnly": true + }, + "sort_order": { + "type": "number", + "format": "double", + "readOnly": true + }, + "member_role": { + "type": "integer", + "readOnly": true + }, + "is_deployed": { + "type": "boolean", + "readOnly": true + }, + "cover_image_url": { + "type": "string", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "title": "Project Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Project Description" + }, + "description_text": { + "nullable": true, + "title": "Project Description RT" + }, + "description_html": { + "nullable": true, + "title": "Project Description HTML" + }, + "network": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkEnum" + } + ], + "minimum": 0, + "maximum": 32767 + }, + "identifier": { + "type": "string", + "title": "Project Identifier", + "maxLength": 12 + }, + "emoji": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "icon_prop": { + "nullable": true + }, + "module_view": { + "type": "boolean" + }, + "cycle_view": { + "type": "boolean" + }, + "issue_views_view": { + "type": "boolean" + }, + "page_view": { + "type": "boolean" + }, + "intake_view": { + "type": "boolean" + }, + "is_time_tracking_enabled": { + "type": "boolean" + }, + "is_issue_type_enabled": { + "type": "boolean" + }, + "guest_view_all_features": { + "type": "boolean" + }, + "cover_image": { + "type": "string", + "nullable": true + }, + "archive_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "close_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "logo_props": {}, + "archived_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "default_assignee": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "project_lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "cover_image_asset": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "estimate": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "default_state": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "required": [ + "identifier", + "name" + ] + }, + "ProjectCreateRequest": { + "type": "object", + "description": "Serializer for creating projects with workspace validation.\n\nHandles project creation including identifier validation, member verification,\nand workspace association for new project initialization.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "Project Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "Project Description" + }, + "project_lead": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "default_assignee": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "identifier": { + "type": "string", + "minLength": 1, + "title": "Project Identifier", + "maxLength": 12 + }, + "icon_prop": { + "nullable": true + }, + "emoji": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "cover_image": { + "type": "string", + "nullable": true + }, + "module_view": { + "type": "boolean" + }, + "cycle_view": { + "type": "boolean" + }, + "issue_views_view": { + "type": "boolean" + }, + "page_view": { + "type": "boolean" + }, + "intake_view": { + "type": "boolean" + }, + "guest_view_all_features": { + "type": "boolean" + }, + "archive_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "close_in": { + "type": "integer", + "maximum": 12, + "minimum": 0 + }, + "timezone": { + "$ref": "#/components/schemas/TimezoneEnum" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "is_issue_type_enabled": { + "type": "boolean" + }, + "is_time_tracking_enabled": { + "type": "boolean" + } + }, + "required": [ + "identifier", + "name" + ] + }, + "ProjectLite": { + "type": "object", + "description": "Lightweight project serializer for minimal data transfer.\n\nProvides essential project information including identifiers, visual properties,\nand basic metadata optimized for list views and references.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "identifier": { + "type": "string", + "readOnly": true, + "title": "Project Identifier" + }, + "name": { + "type": "string", + "readOnly": true, + "title": "Project Name" + }, + "cover_image": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "icon_prop": { + "readOnly": true, + "nullable": true + }, + "emoji": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "title": "Project Description" + }, + "cover_image_url": { + "type": "string", + "readOnly": true + }, + "archived_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + } + } + }, + "ProjectMember": { + "type": "object", + "description": "Serializer for project members.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "member": { + "type": "string", + "format": "uuid" + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + } + }, + "required": [ + "member" + ] + }, + "ProjectMemberLiteAPI": { + "type": "object", + "description": "Minimal ProjectMember representation for paginated member pickers/directories.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "first_name": { + "type": "string", + "readOnly": true + }, + "last_name": { + "type": "string", + "readOnly": true + }, + "email": { + "type": "string", + "format": "email", + "readOnly": true + }, + "avatar": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "avatar_url": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "display_name": { + "type": "string", + "readOnly": true + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "readOnly": true + }, + "is_active": { + "type": "boolean", + "readOnly": true + }, + "is_bot": { + "type": "boolean", + "readOnly": true + } + } + }, + "ProjectMemberRequest": { + "type": "object", + "description": "Serializer for project members.", + "properties": { + "member": { + "type": "string", + "format": "uuid" + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + } + }, + "required": [ + "member" + ] + }, + "RelationTypeEnum": { + "enum": [ + "blocking", + "blocked_by", + "duplicate", + "relates_to", + "start_before", + "start_after", + "finish_before", + "finish_after" + ], + "type": "string", + "description": "* `blocking` - Blocking\n* `blocked_by` - Blocked By\n* `duplicate` - Duplicate\n* `relates_to` - Relates To\n* `start_before` - Start Before\n* `start_after` - Start After\n* `finish_before` - Finish Before\n* `finish_after` - Finish After" + }, + "RoleEnum": { + "enum": [ + 20, + 15, + 5 + ], + "type": "integer", + "description": "* `20` - Admin\n* `15` - Member\n* `5` - Guest" + }, + "State": { + "type": "object", + "description": "Serializer for work item states with default state management.\n\nHandles state creation and updates including default state validation\nand automatic default state switching for workflow management.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "title": "State Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "State Description" + }, + "color": { + "type": "string", + "title": "State Color", + "maxLength": 255 + }, + "slug": { + "type": "string", + "readOnly": true, + "pattern": "^[-a-zA-Z0-9_]+$" + }, + "sequence": { + "type": "number", + "format": "double" + }, + "group": { + "$ref": "#/components/schemas/GroupEnum" + }, + "is_triage": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "created_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "readOnly": true, + "nullable": true, + "title": "Last Modified By" + }, + "project": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "workspace": { + "type": "string", + "format": "uuid", + "readOnly": true + } + }, + "required": [ + "color", + "name" + ] + }, + "StateLite": { + "type": "object", + "description": "Lightweight state serializer for minimal data transfer.\n\nProvides essential state information including visual properties\nand grouping data optimized for UI display and filtering.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true, + "title": "State Name" + }, + "color": { + "type": "string", + "readOnly": true, + "title": "State Color" + }, + "group": { + "allOf": [ + { + "$ref": "#/components/schemas/GroupEnum" + } + ], + "readOnly": true + } + } + }, + "StateRequest": { + "type": "object", + "description": "Serializer for work item states with default state management.\n\nHandles state creation and updates including default state validation\nand automatic default state switching for workflow management.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "title": "State Name", + "maxLength": 255 + }, + "description": { + "type": "string", + "title": "State Description" + }, + "color": { + "type": "string", + "minLength": 1, + "title": "State Color", + "maxLength": 255 + }, + "sequence": { + "type": "number", + "format": "double" + }, + "group": { + "$ref": "#/components/schemas/GroupEnum" + }, + "is_triage": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "external_source": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "external_id": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + }, + "required": [ + "color", + "name" + ] + }, + "Sticky": { + "type": "object", + "properties": { + "grouped_by": { + "type": "string", + "nullable": true + }, + "sub_grouped_by": { + "type": "string", + "nullable": true + }, + "total_count": { + "type": "integer" + }, + "next_cursor": { + "type": "string" + }, + "prev_cursor": { + "type": "string" + }, + "next_page_results": { + "type": "boolean" + }, + "prev_page_results": { + "type": "boolean" + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "extra_stats": { + "type": "string", + "nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Sticky" + } + } + }, + "required": [ + "count", + "extra_stats", + "grouped_by", + "next_cursor", + "next_page_results", + "prev_cursor", + "prev_page_results", + "results", + "sub_grouped_by", + "total_count", + "total_pages", + "total_results" + ] + }, + "StickyRequest": { + "type": "object", + "description": "Base serializer providing common functionality for all model serializers.\n\nFeatures field filtering, dynamic expansion of related fields, and standardized\nprimary key handling for consistent API responses across the application.", + "properties": { + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": {}, + "description_html": { + "type": "string" + }, + "description_stripped": { + "type": "string", + "nullable": true + }, + "logo_props": {}, + "color": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "background_color": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "sort_order": { + "type": "number", + "format": "double" + }, + "created_by": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated_by": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Last Modified By" + } + } + }, + "TimezoneEnum": { + "enum": [ + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Fort_Nelson", + "America/Fortaleza", + "America/Glace_Bay", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Colombo", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kathmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Riyadh", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ulaanbaatar", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faroe", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/Perth", + "Australia/Sydney", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Ulyanovsk", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zurich", + "GMT", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Wake", + "Pacific/Wallis", + "US/Alaska", + "US/Arizona", + "US/Central", + "US/Eastern", + "US/Hawaii", + "US/Mountain", + "US/Pacific", + "UTC" + ], + "type": "string", + "description": "* `Africa/Abidjan` - Africa/Abidjan\n* `Africa/Accra` - Africa/Accra\n* `Africa/Addis_Ababa` - Africa/Addis_Ababa\n* `Africa/Algiers` - Africa/Algiers\n* `Africa/Asmara` - Africa/Asmara\n* `Africa/Bamako` - Africa/Bamako\n* `Africa/Bangui` - Africa/Bangui\n* `Africa/Banjul` - Africa/Banjul\n* `Africa/Bissau` - Africa/Bissau\n* `Africa/Blantyre` - Africa/Blantyre\n* `Africa/Brazzaville` - Africa/Brazzaville\n* `Africa/Bujumbura` - Africa/Bujumbura\n* `Africa/Cairo` - Africa/Cairo\n* `Africa/Casablanca` - Africa/Casablanca\n* `Africa/Ceuta` - Africa/Ceuta\n* `Africa/Conakry` - Africa/Conakry\n* `Africa/Dakar` - Africa/Dakar\n* `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam\n* `Africa/Djibouti` - Africa/Djibouti\n* `Africa/Douala` - Africa/Douala\n* `Africa/El_Aaiun` - Africa/El_Aaiun\n* `Africa/Freetown` - Africa/Freetown\n* `Africa/Gaborone` - Africa/Gaborone\n* `Africa/Harare` - Africa/Harare\n* `Africa/Johannesburg` - Africa/Johannesburg\n* `Africa/Juba` - Africa/Juba\n* `Africa/Kampala` - Africa/Kampala\n* `Africa/Khartoum` - Africa/Khartoum\n* `Africa/Kigali` - Africa/Kigali\n* `Africa/Kinshasa` - Africa/Kinshasa\n* `Africa/Lagos` - Africa/Lagos\n* `Africa/Libreville` - Africa/Libreville\n* `Africa/Lome` - Africa/Lome\n* `Africa/Luanda` - Africa/Luanda\n* `Africa/Lubumbashi` - Africa/Lubumbashi\n* `Africa/Lusaka` - Africa/Lusaka\n* `Africa/Malabo` - Africa/Malabo\n* `Africa/Maputo` - Africa/Maputo\n* `Africa/Maseru` - Africa/Maseru\n* `Africa/Mbabane` - Africa/Mbabane\n* `Africa/Mogadishu` - Africa/Mogadishu\n* `Africa/Monrovia` - Africa/Monrovia\n* `Africa/Nairobi` - Africa/Nairobi\n* `Africa/Ndjamena` - Africa/Ndjamena\n* `Africa/Niamey` - Africa/Niamey\n* `Africa/Nouakchott` - Africa/Nouakchott\n* `Africa/Ouagadougou` - Africa/Ouagadougou\n* `Africa/Porto-Novo` - Africa/Porto-Novo\n* `Africa/Sao_Tome` - Africa/Sao_Tome\n* `Africa/Tripoli` - Africa/Tripoli\n* `Africa/Tunis` - Africa/Tunis\n* `Africa/Windhoek` - Africa/Windhoek\n* `America/Adak` - America/Adak\n* `America/Anchorage` - America/Anchorage\n* `America/Anguilla` - America/Anguilla\n* `America/Antigua` - America/Antigua\n* `America/Araguaina` - America/Araguaina\n* `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires\n* `America/Argentina/Catamarca` - America/Argentina/Catamarca\n* `America/Argentina/Cordoba` - America/Argentina/Cordoba\n* `America/Argentina/Jujuy` - America/Argentina/Jujuy\n* `America/Argentina/La_Rioja` - America/Argentina/La_Rioja\n* `America/Argentina/Mendoza` - America/Argentina/Mendoza\n* `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos\n* `America/Argentina/Salta` - America/Argentina/Salta\n* `America/Argentina/San_Juan` - America/Argentina/San_Juan\n* `America/Argentina/San_Luis` - America/Argentina/San_Luis\n* `America/Argentina/Tucuman` - America/Argentina/Tucuman\n* `America/Argentina/Ushuaia` - America/Argentina/Ushuaia\n* `America/Aruba` - America/Aruba\n* `America/Asuncion` - America/Asuncion\n* `America/Atikokan` - America/Atikokan\n* `America/Bahia` - America/Bahia\n* `America/Bahia_Banderas` - America/Bahia_Banderas\n* `America/Barbados` - America/Barbados\n* `America/Belem` - America/Belem\n* `America/Belize` - America/Belize\n* `America/Blanc-Sablon` - America/Blanc-Sablon\n* `America/Boa_Vista` - America/Boa_Vista\n* `America/Bogota` - America/Bogota\n* `America/Boise` - America/Boise\n* `America/Cambridge_Bay` - America/Cambridge_Bay\n* `America/Campo_Grande` - America/Campo_Grande\n* `America/Cancun` - America/Cancun\n* `America/Caracas` - America/Caracas\n* `America/Cayenne` - America/Cayenne\n* `America/Cayman` - America/Cayman\n* `America/Chicago` - America/Chicago\n* `America/Chihuahua` - America/Chihuahua\n* `America/Ciudad_Juarez` - America/Ciudad_Juarez\n* `America/Costa_Rica` - America/Costa_Rica\n* `America/Creston` - America/Creston\n* `America/Cuiaba` - America/Cuiaba\n* `America/Curacao` - America/Curacao\n* `America/Danmarkshavn` - America/Danmarkshavn\n* `America/Dawson` - America/Dawson\n* `America/Dawson_Creek` - America/Dawson_Creek\n* `America/Denver` - America/Denver\n* `America/Detroit` - America/Detroit\n* `America/Dominica` - America/Dominica\n* `America/Edmonton` - America/Edmonton\n* `America/Eirunepe` - America/Eirunepe\n* `America/El_Salvador` - America/El_Salvador\n* `America/Fort_Nelson` - America/Fort_Nelson\n* `America/Fortaleza` - America/Fortaleza\n* `America/Glace_Bay` - America/Glace_Bay\n* `America/Goose_Bay` - America/Goose_Bay\n* `America/Grand_Turk` - America/Grand_Turk\n* `America/Grenada` - America/Grenada\n* `America/Guadeloupe` - America/Guadeloupe\n* `America/Guatemala` - America/Guatemala\n* `America/Guayaquil` - America/Guayaquil\n* `America/Guyana` - America/Guyana\n* `America/Halifax` - America/Halifax\n* `America/Havana` - America/Havana\n* `America/Hermosillo` - America/Hermosillo\n* `America/Indiana/Indianapolis` - America/Indiana/Indianapolis\n* `America/Indiana/Knox` - America/Indiana/Knox\n* `America/Indiana/Marengo` - America/Indiana/Marengo\n* `America/Indiana/Petersburg` - America/Indiana/Petersburg\n* `America/Indiana/Tell_City` - America/Indiana/Tell_City\n* `America/Indiana/Vevay` - America/Indiana/Vevay\n* `America/Indiana/Vincennes` - America/Indiana/Vincennes\n* `America/Indiana/Winamac` - America/Indiana/Winamac\n* `America/Inuvik` - America/Inuvik\n* `America/Iqaluit` - America/Iqaluit\n* `America/Jamaica` - America/Jamaica\n* `America/Juneau` - America/Juneau\n* `America/Kentucky/Louisville` - America/Kentucky/Louisville\n* `America/Kentucky/Monticello` - America/Kentucky/Monticello\n* `America/Kralendijk` - America/Kralendijk\n* `America/La_Paz` - America/La_Paz\n* `America/Lima` - America/Lima\n* `America/Los_Angeles` - America/Los_Angeles\n* `America/Lower_Princes` - America/Lower_Princes\n* `America/Maceio` - America/Maceio\n* `America/Managua` - America/Managua\n* `America/Manaus` - America/Manaus\n* `America/Marigot` - America/Marigot\n* `America/Martinique` - America/Martinique\n* `America/Matamoros` - America/Matamoros\n* `America/Mazatlan` - America/Mazatlan\n* `America/Menominee` - America/Menominee\n* `America/Merida` - America/Merida\n* `America/Metlakatla` - America/Metlakatla\n* `America/Mexico_City` - America/Mexico_City\n* `America/Miquelon` - America/Miquelon\n* `America/Moncton` - America/Moncton\n* `America/Monterrey` - America/Monterrey\n* `America/Montevideo` - America/Montevideo\n* `America/Montserrat` - America/Montserrat\n* `America/Nassau` - America/Nassau\n* `America/New_York` - America/New_York\n* `America/Nome` - America/Nome\n* `America/Noronha` - America/Noronha\n* `America/North_Dakota/Beulah` - America/North_Dakota/Beulah\n* `America/North_Dakota/Center` - America/North_Dakota/Center\n* `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem\n* `America/Nuuk` - America/Nuuk\n* `America/Ojinaga` - America/Ojinaga\n* `America/Panama` - America/Panama\n* `America/Paramaribo` - America/Paramaribo\n* `America/Phoenix` - America/Phoenix\n* `America/Port-au-Prince` - America/Port-au-Prince\n* `America/Port_of_Spain` - America/Port_of_Spain\n* `America/Porto_Velho` - America/Porto_Velho\n* `America/Puerto_Rico` - America/Puerto_Rico\n* `America/Punta_Arenas` - America/Punta_Arenas\n* `America/Rankin_Inlet` - America/Rankin_Inlet\n* `America/Recife` - America/Recife\n* `America/Regina` - America/Regina\n* `America/Resolute` - America/Resolute\n* `America/Rio_Branco` - America/Rio_Branco\n* `America/Santarem` - America/Santarem\n* `America/Santiago` - America/Santiago\n* `America/Santo_Domingo` - America/Santo_Domingo\n* `America/Sao_Paulo` - America/Sao_Paulo\n* `America/Scoresbysund` - America/Scoresbysund\n* `America/Sitka` - America/Sitka\n* `America/St_Barthelemy` - America/St_Barthelemy\n* `America/St_Johns` - America/St_Johns\n* `America/St_Kitts` - America/St_Kitts\n* `America/St_Lucia` - America/St_Lucia\n* `America/St_Thomas` - America/St_Thomas\n* `America/St_Vincent` - America/St_Vincent\n* `America/Swift_Current` - America/Swift_Current\n* `America/Tegucigalpa` - America/Tegucigalpa\n* `America/Thule` - America/Thule\n* `America/Tijuana` - America/Tijuana\n* `America/Toronto` - America/Toronto\n* `America/Tortola` - America/Tortola\n* `America/Vancouver` - America/Vancouver\n* `America/Whitehorse` - America/Whitehorse\n* `America/Winnipeg` - America/Winnipeg\n* `America/Yakutat` - America/Yakutat\n* `Antarctica/Casey` - Antarctica/Casey\n* `Antarctica/Davis` - Antarctica/Davis\n* `Antarctica/DumontDUrville` - Antarctica/DumontDUrville\n* `Antarctica/Macquarie` - Antarctica/Macquarie\n* `Antarctica/Mawson` - Antarctica/Mawson\n* `Antarctica/McMurdo` - Antarctica/McMurdo\n* `Antarctica/Palmer` - Antarctica/Palmer\n* `Antarctica/Rothera` - Antarctica/Rothera\n* `Antarctica/Syowa` - Antarctica/Syowa\n* `Antarctica/Troll` - Antarctica/Troll\n* `Antarctica/Vostok` - Antarctica/Vostok\n* `Arctic/Longyearbyen` - Arctic/Longyearbyen\n* `Asia/Aden` - Asia/Aden\n* `Asia/Almaty` - Asia/Almaty\n* `Asia/Amman` - Asia/Amman\n* `Asia/Anadyr` - Asia/Anadyr\n* `Asia/Aqtau` - Asia/Aqtau\n* `Asia/Aqtobe` - Asia/Aqtobe\n* `Asia/Ashgabat` - Asia/Ashgabat\n* `Asia/Atyrau` - Asia/Atyrau\n* `Asia/Baghdad` - Asia/Baghdad\n* `Asia/Bahrain` - Asia/Bahrain\n* `Asia/Baku` - Asia/Baku\n* `Asia/Bangkok` - Asia/Bangkok\n* `Asia/Barnaul` - Asia/Barnaul\n* `Asia/Beirut` - Asia/Beirut\n* `Asia/Bishkek` - Asia/Bishkek\n* `Asia/Brunei` - Asia/Brunei\n* `Asia/Chita` - Asia/Chita\n* `Asia/Choibalsan` - Asia/Choibalsan\n* `Asia/Colombo` - Asia/Colombo\n* `Asia/Damascus` - Asia/Damascus\n* `Asia/Dhaka` - Asia/Dhaka\n* `Asia/Dili` - Asia/Dili\n* `Asia/Dubai` - Asia/Dubai\n* `Asia/Dushanbe` - Asia/Dushanbe\n* `Asia/Famagusta` - Asia/Famagusta\n* `Asia/Gaza` - Asia/Gaza\n* `Asia/Hebron` - Asia/Hebron\n* `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh\n* `Asia/Hong_Kong` - Asia/Hong_Kong\n* `Asia/Hovd` - Asia/Hovd\n* `Asia/Irkutsk` - Asia/Irkutsk\n* `Asia/Jakarta` - Asia/Jakarta\n* `Asia/Jayapura` - Asia/Jayapura\n* `Asia/Jerusalem` - Asia/Jerusalem\n* `Asia/Kabul` - Asia/Kabul\n* `Asia/Kamchatka` - Asia/Kamchatka\n* `Asia/Karachi` - Asia/Karachi\n* `Asia/Kathmandu` - Asia/Kathmandu\n* `Asia/Khandyga` - Asia/Khandyga\n* `Asia/Kolkata` - Asia/Kolkata\n* `Asia/Krasnoyarsk` - Asia/Krasnoyarsk\n* `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur\n* `Asia/Kuching` - Asia/Kuching\n* `Asia/Kuwait` - Asia/Kuwait\n* `Asia/Macau` - Asia/Macau\n* `Asia/Magadan` - Asia/Magadan\n* `Asia/Makassar` - Asia/Makassar\n* `Asia/Manila` - Asia/Manila\n* `Asia/Muscat` - Asia/Muscat\n* `Asia/Nicosia` - Asia/Nicosia\n* `Asia/Novokuznetsk` - Asia/Novokuznetsk\n* `Asia/Novosibirsk` - Asia/Novosibirsk\n* `Asia/Omsk` - Asia/Omsk\n* `Asia/Oral` - Asia/Oral\n* `Asia/Phnom_Penh` - Asia/Phnom_Penh\n* `Asia/Pontianak` - Asia/Pontianak\n* `Asia/Pyongyang` - Asia/Pyongyang\n* `Asia/Qatar` - Asia/Qatar\n* `Asia/Qostanay` - Asia/Qostanay\n* `Asia/Qyzylorda` - Asia/Qyzylorda\n* `Asia/Riyadh` - Asia/Riyadh\n* `Asia/Sakhalin` - Asia/Sakhalin\n* `Asia/Samarkand` - Asia/Samarkand\n* `Asia/Seoul` - Asia/Seoul\n* `Asia/Shanghai` - Asia/Shanghai\n* `Asia/Singapore` - Asia/Singapore\n* `Asia/Srednekolymsk` - Asia/Srednekolymsk\n* `Asia/Taipei` - Asia/Taipei\n* `Asia/Tashkent` - Asia/Tashkent\n* `Asia/Tbilisi` - Asia/Tbilisi\n* `Asia/Tehran` - Asia/Tehran\n* `Asia/Thimphu` - Asia/Thimphu\n* `Asia/Tokyo` - Asia/Tokyo\n* `Asia/Tomsk` - Asia/Tomsk\n* `Asia/Ulaanbaatar` - Asia/Ulaanbaatar\n* `Asia/Urumqi` - Asia/Urumqi\n* `Asia/Ust-Nera` - Asia/Ust-Nera\n* `Asia/Vientiane` - Asia/Vientiane\n* `Asia/Vladivostok` - Asia/Vladivostok\n* `Asia/Yakutsk` - Asia/Yakutsk\n* `Asia/Yangon` - Asia/Yangon\n* `Asia/Yekaterinburg` - Asia/Yekaterinburg\n* `Asia/Yerevan` - Asia/Yerevan\n* `Atlantic/Azores` - Atlantic/Azores\n* `Atlantic/Bermuda` - Atlantic/Bermuda\n* `Atlantic/Canary` - Atlantic/Canary\n* `Atlantic/Cape_Verde` - Atlantic/Cape_Verde\n* `Atlantic/Faroe` - Atlantic/Faroe\n* `Atlantic/Madeira` - Atlantic/Madeira\n* `Atlantic/Reykjavik` - Atlantic/Reykjavik\n* `Atlantic/South_Georgia` - Atlantic/South_Georgia\n* `Atlantic/St_Helena` - Atlantic/St_Helena\n* `Atlantic/Stanley` - Atlantic/Stanley\n* `Australia/Adelaide` - Australia/Adelaide\n* `Australia/Brisbane` - Australia/Brisbane\n* `Australia/Broken_Hill` - Australia/Broken_Hill\n* `Australia/Darwin` - Australia/Darwin\n* `Australia/Eucla` - Australia/Eucla\n* `Australia/Hobart` - Australia/Hobart\n* `Australia/Lindeman` - Australia/Lindeman\n* `Australia/Lord_Howe` - Australia/Lord_Howe\n* `Australia/Melbourne` - Australia/Melbourne\n* `Australia/Perth` - Australia/Perth\n* `Australia/Sydney` - Australia/Sydney\n* `Canada/Atlantic` - Canada/Atlantic\n* `Canada/Central` - Canada/Central\n* `Canada/Eastern` - Canada/Eastern\n* `Canada/Mountain` - Canada/Mountain\n* `Canada/Newfoundland` - Canada/Newfoundland\n* `Canada/Pacific` - Canada/Pacific\n* `Europe/Amsterdam` - Europe/Amsterdam\n* `Europe/Andorra` - Europe/Andorra\n* `Europe/Astrakhan` - Europe/Astrakhan\n* `Europe/Athens` - Europe/Athens\n* `Europe/Belgrade` - Europe/Belgrade\n* `Europe/Berlin` - Europe/Berlin\n* `Europe/Bratislava` - Europe/Bratislava\n* `Europe/Brussels` - Europe/Brussels\n* `Europe/Bucharest` - Europe/Bucharest\n* `Europe/Budapest` - Europe/Budapest\n* `Europe/Busingen` - Europe/Busingen\n* `Europe/Chisinau` - Europe/Chisinau\n* `Europe/Copenhagen` - Europe/Copenhagen\n* `Europe/Dublin` - Europe/Dublin\n* `Europe/Gibraltar` - Europe/Gibraltar\n* `Europe/Guernsey` - Europe/Guernsey\n* `Europe/Helsinki` - Europe/Helsinki\n* `Europe/Isle_of_Man` - Europe/Isle_of_Man\n* `Europe/Istanbul` - Europe/Istanbul\n* `Europe/Jersey` - Europe/Jersey\n* `Europe/Kaliningrad` - Europe/Kaliningrad\n* `Europe/Kirov` - Europe/Kirov\n* `Europe/Kyiv` - Europe/Kyiv\n* `Europe/Lisbon` - Europe/Lisbon\n* `Europe/Ljubljana` - Europe/Ljubljana\n* `Europe/London` - Europe/London\n* `Europe/Luxembourg` - Europe/Luxembourg\n* `Europe/Madrid` - Europe/Madrid\n* `Europe/Malta` - Europe/Malta\n* `Europe/Mariehamn` - Europe/Mariehamn\n* `Europe/Minsk` - Europe/Minsk\n* `Europe/Monaco` - Europe/Monaco\n* `Europe/Moscow` - Europe/Moscow\n* `Europe/Oslo` - Europe/Oslo\n* `Europe/Paris` - Europe/Paris\n* `Europe/Podgorica` - Europe/Podgorica\n* `Europe/Prague` - Europe/Prague\n* `Europe/Riga` - Europe/Riga\n* `Europe/Rome` - Europe/Rome\n* `Europe/Samara` - Europe/Samara\n* `Europe/San_Marino` - Europe/San_Marino\n* `Europe/Sarajevo` - Europe/Sarajevo\n* `Europe/Saratov` - Europe/Saratov\n* `Europe/Simferopol` - Europe/Simferopol\n* `Europe/Skopje` - Europe/Skopje\n* `Europe/Sofia` - Europe/Sofia\n* `Europe/Stockholm` - Europe/Stockholm\n* `Europe/Tallinn` - Europe/Tallinn\n* `Europe/Tirane` - Europe/Tirane\n* `Europe/Ulyanovsk` - Europe/Ulyanovsk\n* `Europe/Vaduz` - Europe/Vaduz\n* `Europe/Vatican` - Europe/Vatican\n* `Europe/Vienna` - Europe/Vienna\n* `Europe/Vilnius` - Europe/Vilnius\n* `Europe/Volgograd` - Europe/Volgograd\n* `Europe/Warsaw` - Europe/Warsaw\n* `Europe/Zagreb` - Europe/Zagreb\n* `Europe/Zurich` - Europe/Zurich\n* `GMT` - GMT\n* `Indian/Antananarivo` - Indian/Antananarivo\n* `Indian/Chagos` - Indian/Chagos\n* `Indian/Christmas` - Indian/Christmas\n* `Indian/Cocos` - Indian/Cocos\n* `Indian/Comoro` - Indian/Comoro\n* `Indian/Kerguelen` - Indian/Kerguelen\n* `Indian/Mahe` - Indian/Mahe\n* `Indian/Maldives` - Indian/Maldives\n* `Indian/Mauritius` - Indian/Mauritius\n* `Indian/Mayotte` - Indian/Mayotte\n* `Indian/Reunion` - Indian/Reunion\n* `Pacific/Apia` - Pacific/Apia\n* `Pacific/Auckland` - Pacific/Auckland\n* `Pacific/Bougainville` - Pacific/Bougainville\n* `Pacific/Chatham` - Pacific/Chatham\n* `Pacific/Chuuk` - Pacific/Chuuk\n* `Pacific/Easter` - Pacific/Easter\n* `Pacific/Efate` - Pacific/Efate\n* `Pacific/Fakaofo` - Pacific/Fakaofo\n* `Pacific/Fiji` - Pacific/Fiji\n* `Pacific/Funafuti` - Pacific/Funafuti\n* `Pacific/Galapagos` - Pacific/Galapagos\n* `Pacific/Gambier` - Pacific/Gambier\n* `Pacific/Guadalcanal` - Pacific/Guadalcanal\n* `Pacific/Guam` - Pacific/Guam\n* `Pacific/Honolulu` - Pacific/Honolulu\n* `Pacific/Kanton` - Pacific/Kanton\n* `Pacific/Kiritimati` - Pacific/Kiritimati\n* `Pacific/Kosrae` - Pacific/Kosrae\n* `Pacific/Kwajalein` - Pacific/Kwajalein\n* `Pacific/Majuro` - Pacific/Majuro\n* `Pacific/Marquesas` - Pacific/Marquesas\n* `Pacific/Midway` - Pacific/Midway\n* `Pacific/Nauru` - Pacific/Nauru\n* `Pacific/Niue` - Pacific/Niue\n* `Pacific/Norfolk` - Pacific/Norfolk\n* `Pacific/Noumea` - Pacific/Noumea\n* `Pacific/Pago_Pago` - Pacific/Pago_Pago\n* `Pacific/Palau` - Pacific/Palau\n* `Pacific/Pitcairn` - Pacific/Pitcairn\n* `Pacific/Pohnpei` - Pacific/Pohnpei\n* `Pacific/Port_Moresby` - Pacific/Port_Moresby\n* `Pacific/Rarotonga` - Pacific/Rarotonga\n* `Pacific/Saipan` - Pacific/Saipan\n* `Pacific/Tahiti` - Pacific/Tahiti\n* `Pacific/Tarawa` - Pacific/Tarawa\n* `Pacific/Tongatapu` - Pacific/Tongatapu\n* `Pacific/Wake` - Pacific/Wake\n* `Pacific/Wallis` - Pacific/Wallis\n* `US/Alaska` - US/Alaska\n* `US/Arizona` - US/Arizona\n* `US/Central` - US/Central\n* `US/Eastern` - US/Eastern\n* `US/Hawaii` - US/Hawaii\n* `US/Mountain` - US/Mountain\n* `US/Pacific` - US/Pacific\n* `UTC` - UTC" + }, + "TransferCycleIssueRequestRequest": { + "type": "object", + "description": "Serializer for transferring work items between cycles.\n\nHandles work item migration between cycles including validation\nand relationship updates for sprint reallocation workflows.", + "properties": { + "new_cycle_id": { + "type": "string", + "format": "uuid", + "description": "ID of the target cycle to transfer issues to" + } + }, + "required": [ + "new_cycle_id" + ] + }, + "TypeEnum": { + "enum": [ + "image/jpeg", + "image/png", + "image/webp", + "image/jpg", + "image/gif" + ], + "type": "string", + "description": "* `image/jpeg` - JPEG\n* `image/png` - PNG\n* `image/webp` - WebP\n* `image/jpg` - JPG\n* `image/gif` - GIF" + }, + "UserAssetUploadRequest": { + "type": "object", + "description": "Serializer for user asset upload requests.\n\nThis serializer validates the metadata required to generate a presigned URL\nfor uploading user profile assets (avatar or cover image) directly to S3 storage.\nSupports JPEG, PNG, WebP, JPG, and GIF image formats with size validation.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Original filename of the asset" + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/TypeEnum" + } + ], + "default": "image/jpeg", + "description": "MIME type of the file\n\n* `image/jpeg` - JPEG\n* `image/png` - PNG\n* `image/webp` - WebP\n* `image/jpg` - JPG\n* `image/gif` - GIF" + }, + "size": { + "type": "integer", + "description": "File size in bytes" + }, + "entity_type": { + "allOf": [ + { + "$ref": "#/components/schemas/EntityTypeEnum" + } + ], + "description": "Type of user asset\n\n* `USER_AVATAR` - User Avatar\n* `USER_COVER` - User Cover" + } + }, + "required": [ + "entity_type", + "name", + "size" + ] + }, + "UserLite": { + "type": "object", + "description": "Lightweight user serializer for minimal data transfer.\n\nProvides essential user information including names, avatar, and contact details\noptimized for member lists, assignee displays, and user references.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "first_name": { + "type": "string", + "readOnly": true + }, + "last_name": { + "type": "string", + "readOnly": true + }, + "email": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "avatar": { + "type": "string", + "readOnly": true + }, + "avatar_url": { + "type": "string", + "readOnly": true, + "description": "Avatar URL" + }, + "display_name": { + "type": "string", + "readOnly": true + } + } + }, + "WorkspaceInvite": { + "type": "object", + "description": "Serializer for workspace invites.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "email": { + "type": "string", + "maxLength": 255 + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "title": "Last Modified At" + }, + "responded_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true + }, + "accepted": { + "type": "boolean", + "readOnly": true + } + }, + "required": [ + "email" + ] + }, + "WorkspaceInviteRequest": { + "type": "object", + "description": "Serializer for workspace invites.", + "properties": { + "email": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "minimum": 0, + "maximum": 32767 + } + }, + "required": [ + "email" + ] + }, + "WorkspaceMemberLiteAPI": { + "type": "object", + "description": "Minimal WorkspaceMember representation for paginated member pickers/directories.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "readOnly": true + }, + "first_name": { + "type": "string", + "readOnly": true + }, + "last_name": { + "type": "string", + "readOnly": true + }, + "email": { + "type": "string", + "format": "email", + "readOnly": true + }, + "avatar": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "avatar_url": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "display_name": { + "type": "string", + "readOnly": true + }, + "role": { + "allOf": [ + { + "$ref": "#/components/schemas/RoleEnum" + } + ], + "readOnly": true + }, + "is_active": { + "type": "boolean", + "readOnly": true + }, + "is_bot": { + "type": "boolean", + "readOnly": true + } + } + } + }, + "securitySchemes": { + "ApiKeyAuthentication": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key", + "description": "API key authentication. Provide your API key in the X-API-Key header." + } + } + }, + "servers": [ + { + "url": "https://api.plane.so", + "description": "Production" + }, + { + "url": "http://localhost:8000", + "description": "Local" + } + ], + "tags": [ + { + "name": "Assets", + "description": "**File Upload & Presigned URLs**\n\nGenerate presigned URLs for direct file uploads to cloud storage. Handle user avatars, cover images, and generic project assets with secure upload workflows.\n\n*Key Features:*\n- Generate presigned URLs for S3 uploads\n- Support for user avatars and cover images\n- Generic asset upload for projects\n- File validation and size limits\n\n*Use Cases:* User profile images, project file uploads, secure direct-to-cloud uploads." + }, + { + "name": "Cycles", + "description": "**Sprint & Development Cycles**\n\nCreate and manage development cycles (sprints) to organize work into time-boxed iterations. Track progress, assign work items, and monitor team velocity.\n\n*Key Features:*\n- Create and configure development cycles\n- Assign work items to cycles\n- Track cycle progress and completion\n- Generate cycle analytics and reports\n\n*Use Cases:* Sprint planning, iterative development, progress tracking, team velocity." + }, + { + "name": "Intake", + "description": "**Work Item Intake Queue**\n\nManage incoming work items through a dedicated intake queue for triage and review. Submit, update, and process work items before they enter the main project workflow.\n\n*Key Features:*\n- Submit work items to intake queue\n- Review and triage incoming work items\n- Update intake work item status and properties\n- Accept, reject, or modify work items before approval\n\n*Use Cases:* Work item triage, external submissions, quality review, approval workflows." + }, + { + "name": "Labels", + "description": "**Labels & Tags**\n\nCreate and manage labels to categorize and organize work items. Use color-coded labels for easy identification, filtering, and project organization.\n\n*Key Features:*\n- Create custom labels with colors and descriptions\n- Apply labels to work items for categorization\n- Filter and search by labels\n- Organize labels across projects\n\n*Use Cases:* Priority marking, feature categorization, bug classification, team organization." + }, + { + "name": "Members", + "description": "**Team Member Management**\n\nManage team members, roles, and permissions within projects and workspaces. Control access levels and track member participation.\n\n*Key Features:*\n- Invite and manage team members\n- Assign roles and permissions\n- Control project and workspace access\n- Track member activity and participation\n\n*Use Cases:* Team setup, access control, role management, collaboration." + }, + { + "name": "Modules", + "description": "**Feature Modules**\n\nGroup related work items into modules for better organization and tracking. Plan features, track progress, and manage deliverables at a higher level.\n\n*Key Features:*\n- Create and organize feature modules\n- Group work items by module\n- Track module progress and completion\n- Manage module leads and assignments\n\n*Use Cases:* Feature planning, release organization, progress tracking, team coordination." + }, + { + "name": "Projects", + "description": "**Project Management**\n\nCreate and manage projects to organize your development work. Configure project settings, manage team access, and control project visibility.\n\n*Key Features:*\n- Create, update, and delete projects\n- Configure project settings and preferences\n- Manage team access and permissions\n- Control project visibility and sharing\n\n*Use Cases:* Project setup, team collaboration, access control, project configuration." + }, + { + "name": "States", + "description": "**Workflow States**\n\nDefine custom workflow states for work items to match your team's process. Configure state transitions and track work item progress through different stages.\n\n*Key Features:*\n- Create custom workflow states\n- Configure state transitions and rules\n- Track work item progress through states\n- Set state-based permissions and automation\n\n*Use Cases:* Custom workflows, status tracking, process automation, progress monitoring." + }, + { + "name": "Users", + "description": "**Current User Information**\n\nGet information about the currently authenticated user including profile details and account settings.\n\n*Key Features:*\n- Retrieve current user profile\n- Access user account information\n- View user preferences and settings\n- Get authentication context\n\n*Use Cases:* Profile display, user context, account information, authentication status." + }, + { + "name": "Work Item Activity", + "description": "**Activity History & Search**\n\nView activity history and search for work items across the workspace. Get detailed activity logs and find work items using text search.\n\n*Key Features:*\n- View work item activity history\n- Search work items across workspace\n- Track changes and modifications\n- Filter search results by project\n\n*Use Cases:* Activity tracking, work item discovery, change history, workspace search." + }, + { + "name": "Work Item Attachments", + "description": "**Work Item File Attachments**\n\nGenerate presigned URLs for uploading files directly to specific work items. Upload and manage attachments associated with work items.\n\n*Key Features:*\n- Generate presigned URLs for work item attachments\n- Upload files directly to work items\n- Retrieve and manage attachment metadata\n- Delete attachments from work items\n\n*Use Cases:* Screenshots, error logs, design files, supporting documents." + }, + { + "name": "Work Item Comments", + "description": "**Comments & Discussions**\n\nAdd comments and discussions to work items for team collaboration. Support threaded conversations, mentions, and rich text formatting.\n\n*Key Features:*\n- Add comments to work items\n- Thread conversations and replies\n- Mention users and trigger notifications\n- Rich text and markdown support\n\n*Use Cases:* Team discussions, progress updates, code reviews, decision tracking." + }, + { + "name": "Work Item Links", + "description": "**External Links & References**\n\nLink work items to external resources like documentation, repositories, or design files. Maintain connections between work items and external systems.\n\n*Key Features:*\n- Add external URL links to work items\n- Validate and preview linked resources\n- Organize links by type and category\n- Track link usage and access\n\n*Use Cases:* Documentation links, repository connections, design references, external tools." + }, + { + "name": "Work Items", + "description": "**Work Items & Tasks**\n\nCreate and manage work items like tasks, bugs, features, and user stories. The core entities for tracking work in your projects.\n\n*Key Features:*\n- Create, update, and manage work items\n- Assign to team members and set priorities\n- Track progress through workflow states\n- Set due dates, estimates, and relationships\n\n*Use Cases:* Bug tracking, task management, feature development, sprint planning." + } + ] +} diff --git a/apps/developer-docs/docs/public/openapi.yaml b/apps/developer-docs/docs/public/openapi.yaml new file mode 100644 index 00000000..b85bf956 --- /dev/null +++ b/apps/developer-docs/docs/public/openapi.yaml @@ -0,0 +1,17183 @@ +openapi: 3.0.3 +info: + title: The Plane REST API + version: 0.0.1 + description: 'The Plane REST API + + + Visit our quick start guide and full API documentation at [developers.plane.so](https://developers.plane.so/api-reference/introduction).' + contact: + name: Plane + url: https://plane.so + email: support@plane.so + license: + name: GNU AGPLv3 + url: https://github.com/makeplane/plane/blob/preview/LICENSE.txt +paths: + /api/v1/assets/user-assets/: + post: + operationId: create_user_asset_upload + description: Generate presigned URL for user asset upload + summary: Generate presigned URL for user asset upload + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserAssetUploadRequest' + examples: + UserAvatarUpload: + value: + name: profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: User Avatar Upload + description: Example request for uploading a user avatar + UserCoverUpload: + value: + name: cover.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_COVER + summary: User Cover Upload + description: Example request for uploading a user cover + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserAssetUploadRequest' + examples: + UserAvatarUpload: + value: + name: profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: User Avatar Upload + description: Example request for uploading a user avatar + UserCoverUpload: + value: + name: cover.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_COVER + summary: User Cover Upload + description: Example request for uploading a user cover + multipart/form-data: + schema: + $ref: '#/components/schemas/UserAssetUploadRequest' + examples: + UserAvatarUpload: + value: + name: profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: User Avatar Upload + description: Example request for uploading a user avatar + UserCoverUpload: + value: + name: cover.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_COVER + summary: User Cover Upload + description: Example request for uploading a user cover + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '200': + description: Presigned URL generated successfully + '400': + description: Validation error occurred with the provided data. + /api/v1/assets/user-assets/{asset_id}/: + patch: + operationId: update_user_asset + description: Mark user asset as uploaded + summary: Mark user asset as uploaded + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: Asset ID + required: true + examples: + ExampleAssetID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example asset ID + description: A typical asset UUID + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAssetUpdateRequest' + examples: + UpdateAssetAttributes: + value: + attributes: + name: updated_profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: Update Asset Attributes + description: Example request for updating asset attributes + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAssetUpdateRequest' + examples: + UpdateAssetAttributes: + value: + attributes: + name: updated_profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: Update Asset Attributes + description: Example request for updating asset attributes + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAssetUpdateRequest' + examples: + UpdateAssetAttributes: + value: + attributes: + name: updated_profile.jpg + type: image/jpeg + size: 1024000 + entity_type: USER_AVATAR + summary: Update Asset Attributes + description: Example request for updating asset attributes + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '204': + description: Asset updated successfully + '404': + description: The requested resource was not found. + delete: + operationId: delete_user_asset + description: 'Delete user asset. + + + Delete a user profile asset (avatar or cover image) and remove its reference from the user profile. + + This performs a soft delete by marking the asset as deleted and updating the user''s profile.' + summary: Delete user asset + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: Asset ID + required: true + examples: + ExampleAssetID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example asset ID + description: A typical asset UUID + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '204': + description: Asset deleted successfully + '404': + description: The requested resource was not found. + /api/v1/users/me/: + get: + operationId: get_current_user + description: Retrieve the authenticated user's profile information including basic details. + summary: Get current user + tags: + - Users + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserLite' + examples: + User: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + first_name: John + last_name: Doe + email: john.doe@example.com + avatar: https://example.com/avatar.jpg + avatar_url: https://example.com/avatar.jpg + display_name: John Doe + description: Current user profile + /api/v1/workspaces/{slug}/assets/: + post: + operationId: create_generic_asset_upload + description: Generate presigned URL for generic asset upload + summary: Generate presigned URL for generic asset upload + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GenericAssetUploadRequest' + examples: + GenericAssetUploadSerializer: + value: + name: image.jpg + type: image/jpeg + size: 1024000 + project_id: 123e4567-e89b-12d3-a456-426614174000 + external_id: '1234567890' + external_source: github + description: Example request for uploading a generic asset + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GenericAssetUploadRequest' + examples: + GenericAssetUploadSerializer: + value: + name: image.jpg + type: image/jpeg + size: 1024000 + project_id: 123e4567-e89b-12d3-a456-426614174000 + external_id: '1234567890' + external_source: github + description: Example request for uploading a generic asset + multipart/form-data: + schema: + $ref: '#/components/schemas/GenericAssetUploadRequest' + examples: + GenericAssetUploadSerializer: + value: + name: image.jpg + type: image/jpeg + size: 1024000 + project_id: 123e4567-e89b-12d3-a456-426614174000 + external_id: '1234567890' + external_source: github + description: Example request for uploading a generic asset + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '200': + description: Presigned URL generated successfully + '400': + description: Validation error + '404': + description: The requested resource was not found. + '409': + description: Asset with same external ID already exists + /api/v1/workspaces/{slug}/assets/{asset_id}/: + get: + operationId: get_generic_asset + description: Get presigned URL for asset download + summary: Get presigned URL for asset download + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Assets + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '200': + description: Presigned download URL generated successfully + '400': + description: Bad request + '404': + description: Asset not found + patch: + operationId: update_generic_asset + description: Update generic asset after upload completion + summary: Update generic asset after upload completion + parameters: + - in: path + name: asset_id + schema: + type: string + format: uuid + description: Asset ID + required: true + examples: + ExampleAssetID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example asset ID + description: A typical asset UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Assets + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdateRequest' + examples: + GenericAssetUpdateSerializer: + value: + is_uploaded: true + description: Example request for updating a generic asset + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdateRequest' + examples: + GenericAssetUpdateSerializer: + value: + is_uploaded: true + description: Example request for updating a generic asset + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedGenericAssetUpdateRequest' + examples: + GenericAssetUpdateSerializer: + value: + is_uploaded: true + description: Example request for updating a generic asset + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '204': + description: Asset updated successfully + '404': + description: Asset not found + /api/v1/workspaces/{slug}/invitations/: + get: + operationId: workspaces_invitations_list + description: List all workspace invites for a workspace + summary: List workspace invites + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - workspaces + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/WorkspaceInvite' + description: Workspace invites + post: + operationId: workspaces_invitations_create + description: Create a workspace invite + summary: Create workspace invite + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - workspaces + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceInviteRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/WorkspaceInviteRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/WorkspaceInviteRequest' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceInvite' + description: Workspace invite + /api/v1/workspaces/{slug}/invitations/{pk}/: + get: + operationId: workspaces_invitations_retrieve + description: Get a workspace invite by ID + summary: Get workspace invite + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Workspace invite ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - workspaces + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceInvite' + description: Workspace invite + patch: + operationId: workspaces_invitations_partial_update + description: Update a workspace invite + summary: Update workspace invite + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Workspace invite ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - workspaces + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedWorkspaceInviteRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedWorkspaceInviteRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedWorkspaceInviteRequest' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceInvite' + description: Workspace invite + delete: + operationId: workspaces_invitations_destroy + description: Delete a workspace invite + summary: Delete workspace invite + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Workspace invite ID + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - workspaces + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Workspace invite deleted + /api/v1/workspaces/{slug}/issues/{project_identifier}-{issue_identifier}/: + get: + operationId: get_workspace_work_item + description: Retrieve a specific work item using workspace slug, project identifier, and issue identifier. + summary: Retrieve work item by identifiers + parameters: + - in: path + name: issue_identifier + schema: + type: integer + description: Issue sequence ID (numeric identifier within project) + required: true + examples: + ExampleIssueIdentifier: + value: 123 + summary: Example issue identifier + description: A typical issue sequence ID + - in: path + name: project_identifier + schema: + type: string + description: Project identifier (unique string within workspace) + required: true + examples: + ExampleProjectIdentifier: + value: PROJ + summary: Example project identifier + description: A typical project identifier + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work item details + '404': + description: Work item not found + /api/v1/workspaces/{slug}/issues/search/: + get: + operationId: search_work_items + description: Perform semantic search across issue names, sequence IDs, and project identifiers. + parameters: + - in: query + name: limit + schema: + type: integer + description: Maximum number of results to return + examples: + Default: + value: 10 + MoreResults: + value: 50 + summary: More results + - in: query + name: project_id + schema: + type: string + format: uuid + description: Project ID for filtering results within a specific project + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: Filter results for this project + - in: query + name: search + schema: + type: string + description: Search query to filter results by name, description, or identifier + required: true + examples: + NameSearch: + value: bug fix + summary: Name search + description: Search for items containing 'bug fix' + SequenceID: + value: '123' + summary: Sequence ID + description: Search by sequence ID number + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + - in: query + name: workspace_search + schema: + type: string + description: Whether to search across entire workspace or within specific project + examples: + ProjectOnly: + value: 'false' + summary: Project only + description: Search within specific project only + WorkspaceWide: + value: 'true' + summary: Workspace wide + description: Search across entire workspace + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueSearch' + examples: + IssueSearchResults: + value: + issues: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Fix authentication bug in user login + sequence_id: 123 + project__identifier: MAB + project_id: 550e8400-e29b-41d4-a716-446655440001 + workspace__slug: my-workspace + - id: 550e8400-e29b-41d4-a716-446655440002 + name: Add authentication middleware + sequence_id: 124 + project__identifier: MAB + project_id: 550e8400-e29b-41d4-a716-446655440001 + workspace__slug: my-workspace + description: Work item search results + '400': + description: Bad request - invalid search parameters + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + /api/v1/workspaces/{slug}/members/: + get: + operationId: get_workspace_members + description: Retrieve all users who are members of the specified workspace. + summary: List workspace members + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + type: array + items: + allOf: + - $ref: '#/components/schemas/UserLite' + - type: object + properties: + role: + type: integer + description: Member role in the workspace + examples: + WorkspaceMembers: + value: + - id: 550e8400-e29b-41d4-a716-446655440000 + first_name: John + last_name: Doe + display_name: John Doe + email: john.doe@example.com + avatar: https://example.com/avatar.jpg + role: 20 + - id: 550e8400-e29b-41d4-a716-446655440001 + first_name: Jane + last_name: Smith + display_name: Jane Smith + email: jane.smith@example.com + avatar: https://example.com/avatar2.jpg + role: 15 + description: List of workspace members with their roles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + /api/v1/workspaces/{slug}/members-lite/: + get: + operationId: get_workspace_members_lite + description: Retrieve a paginated, lightweight list of workspace members for pickers and directories. + summary: List workspace members (lite) + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedWorkspaceMemberLite' + examples: + PaginatedWorkspaceMembers(Lite): + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Workspace Members (Lite) + description: Paginated list of workspace members with minimal fields + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + /api/v1/workspaces/{slug}/projects/: + get: + operationId: list_projects + description: Retrieve all projects in a workspace or get details of a specific project. + summary: List or retrieve projects + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedProjectResponse' + examples: + PaginatedProjects: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Mobile App Backend + description: Backend services for the mobile application + identifier: MAB + network: 2 + summary: Paginated Projects + description: Paginated list of projects + post: + operationId: create_project + description: Create a new project in the workspace with default states and member assignments. + summary: Create project + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectCreateRequest' + examples: + ProjectCreateSerializer: + value: + name: New Project + description: New project description + identifier: new-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for creating a project + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ProjectCreateRequest' + examples: + ProjectCreateSerializer: + value: + name: New Project + description: New project description + identifier: new-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for creating a project + multipart/form-data: + schema: + $ref: '#/components/schemas/ProjectCreateRequest' + examples: + ProjectCreateSerializer: + value: + name: New Project + description: New project description + identifier: new-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for creating a project + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + examples: + Project: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Mobile App Development + description: Development of the mobile application + identifier: MAD + network: 2 + project_lead: 550e8400-e29b-41d4-a716-446655440001 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Project created successfully + '409': + description: Project name already taken + /api/v1/workspaces/{slug}/projects-lite/: + get: + operationId: list_projects_lite + description: Retrieve a paginated, lightweight list of projects for pickers and references. + summary: List projects (lite) + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: include_archived + schema: + type: boolean + description: Include archived projects in the response. Defaults to false. Each project carries + an archived_at timestamp (null when not archived). + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedProjectLiteResponse' + examples: + PaginatedProjects(Lite): + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Projects (Lite) + description: Paginated list of projects with minimal fields + /api/v1/workspaces/{slug}/projects/{pk}/: + get: + operationId: retrieve_project + description: Retrieve details of a specific project. + summary: Retrieve project + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + examples: + Project: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Mobile App Development + description: Development of the mobile application + identifier: MAD + network: 2 + project_lead: 550e8400-e29b-41d4-a716-446655440001 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Project details + patch: + operationId: update_project + description: Partially update an existing project's properties like name, description, or settings. + summary: Update project + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedProjectUpdateRequest' + examples: + ProjectUpdateSerializer: + value: + name: Updated Project + description: Updated project description + identifier: updated-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a project + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedProjectUpdateRequest' + examples: + ProjectUpdateSerializer: + value: + name: Updated Project + description: Updated project description + identifier: updated-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a project + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedProjectUpdateRequest' + examples: + ProjectUpdateSerializer: + value: + name: Updated Project + description: Updated project description + identifier: updated-project + project_lead: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a project + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + examples: + Project: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Mobile App Development + description: Development of the mobile application + identifier: MAD + network: 2 + project_lead: 550e8400-e29b-41d4-a716-446655440001 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Project updated successfully + '409': + description: Project name already taken + delete: + operationId: delete_project + description: Permanently remove a project and all its associated data from the workspace. + summary: Delete project + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/archive/: + post: + operationId: archive_project + description: Move a project to archived status, hiding it from active project lists. + summary: Archive project + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource archived successfully + delete: + operationId: unarchive_project + description: Restore an archived project to active status, making it available in regular workflows. + summary: Unarchive project + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Projects + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource unarchived successfully + /api/v1/workspaces/{slug}/projects/{project_id}/archived-cycles/: + get: + operationId: list_archived_cycles + description: Retrieve all cycles that have been archived in the project. + summary: List archived cycles + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedArchivedCycleResponse' + examples: + PaginatedArchivedCycles: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Archived Cycles + description: Paginated list of archived cycles + /api/v1/workspaces/{slug}/projects/{project_id}/archived-cycles/{cycle_id}/unarchive/: + delete: + operationId: unarchive_cycle + description: Restore an archived cycle to active status, making it available for regular use. + summary: Unarchive cycle + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource unarchived successfully + /api/v1/workspaces/{slug}/projects/{project_id}/archived-modules/: + get: + operationId: list_archived_modules + description: Retrieve all modules that have been archived in the project. + summary: List archived modules + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedArchivedModuleResponse' + examples: + PaginatedArchivedModules: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Archived Modules + description: Paginated list of archived modules + /api/v1/workspaces/{slug}/projects/{project_id}/archived-modules/{pk}/unarchive/: + delete: + operationId: unarchive_module + description: Restore an archived module to active status, making it available for regular use. + summary: Unarchive module + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '204': + description: No response body + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/: + get: + operationId: list_cycles + description: Retrieve all cycles in a project. Supports filtering by cycle status like current, + upcoming, completed, or draft. + summary: List cycles + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: cycle_view + schema: + type: string + description: Filter cycles by status + examples: + AllCycles: + value: all + summary: All cycles + CurrentCycles: + value: current + summary: Current cycles + UpcomingCycles: + value: upcoming + summary: Upcoming cycles + CompletedCycles: + value: completed + summary: Completed cycles + DraftCycles: + value: draft + summary: Draft cycles + IncompleteCycles: + value: incomplete + summary: Incomplete cycles + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedCycleResponse' + examples: + PaginatedCycles: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sprint 1 - Q1 2024 + description: First sprint of the quarter focusing on core features + start_date: '2024-01-01' + end_date: '2024-01-14' + status: current + summary: Paginated Cycles + description: Paginated list of cycles + post: + operationId: create_cycle + description: Create a new development cycle with specified name, description, and date range. Supports + external ID tracking for integration purposes. + summary: Create cycle + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CycleCreateRequest' + examples: + CycleCreateSerializer: + value: + name: Cycle 1 + description: Cycle 1 description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a cycle + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CycleCreateRequest' + examples: + CycleCreateSerializer: + value: + name: Cycle 1 + description: Cycle 1 description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a cycle + multipart/form-data: + schema: + $ref: '#/components/schemas/CycleCreateRequest' + examples: + CycleCreateSerializer: + value: + name: Cycle 1 + description: Cycle 1 description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a cycle + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + examples: + Cycle: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sprint 1 - Q1 2024 + description: First sprint of the quarter focusing on core features + start_date: '2024-01-01' + end_date: '2024-01-14' + status: current + total_issues: 15 + completed_issues: 8 + cancelled_issues: 1 + started_issues: 4 + unstarted_issues: 2 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Cycle created + /api/v1/workspaces/{slug}/projects/{project_id}/cycles-lite/: + get: + operationId: list_cycles_lite + description: Retrieve a paginated, lightweight list of cycles in a project for pickers and references. + summary: List cycles (lite) + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedCycleLiteResponse' + examples: + PaginatedCycles(Lite): + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Cycles (Lite) + description: Paginated list of cycles with minimal fields + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/archive/: + post: + operationId: archive_cycle + description: Move a completed cycle to archived status for historical tracking. Only cycles that + have ended can be archived. + summary: Archive cycle + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource archived successfully + '400': + description: Cycle cannot be archived + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/: + get: + operationId: list_cycle_work_items + description: Retrieve all work items assigned to a cycle. + summary: List cycle work items + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedCycleIssueResponse' + examples: + PaginatedCycleWorkItems: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + cycle: 550e8400-e29b-41d4-a716-446655440001 + issue: 550e8400-e29b-41d4-a716-446655440002 + sub_issues_count: 3 + created_at: '2024-01-01T10:30:00Z' + summary: Paginated Cycle Work Items + description: Paginated list of cycle work items + post: + operationId: add_cycle_work_items + description: Assign multiple work items to a cycle. Automatically handles bulk creation and updates + with activity tracking. + summary: Add Work Items to Cycle + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssueRequestRequest' + examples: + CycleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding cycle issues + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CycleIssueRequestRequest' + examples: + CycleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding cycle issues + multipart/form-data: + schema: + $ref: '#/components/schemas/CycleIssueRequestRequest' + examples: + CycleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding cycle issues + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssue' + examples: + CycleIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + cycle: 550e8400-e29b-41d4-a716-446655440001 + issue: 550e8400-e29b-41d4-a716-446655440002 + sub_issues_count: 3 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Cycle work items added + '400': + description: Required fields are missing + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/{issue_id}/: + get: + operationId: retrieve_cycle_work_item + description: Retrieve details of a specific cycle work item. + summary: Retrieve cycle work item + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CycleIssue' + examples: + CycleIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + cycle: 550e8400-e29b-41d4-a716-446655440001 + issue: 550e8400-e29b-41d4-a716-446655440002 + sub_issues_count: 3 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Cycle work items + delete: + operationId: delete_cycle_work_item + description: Remove a work item from a cycle while keeping the work item in the project. + summary: Delete cycle work item + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/transfer-issues/: + post: + operationId: transfer_cycle_work_items + description: Move incomplete work items from the current cycle to a new target cycle. Captures progress + snapshot and transfers only unfinished work items. + summary: Transfer cycle work items + parameters: + - in: path + name: cycle_id + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TransferCycleIssueRequestRequest' + examples: + TransferCycleIssueRequestSerializer: + value: + new_cycle_id: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for transferring cycle issues + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TransferCycleIssueRequestRequest' + examples: + TransferCycleIssueRequestSerializer: + value: + new_cycle_id: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for transferring cycle issues + multipart/form-data: + schema: + $ref: '#/components/schemas/TransferCycleIssueRequestRequest' + examples: + TransferCycleIssueRequestSerializer: + value: + new_cycle_id: 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for transferring cycle issues + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + type: object + properties: + message: + type: string + description: Success message + example: Success + examples: + TransferCycleIssueSuccess: + value: + message: Success + summary: Transfer Cycle Issue Success + description: Successful transfer of cycle issues to new cycle + description: Work items transferred successfully + '400': + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error message + example: New Cycle Id is required + examples: + TransferCycleIssueError: + value: + error: New Cycle Id is required + summary: Transfer Cycle Issue Error + description: Error when required cycle ID is missing + TransferToCompletedCycleError: + value: + error: The cycle where the issues are transferred is already completed + summary: Transfer to Completed Cycle Error + description: Error when trying to transfer to a completed cycle + description: Bad request + /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{pk}/: + get: + operationId: retrieve_cycle + description: Retrieve details of a specific cycle by its ID. Supports cycle status filtering. + summary: Retrieve cycle + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + examples: + Cycle: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sprint 1 - Q1 2024 + description: First sprint of the quarter focusing on core features + start_date: '2024-01-01' + end_date: '2024-01-14' + status: current + total_issues: 15 + completed_issues: 8 + cancelled_issues: 1 + started_issues: 4 + unstarted_issues: 2 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Cycles + patch: + operationId: update_cycle + description: Modify an existing cycle's properties like name, description, or date range. Completed + cycles can only have their sort order changed. + summary: Update cycle + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedCycleUpdateRequest' + examples: + CycleUpdateSerializer: + value: + name: Updated Cycle + description: Updated cycle description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a cycle + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedCycleUpdateRequest' + examples: + CycleUpdateSerializer: + value: + name: Updated Cycle + description: Updated cycle description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a cycle + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedCycleUpdateRequest' + examples: + CycleUpdateSerializer: + value: + name: Updated Cycle + description: Updated cycle description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a cycle + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Cycle' + examples: + Cycle: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sprint 1 - Q1 2024 + description: First sprint of the quarter focusing on core features + start_date: '2024-01-01' + end_date: '2024-01-14' + status: current + total_issues: 15 + completed_issues: 8 + cancelled_issues: 1 + started_issues: 4 + unstarted_issues: 2 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Cycle updated + delete: + operationId: delete_cycle + description: Permanently remove a cycle and all its associated issue relationships + summary: Delete cycle + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Cycles + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/intake-issues/: + get: + operationId: get_intake_work_items_list + description: Retrieve all work items in the project's intake queue. Returns paginated results when + listing all intake work items. + summary: List intake work items + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIntakeIssueResponse' + examples: + PaginatedIntakeWorkItems: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Intake Work Items + description: Paginated list of intake work items + post: + operationId: create_intake_work_item + description: Submit a new work item to the project's intake queue for review and triage. Automatically + creates the work item with default triage state and tracks activity. + summary: Create intake work item + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Intake + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssueCreateRequest' + examples: + IntakeIssueCreateSerializer: + value: + issue: + name: New Issue + description: New issue description + priority: medium + description: Example request for creating an intake issue + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IntakeIssueCreateRequest' + examples: + IntakeIssueCreateSerializer: + value: + issue: + name: New Issue + description: New issue description + priority: medium + description: Example request for creating an intake issue + multipart/form-data: + schema: + $ref: '#/components/schemas/IntakeIssueCreateRequest' + examples: + IntakeIssueCreateSerializer: + value: + issue: + name: New Issue + description: New issue description + priority: medium + description: Example request for creating an intake issue + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + examples: + IntakeIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + status: 0 + source: in_app + issue: + id: 550e8400-e29b-41d4-a716-446655440001 + name: 'Feature request: Dark mode' + description: Add dark mode support to the application + priority: medium + sequence_id: 124 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Intake work item created + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/intake-issues/{issue_id}/: + get: + operationId: retrieve_intake_work_item + description: Retrieve details of a specific intake work item. + summary: Retrieve intake work item + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + examples: + IntakeIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + status: 0 + source: in_app + issue: + id: 550e8400-e29b-41d4-a716-446655440001 + name: 'Feature request: Dark mode' + description: Add dark mode support to the application + priority: medium + sequence_id: 124 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Intake work item + patch: + operationId: update_intake_work_item + description: Modify an existing intake work item's properties or status for triage processing. Supports + status changes like accept, reject, or mark as duplicate. + summary: Update intake work item + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Intake + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIntakeIssueUpdateRequest' + examples: + IntakeIssueUpdateSerializer: + value: + status: 1 + issue: + name: Updated Issue + description: Updated issue description + priority: high + description: Example request for updating an intake issue + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIntakeIssueUpdateRequest' + examples: + IntakeIssueUpdateSerializer: + value: + status: 1 + issue: + name: Updated Issue + description: Updated issue description + priority: high + description: Example request for updating an intake issue + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIntakeIssueUpdateRequest' + examples: + IntakeIssueUpdateSerializer: + value: + status: 1 + issue: + name: Updated Issue + description: Updated issue description + priority: high + description: Example request for updating an intake issue + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IntakeIssue' + examples: + IntakeIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + status: 0 + source: in_app + issue: + id: 550e8400-e29b-41d4-a716-446655440001 + name: 'Feature request: Dark mode' + description: Add dark mode support to the application + priority: medium + sequence_id: 124 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Intake work item updated + '400': + description: Invalid request data provided + delete: + operationId: delete_intake_work_item + description: Permanently remove an intake work item from the triage queue. Also deletes the underlying + work item if it hasn't been accepted yet. + summary: Delete intake work item + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Intake + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/issues/: + get: + operationId: list_work_items + description: Retrieve a paginated list of all work items in a project. Supports filtering, ordering, + and field selection through query parameters. + summary: List work items + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: external_id + schema: + type: string + description: External system identifier for filtering or lookup + examples: + GitHubIssue: + value: '1234567890' + summary: GitHub Issue + description: GitHub issue number + - in: query + name: external_source + schema: + type: string + description: External system source name for filtering or lookup + examples: + GitHub: + value: github + description: GitHub integration source + Jira: + value: jira + description: Jira integration source + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedWorkItemResponse' + examples: + PaginatedWorkItems: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Fix authentication bug in user login + description: Users are unable to log in due to authentication service timeout + priority: high + sequence_id: 123 + state: + id: 550e8400-e29b-41d4-a716-446655440001 + name: In Progress + group: started + assignees: [] + labels: [] + created_at: '2024-01-15T10:30:00Z' + summary: Paginated Work Items + description: Paginated list of work items + '400': + description: Invalid request data provided + post: + operationId: create_work_item + description: Create a new work item in the specified project with the provided details. + summary: Create work item + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work Item created successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/: + get: + operationId: list_work_item_activities + description: Retrieve all activities for a work item. Supports filtering by activity type and date + range. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Activity + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueActivityResponse' + examples: + PaginatedIssueActivities: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Issue Activities + description: Paginated list of issue activities + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/activities/{pk}/: + get: + operationId: retrieve_work_item_activity + description: Retrieve details of a specific activity. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: pk + schema: + type: string + format: uuid + description: Activity ID + required: true + examples: + ExampleActivityID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example activity ID + description: A typical activity UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Activity + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueActivityDetailResponse' + examples: + WorkItemActivityDetails: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Work Item Activity Details + description: Paginated list of work item activities + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/: + get: + operationId: list_work_item_comments + description: Retrieve all comments for a work item. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueCommentResponse' + examples: + PaginatedWorkItemComments: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Work Item Comments + description: Paginated list of work item comments + post: + operationId: create_work_item_comment + description: Add a new comment to a work item with HTML content. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comment created successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/comments/{pk}/: + get: + operationId: retrieve_work_item_comment + description: Retrieve details of a specific comment. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comments + '400': + description: Invalid request data provided + patch: + operationId: update_work_item_comment + description: Modify the content of an existing comment on a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Comment not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comment updated successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_work_item_comment + description: Permanently remove a comment from a work item. Records deletion activity for audit + purposes. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Comment not found + '204': + description: Work item comment deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/: + get: + operationId: list_work_item_attachments + description: Retrieve all attachments for a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachment' + examples: + IssueAttachment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: screenshot.png + size: 1024000 + asset_url: https://s3.amazonaws.com/bucket/screenshot.png?signed-url + attributes: + name: screenshot.png + type: image/png + size: 1024000 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item attachment + '400': + description: Invalid request data provided + post: + operationId: create_work_item_attachment + description: Generate presigned URL for uploading file attachments to a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue or Project or Workspace not found + '200': + description: Presigned download URL generated successfully + '400': + description: Validation error + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/issue-attachments/{pk}/: + get: + operationId: retrieve_work_item_attachment + description: Download attachment file. Returns a redirect to the presigned download URL. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '302': + description: Redirect to presigned download URL + '400': + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error message + example: The asset is not uploaded. + status: + type: boolean + description: Request status + example: false + examples: + IssueAttachmentNotUploaded: + value: + error: The asset is not uploaded. + status: false + summary: Issue Attachment Not Uploaded + description: Error when trying to download an attachment that hasn't been uploaded yet + description: Asset not uploaded + patch: + operationId: upload_work_item_attachment + description: Mark an attachment as uploaded after successful file transfer to storage. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + requestBody: + content: + application/json: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + application/x-www-form-urlencoded: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + multipart/form-data: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '204': + description: Work item attachment uploaded successfully + '400': + description: Invalid request data provided + delete: + operationId: delete_work_item_attachment + description: Permanently remove an attachment from a work item. Records deletion activity for audit + purposes. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '204': + description: Work item attachment deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/: + get: + operationId: list_work_item_links + description: Retrieve all links associated with a work item. Supports filtering by URL, title, and + metadata. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueLinkResponse' + examples: + PaginatedWorkItemLinks: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Work Item Links + description: Paginated list of work item links + '400': + description: Invalid request data provided + post: + operationId: create_work_item_link + description: Add a new external link to a work item with URL, title, and metadata. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + examples: + IssueLink: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + url: https://github.com/example/repo/pull/123 + title: Fix authentication bug + metadata: + title: Fix authentication bug + description: Pull request to fix authentication timeout issue + image: https://github.com/example/repo/avatar.png + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item link created successfully + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{issue_id}/links/{pk}/: + get: + operationId: retrieve_work_item_link + description: Retrieve details of a specific work item link. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueLinkDetailResponse' + examples: + WorkItemLinkDetails: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Work Item Link Details + description: Work item link details or paginated list + patch: + operationId: update_issue_link + description: Modify the URL, title, or metadata of an existing issue link. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Link not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + examples: + IssueLink: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + url: https://github.com/example/repo/pull/123 + title: Fix authentication bug + metadata: + title: Fix authentication bug + description: Pull request to fix authentication timeout issue + image: https://github.com/example/repo/avatar.png + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Issue link updated successfully + '400': + description: Invalid request data provided + delete: + operationId: delete_work_item_link + description: Permanently remove an external link from a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item link not found + '204': + description: Work item link deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/issues/{pk}/: + get: + operationId: retrieve_work_item + description: Retrieve details of a specific work item. + summary: Retrieve work item + parameters: + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: external_id + schema: + type: string + description: External system identifier for filtering or lookup + examples: + GitHubIssue: + value: '1234567890' + summary: GitHub Issue + description: GitHub issue number + - in: query + name: external_source + schema: + type: string + description: External system source name for filtering or lookup + examples: + GitHub: + value: github + description: GitHub integration source + Jira: + value: jira + description: Jira integration source + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: List of issues or issue details + '400': + description: Invalid request data provided + patch: + operationId: update_work_item + description: Partially update an existing work item with the provided fields. Supports external + ID validation to prevent conflicts. + summary: Partially update work item + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work Item patched successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_work_item + description: Permanently delete an existing work item from the project. Only admins or the item + creator can perform this action. + summary: Delete work item + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Only admin or creator can perform this action + '404': + description: Work item not found + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/labels/: + get: + operationId: list_labels + description: Retrieve all labels in a project. Supports filtering by name and color. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedLabelResponse' + examples: + PaginatedLabels: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: bug + color: '#ff4444' + description: Issues that represent bugs in the system + summary: Paginated Labels + description: Paginated list of labels + '400': + description: Invalid request data provided + post: + operationId: create_label + description: Create a new label in the specified project with name, color, and description. + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Labels + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: New Label + color: '#ff0000' + description: New label description + external_id: '1234567890' + external_source: github + description: Example request for creating a label + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/LabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: New Label + color: '#ff0000' + description: New label description + external_id: '1234567890' + external_source: github + description: Example request for creating a label + multipart/form-data: + schema: + $ref: '#/components/schemas/LabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: New Label + color: '#ff0000' + description: New label description + external_id: '1234567890' + external_source: github + description: Example request for creating a label + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + examples: + Label: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: bug + color: '#ff4444' + description: Issues that represent bugs in the system + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Label created successfully + '400': + description: Invalid request data provided + '409': + description: Label with the same name already exists + /api/v1/workspaces/{slug}/projects/{project_id}/labels/{pk}/: + get: + operationId: get_labels + description: Retrieve details of a specific label. + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Label ID + required: true + examples: + ExampleLabelID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example label ID + description: A typical label UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Label not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + examples: + Label: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: bug + color: '#ff4444' + description: Issues that represent bugs in the system + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Labels + patch: + operationId: update_label + description: Partially update an existing label's properties like name, color, or description. + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Label ID + required: true + examples: + ExampleLabelID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example label ID + description: A typical label UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Labels + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedLabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: Updated Label + color: '#00ff00' + description: Updated label description + external_id: '1234567890' + external_source: github + description: Example request for updating a label + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedLabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: Updated Label + color: '#00ff00' + description: Updated label description + external_id: '1234567890' + external_source: github + description: Example request for updating a label + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedLabelCreateUpdateRequest' + examples: + LabelCreateUpdateSerializer: + value: + name: Updated Label + color: '#00ff00' + description: Updated label description + external_id: '1234567890' + external_source: github + description: Example request for updating a label + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Label not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + examples: + Label: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: bug + color: '#ff4444' + description: Issues that represent bugs in the system + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Label updated successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_label + description: Permanently remove a label from the project. This action cannot be undone. + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Label ID + required: true + examples: + ExampleLabelID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example label ID + description: A typical label UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Labels + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Label not found + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/members/: + get: + operationId: get_project_members + description: Retrieve all users who are members of the specified project. + summary: List project members + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserLite' + examples: + ProjectMembers: + value: + - id: 550e8400-e29b-41d4-a716-446655440000 + first_name: John + last_name: Doe + display_name: John Doe + email: john.doe@example.com + avatar: https://example.com/avatar.jpg + - id: 550e8400-e29b-41d4-a716-446655440001 + first_name: Jane + last_name: Smith + display_name: Jane Smith + email: jane.smith@example.com + avatar: https://example.com/avatar2.jpg + description: List of project members with their roles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_project_member + description: Create a new project member + summary: Create project member + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member created + /api/v1/workspaces/{slug}/projects/{project_id}/members/{pk}/: + get: + operationId: get_project_member + description: Retrieve a project member by ID. + summary: Get project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_project_member + description: Update a project member + summary: Update project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member updated + delete: + operationId: delete_project_member + description: Delete a project member + summary: Delete project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Project member deleted + /api/v1/workspaces/{slug}/projects/{project_id}/modules/: + get: + operationId: list_modules + description: Retrieve all modules in a project. + summary: List modules + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedModuleResponse' + examples: + PaginatedModules: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Authentication Module + description: User authentication and authorization features + start_date: '2024-01-01' + target_date: '2024-02-15' + status: in_progress + summary: Paginated Modules + description: Paginated list of modules + post: + operationId: create_module + description: Create a new project module with specified name, description, and timeline. + summary: Create module + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleCreateRequest' + examples: + ModuleCreateSerializer: + value: + name: New Module + description: New module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a module + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ModuleCreateRequest' + examples: + ModuleCreateSerializer: + value: + name: New Module + description: New module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a module + multipart/form-data: + schema: + $ref: '#/components/schemas/ModuleCreateRequest' + examples: + ModuleCreateSerializer: + value: + name: New Module + description: New module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for creating a module + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + examples: + Module: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Authentication Module + description: User authentication and authorization features + start_date: '2024-01-01' + target_date: '2024-02-15' + status: in-progress + total_issues: 12 + completed_issues: 5 + cancelled_issues: 0 + started_issues: 4 + unstarted_issues: 3 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Module created + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + /api/v1/workspaces/{slug}/projects/{project_id}/modules-lite/: + get: + operationId: list_modules_lite + description: Retrieve a paginated, lightweight list of modules in a project for pickers and references. + summary: List modules (lite) + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedModuleLiteResponse' + examples: + PaginatedModules(Lite): + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Modules (Lite) + description: Paginated list of modules with minimal fields + /api/v1/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/: + get: + operationId: list_module_work_items + description: Retrieve all work items assigned to a module with detailed information. + summary: List module work items + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: module_id + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedModuleIssueResponse' + examples: + PaginatedModuleWorkItems: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Module Work Items + description: Paginated list of module work items + post: + operationId: add_module_work_items + description: Assign multiple work items to a module or move them from another module. Automatically + handles bulk creation and updates with activity tracking. + summary: Add Work Items to Module + parameters: + - in: path + name: module_id + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleIssueRequestRequest' + examples: + ModuleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding module issues + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ModuleIssueRequestRequest' + examples: + ModuleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding module issues + multipart/form-data: + schema: + $ref: '#/components/schemas/ModuleIssueRequestRequest' + examples: + ModuleIssueRequestSerializer: + value: + issues: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for adding module issues + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleIssue' + examples: + ModuleIssue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + module: 550e8400-e29b-41d4-a716-446655440001 + issue: 550e8400-e29b-41d4-a716-446655440002 + sub_issues_count: 2 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Module issues added + '400': + description: Required fields are missing + /api/v1/workspaces/{slug}/projects/{project_id}/modules/{module_id}/module-issues/{issue_id}/: + delete: + operationId: delete_module_work_item + description: Remove a work item from a module while keeping the work item in the project. + summary: Delete module work item + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: module_id + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module issue not found + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/modules/{pk}/: + get: + operationId: retrieve_module + description: Retrieve details of a specific module. + summary: Retrieve module + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + examples: + Module: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Authentication Module + description: User authentication and authorization features + start_date: '2024-01-01' + target_date: '2024-02-15' + status: in-progress + total_issues: 12 + completed_issues: 5 + cancelled_issues: 0 + started_issues: 4 + unstarted_issues: 3 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Module + patch: + operationId: update_module + description: Modify an existing module's properties like name, description, status, or timeline. + summary: Update module + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedModuleUpdateRequest' + examples: + ModuleUpdateSerializer: + value: + name: Updated Module + description: Updated module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a module + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedModuleUpdateRequest' + examples: + ModuleUpdateSerializer: + value: + name: Updated Module + description: Updated module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a module + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedModuleUpdateRequest' + examples: + ModuleUpdateSerializer: + value: + name: Updated Module + description: Updated module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a module + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + examples: + Module: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Authentication Module + description: User authentication and authorization features + start_date: '2024-01-01' + target_date: '2024-02-15' + status: in-progress + total_issues: 12 + completed_issues: 5 + cancelled_issues: 0 + started_issues: 4 + unstarted_issues: 3 + backlog_issues: 0 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Module updated successfully + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/Module' + examples: + ModuleUpdateSerializer: + value: + name: Updated Module + description: Updated module description + start_date: '2021-01-01' + end_date: '2021-01-31' + external_id: '1234567890' + external_source: github + description: Example request for updating a module + description: Invalid request data + '409': + description: Module with same external ID already exists + delete: + operationId: delete_module + description: Permanently remove a module and all its associated issue relationships. + summary: Delete module + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Only admin or creator can perform this action + '404': + description: Module not found + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/modules/{pk}/archive/: + post: + operationId: archive_module + description: Move a module to archived status for historical tracking. + summary: Archive module + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: Module ID + required: true + examples: + ExampleModuleID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example module ID + description: A typical module UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Modules + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Module not found + '204': + description: No response body + '400': + description: Resource cannot be archived in current state + /api/v1/workspaces/{slug}/projects/{project_id}/project-members/: + get: + operationId: get_project_members_2 + description: Retrieve all users who are members of the specified project. + summary: List project members + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserLite' + examples: + ProjectMembers: + value: + - id: 550e8400-e29b-41d4-a716-446655440000 + first_name: John + last_name: Doe + display_name: John Doe + email: john.doe@example.com + avatar: https://example.com/avatar.jpg + - id: 550e8400-e29b-41d4-a716-446655440001 + first_name: Jane + last_name: Smith + display_name: Jane Smith + email: jane.smith@example.com + avatar: https://example.com/avatar2.jpg + description: List of project members with their roles + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + post: + operationId: create_project_member_2 + description: Create a new project member + summary: Create project member + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/ProjectMemberRequest' + required: true + security: + - ApiKeyAuthentication: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member created + /api/v1/workspaces/{slug}/projects/{project_id}/project-members-lite/: + get: + operationId: get_project_members_lite + description: Retrieve a paginated, lightweight list of project members for pickers and directories. + summary: List project members (lite) + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedProjectMemberLite' + examples: + PaginatedProjectMembers(Lite): + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Project Members (Lite) + description: Paginated list of project members with minimal fields + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + /api/v1/workspaces/{slug}/projects/{project_id}/project-members/{pk}/: + get: + operationId: get_project_member_2 + description: Retrieve a project member by ID. + summary: Get project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + patch: + operationId: update_project_member_2 + description: Update a project member + summary: Update project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedProjectMemberRequest' + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectMember' + description: Project member updated + delete: + operationId: delete_project_member_2 + description: Delete a project member + summary: Delete project member + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Members + security: + - ApiKeyAuthentication: [] + responses: + '204': + description: Project member deleted + /api/v1/workspaces/{slug}/projects/{project_id}/states/: + get: + operationId: list_states + description: Retrieve all workflow states for a project. + summary: List states + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedStateResponse' + examples: + PaginatedStates: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: In Progress + color: '#ffa500' + group: started + sequence: 2 + summary: Paginated States + description: Paginated list of states + post: + operationId: create_state + description: Create a new workflow state for a project with specified name, color, and group. + summary: Create state + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - States + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StateRequest' + examples: + StateCreateSerializer: + value: + name: New State + color: '#ff0000' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for creating a state + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/StateRequest' + examples: + StateCreateSerializer: + value: + name: New State + color: '#ff0000' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for creating a state + multipart/form-data: + schema: + $ref: '#/components/schemas/StateRequest' + examples: + StateCreateSerializer: + value: + name: New State + color: '#ff0000' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for creating a state + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + examples: + State: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: In Progress + color: '#f39c12' + group: started + sequence: 2 + default: false + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: State created + '400': + description: Invalid request data provided + '409': + description: State with the same name already exists + /api/v1/workspaces/{slug}/projects/{project_id}/states/{state_id}/: + get: + operationId: retrieve_state + description: Retrieve details of a specific state. + summary: Retrieve state + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + - in: path + name: state_id + schema: + type: string + format: uuid + description: State ID + required: true + examples: + ExampleStateID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example state ID + description: A typical state UUID + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + examples: + State: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: In Progress + color: '#f39c12' + group: started + sequence: 2 + default: false + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: State retrieved + patch: + operationId: update_state + description: Partially update an existing workflow state's properties like name, color, or group. + summary: Update state + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + - in: path + name: state_id + schema: + type: string + format: uuid + description: State ID + required: true + examples: + ExampleStateID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example state ID + description: A typical state UUID + tags: + - States + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedStateRequest' + examples: + StateUpdateSerializer: + value: + name: Updated State + color: '#00ff00' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for updating a state + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedStateRequest' + examples: + StateUpdateSerializer: + value: + name: Updated State + color: '#00ff00' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for updating a state + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedStateRequest' + examples: + StateUpdateSerializer: + value: + name: Updated State + color: '#00ff00' + group: backlog + external_id: '1234567890' + external_source: github + description: Example request for updating a state + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/State' + examples: + State: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: In Progress + color: '#f39c12' + group: started + sequence: 2 + default: false + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: State updated + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_state + description: Permanently remove a workflow state from a project. Default states and states with + existing work items cannot be deleted. + summary: Delete state + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + - in: path + name: state_id + schema: + type: string + format: uuid + description: State ID + required: true + examples: + ExampleStateID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example state ID + description: A typical state UUID + tags: + - States + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + '400': + description: State cannot be deleted + /api/v1/workspaces/{slug}/projects/{project_id}/summary/: + get: + operationId: workspaces_projects_summary_retrieve + description: 'Get project summary + + + Get the summary of a project' + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + required: true + - in: path + name: slug + schema: + type: string + required: true + tags: + - workspaces + security: + - ApiKeyAuthentication: [] + responses: + '200': + description: No response body + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/: + get: + operationId: list_work_items_2 + description: Retrieve a paginated list of all work items in a project. Supports filtering, ordering, + and field selection through query parameters. + summary: List work items + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: external_id + schema: + type: string + description: External system identifier for filtering or lookup + examples: + GitHubIssue: + value: '1234567890' + summary: GitHub Issue + description: GitHub issue number + - in: query + name: external_source + schema: + type: string + description: External system source name for filtering or lookup + examples: + GitHub: + value: github + description: GitHub integration source + Jira: + value: jira + description: Jira integration source + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedWorkItemResponse' + examples: + PaginatedWorkItems: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Fix authentication bug in user login + description: Users are unable to log in due to authentication service timeout + priority: high + sequence_id: 123 + state: + id: 550e8400-e29b-41d4-a716-446655440001 + name: In Progress + group: started + assignees: [] + labels: [] + created_at: '2024-01-15T10:30:00Z' + summary: Paginated Work Items + description: Paginated list of work items + '400': + description: Invalid request data provided + post: + operationId: create_work_item_2 + description: Create a new work item in the specified project with the provided details. + summary: Create work item + parameters: + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueRequest' + examples: + IssueCreateSerializer: + value: + name: New Issue + description: New issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + external_id: '1234567890' + external_source: github + description: Example request for creating a work item + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Project not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work Item created successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/activities/: + get: + operationId: list_work_item_activities_2 + description: Retrieve all activities for a work item. Supports filtering by activity type and date + range. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Activity + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueActivityResponse' + examples: + PaginatedIssueActivities: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Issue Activities + description: Paginated list of issue activities + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/activities/{pk}/: + get: + operationId: retrieve_work_item_activity_2 + description: Retrieve details of a specific activity. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: pk + schema: + type: string + format: uuid + description: Activity ID + required: true + examples: + ExampleActivityID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example activity ID + description: A typical activity UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Activity + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueActivityDetailResponse' + examples: + WorkItemActivityDetails: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Work Item Activity Details + description: Paginated list of work item activities + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/attachments/: + get: + operationId: list_work_item_attachments_2 + description: Retrieve all attachments for a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachment' + examples: + IssueAttachment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: screenshot.png + size: 1024000 + asset_url: https://s3.amazonaws.com/bucket/screenshot.png?signed-url + attributes: + name: screenshot.png + type: image/png + size: 1024000 + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item attachment + '400': + description: Invalid request data provided + post: + operationId: create_work_item_attachment_2 + description: Generate presigned URL for uploading file attachments to a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueAttachmentUploadRequest' + examples: + IssueAttachmentUploadSerializer: + value: + name: document.pdf + type: application/pdf + size: 1024000 + external_id: '1234567890' + external_source: github + description: Example request for creating an issue attachment + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue or Project or Workspace not found + '200': + description: Presigned download URL generated successfully + '400': + description: Validation error + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/attachments/{pk}/: + get: + operationId: retrieve_work_item_attachment_2 + description: Download attachment file. Returns a redirect to the presigned download URL. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '302': + description: Redirect to presigned download URL + '400': + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error message + example: The asset is not uploaded. + status: + type: boolean + description: Request status + example: false + examples: + IssueAttachmentNotUploaded: + value: + error: The asset is not uploaded. + status: false + summary: Issue Attachment Not Uploaded + description: Error when trying to download an attachment that hasn't been uploaded yet + description: Asset not uploaded + patch: + operationId: upload_work_item_attachment_2 + description: Mark an attachment as uploaded after successful file transfer to storage. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + requestBody: + content: + application/json: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + application/x-www-form-urlencoded: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + multipart/form-data: + schema: + application/json: + type: object + properties: + is_uploaded: + type: boolean + description: Mark attachment as uploaded + examples: + ConfirmUpload: + value: + is_uploaded: true + description: Confirm that the attachment has been successfully uploaded + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '204': + description: Work item attachment uploaded successfully + '400': + description: Invalid request data provided + delete: + operationId: delete_work_item_attachment_2 + description: Permanently remove an attachment from a work item. Records deletion activity for audit + purposes. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + required: true + - in: path + name: pk + schema: + type: string + format: uuid + description: Attachment ID + required: true + examples: + ExampleAttachmentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example attachment ID + description: A typical attachment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Attachments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Attachment not found + '204': + description: Work item attachment deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/comments/: + get: + operationId: list_work_item_comments_2 + description: Retrieve all comments for a work item. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueCommentResponse' + examples: + PaginatedWorkItemComments: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Work Item Comments + description: Paginated list of work item comments + post: + operationId: create_work_item_comment_2 + description: Add a new comment to a work item with HTML content. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

New comment content

+ external_id: '1234567890' + external_source: github + description: Example request for creating an issue comment + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comment created successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/comments/{pk}/: + get: + operationId: retrieve_work_item_comment_2 + description: Retrieve details of a specific comment. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comments + '400': + description: Invalid request data provided + patch: + operationId: update_work_item_comment_2 + description: Modify the content of an existing comment on a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueCommentCreateRequest' + examples: + IssueCommentCreateSerializer: + value: + comment_html:

Updated comment content

+ external_id: '1234567890' + external_source: github + description: Example request for updating an issue comment + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Comment not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueComment' + examples: + IssueComment: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + comment_html:

This issue has been resolved by implementing OAuth 2.0 flow.

+ comment_json: + type: doc + content: + - type: paragraph + content: + - type: text + text: This issue has been resolved by implementing OAuth 2.0 flow. + actor: + id: 550e8400-e29b-41d4-a716-446655440001 + first_name: John + last_name: Doe + display_name: John Doe + avatar: https://example.com/avatar.jpg + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item comment updated successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_work_item_comment_2 + description: Permanently remove a comment from a work item. Records deletion activity for audit + purposes. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Comment ID + required: true + examples: + ExampleCommentID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example comment ID + description: A typical comment UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Comments + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Comment not found + '204': + description: Work item comment deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/links/: + get: + operationId: list_work_item_links_2 + description: Retrieve all links associated with a work item. Supports filtering by URL, title, and + metadata. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueLinkResponse' + examples: + PaginatedWorkItemLinks: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Paginated Work Item Links + description: Paginated list of work item links + '400': + description: Invalid request data provided + post: + operationId: create_work_item_link_2 + description: Add a new external link to a work item with URL, title, and metadata. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueLinkCreateRequest' + examples: + IssueLinkCreateSerializer: + value: + url: https://example.com + title: Example Link + description: Example request for creating an issue link + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + examples: + IssueLink: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + url: https://github.com/example/repo/pull/123 + title: Fix authentication bug + metadata: + title: Fix authentication bug + description: Pull request to fix authentication timeout issue + image: https://github.com/example/repo/avatar.png + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Work item link created successfully + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/links/{pk}/: + get: + operationId: retrieve_work_item_link_2 + description: Retrieve details of a specific work item link. + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedIssueLinkDetailResponse' + examples: + WorkItemLinkDetails: + value: + grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sample Item + created_at: '2024-01-15T12:00:00Z' + summary: Work Item Link Details + description: Work item link details or paginated list + patch: + operationId: update_issue_link_2 + description: Modify the URL, title, or metadata of an existing issue link. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueLinkUpdateRequest' + examples: + IssueLinkUpdateSerializer: + value: + url: https://example.com + title: Updated Link + description: Example request for updating an issue link + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Link not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueLink' + examples: + IssueLink: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + url: https://github.com/example/repo/pull/123 + title: Fix authentication bug + metadata: + title: Fix authentication bug + description: Pull request to fix authentication timeout issue + image: https://github.com/example/repo/avatar.png + created_at: '2024-01-01T10:30:00Z' + updated_at: '2024-01-10T15:45:00Z' + description: Issue link updated successfully + '400': + description: Invalid request data provided + delete: + operationId: delete_work_item_link_2 + description: Permanently remove an external link from a work item. + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: pk + schema: + type: string + format: uuid + description: Link ID + required: true + examples: + ExampleLinkID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example link ID + description: A typical link UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Links + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item link not found + '204': + description: Work item link deleted successfully + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/relations/: + get: + operationId: list_work_item_relations + description: Retrieve all relationships for a work item including blocking, blocked_by, duplicate, + relates_to, start_before, start_after, finish_before, and finish_after relations. + summary: List work item relations + parameters: + - in: query + name: cursor + schema: + type: string + description: Pagination cursor for getting next set of results + examples: + NextPageCursor: + value: '20:1:0' + summary: Next page cursor + description: 'Cursor format: ''page_size:page_number:offset''' + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: query + name: per_page + schema: + type: integer + description: 'Number of results per page (default: 20, max: 100)' + examples: + Default: + value: 20 + Maximum: + value: 100 + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Relations + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueRelationResponse' + examples: + WorkItemRelationsResponse: + value: + blocking: + - project_id: 550e8400-e29b-41d4-a716-446655440010 + issue_id: 550e8400-e29b-41d4-a716-446655440000 + - project_id: 550e8400-e29b-41d4-a716-446655440010 + issue_id: 550e8400-e29b-41d4-a716-446655440001 + blocked_by: + - project_id: 550e8400-e29b-41d4-a716-446655440011 + issue_id: 550e8400-e29b-41d4-a716-446655440002 + duplicate: [] + relates_to: + - project_id: 550e8400-e29b-41d4-a716-446655440010 + issue_id: 550e8400-e29b-41d4-a716-446655440003 + start_after: [] + start_before: + - project_id: 550e8400-e29b-41d4-a716-446655440012 + issue_id: 550e8400-e29b-41d4-a716-446655440004 + finish_after: [] + finish_before: [] + summary: Work Item Relations Response + description: Work item relations grouped by relation type + '400': + description: Invalid request data provided + post: + operationId: create_work_item_relation + description: Create relationships between work items. Supports various relation types including + blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, and finish_after. + summary: Create work item relation + parameters: + - in: path + name: issue_id + schema: + type: string + format: uuid + description: Issue ID + required: true + examples: + ExampleIssueID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example issue ID + description: A typical issue UUID + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Item Relations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IssueRelationCreateRequest' + examples: + CreateBlockingRelation: + value: + relation_type: blocking + issues: + - 550e8400-e29b-41d4-a716-446655440000 + - 550e8400-e29b-41d4-a716-446655440001 + summary: Create blocking relation + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IssueRelationCreateRequest' + examples: + CreateBlockingRelation: + value: + relation_type: blocking + issues: + - 550e8400-e29b-41d4-a716-446655440000 + - 550e8400-e29b-41d4-a716-446655440001 + summary: Create blocking relation + multipart/form-data: + schema: + $ref: '#/components/schemas/IssueRelationCreateRequest' + examples: + CreateBlockingRelation: + value: + relation_type: blocking + issues: + - 550e8400-e29b-41d4-a716-446655440000 + - 550e8400-e29b-41d4-a716-446655440001 + summary: Create blocking relation + required: true + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Issue not found + '201': + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/IssueRelation' + examples: + RelationsCreated: + value: + - - id: 550e8400-e29b-41d4-a716-446655440000 + name: Fix authentication bug + sequence_id: 42 + project_id: 550e8400-e29b-41d4-a716-446655440001 + relation_type: blocked_by + state_id: 550e8400-e29b-41d4-a716-446655440002 + priority: high + created_at: '2024-01-15T10:00:00Z' + updated_at: '2024-01-15T10:00:00Z' + created_by: 550e8400-e29b-41d4-a716-446655440004 + updated_by: 550e8400-e29b-41d4-a716-446655440004 + summary: Relations created + description: Work item relations created successfully + '400': + description: Invalid request data provided + /api/v1/workspaces/{slug}/projects/{project_id}/work-items/{pk}/: + get: + operationId: retrieve_work_item_2 + description: Retrieve details of a specific work item. + summary: Retrieve work item + parameters: + - in: query + name: expand + schema: + type: string + description: Comma-separated list of related fields to expand in response + examples: + ExpandAssignees: + value: assignees + summary: Expand assignees + description: Include full assignee details + MultipleExpansions: + value: assignees,labels,state + summary: Multiple expansions + description: Include details for multiple relations + - in: query + name: external_id + schema: + type: string + description: External system identifier for filtering or lookup + examples: + GitHubIssue: + value: '1234567890' + summary: GitHub Issue + description: GitHub issue number + - in: query + name: external_source + schema: + type: string + description: External system source name for filtering or lookup + examples: + GitHub: + value: github + description: GitHub integration source + Jira: + value: jira + description: Jira integration source + - in: query + name: fields + schema: + type: string + description: Comma-separated list of fields to include in response + examples: + BasicFields: + value: id,name,description + summary: Basic fields + description: Include only basic fields + WithRelations: + value: id,name,assignees,state + summary: With relations + description: Include fields with relationships + - in: query + name: order_by + schema: + type: string + description: Field to order results by. Prefix with '-' for descending order + examples: + CreatedDateDescending: + value: -created_at + summary: Created date descending + description: Most recent items first + PriorityAscending: + value: priority + summary: Priority ascending + description: Order by priority (urgent, high, medium, low, none) + StateGroup: + value: state__group + summary: State group + description: Order by state group (backlog, unstarted, started, completed, cancelled) + AssigneeName: + value: assignees__first_name + summary: Assignee name + description: Order by assignee first name + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: List of issues or issue details + '400': + description: Invalid request data provided + patch: + operationId: update_work_item_2 + description: Partially update an existing work item with the provided fields. Supports external + ID validation to prevent conflicts. + summary: Partially update work item + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedIssueRequest' + examples: + IssueUpdateSerializer: + value: + name: Updated Issue + description: Updated issue description + priority: medium + state: 0ec6cfa4-e906-4aad-9390-2df0303a41cd + assignees: + - 0ec6cfa4-e906-4aad-9390-2df0303a41cd + labels: + - 0ec6cfa4-e906-4aad-9390-2df0303a41ce + description: Example request for updating a work item + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Work item not found + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work Item patched successfully + '400': + description: Invalid request data provided + '409': + description: Resource with same external ID already exists + delete: + operationId: delete_work_item_2 + description: Permanently delete an existing work item from the project. Only admins or the item + creator can perform this action. + summary: Delete work item + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + required: true + - in: path + name: project_id + schema: + type: string + format: uuid + description: Project ID + required: true + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: A typical project UUID + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Only admin or creator can perform this action + '404': + description: Work item not found + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/stickies/: + get: + operationId: list_stickies + description: List all stickies in the workspace + summary: List stickies + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Stickies + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Sticky' + examples: + ListOfStickies: + value: + - grouped_by: state + sub_grouped_by: priority + total_count: 150 + next_cursor: '20:1:0' + prev_cursor: '20:0:0' + next_page_results: true + prev_page_results: false + count: 20 + total_pages: 8 + total_results: 150 + extra_stats: null + results: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Sticky 1 + description_html:

Sticky 1 description

+ created_at: '2024-01-01T10:30:00Z' + summary: List of stickies + description: List of stickies + post: + operationId: create_sticky + description: Create a new sticky in the workspace + summary: Create a new sticky + parameters: + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Stickies + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StickyRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/StickyRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/StickyRequest' + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Sticky' + examples: + Sticky: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sticky 1 + description_html:

Sticky 1 description

+ created_at: '2024-01-01T10:30:00Z' + description: Sticky created + /api/v1/workspaces/{slug}/stickies/{pk}/: + get: + operationId: retrieve_sticky + description: Retrieve a sticky by its ID + summary: Retrieve a sticky + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: A UUID string identifying this Sticky. + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Stickies + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Sticky' + examples: + Sticky: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sticky 1 + description_html:

Sticky 1 description

+ created_at: '2024-01-01T10:30:00Z' + description: Sticky + patch: + operationId: update_sticky + description: Update a sticky by its ID + summary: Update a sticky + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: A UUID string identifying this Sticky. + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Stickies + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedStickyRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedStickyRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedStickyRequest' + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Sticky' + examples: + Sticky: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Sticky 1 + description_html:

Sticky 1 description

+ created_at: '2024-01-01T10:30:00Z' + description: Sticky + delete: + operationId: delete_sticky + description: Delete a sticky by its ID + summary: Delete a sticky + parameters: + - in: path + name: pk + schema: + type: string + format: uuid + description: A UUID string identifying this Sticky. + required: true + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Stickies + security: + - ApiKeyAuthentication: [] + responses: + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: The requested resource was not found. + '204': + description: Resource deleted successfully + /api/v1/workspaces/{slug}/work-items/{project_identifier}-{issue_identifier}/: + get: + operationId: get_workspace_work_item_2 + description: Retrieve a specific work item using workspace slug, project identifier, and issue identifier. + summary: Retrieve work item by identifiers + parameters: + - in: path + name: issue_identifier + schema: + type: integer + description: Issue sequence ID (numeric identifier within project) + required: true + examples: + ExampleIssueIdentifier: + value: 123 + summary: Example issue identifier + description: A typical issue sequence ID + - in: path + name: project_identifier + schema: + type: string + description: Project identifier (unique string within workspace) + required: true + examples: + ExampleProjectIdentifier: + value: PROJ + summary: Example project identifier + description: A typical project identifier + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Issue' + examples: + Issue: + value: + id: 550e8400-e29b-41d4-a716-446655440000 + name: Implement user authentication + description: Add OAuth 2.0 authentication flow + sequence_id: 1 + priority: high + assignees: + - 550e8400-e29b-41d4-a716-446655440001 + labels: + - 550e8400-e29b-41d4-a716-446655440002 + created_at: '2024-01-15T10:30:00Z' + updated_at: '2024-01-15T10:30:00Z' + description: Work item details + '404': + description: Work item not found + /api/v1/workspaces/{slug}/work-items/search/: + get: + operationId: search_work_items_2 + description: Perform semantic search across issue names, sequence IDs, and project identifiers. + parameters: + - in: query + name: limit + schema: + type: integer + description: Maximum number of results to return + examples: + Default: + value: 10 + MoreResults: + value: 50 + summary: More results + - in: query + name: project_id + schema: + type: string + format: uuid + description: Project ID for filtering results within a specific project + examples: + ExampleProjectID: + value: 550e8400-e29b-41d4-a716-446655440000 + summary: Example project ID + description: Filter results for this project + - in: query + name: search + schema: + type: string + description: Search query to filter results by name, description, or identifier + required: true + examples: + NameSearch: + value: bug fix + summary: Name search + description: Search for items containing 'bug fix' + SequenceID: + value: '123' + summary: Sequence ID + description: Search by sequence ID number + - in: path + name: slug + schema: + type: string + description: Workspace slug + required: true + examples: + ExampleWorkspace: + value: my-workspace + summary: Example workspace + description: A typical workspace slug + - in: query + name: workspace_search + schema: + type: string + description: Whether to search across entire workspace or within specific project + examples: + ProjectOnly: + value: 'false' + summary: Project only + description: Search within specific project only + WorkspaceWide: + value: 'true' + summary: Workspace wide + description: Search across entire workspace + tags: + - Work Items + security: + - ApiKeyAuthentication: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IssueSearch' + examples: + IssueSearchResults: + value: + issues: + - id: 550e8400-e29b-41d4-a716-446655440000 + name: Fix authentication bug in user login + sequence_id: 123 + project__identifier: MAB + project_id: 550e8400-e29b-41d4-a716-446655440001 + workspace__slug: my-workspace + - id: 550e8400-e29b-41d4-a716-446655440002 + name: Add authentication middleware + sequence_id: 124 + project__identifier: MAB + project_id: 550e8400-e29b-41d4-a716-446655440001 + workspace__slug: my-workspace + description: Work item search results + '400': + description: Bad request - invalid search parameters + '401': + description: Authentication credentials were not provided or are invalid. + '403': + description: Permission denied. User lacks required permissions. + '404': + description: Workspace not found +components: + schemas: + AccessEnum: + enum: + - INTERNAL + - EXTERNAL + type: string + description: '* `INTERNAL` - INTERNAL + + * `EXTERNAL` - EXTERNAL' + Cycle: + type: object + description: 'Cycle serializer with comprehensive project metrics and time tracking. + + + Provides cycle details including work item counts by status, progress estimates, + + and time-bound iteration data for project management and sprint planning.' + properties: + id: + type: string + format: uuid + readOnly: true + total_issues: + type: integer + readOnly: true + cancelled_issues: + type: integer + readOnly: true + completed_issues: + type: integer + readOnly: true + started_issues: + type: integer + readOnly: true + unstarted_issues: + type: integer + readOnly: true + backlog_issues: + type: integer + readOnly: true + total_estimates: + type: number + format: double + readOnly: true + completed_estimates: + type: number + format: double + readOnly: true + started_estimates: + type: number + format: double + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + progress_snapshot: {} + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + timezone: + $ref: '#/components/schemas/TimezoneEnum' + version: + type: integer + maximum: 2147483647 + minimum: -2147483648 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + owned_by: + type: string + format: uuid + readOnly: true + required: + - name + CycleCreateRequest: + type: object + description: 'Serializer for creating cycles with timezone handling and date validation. + + + Manages cycle creation including project timezone conversion, date range validation, + + and UTC normalization for time-bound iteration planning and sprint management.' + properties: + name: + type: string + minLength: 1 + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + owned_by: + type: string + format: uuid + nullable: true + description: User who owns the cycle. If not provided, defaults to the current user. + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + timezone: + $ref: '#/components/schemas/TimezoneEnum' + required: + - name + CycleIssue: + type: object + description: 'Serializer for cycle-issue relationships with sub-issue counting. + + + Manages the association between cycles and work items, including + + hierarchical issue tracking for nested work item structures.' + properties: + id: + type: string + format: uuid + readOnly: true + sub_issues_count: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + cycle: + type: string + format: uuid + readOnly: true + required: + - issue + CycleIssueRequestRequest: + type: object + description: 'Serializer for bulk work item assignment to cycles. + + + Validates work item ID lists for batch operations including + + cycle assignment and sprint planning workflows.' + properties: + issues: + type: array + items: + type: string + format: uuid + description: List of issue IDs to add to the cycle + required: + - issues + CycleLite: + type: object + description: 'Lightweight cycle serializer for minimal data transfer. + + + Provides essential cycle information without computed metrics, + + optimized for list views and reference lookups.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + progress_snapshot: {} + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + timezone: + $ref: '#/components/schemas/TimezoneEnum' + version: + type: integer + maximum: 2147483647 + minimum: -2147483648 + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + workspace: + type: string + format: uuid + owned_by: + type: string + format: uuid + required: + - name + - owned_by + - project + - workspace + EntityTypeEnum: + enum: + - USER_AVATAR + - USER_COVER + type: string + description: '* `USER_AVATAR` - User Avatar + + * `USER_COVER` - User Cover' + GenericAssetUploadRequest: + type: object + description: 'Serializer for generic asset upload requests with project association. + + + Validates metadata for generating presigned URLs for workspace assets including + + project association, external system tracking, and file validation for + + document management and content storage workflows.' + properties: + name: + type: string + minLength: 1 + description: Original filename of the asset + type: + type: string + minLength: 1 + description: MIME type of the file + size: + type: integer + description: File size in bytes + project_id: + type: string + format: uuid + description: UUID of the project to associate with the asset + external_id: + type: string + minLength: 1 + description: External identifier for the asset (for integration tracking) + external_source: + type: string + minLength: 1 + description: External source system (for integration tracking) + required: + - name + - size + GroupEnum: + enum: + - backlog + - unstarted + - started + - completed + - cancelled + - triage + type: string + description: '* `backlog` - Backlog + + * `unstarted` - Unstarted + + * `started` - Started + + * `completed` - Completed + + * `cancelled` - Cancelled + + * `triage` - Triage' + IntakeIssue: + type: object + description: 'Comprehensive serializer for intake work items with expanded issue details. + + + Provides full intake work item data including embedded issue information, + + status tracking, and triage metadata for issue queue management.' + properties: + id: + type: string + format: uuid + readOnly: true + issue_detail: + allOf: + - $ref: '#/components/schemas/IssueExpand' + readOnly: true + inbox: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + status: + allOf: + - $ref: '#/components/schemas/IntakeWorkItemStatusEnum' + minimum: -2147483648 + maximum: 2147483647 + snoozed_till: + type: string + format: date-time + nullable: true + source: + type: string + nullable: true + maxLength: 255 + source_email: + type: string + nullable: true + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + extra: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + intake: + type: string + format: uuid + issue: + type: string + format: uuid + readOnly: true + duplicate_to: + type: string + format: uuid + nullable: true + required: + - intake + IntakeIssueCreateRequest: + type: object + description: 'Serializer for creating intake work items with embedded issue data. + + + Manages intake work item creation including nested issue creation, + + status assignment, and source tracking for issue queue management.' + properties: + issue: + allOf: + - $ref: '#/components/schemas/IssueForIntakeRequest' + description: Issue data for the intake issue + required: + - issue + IntakeWorkItemStatusEnum: + enum: + - -2 + - -1 + - 0 + - 1 + - 2 + type: integer + description: '* `-2` - Pending + + * `-1` - Rejected + + * `0` - Snoozed + + * `1` - Accepted + + * `2` - Duplicate' + Issue: + type: object + description: 'Comprehensive work item serializer with full relationship management. + + + Handles complete work item lifecycle including assignees, labels, validation, + + and related model updates. Supports dynamic field expansion and HTML content + + processing.' + properties: + id: + type: string + format: uuid + readOnly: true + type_id: + type: string + format: uuid + nullable: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + title: Issue Name + maxLength: 255 + description_html: + type: string + description_binary: + type: string + format: byte + readOnly: true + nullable: true + priority: + allOf: + - $ref: '#/components/schemas/PriorityEnum' + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + completed_at: + type: string + format: date-time + readOnly: true + nullable: true + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + parent: + type: string + format: uuid + nullable: true + state: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + required: + - name + IssueActivity: + type: object + description: 'Serializer for work item activity and change history. + + + Tracks and represents work item modifications, state changes, + + and user interactions for audit trails and activity feeds.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + verb: + type: string + title: Action + maxLength: 255 + field: + type: string + nullable: true + title: Field Name + maxLength: 255 + old_value: + type: string + nullable: true + new_value: + type: string + nullable: true + comment: + type: string + attachments: + type: array + items: + type: string + format: uri + maxLength: 200 + maxItems: 10 + old_identifier: + type: string + format: uuid + nullable: true + new_identifier: + type: string + format: uuid + nullable: true + epoch: + type: number + format: double + nullable: true + project: + type: string + format: uuid + workspace: + type: string + format: uuid + issue: + type: string + format: uuid + nullable: true + issue_comment: + type: string + format: uuid + nullable: true + actor: + type: string + format: uuid + nullable: true + required: + - project + - workspace + IssueAttachment: + type: object + description: 'Serializer for work item file attachments. + + + Manages file asset associations with work items including metadata, + + storage information, and access control for document management.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + attributes: {} + asset: + type: string + format: uri + entity_type: + type: string + nullable: true + maxLength: 255 + entity_identifier: + type: string + nullable: true + maxLength: 255 + is_deleted: + type: boolean + is_archived: + type: boolean + external_id: + type: string + nullable: true + maxLength: 255 + external_source: + type: string + nullable: true + maxLength: 255 + size: + type: number + format: double + is_uploaded: + type: boolean + storage_metadata: + nullable: true + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + user: + type: string + format: uuid + nullable: true + workspace: + type: string + format: uuid + readOnly: true + nullable: true + draft_issue: + type: string + format: uuid + nullable: true + project: + type: string + format: uuid + readOnly: true + nullable: true + issue: + type: string + format: uuid + readOnly: true + nullable: true + comment: + type: string + format: uuid + nullable: true + page: + type: string + format: uuid + nullable: true + required: + - asset + IssueAttachmentUploadRequest: + type: object + description: 'Serializer for work item attachment upload request validation. + + + Handles file upload metadata validation including size, type, and external + + integration tracking for secure work item document attachment workflows.' + properties: + name: + type: string + minLength: 1 + description: Original filename of the asset + type: + type: string + minLength: 1 + description: MIME type of the file + size: + type: integer + description: File size in bytes + external_id: + type: string + minLength: 1 + description: External identifier for the asset (for integration tracking) + external_source: + type: string + minLength: 1 + description: External source system (for integration tracking) + required: + - name + - size + IssueComment: + type: object + description: 'Full serializer for work item comments with membership context. + + + Provides complete comment data including member status, content formatting, + + and edit tracking for collaborative work item discussions.' + properties: + id: + type: string + format: uuid + readOnly: true + is_member: + type: boolean + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + comment_html: + type: string + attachments: + type: array + items: + type: string + format: uri + maxLength: 200 + maxItems: 10 + access: + $ref: '#/components/schemas/AccessEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + edited_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + description: + type: string + format: uuid + nullable: true + issue: + type: string + format: uuid + readOnly: true + actor: + type: string + format: uuid + nullable: true + parent: + type: string + format: uuid + nullable: true + IssueCommentCreateRequest: + type: object + description: 'Serializer for creating work item comments. + + + Handles comment creation with JSON and HTML content support, + + access control, and external integration tracking.' + properties: + comment_json: {} + comment_html: + type: string + access: + $ref: '#/components/schemas/AccessEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + IssueExpand: + type: object + description: 'Extended work item serializer with full relationship expansion. + + + Provides work items with expanded related data including cycles, modules, + + labels, assignees, and states for comprehensive data representation.' + properties: + id: + type: string + format: uuid + readOnly: true + cycle: + allOf: + - $ref: '#/components/schemas/CycleLite' + readOnly: true + module: + allOf: + - $ref: '#/components/schemas/ModuleLite' + readOnly: true + labels: + type: string + readOnly: true + assignees: + type: string + readOnly: true + state: + allOf: + - $ref: '#/components/schemas/StateLite' + readOnly: true + description: + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + title: Issue Name + maxLength: 255 + description_json: {} + description_html: + type: string + description_stripped: + type: string + nullable: true + description_binary: + type: string + format: byte + readOnly: true + nullable: true + priority: + allOf: + - $ref: '#/components/schemas/PriorityEnum' + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + completed_at: + type: string + format: date-time + readOnly: true + nullable: true + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + parent: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + required: + - name + IssueForIntakeRequest: + type: object + description: 'Serializer for work item data within intake submissions. + + + Handles essential work item fields for intake processing including + + content validation and priority assignment for triage workflows.' + properties: + name: + type: string + minLength: 1 + title: Issue Name + maxLength: 255 + description: + nullable: true + description_json: {} + description_html: + type: string + priority: + allOf: + - $ref: '#/components/schemas/PriorityEnum' + title: Issue Priority + required: + - name + IssueLink: + type: object + description: 'Full serializer for work item external links. + + + Provides complete link information including metadata and timestamps + + for managing external resource associations with work items.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + title: + type: string + nullable: true + maxLength: 255 + url: + type: string + metadata: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + readOnly: true + required: + - url + IssueLinkCreateRequest: + type: object + description: 'Serializer for creating work item external links with validation. + + + Handles URL validation, format checking, and duplicate prevention + + for attaching external resources to work items.' + properties: + title: + type: string + nullable: true + maxLength: 255 + url: + type: string + minLength: 1 + required: + - url + IssueRelation: + type: object + description: 'Serializer for issue relationships showing related issue details. + + + Provides comprehensive information about related issues including + + project context, sequence ID, and relationship type.' + properties: + id: + type: string + format: uuid + readOnly: true + project_id: + type: string + format: uuid + readOnly: true + sequence_id: + type: integer + readOnly: true + relation_type: + type: string + readOnly: true + name: + type: string + readOnly: true + state_id: + type: string + format: uuid + readOnly: true + priority: + type: string + readOnly: true + created_by: + type: string + format: uuid + readOnly: true + nullable: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + IssueRelationCreateRequest: + type: object + description: 'Serializer for creating issue relations. + + + Creates issue relations with the specified relation type and issues. + + Validates relation types and ensures proper issue ID format.' + properties: + relation_type: + allOf: + - $ref: '#/components/schemas/RelationTypeEnum' + description: 'Type of relationship between work items + + + * `blocking` - Blocking + + * `blocked_by` - Blocked By + + * `duplicate` - Duplicate + + * `relates_to` - Relates To + + * `start_before` - Start Before + + * `start_after` - Start After + + * `finish_before` - Finish Before + + * `finish_after` - Finish After' + issues: + type: array + items: + type: string + format: uuid + description: Array of work item IDs to create relations with + minItems: 1 + required: + - issues + - relation_type + IssueRelationRef: + type: object + description: Project-scoped reference to a related work item. + properties: + project_id: + type: string + format: uuid + description: Project containing the related work item + issue_id: + type: string + format: uuid + description: ID of the related work item + required: + - issue_id + - project_id + IssueRelationResponse: + type: object + description: 'Serializer for issue relations response showing grouped relation types. + + + Each list contains project_id and issue_id pairs so clients can resolve + + cross-project relations.' + properties: + blocking: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items blocking this issue + blocked_by: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items this issue is blocked by + duplicate: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Duplicate work items + relates_to: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Related work items + start_after: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items that start after this issue + start_before: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items that start before this issue + finish_after: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items that finish after this issue + finish_before: + type: array + items: + $ref: '#/components/schemas/IssueRelationRef' + description: Work items that finish before this issue + required: + - blocked_by + - blocking + - duplicate + - finish_after + - finish_before + - relates_to + - start_after + - start_before + IssueRequest: + type: object + description: 'Comprehensive work item serializer with full relationship management. + + + Handles complete work item lifecycle including assignees, labels, validation, + + and related model updates. Supports dynamic field expansion and HTML content + + processing.' + properties: + assignees: + type: array + items: + type: string + format: uuid + writeOnly: true + labels: + type: array + items: + type: string + format: uuid + writeOnly: true + type_id: + type: string + format: uuid + nullable: true + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + minLength: 1 + title: Issue Name + maxLength: 255 + description_html: + type: string + priority: + allOf: + - $ref: '#/components/schemas/PriorityEnum' + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + nullable: true + parent: + type: string + format: uuid + nullable: true + state: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + required: + - name + IssueSearch: + type: object + description: 'Serializer for work item search result data formatting. + + + Provides standardized search result structure including work item identifiers, + + project context, and workspace information for search API responses.' + properties: + id: + type: string + description: Issue ID + name: + type: string + description: Issue name + sequence_id: + type: string + description: Issue sequence ID + project__identifier: + type: string + description: Project identifier + project_id: + type: string + description: Project ID + workspace__slug: + type: string + description: Workspace slug + required: + - id + - name + - project__identifier + - project_id + - sequence_id + - workspace__slug + Label: + type: object + description: 'Full serializer for work item labels with complete metadata. + + + Provides comprehensive label information including hierarchical relationships, + + visual properties, and organizational data for work item tagging.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + maxLength: 255 + description: + type: string + color: + type: string + maxLength: 255 + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + workspace: + type: string + format: uuid + readOnly: true + project: + type: string + format: uuid + readOnly: true + nullable: true + parent: + type: string + format: uuid + nullable: true + required: + - name + LabelCreateUpdateRequest: + type: object + description: 'Serializer for creating and updating work item labels. + + + Manages label metadata including colors, descriptions, hierarchy, + + and sorting for work item categorization and filtering.' + properties: + name: + type: string + minLength: 1 + maxLength: 255 + color: + type: string + maxLength: 255 + description: + type: string + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + parent: + type: string + format: uuid + nullable: true + sort_order: + type: number + format: double + required: + - name + Module: + type: object + description: 'Comprehensive module serializer with work item metrics and member management. + + + Provides complete module data including work item counts by status, member + + relationships, and progress tracking for feature-based project organization.' + properties: + id: + type: string + format: uuid + readOnly: true + total_issues: + type: integer + readOnly: true + cancelled_issues: + type: integer + readOnly: true + completed_issues: + type: integer + readOnly: true + started_issues: + type: integer + readOnly: true + unstarted_issues: + type: integer + readOnly: true + backlog_issues: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + description_text: + nullable: true + title: Module Description RT + description_html: + nullable: true + title: Module Description HTML + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + $ref: '#/components/schemas/ModuleStatusEnum' + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + lead: + type: string + format: uuid + nullable: true + required: + - name + ModuleCreateRequest: + type: object + description: 'Serializer for creating modules with member validation and date checking. + + + Handles module creation including member assignment validation, date range + + verification, and duplicate name prevention for feature-based + + project organization setup.' + properties: + name: + type: string + minLength: 1 + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + $ref: '#/components/schemas/ModuleStatusEnum' + lead: + type: string + format: uuid + nullable: true + members: + type: array + items: + type: string + format: uuid + writeOnly: true + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + required: + - name + ModuleIssue: + type: object + description: 'Serializer for module-work item relationships with sub-item counting. + + + Manages the association between modules and work items, including + + hierarchical issue tracking for nested work item structures.' + properties: + id: + type: string + format: uuid + readOnly: true + sub_issues_count: + type: integer + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + module: + type: string + format: uuid + readOnly: true + issue: + type: string + format: uuid + required: + - issue + ModuleIssueRequestRequest: + type: object + description: 'Serializer for bulk work item assignment to modules. + + + Validates work item ID lists for batch operations including + + module assignment and work item organization workflows.' + properties: + issues: + type: array + items: + type: string + format: uuid + description: List of issue IDs to add to the module + required: + - issues + ModuleLite: + type: object + description: 'Lightweight module serializer for minimal data transfer. + + + Provides essential module information without computed metrics, + + optimized for list views and reference lookups.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + description_text: + nullable: true + title: Module Description RT + description_html: + nullable: true + title: Module Description HTML + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + $ref: '#/components/schemas/ModuleStatusEnum' + view_props: {} + sort_order: + type: number + format: double + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + archived_at: + type: string + format: date-time + nullable: true + logo_props: {} + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + project: + type: string + format: uuid + workspace: + type: string + format: uuid + lead: + type: string + format: uuid + nullable: true + members: + type: array + items: + type: string + format: uuid + readOnly: true + required: + - name + - project + - workspace + ModuleStatusEnum: + enum: + - backlog + - planned + - in-progress + - paused + - completed + - cancelled + type: string + description: '* `backlog` - Backlog + + * `planned` - Planned + + * `in-progress` - In Progress + + * `paused` - Paused + + * `completed` - Completed + + * `cancelled` - Cancelled' + NetworkEnum: + enum: + - 0 + - 2 + type: integer + description: '* `0` - Secret + + * `2` - Public' + PaginatedArchivedCycleResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Cycle' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedArchivedModuleResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Module' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedCycleIssueResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Issue' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedCycleLiteResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/CycleLite' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedCycleResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Cycle' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIntakeIssueResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IntakeIssue' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIssueActivityDetailResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IssueActivity' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIssueActivityResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IssueActivity' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIssueCommentResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IssueComment' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIssueLinkDetailResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IssueLink' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedIssueLinkResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/IssueLink' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedLabelResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Label' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedModuleIssueResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Issue' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedModuleLiteResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ModuleLite' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedModuleResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Module' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedProjectLiteResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProjectLite' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedProjectMemberLite: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProjectMemberLiteAPI' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedProjectResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Project' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedStateResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/State' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedWorkItemResponse: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Issue' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PaginatedWorkspaceMemberLite: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/WorkspaceMemberLiteAPI' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + PatchedAssetUpdateRequest: + type: object + description: 'Serializer for asset status updates after successful upload completion. + + + Handles post-upload asset metadata updates including attribute modifications + + and upload confirmation for S3-based file storage workflows.' + properties: + attributes: + description: Additional attributes to update for the asset + PatchedCycleUpdateRequest: + type: object + description: 'Serializer for updating cycles with enhanced ownership management. + + + Extends cycle creation with update-specific features including ownership + + assignment and modification tracking for cycle lifecycle management.' + properties: + name: + type: string + minLength: 1 + title: Cycle Name + maxLength: 255 + description: + type: string + title: Cycle Description + start_date: + type: string + format: date-time + nullable: true + end_date: + type: string + format: date-time + nullable: true + owned_by: + type: string + format: uuid + nullable: true + description: User who owns the cycle. If not provided, defaults to the current user. + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + timezone: + $ref: '#/components/schemas/TimezoneEnum' + PatchedGenericAssetUpdateRequest: + type: object + description: 'Serializer for generic asset upload confirmation and status management. + + + Handles post-upload status updates for workspace assets including + + upload completion marking and metadata finalization.' + properties: + is_uploaded: + type: boolean + default: true + description: Whether the asset has been successfully uploaded + PatchedIntakeIssueUpdateRequest: + type: object + description: 'Serializer for updating intake work items and their associated issues. + + + Handles intake work item modifications including status changes, triage decisions, + + and embedded issue updates for issue queue processing workflows.' + properties: + status: + allOf: + - $ref: '#/components/schemas/IntakeWorkItemStatusEnum' + minimum: -2147483648 + maximum: 2147483647 + snoozed_till: + type: string + format: date-time + nullable: true + duplicate_to: + type: string + format: uuid + nullable: true + source: + type: string + nullable: true + maxLength: 255 + source_email: + type: string + nullable: true + issue: + allOf: + - $ref: '#/components/schemas/IssueForIntakeRequest' + description: Issue data to update in the intake issue + PatchedIssueCommentCreateRequest: + type: object + description: 'Serializer for creating work item comments. + + + Handles comment creation with JSON and HTML content support, + + access control, and external integration tracking.' + properties: + comment_json: {} + comment_html: + type: string + access: + $ref: '#/components/schemas/AccessEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + PatchedIssueLinkUpdateRequest: + type: object + description: 'Serializer for updating work item external links. + + + Extends link creation with update-specific validation to prevent + + URL conflicts and maintain link integrity during modifications.' + properties: + title: + type: string + nullable: true + maxLength: 255 + url: + type: string + minLength: 1 + PatchedIssueRequest: + type: object + description: 'Comprehensive work item serializer with full relationship management. + + + Handles complete work item lifecycle including assignees, labels, validation, + + and related model updates. Supports dynamic field expansion and HTML content + + processing.' + properties: + assignees: + type: array + items: + type: string + format: uuid + writeOnly: true + labels: + type: array + items: + type: string + format: uuid + writeOnly: true + type_id: + type: string + format: uuid + nullable: true + deleted_at: + type: string + format: date-time + nullable: true + point: + type: integer + maximum: 12 + minimum: 0 + nullable: true + name: + type: string + minLength: 1 + title: Issue Name + maxLength: 255 + description_html: + type: string + priority: + allOf: + - $ref: '#/components/schemas/PriorityEnum' + title: Issue Priority + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + sequence_id: + type: integer + maximum: 2147483647 + minimum: -2147483648 + title: Issue Sequence ID + sort_order: + type: number + format: double + archived_at: + type: string + format: date + nullable: true + is_draft: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + nullable: true + parent: + type: string + format: uuid + nullable: true + state: + type: string + format: uuid + nullable: true + estimate_point: + type: string + format: uuid + nullable: true + type: + type: string + format: uuid + nullable: true + PatchedLabelCreateUpdateRequest: + type: object + description: 'Serializer for creating and updating work item labels. + + + Manages label metadata including colors, descriptions, hierarchy, + + and sorting for work item categorization and filtering.' + properties: + name: + type: string + minLength: 1 + maxLength: 255 + color: + type: string + maxLength: 255 + description: + type: string + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + parent: + type: string + format: uuid + nullable: true + sort_order: + type: number + format: double + PatchedModuleUpdateRequest: + type: object + description: 'Serializer for updating modules with enhanced validation and member management. + + + Extends module creation with update-specific validations including + + member reassignment, name conflict checking, + + and relationship management for module modifications.' + properties: + name: + type: string + minLength: 1 + title: Module Name + maxLength: 255 + description: + type: string + title: Module Description + start_date: + type: string + format: date + nullable: true + target_date: + type: string + format: date + nullable: true + status: + $ref: '#/components/schemas/ModuleStatusEnum' + lead: + type: string + format: uuid + nullable: true + members: + type: array + items: + type: string + format: uuid + writeOnly: true + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + PatchedProjectMemberRequest: + type: object + description: Serializer for project members. + properties: + member: + type: string + format: uuid + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + PatchedProjectUpdateRequest: + type: object + description: 'Serializer for updating projects with enhanced state and estimation management. + + + Extends project creation with update-specific validations including default state + + assignment, estimation configuration, and project setting modifications.' + properties: + name: + type: string + minLength: 1 + title: Project Name + maxLength: 255 + description: + type: string + title: Project Description + project_lead: + type: string + format: uuid + nullable: true + default_assignee: + type: string + format: uuid + nullable: true + identifier: + type: string + minLength: 1 + title: Project Identifier + maxLength: 12 + icon_prop: + nullable: true + emoji: + type: string + nullable: true + maxLength: 255 + cover_image: + type: string + nullable: true + module_view: + type: boolean + cycle_view: + type: boolean + issue_views_view: + type: boolean + page_view: + type: boolean + intake_view: + type: boolean + guest_view_all_features: + type: boolean + archive_in: + type: integer + maximum: 12 + minimum: 0 + close_in: + type: integer + maximum: 12 + minimum: 0 + timezone: + $ref: '#/components/schemas/TimezoneEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + is_issue_type_enabled: + type: boolean + is_time_tracking_enabled: + type: boolean + default_state: + type: string + format: uuid + nullable: true + estimate: + type: string + format: uuid + nullable: true + PatchedStateRequest: + type: object + description: 'Serializer for work item states with default state management. + + + Handles state creation and updates including default state validation + + and automatic default state switching for workflow management.' + properties: + name: + type: string + minLength: 1 + title: State Name + maxLength: 255 + description: + type: string + title: State Description + color: + type: string + minLength: 1 + title: State Color + maxLength: 255 + sequence: + type: number + format: double + group: + $ref: '#/components/schemas/GroupEnum' + is_triage: + type: boolean + default: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + PatchedStickyRequest: + type: object + description: 'Base serializer providing common functionality for all model serializers. + + + Features field filtering, dynamic expansion of related fields, and standardized + + primary key handling for consistent API responses across the application.' + properties: + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + nullable: true + description: {} + description_html: + type: string + description_stripped: + type: string + nullable: true + logo_props: {} + color: + type: string + nullable: true + maxLength: 255 + background_color: + type: string + nullable: true + maxLength: 255 + sort_order: + type: number + format: double + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + PatchedWorkspaceInviteRequest: + type: object + description: Serializer for workspace invites. + properties: + email: + type: string + minLength: 1 + maxLength: 255 + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + PriorityEnum: + enum: + - urgent + - high + - medium + - low + - none + type: string + description: '* `urgent` - Urgent + + * `high` - High + + * `medium` - Medium + + * `low` - Low + + * `none` - None' + Project: + type: object + description: 'Comprehensive project serializer with metrics and member context. + + + Provides complete project data including member counts, cycle/module totals, + + deployment status, and user-specific context for project management.' + properties: + id: + type: string + format: uuid + readOnly: true + total_members: + type: integer + readOnly: true + total_cycles: + type: integer + readOnly: true + total_modules: + type: integer + readOnly: true + is_member: + type: boolean + readOnly: true + sort_order: + type: number + format: double + readOnly: true + member_role: + type: integer + readOnly: true + is_deployed: + type: boolean + readOnly: true + cover_image_url: + type: string + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: Project Name + maxLength: 255 + description: + type: string + title: Project Description + description_text: + nullable: true + title: Project Description RT + description_html: + nullable: true + title: Project Description HTML + network: + allOf: + - $ref: '#/components/schemas/NetworkEnum' + minimum: 0 + maximum: 32767 + identifier: + type: string + title: Project Identifier + maxLength: 12 + emoji: + type: string + readOnly: true + nullable: true + icon_prop: + nullable: true + module_view: + type: boolean + cycle_view: + type: boolean + issue_views_view: + type: boolean + page_view: + type: boolean + intake_view: + type: boolean + is_time_tracking_enabled: + type: boolean + is_issue_type_enabled: + type: boolean + guest_view_all_features: + type: boolean + cover_image: + type: string + nullable: true + archive_in: + type: integer + maximum: 12 + minimum: 0 + close_in: + type: integer + maximum: 12 + minimum: 0 + logo_props: {} + archived_at: + type: string + format: date-time + nullable: true + timezone: + $ref: '#/components/schemas/TimezoneEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + workspace: + type: string + format: uuid + readOnly: true + default_assignee: + type: string + format: uuid + nullable: true + project_lead: + type: string + format: uuid + nullable: true + cover_image_asset: + type: string + format: uuid + nullable: true + estimate: + type: string + format: uuid + nullable: true + default_state: + type: string + format: uuid + nullable: true + required: + - identifier + - name + ProjectCreateRequest: + type: object + description: 'Serializer for creating projects with workspace validation. + + + Handles project creation including identifier validation, member verification, + + and workspace association for new project initialization.' + properties: + name: + type: string + minLength: 1 + title: Project Name + maxLength: 255 + description: + type: string + title: Project Description + project_lead: + type: string + format: uuid + nullable: true + default_assignee: + type: string + format: uuid + nullable: true + identifier: + type: string + minLength: 1 + title: Project Identifier + maxLength: 12 + icon_prop: + nullable: true + emoji: + type: string + nullable: true + maxLength: 255 + cover_image: + type: string + nullable: true + module_view: + type: boolean + cycle_view: + type: boolean + issue_views_view: + type: boolean + page_view: + type: boolean + intake_view: + type: boolean + guest_view_all_features: + type: boolean + archive_in: + type: integer + maximum: 12 + minimum: 0 + close_in: + type: integer + maximum: 12 + minimum: 0 + timezone: + $ref: '#/components/schemas/TimezoneEnum' + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + is_issue_type_enabled: + type: boolean + is_time_tracking_enabled: + type: boolean + required: + - identifier + - name + ProjectLite: + type: object + description: 'Lightweight project serializer for minimal data transfer. + + + Provides essential project information including identifiers, visual properties, + + and basic metadata optimized for list views and references.' + properties: + id: + type: string + format: uuid + readOnly: true + identifier: + type: string + readOnly: true + title: Project Identifier + name: + type: string + readOnly: true + title: Project Name + cover_image: + type: string + readOnly: true + nullable: true + icon_prop: + readOnly: true + nullable: true + emoji: + type: string + readOnly: true + nullable: true + description: + type: string + readOnly: true + title: Project Description + cover_image_url: + type: string + readOnly: true + archived_at: + type: string + format: date-time + readOnly: true + nullable: true + ProjectMember: + type: object + description: Serializer for project members. + properties: + id: + type: string + format: uuid + readOnly: true + member: + type: string + format: uuid + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + required: + - member + ProjectMemberLiteAPI: + type: object + description: Minimal ProjectMember representation for paginated member pickers/directories. + properties: + id: + type: string + format: uuid + readOnly: true + first_name: + type: string + readOnly: true + last_name: + type: string + readOnly: true + email: + type: string + format: email + readOnly: true + avatar: + type: string + readOnly: true + nullable: true + avatar_url: + type: string + readOnly: true + nullable: true + display_name: + type: string + readOnly: true + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + readOnly: true + is_active: + type: boolean + readOnly: true + is_bot: + type: boolean + readOnly: true + ProjectMemberRequest: + type: object + description: Serializer for project members. + properties: + member: + type: string + format: uuid + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + required: + - member + RelationTypeEnum: + enum: + - blocking + - blocked_by + - duplicate + - relates_to + - start_before + - start_after + - finish_before + - finish_after + type: string + description: '* `blocking` - Blocking + + * `blocked_by` - Blocked By + + * `duplicate` - Duplicate + + * `relates_to` - Relates To + + * `start_before` - Start Before + + * `start_after` - Start After + + * `finish_before` - Finish Before + + * `finish_after` - Finish After' + RoleEnum: + enum: + - 20 + - 15 + - 5 + type: integer + description: '* `20` - Admin + + * `15` - Member + + * `5` - Guest' + State: + type: object + description: 'Serializer for work item states with default state management. + + + Handles state creation and updates including default state validation + + and automatic default state switching for workflow management.' + properties: + id: + type: string + format: uuid + readOnly: true + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + deleted_at: + type: string + format: date-time + readOnly: true + nullable: true + name: + type: string + title: State Name + maxLength: 255 + description: + type: string + title: State Description + color: + type: string + title: State Color + maxLength: 255 + slug: + type: string + readOnly: true + pattern: ^[-a-zA-Z0-9_]+$ + sequence: + type: number + format: double + group: + $ref: '#/components/schemas/GroupEnum' + is_triage: + type: boolean + default: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + created_by: + type: string + format: uuid + readOnly: true + nullable: true + updated_by: + type: string + format: uuid + readOnly: true + nullable: true + title: Last Modified By + project: + type: string + format: uuid + readOnly: true + workspace: + type: string + format: uuid + readOnly: true + required: + - color + - name + StateLite: + type: object + description: 'Lightweight state serializer for minimal data transfer. + + + Provides essential state information including visual properties + + and grouping data optimized for UI display and filtering.' + properties: + id: + type: string + format: uuid + readOnly: true + name: + type: string + readOnly: true + title: State Name + color: + type: string + readOnly: true + title: State Color + group: + allOf: + - $ref: '#/components/schemas/GroupEnum' + readOnly: true + StateRequest: + type: object + description: 'Serializer for work item states with default state management. + + + Handles state creation and updates including default state validation + + and automatic default state switching for workflow management.' + properties: + name: + type: string + minLength: 1 + title: State Name + maxLength: 255 + description: + type: string + title: State Description + color: + type: string + minLength: 1 + title: State Color + maxLength: 255 + sequence: + type: number + format: double + group: + $ref: '#/components/schemas/GroupEnum' + is_triage: + type: boolean + default: + type: boolean + external_source: + type: string + nullable: true + maxLength: 255 + external_id: + type: string + nullable: true + maxLength: 255 + required: + - color + - name + Sticky: + type: object + properties: + grouped_by: + type: string + nullable: true + sub_grouped_by: + type: string + nullable: true + total_count: + type: integer + next_cursor: + type: string + prev_cursor: + type: string + next_page_results: + type: boolean + prev_page_results: + type: boolean + count: + type: integer + total_pages: + type: integer + total_results: + type: integer + extra_stats: + type: string + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Sticky' + required: + - count + - extra_stats + - grouped_by + - next_cursor + - next_page_results + - prev_cursor + - prev_page_results + - results + - sub_grouped_by + - total_count + - total_pages + - total_results + StickyRequest: + type: object + description: 'Base serializer providing common functionality for all model serializers. + + + Features field filtering, dynamic expansion of related fields, and standardized + + primary key handling for consistent API responses across the application.' + properties: + deleted_at: + type: string + format: date-time + nullable: true + name: + type: string + nullable: true + description: {} + description_html: + type: string + description_stripped: + type: string + nullable: true + logo_props: {} + color: + type: string + nullable: true + maxLength: 255 + background_color: + type: string + nullable: true + maxLength: 255 + sort_order: + type: number + format: double + created_by: + type: string + format: uuid + nullable: true + updated_by: + type: string + format: uuid + nullable: true + title: Last Modified By + TimezoneEnum: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Fort_Nelson + - America/Fortaleza + - America/Glace_Bay + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Chita + - Asia/Choibalsan + - Asia/Colombo + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kathmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Riyadh + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ulaanbaatar + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faroe + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/Perth + - Australia/Sydney + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Ulyanovsk + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zurich + - GMT + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Wake + - Pacific/Wallis + - US/Alaska + - US/Arizona + - US/Central + - US/Eastern + - US/Hawaii + - US/Mountain + - US/Pacific + - UTC + type: string + description: '* `Africa/Abidjan` - Africa/Abidjan + + * `Africa/Accra` - Africa/Accra + + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + + * `Africa/Algiers` - Africa/Algiers + + * `Africa/Asmara` - Africa/Asmara + + * `Africa/Bamako` - Africa/Bamako + + * `Africa/Bangui` - Africa/Bangui + + * `Africa/Banjul` - Africa/Banjul + + * `Africa/Bissau` - Africa/Bissau + + * `Africa/Blantyre` - Africa/Blantyre + + * `Africa/Brazzaville` - Africa/Brazzaville + + * `Africa/Bujumbura` - Africa/Bujumbura + + * `Africa/Cairo` - Africa/Cairo + + * `Africa/Casablanca` - Africa/Casablanca + + * `Africa/Ceuta` - Africa/Ceuta + + * `Africa/Conakry` - Africa/Conakry + + * `Africa/Dakar` - Africa/Dakar + + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + + * `Africa/Djibouti` - Africa/Djibouti + + * `Africa/Douala` - Africa/Douala + + * `Africa/El_Aaiun` - Africa/El_Aaiun + + * `Africa/Freetown` - Africa/Freetown + + * `Africa/Gaborone` - Africa/Gaborone + + * `Africa/Harare` - Africa/Harare + + * `Africa/Johannesburg` - Africa/Johannesburg + + * `Africa/Juba` - Africa/Juba + + * `Africa/Kampala` - Africa/Kampala + + * `Africa/Khartoum` - Africa/Khartoum + + * `Africa/Kigali` - Africa/Kigali + + * `Africa/Kinshasa` - Africa/Kinshasa + + * `Africa/Lagos` - Africa/Lagos + + * `Africa/Libreville` - Africa/Libreville + + * `Africa/Lome` - Africa/Lome + + * `Africa/Luanda` - Africa/Luanda + + * `Africa/Lubumbashi` - Africa/Lubumbashi + + * `Africa/Lusaka` - Africa/Lusaka + + * `Africa/Malabo` - Africa/Malabo + + * `Africa/Maputo` - Africa/Maputo + + * `Africa/Maseru` - Africa/Maseru + + * `Africa/Mbabane` - Africa/Mbabane + + * `Africa/Mogadishu` - Africa/Mogadishu + + * `Africa/Monrovia` - Africa/Monrovia + + * `Africa/Nairobi` - Africa/Nairobi + + * `Africa/Ndjamena` - Africa/Ndjamena + + * `Africa/Niamey` - Africa/Niamey + + * `Africa/Nouakchott` - Africa/Nouakchott + + * `Africa/Ouagadougou` - Africa/Ouagadougou + + * `Africa/Porto-Novo` - Africa/Porto-Novo + + * `Africa/Sao_Tome` - Africa/Sao_Tome + + * `Africa/Tripoli` - Africa/Tripoli + + * `Africa/Tunis` - Africa/Tunis + + * `Africa/Windhoek` - Africa/Windhoek + + * `America/Adak` - America/Adak + + * `America/Anchorage` - America/Anchorage + + * `America/Anguilla` - America/Anguilla + + * `America/Antigua` - America/Antigua + + * `America/Araguaina` - America/Araguaina + + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + + * `America/Argentina/Salta` - America/Argentina/Salta + + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + + * `America/Aruba` - America/Aruba + + * `America/Asuncion` - America/Asuncion + + * `America/Atikokan` - America/Atikokan + + * `America/Bahia` - America/Bahia + + * `America/Bahia_Banderas` - America/Bahia_Banderas + + * `America/Barbados` - America/Barbados + + * `America/Belem` - America/Belem + + * `America/Belize` - America/Belize + + * `America/Blanc-Sablon` - America/Blanc-Sablon + + * `America/Boa_Vista` - America/Boa_Vista + + * `America/Bogota` - America/Bogota + + * `America/Boise` - America/Boise + + * `America/Cambridge_Bay` - America/Cambridge_Bay + + * `America/Campo_Grande` - America/Campo_Grande + + * `America/Cancun` - America/Cancun + + * `America/Caracas` - America/Caracas + + * `America/Cayenne` - America/Cayenne + + * `America/Cayman` - America/Cayman + + * `America/Chicago` - America/Chicago + + * `America/Chihuahua` - America/Chihuahua + + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + + * `America/Costa_Rica` - America/Costa_Rica + + * `America/Creston` - America/Creston + + * `America/Cuiaba` - America/Cuiaba + + * `America/Curacao` - America/Curacao + + * `America/Danmarkshavn` - America/Danmarkshavn + + * `America/Dawson` - America/Dawson + + * `America/Dawson_Creek` - America/Dawson_Creek + + * `America/Denver` - America/Denver + + * `America/Detroit` - America/Detroit + + * `America/Dominica` - America/Dominica + + * `America/Edmonton` - America/Edmonton + + * `America/Eirunepe` - America/Eirunepe + + * `America/El_Salvador` - America/El_Salvador + + * `America/Fort_Nelson` - America/Fort_Nelson + + * `America/Fortaleza` - America/Fortaleza + + * `America/Glace_Bay` - America/Glace_Bay + + * `America/Goose_Bay` - America/Goose_Bay + + * `America/Grand_Turk` - America/Grand_Turk + + * `America/Grenada` - America/Grenada + + * `America/Guadeloupe` - America/Guadeloupe + + * `America/Guatemala` - America/Guatemala + + * `America/Guayaquil` - America/Guayaquil + + * `America/Guyana` - America/Guyana + + * `America/Halifax` - America/Halifax + + * `America/Havana` - America/Havana + + * `America/Hermosillo` - America/Hermosillo + + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + + * `America/Indiana/Knox` - America/Indiana/Knox + + * `America/Indiana/Marengo` - America/Indiana/Marengo + + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + + * `America/Indiana/Vevay` - America/Indiana/Vevay + + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + + * `America/Indiana/Winamac` - America/Indiana/Winamac + + * `America/Inuvik` - America/Inuvik + + * `America/Iqaluit` - America/Iqaluit + + * `America/Jamaica` - America/Jamaica + + * `America/Juneau` - America/Juneau + + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + + * `America/Kralendijk` - America/Kralendijk + + * `America/La_Paz` - America/La_Paz + + * `America/Lima` - America/Lima + + * `America/Los_Angeles` - America/Los_Angeles + + * `America/Lower_Princes` - America/Lower_Princes + + * `America/Maceio` - America/Maceio + + * `America/Managua` - America/Managua + + * `America/Manaus` - America/Manaus + + * `America/Marigot` - America/Marigot + + * `America/Martinique` - America/Martinique + + * `America/Matamoros` - America/Matamoros + + * `America/Mazatlan` - America/Mazatlan + + * `America/Menominee` - America/Menominee + + * `America/Merida` - America/Merida + + * `America/Metlakatla` - America/Metlakatla + + * `America/Mexico_City` - America/Mexico_City + + * `America/Miquelon` - America/Miquelon + + * `America/Moncton` - America/Moncton + + * `America/Monterrey` - America/Monterrey + + * `America/Montevideo` - America/Montevideo + + * `America/Montserrat` - America/Montserrat + + * `America/Nassau` - America/Nassau + + * `America/New_York` - America/New_York + + * `America/Nome` - America/Nome + + * `America/Noronha` - America/Noronha + + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + + * `America/North_Dakota/Center` - America/North_Dakota/Center + + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + + * `America/Nuuk` - America/Nuuk + + * `America/Ojinaga` - America/Ojinaga + + * `America/Panama` - America/Panama + + * `America/Paramaribo` - America/Paramaribo + + * `America/Phoenix` - America/Phoenix + + * `America/Port-au-Prince` - America/Port-au-Prince + + * `America/Port_of_Spain` - America/Port_of_Spain + + * `America/Porto_Velho` - America/Porto_Velho + + * `America/Puerto_Rico` - America/Puerto_Rico + + * `America/Punta_Arenas` - America/Punta_Arenas + + * `America/Rankin_Inlet` - America/Rankin_Inlet + + * `America/Recife` - America/Recife + + * `America/Regina` - America/Regina + + * `America/Resolute` - America/Resolute + + * `America/Rio_Branco` - America/Rio_Branco + + * `America/Santarem` - America/Santarem + + * `America/Santiago` - America/Santiago + + * `America/Santo_Domingo` - America/Santo_Domingo + + * `America/Sao_Paulo` - America/Sao_Paulo + + * `America/Scoresbysund` - America/Scoresbysund + + * `America/Sitka` - America/Sitka + + * `America/St_Barthelemy` - America/St_Barthelemy + + * `America/St_Johns` - America/St_Johns + + * `America/St_Kitts` - America/St_Kitts + + * `America/St_Lucia` - America/St_Lucia + + * `America/St_Thomas` - America/St_Thomas + + * `America/St_Vincent` - America/St_Vincent + + * `America/Swift_Current` - America/Swift_Current + + * `America/Tegucigalpa` - America/Tegucigalpa + + * `America/Thule` - America/Thule + + * `America/Tijuana` - America/Tijuana + + * `America/Toronto` - America/Toronto + + * `America/Tortola` - America/Tortola + + * `America/Vancouver` - America/Vancouver + + * `America/Whitehorse` - America/Whitehorse + + * `America/Winnipeg` - America/Winnipeg + + * `America/Yakutat` - America/Yakutat + + * `Antarctica/Casey` - Antarctica/Casey + + * `Antarctica/Davis` - Antarctica/Davis + + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + + * `Antarctica/Macquarie` - Antarctica/Macquarie + + * `Antarctica/Mawson` - Antarctica/Mawson + + * `Antarctica/McMurdo` - Antarctica/McMurdo + + * `Antarctica/Palmer` - Antarctica/Palmer + + * `Antarctica/Rothera` - Antarctica/Rothera + + * `Antarctica/Syowa` - Antarctica/Syowa + + * `Antarctica/Troll` - Antarctica/Troll + + * `Antarctica/Vostok` - Antarctica/Vostok + + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + + * `Asia/Aden` - Asia/Aden + + * `Asia/Almaty` - Asia/Almaty + + * `Asia/Amman` - Asia/Amman + + * `Asia/Anadyr` - Asia/Anadyr + + * `Asia/Aqtau` - Asia/Aqtau + + * `Asia/Aqtobe` - Asia/Aqtobe + + * `Asia/Ashgabat` - Asia/Ashgabat + + * `Asia/Atyrau` - Asia/Atyrau + + * `Asia/Baghdad` - Asia/Baghdad + + * `Asia/Bahrain` - Asia/Bahrain + + * `Asia/Baku` - Asia/Baku + + * `Asia/Bangkok` - Asia/Bangkok + + * `Asia/Barnaul` - Asia/Barnaul + + * `Asia/Beirut` - Asia/Beirut + + * `Asia/Bishkek` - Asia/Bishkek + + * `Asia/Brunei` - Asia/Brunei + + * `Asia/Chita` - Asia/Chita + + * `Asia/Choibalsan` - Asia/Choibalsan + + * `Asia/Colombo` - Asia/Colombo + + * `Asia/Damascus` - Asia/Damascus + + * `Asia/Dhaka` - Asia/Dhaka + + * `Asia/Dili` - Asia/Dili + + * `Asia/Dubai` - Asia/Dubai + + * `Asia/Dushanbe` - Asia/Dushanbe + + * `Asia/Famagusta` - Asia/Famagusta + + * `Asia/Gaza` - Asia/Gaza + + * `Asia/Hebron` - Asia/Hebron + + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + + * `Asia/Hong_Kong` - Asia/Hong_Kong + + * `Asia/Hovd` - Asia/Hovd + + * `Asia/Irkutsk` - Asia/Irkutsk + + * `Asia/Jakarta` - Asia/Jakarta + + * `Asia/Jayapura` - Asia/Jayapura + + * `Asia/Jerusalem` - Asia/Jerusalem + + * `Asia/Kabul` - Asia/Kabul + + * `Asia/Kamchatka` - Asia/Kamchatka + + * `Asia/Karachi` - Asia/Karachi + + * `Asia/Kathmandu` - Asia/Kathmandu + + * `Asia/Khandyga` - Asia/Khandyga + + * `Asia/Kolkata` - Asia/Kolkata + + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + + * `Asia/Kuching` - Asia/Kuching + + * `Asia/Kuwait` - Asia/Kuwait + + * `Asia/Macau` - Asia/Macau + + * `Asia/Magadan` - Asia/Magadan + + * `Asia/Makassar` - Asia/Makassar + + * `Asia/Manila` - Asia/Manila + + * `Asia/Muscat` - Asia/Muscat + + * `Asia/Nicosia` - Asia/Nicosia + + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + + * `Asia/Novosibirsk` - Asia/Novosibirsk + + * `Asia/Omsk` - Asia/Omsk + + * `Asia/Oral` - Asia/Oral + + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + + * `Asia/Pontianak` - Asia/Pontianak + + * `Asia/Pyongyang` - Asia/Pyongyang + + * `Asia/Qatar` - Asia/Qatar + + * `Asia/Qostanay` - Asia/Qostanay + + * `Asia/Qyzylorda` - Asia/Qyzylorda + + * `Asia/Riyadh` - Asia/Riyadh + + * `Asia/Sakhalin` - Asia/Sakhalin + + * `Asia/Samarkand` - Asia/Samarkand + + * `Asia/Seoul` - Asia/Seoul + + * `Asia/Shanghai` - Asia/Shanghai + + * `Asia/Singapore` - Asia/Singapore + + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + + * `Asia/Taipei` - Asia/Taipei + + * `Asia/Tashkent` - Asia/Tashkent + + * `Asia/Tbilisi` - Asia/Tbilisi + + * `Asia/Tehran` - Asia/Tehran + + * `Asia/Thimphu` - Asia/Thimphu + + * `Asia/Tokyo` - Asia/Tokyo + + * `Asia/Tomsk` - Asia/Tomsk + + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + + * `Asia/Urumqi` - Asia/Urumqi + + * `Asia/Ust-Nera` - Asia/Ust-Nera + + * `Asia/Vientiane` - Asia/Vientiane + + * `Asia/Vladivostok` - Asia/Vladivostok + + * `Asia/Yakutsk` - Asia/Yakutsk + + * `Asia/Yangon` - Asia/Yangon + + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + + * `Asia/Yerevan` - Asia/Yerevan + + * `Atlantic/Azores` - Atlantic/Azores + + * `Atlantic/Bermuda` - Atlantic/Bermuda + + * `Atlantic/Canary` - Atlantic/Canary + + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + + * `Atlantic/Faroe` - Atlantic/Faroe + + * `Atlantic/Madeira` - Atlantic/Madeira + + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + + * `Atlantic/St_Helena` - Atlantic/St_Helena + + * `Atlantic/Stanley` - Atlantic/Stanley + + * `Australia/Adelaide` - Australia/Adelaide + + * `Australia/Brisbane` - Australia/Brisbane + + * `Australia/Broken_Hill` - Australia/Broken_Hill + + * `Australia/Darwin` - Australia/Darwin + + * `Australia/Eucla` - Australia/Eucla + + * `Australia/Hobart` - Australia/Hobart + + * `Australia/Lindeman` - Australia/Lindeman + + * `Australia/Lord_Howe` - Australia/Lord_Howe + + * `Australia/Melbourne` - Australia/Melbourne + + * `Australia/Perth` - Australia/Perth + + * `Australia/Sydney` - Australia/Sydney + + * `Canada/Atlantic` - Canada/Atlantic + + * `Canada/Central` - Canada/Central + + * `Canada/Eastern` - Canada/Eastern + + * `Canada/Mountain` - Canada/Mountain + + * `Canada/Newfoundland` - Canada/Newfoundland + + * `Canada/Pacific` - Canada/Pacific + + * `Europe/Amsterdam` - Europe/Amsterdam + + * `Europe/Andorra` - Europe/Andorra + + * `Europe/Astrakhan` - Europe/Astrakhan + + * `Europe/Athens` - Europe/Athens + + * `Europe/Belgrade` - Europe/Belgrade + + * `Europe/Berlin` - Europe/Berlin + + * `Europe/Bratislava` - Europe/Bratislava + + * `Europe/Brussels` - Europe/Brussels + + * `Europe/Bucharest` - Europe/Bucharest + + * `Europe/Budapest` - Europe/Budapest + + * `Europe/Busingen` - Europe/Busingen + + * `Europe/Chisinau` - Europe/Chisinau + + * `Europe/Copenhagen` - Europe/Copenhagen + + * `Europe/Dublin` - Europe/Dublin + + * `Europe/Gibraltar` - Europe/Gibraltar + + * `Europe/Guernsey` - Europe/Guernsey + + * `Europe/Helsinki` - Europe/Helsinki + + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + + * `Europe/Istanbul` - Europe/Istanbul + + * `Europe/Jersey` - Europe/Jersey + + * `Europe/Kaliningrad` - Europe/Kaliningrad + + * `Europe/Kirov` - Europe/Kirov + + * `Europe/Kyiv` - Europe/Kyiv + + * `Europe/Lisbon` - Europe/Lisbon + + * `Europe/Ljubljana` - Europe/Ljubljana + + * `Europe/London` - Europe/London + + * `Europe/Luxembourg` - Europe/Luxembourg + + * `Europe/Madrid` - Europe/Madrid + + * `Europe/Malta` - Europe/Malta + + * `Europe/Mariehamn` - Europe/Mariehamn + + * `Europe/Minsk` - Europe/Minsk + + * `Europe/Monaco` - Europe/Monaco + + * `Europe/Moscow` - Europe/Moscow + + * `Europe/Oslo` - Europe/Oslo + + * `Europe/Paris` - Europe/Paris + + * `Europe/Podgorica` - Europe/Podgorica + + * `Europe/Prague` - Europe/Prague + + * `Europe/Riga` - Europe/Riga + + * `Europe/Rome` - Europe/Rome + + * `Europe/Samara` - Europe/Samara + + * `Europe/San_Marino` - Europe/San_Marino + + * `Europe/Sarajevo` - Europe/Sarajevo + + * `Europe/Saratov` - Europe/Saratov + + * `Europe/Simferopol` - Europe/Simferopol + + * `Europe/Skopje` - Europe/Skopje + + * `Europe/Sofia` - Europe/Sofia + + * `Europe/Stockholm` - Europe/Stockholm + + * `Europe/Tallinn` - Europe/Tallinn + + * `Europe/Tirane` - Europe/Tirane + + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + + * `Europe/Vaduz` - Europe/Vaduz + + * `Europe/Vatican` - Europe/Vatican + + * `Europe/Vienna` - Europe/Vienna + + * `Europe/Vilnius` - Europe/Vilnius + + * `Europe/Volgograd` - Europe/Volgograd + + * `Europe/Warsaw` - Europe/Warsaw + + * `Europe/Zagreb` - Europe/Zagreb + + * `Europe/Zurich` - Europe/Zurich + + * `GMT` - GMT + + * `Indian/Antananarivo` - Indian/Antananarivo + + * `Indian/Chagos` - Indian/Chagos + + * `Indian/Christmas` - Indian/Christmas + + * `Indian/Cocos` - Indian/Cocos + + * `Indian/Comoro` - Indian/Comoro + + * `Indian/Kerguelen` - Indian/Kerguelen + + * `Indian/Mahe` - Indian/Mahe + + * `Indian/Maldives` - Indian/Maldives + + * `Indian/Mauritius` - Indian/Mauritius + + * `Indian/Mayotte` - Indian/Mayotte + + * `Indian/Reunion` - Indian/Reunion + + * `Pacific/Apia` - Pacific/Apia + + * `Pacific/Auckland` - Pacific/Auckland + + * `Pacific/Bougainville` - Pacific/Bougainville + + * `Pacific/Chatham` - Pacific/Chatham + + * `Pacific/Chuuk` - Pacific/Chuuk + + * `Pacific/Easter` - Pacific/Easter + + * `Pacific/Efate` - Pacific/Efate + + * `Pacific/Fakaofo` - Pacific/Fakaofo + + * `Pacific/Fiji` - Pacific/Fiji + + * `Pacific/Funafuti` - Pacific/Funafuti + + * `Pacific/Galapagos` - Pacific/Galapagos + + * `Pacific/Gambier` - Pacific/Gambier + + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + + * `Pacific/Guam` - Pacific/Guam + + * `Pacific/Honolulu` - Pacific/Honolulu + + * `Pacific/Kanton` - Pacific/Kanton + + * `Pacific/Kiritimati` - Pacific/Kiritimati + + * `Pacific/Kosrae` - Pacific/Kosrae + + * `Pacific/Kwajalein` - Pacific/Kwajalein + + * `Pacific/Majuro` - Pacific/Majuro + + * `Pacific/Marquesas` - Pacific/Marquesas + + * `Pacific/Midway` - Pacific/Midway + + * `Pacific/Nauru` - Pacific/Nauru + + * `Pacific/Niue` - Pacific/Niue + + * `Pacific/Norfolk` - Pacific/Norfolk + + * `Pacific/Noumea` - Pacific/Noumea + + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + + * `Pacific/Palau` - Pacific/Palau + + * `Pacific/Pitcairn` - Pacific/Pitcairn + + * `Pacific/Pohnpei` - Pacific/Pohnpei + + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + + * `Pacific/Rarotonga` - Pacific/Rarotonga + + * `Pacific/Saipan` - Pacific/Saipan + + * `Pacific/Tahiti` - Pacific/Tahiti + + * `Pacific/Tarawa` - Pacific/Tarawa + + * `Pacific/Tongatapu` - Pacific/Tongatapu + + * `Pacific/Wake` - Pacific/Wake + + * `Pacific/Wallis` - Pacific/Wallis + + * `US/Alaska` - US/Alaska + + * `US/Arizona` - US/Arizona + + * `US/Central` - US/Central + + * `US/Eastern` - US/Eastern + + * `US/Hawaii` - US/Hawaii + + * `US/Mountain` - US/Mountain + + * `US/Pacific` - US/Pacific + + * `UTC` - UTC' + TransferCycleIssueRequestRequest: + type: object + description: 'Serializer for transferring work items between cycles. + + + Handles work item migration between cycles including validation + + and relationship updates for sprint reallocation workflows.' + properties: + new_cycle_id: + type: string + format: uuid + description: ID of the target cycle to transfer issues to + required: + - new_cycle_id + TypeEnum: + enum: + - image/jpeg + - image/png + - image/webp + - image/jpg + - image/gif + type: string + description: '* `image/jpeg` - JPEG + + * `image/png` - PNG + + * `image/webp` - WebP + + * `image/jpg` - JPG + + * `image/gif` - GIF' + UserAssetUploadRequest: + type: object + description: 'Serializer for user asset upload requests. + + + This serializer validates the metadata required to generate a presigned URL + + for uploading user profile assets (avatar or cover image) directly to S3 storage. + + Supports JPEG, PNG, WebP, JPG, and GIF image formats with size validation.' + properties: + name: + type: string + minLength: 1 + description: Original filename of the asset + type: + allOf: + - $ref: '#/components/schemas/TypeEnum' + default: image/jpeg + description: 'MIME type of the file + + + * `image/jpeg` - JPEG + + * `image/png` - PNG + + * `image/webp` - WebP + + * `image/jpg` - JPG + + * `image/gif` - GIF' + size: + type: integer + description: File size in bytes + entity_type: + allOf: + - $ref: '#/components/schemas/EntityTypeEnum' + description: 'Type of user asset + + + * `USER_AVATAR` - User Avatar + + * `USER_COVER` - User Cover' + required: + - entity_type + - name + - size + UserLite: + type: object + description: 'Lightweight user serializer for minimal data transfer. + + + Provides essential user information including names, avatar, and contact details + + optimized for member lists, assignee displays, and user references.' + properties: + id: + type: string + format: uuid + readOnly: true + first_name: + type: string + readOnly: true + last_name: + type: string + readOnly: true + email: + type: string + readOnly: true + nullable: true + avatar: + type: string + readOnly: true + avatar_url: + type: string + readOnly: true + description: Avatar URL + display_name: + type: string + readOnly: true + WorkspaceInvite: + type: object + description: Serializer for workspace invites. + properties: + id: + type: string + format: uuid + readOnly: true + email: + type: string + maxLength: 255 + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + title: Last Modified At + responded_at: + type: string + format: date-time + readOnly: true + nullable: true + accepted: + type: boolean + readOnly: true + required: + - email + WorkspaceInviteRequest: + type: object + description: Serializer for workspace invites. + properties: + email: + type: string + minLength: 1 + maxLength: 255 + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + minimum: 0 + maximum: 32767 + required: + - email + WorkspaceMemberLiteAPI: + type: object + description: Minimal WorkspaceMember representation for paginated member pickers/directories. + properties: + id: + type: string + format: uuid + readOnly: true + first_name: + type: string + readOnly: true + last_name: + type: string + readOnly: true + email: + type: string + format: email + readOnly: true + avatar: + type: string + readOnly: true + nullable: true + avatar_url: + type: string + readOnly: true + nullable: true + display_name: + type: string + readOnly: true + role: + allOf: + - $ref: '#/components/schemas/RoleEnum' + readOnly: true + is_active: + type: boolean + readOnly: true + is_bot: + type: boolean + readOnly: true + securitySchemes: + ApiKeyAuthentication: + type: apiKey + in: header + name: X-API-Key + description: API key authentication. Provide your API key in the X-API-Key header. +servers: +- url: https://api.plane.so + description: Production +- url: http://localhost:8000 + description: Local +tags: +- name: Assets + description: '**File Upload & Presigned URLs** + + + Generate presigned URLs for direct file uploads to cloud storage. Handle user avatars, cover images, + and generic project assets with secure upload workflows. + + + *Key Features:* + + - Generate presigned URLs for S3 uploads + + - Support for user avatars and cover images + + - Generic asset upload for projects + + - File validation and size limits + + + *Use Cases:* User profile images, project file uploads, secure direct-to-cloud uploads.' +- name: Cycles + description: '**Sprint & Development Cycles** + + + Create and manage development cycles (sprints) to organize work into time-boxed iterations. Track + progress, assign work items, and monitor team velocity. + + + *Key Features:* + + - Create and configure development cycles + + - Assign work items to cycles + + - Track cycle progress and completion + + - Generate cycle analytics and reports + + + *Use Cases:* Sprint planning, iterative development, progress tracking, team velocity.' +- name: Intake + description: '**Work Item Intake Queue** + + + Manage incoming work items through a dedicated intake queue for triage and review. Submit, update, + and process work items before they enter the main project workflow. + + + *Key Features:* + + - Submit work items to intake queue + + - Review and triage incoming work items + + - Update intake work item status and properties + + - Accept, reject, or modify work items before approval + + + *Use Cases:* Work item triage, external submissions, quality review, approval workflows.' +- name: Labels + description: '**Labels & Tags** + + + Create and manage labels to categorize and organize work items. Use color-coded labels for easy identification, + filtering, and project organization. + + + *Key Features:* + + - Create custom labels with colors and descriptions + + - Apply labels to work items for categorization + + - Filter and search by labels + + - Organize labels across projects + + + *Use Cases:* Priority marking, feature categorization, bug classification, team organization.' +- name: Members + description: '**Team Member Management** + + + Manage team members, roles, and permissions within projects and workspaces. Control access levels + and track member participation. + + + *Key Features:* + + - Invite and manage team members + + - Assign roles and permissions + + - Control project and workspace access + + - Track member activity and participation + + + *Use Cases:* Team setup, access control, role management, collaboration.' +- name: Modules + description: '**Feature Modules** + + + Group related work items into modules for better organization and tracking. Plan features, track progress, + and manage deliverables at a higher level. + + + *Key Features:* + + - Create and organize feature modules + + - Group work items by module + + - Track module progress and completion + + - Manage module leads and assignments + + + *Use Cases:* Feature planning, release organization, progress tracking, team coordination.' +- name: Projects + description: '**Project Management** + + + Create and manage projects to organize your development work. Configure project settings, manage team + access, and control project visibility. + + + *Key Features:* + + - Create, update, and delete projects + + - Configure project settings and preferences + + - Manage team access and permissions + + - Control project visibility and sharing + + + *Use Cases:* Project setup, team collaboration, access control, project configuration.' +- name: States + description: '**Workflow States** + + + Define custom workflow states for work items to match your team''s process. Configure state transitions + and track work item progress through different stages. + + + *Key Features:* + + - Create custom workflow states + + - Configure state transitions and rules + + - Track work item progress through states + + - Set state-based permissions and automation + + + *Use Cases:* Custom workflows, status tracking, process automation, progress monitoring.' +- name: Users + description: '**Current User Information** + + + Get information about the currently authenticated user including profile details and account settings. + + + *Key Features:* + + - Retrieve current user profile + + - Access user account information + + - View user preferences and settings + + - Get authentication context + + + *Use Cases:* Profile display, user context, account information, authentication status.' +- name: Work Item Activity + description: '**Activity History & Search** + + + View activity history and search for work items across the workspace. Get detailed activity logs and + find work items using text search. + + + *Key Features:* + + - View work item activity history + + - Search work items across workspace + + - Track changes and modifications + + - Filter search results by project + + + *Use Cases:* Activity tracking, work item discovery, change history, workspace search.' +- name: Work Item Attachments + description: '**Work Item File Attachments** + + + Generate presigned URLs for uploading files directly to specific work items. Upload and manage attachments + associated with work items. + + + *Key Features:* + + - Generate presigned URLs for work item attachments + + - Upload files directly to work items + + - Retrieve and manage attachment metadata + + - Delete attachments from work items + + + *Use Cases:* Screenshots, error logs, design files, supporting documents.' +- name: Work Item Comments + description: '**Comments & Discussions** + + + Add comments and discussions to work items for team collaboration. Support threaded conversations, + mentions, and rich text formatting. + + + *Key Features:* + + - Add comments to work items + + - Thread conversations and replies + + - Mention users and trigger notifications + + - Rich text and markdown support + + + *Use Cases:* Team discussions, progress updates, code reviews, decision tracking.' +- name: Work Item Links + description: '**External Links & References** + + + Link work items to external resources like documentation, repositories, or design files. Maintain + connections between work items and external systems. + + + *Key Features:* + + - Add external URL links to work items + + - Validate and preview linked resources + + - Organize links by type and category + + - Track link usage and access + + + *Use Cases:* Documentation links, repository connections, design references, external tools.' +- name: Work Items + description: '**Work Items & Tasks** + + + Create and manage work items like tasks, bugs, features, and user stories. The core entities for tracking + work in your projects. + + + *Key Features:* + + - Create, update, and manage work items + + - Assign to team members and set priorities + + - Track progress through workflow states + + - Set due dates, estimates, and relationships + + + *Use Cases:* Bug tracking, task management, feature development, sprint planning.'