{ "openapi": "3.1.0", "info": { "title": "KanbanGit Application API", "version": "0.1.0", "description": "First-party JSON API for KanbanGit UI-equivalent workflows. Application endpoints require a bearer application key created in Settings > Applications." }, "servers": [ { "url": "/api" } ], "security": [ { "ApplicationKey": [] } ], "tags": [ { "name": "Projects" }, { "name": "Tickets" }, { "name": "Board" }, { "name": "Metadata" }, { "name": "Repositories" }, { "name": "Git Connections" }, { "name": "Users" } ], "paths": { "/projects": { "get": { "tags": ["Projects"], "operationId": "listProjects", "responses": { "200": { "$ref": "#/components/responses/ProjectCollection" }, "401": { "$ref": "#/components/responses/Unauthenticated" } } }, "post": { "tags": ["Projects"], "operationId": "createProject", "requestBody": { "$ref": "#/components/requestBodies/ProjectStore" }, "responses": { "201": { "$ref": "#/components/responses/ProjectResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}": { "get": { "tags": ["Projects"], "operationId": "getProject", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/ProjectResource" }, "403": { "$ref": "#/components/responses/Forbidden" } } }, "delete": { "tags": ["Projects"], "operationId": "deleteProject", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/DeleteProject" }, "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/board": { "get": { "tags": ["Board"], "operationId": "getProjectBoard", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/BoardPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/projects/{project}/backlog": { "get": { "tags": ["Board"], "operationId": "getProjectBacklog", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/BacklogPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/projects/{project}/ticket-options": { "get": { "tags": ["Tickets"], "operationId": "getProjectTicketOptions", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "name": "source", "in": "query", "schema": { "type": "string", "enum": ["backlog", "board"], "default": "backlog" } } ], "responses": { "200": { "$ref": "#/components/responses/TicketOptionsPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/projects/{project}/tickets": { "get": { "tags": ["Tickets"], "operationId": "listProjectTickets", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/TicketCollection" }, "403": { "$ref": "#/components/responses/Forbidden" } } }, "post": { "tags": ["Tickets"], "operationId": "createProjectTicket", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}": { "get": { "tags": ["Tickets"], "operationId": "getProjectTicket", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "responses": { "200": { "$ref": "#/components/responses/TicketDetailPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } }, "patch": { "tags": ["Tickets"], "operationId": "updateProjectTicket", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}/status-targets": { "get": { "tags": ["Tickets"], "operationId": "getProjectTicketStatusTargets", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "responses": { "200": { "$ref": "#/components/responses/StatusTargetsPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/projects/{project}/tickets/{ticket}/status": { "patch": { "tags": ["Tickets"], "operationId": "moveProjectTicket", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketMove" }, "responses": { "200": { "$ref": "#/components/responses/TicketResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}/branches/validate": { "get": { "tags": ["Tickets"], "operationId": "validateProjectTicketBranch", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" }, { "name": "repository_connection_id", "in": "query", "required": true, "schema": { "type": "integer" } }, { "name": "branch_name", "in": "query", "required": true, "schema": { "type": "string", "maxLength": 255 } } ], "responses": { "200": { "$ref": "#/components/responses/BranchValidationPayload" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}/branches": { "post": { "tags": ["Tickets"], "operationId": "createProjectTicketBranch", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "requestBody": { "$ref": "#/components/requestBodies/Branch" }, "responses": { "201": { "$ref": "#/components/responses/BranchCreatedPayload" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}/links": { "post": { "tags": ["Tickets"], "operationId": "createProjectTicketLink", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketLink" }, "responses": { "201": { "$ref": "#/components/responses/TicketLinkResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/tickets/{ticket}/links/{ticketLink}": { "delete": { "tags": ["Tickets"], "operationId": "deleteProjectTicketLink", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketId" }, { "$ref": "#/components/parameters/TicketLinkId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "404": { "$ref": "#/components/responses/NotFound" } } } }, "/projects/{project}/settings/board": { "get": { "tags": ["Board"], "operationId": "getProjectBoardSettings", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/BoardSettingsPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/projects/{project}/settings/board/columns": { "post": { "tags": ["Board"], "operationId": "createProjectBoardColumn", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/BoardColumnStore" }, "responses": { "201": { "$ref": "#/components/responses/BoardColumnResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/board/columns/{boardColumn}": { "patch": { "tags": ["Board"], "operationId": "updateProjectBoardColumn", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/BoardColumnId" } ], "requestBody": { "$ref": "#/components/requestBodies/BoardColumnUpdate" }, "responses": { "200": { "$ref": "#/components/responses/BoardColumnResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Board"], "operationId": "deleteProjectBoardColumn", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/BoardColumnId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" } } } }, "/projects/{project}/settings/board/statuses": { "post": { "tags": ["Board"], "operationId": "createProjectTicketStatus", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketStatusStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketStatusResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/board/statuses/{ticketStatus}": { "patch": { "tags": ["Board"], "operationId": "updateProjectTicketStatus", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketStatusId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketStatusUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketStatusResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Board"], "operationId": "deleteProjectTicketStatus", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketStatusId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/board/statuses/{ticketStatus}/transitions": { "patch": { "tags": ["Board"], "operationId": "updateProjectTicketStatusTransitions", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketStatusId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketStatusTransitions" }, "responses": { "200": { "$ref": "#/components/responses/TicketStatusResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata": { "get": { "tags": ["Metadata"], "operationId": "getProjectTicketMetadataSettings", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/MetadataSettingsPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } }, "patch": { "tags": ["Metadata"], "operationId": "updateProjectTicketMetadataSettings", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/MetadataSettings" }, "responses": { "200": { "$ref": "#/components/responses/ProjectResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/types": { "post": { "tags": ["Metadata"], "operationId": "createProjectTicketType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketTypeStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketTypeResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/types/{ticketType}": { "patch": { "tags": ["Metadata"], "operationId": "updateProjectTicketType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketTypeId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketTypeUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketTypeResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Metadata"], "operationId": "deleteProjectTicketType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketTypeId" } ], "requestBody": { "$ref": "#/components/requestBodies/DeleteTicketType" }, "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/priorities": { "post": { "tags": ["Metadata"], "operationId": "createProjectTicketPriority", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/NamedSettingStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketPriorityResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/priorities/{ticketPriority}": { "patch": { "tags": ["Metadata"], "operationId": "updateProjectTicketPriority", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketPriorityId" } ], "requestBody": { "$ref": "#/components/requestBodies/NamedSettingUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketPriorityResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Metadata"], "operationId": "deleteProjectTicketPriority", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketPriorityId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/fields": { "post": { "tags": ["Metadata"], "operationId": "createProjectTicketFieldDefinition", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketFieldDefinitionStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketFieldDefinitionResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/fields/{ticketFieldDefinition}": { "patch": { "tags": ["Metadata"], "operationId": "updateProjectTicketFieldDefinition", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketFieldDefinitionId" } ], "requestBody": { "$ref": "#/components/requestBodies/TicketFieldDefinitionUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketFieldDefinitionResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Metadata"], "operationId": "deleteProjectTicketFieldDefinition", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketFieldDefinitionId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" } } } }, "/projects/{project}/settings/metadata/link-types": { "post": { "tags": ["Metadata"], "operationId": "createProjectTicketLinkType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/NamedSettingStore" }, "responses": { "201": { "$ref": "#/components/responses/TicketLinkTypeResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/metadata/link-types/{ticketLinkType}": { "patch": { "tags": ["Metadata"], "operationId": "updateProjectTicketLinkType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketLinkTypeId" } ], "requestBody": { "$ref": "#/components/requestBodies/NamedSettingUpdate" }, "responses": { "200": { "$ref": "#/components/responses/TicketLinkTypeResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Metadata"], "operationId": "deleteProjectTicketLinkType", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/TicketLinkTypeId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" } } } }, "/projects/{project}/settings/repositories": { "get": { "tags": ["Repositories"], "operationId": "getProjectRepositorySettings", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "responses": { "200": { "$ref": "#/components/responses/RepositorySettingsPayload" }, "403": { "$ref": "#/components/responses/Forbidden" } } }, "post": { "tags": ["Repositories"], "operationId": "createProjectRepositoryConnection", "parameters": [ { "$ref": "#/components/parameters/ProjectId" } ], "requestBody": { "$ref": "#/components/requestBodies/RepositorySelection" }, "responses": { "201": { "$ref": "#/components/responses/RepositoryConnectionResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/projects/{project}/settings/repositories/{repositoryConnection}": { "patch": { "tags": ["Repositories"], "operationId": "updateProjectRepositoryConnection", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/RepositoryConnectionId" } ], "requestBody": { "$ref": "#/components/requestBodies/RepositorySelection" }, "responses": { "200": { "$ref": "#/components/responses/RepositoryConnectionResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Repositories"], "operationId": "deleteProjectRepositoryConnection", "parameters": [ { "$ref": "#/components/parameters/ProjectId" }, { "$ref": "#/components/parameters/RepositoryConnectionId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" } } } }, "/git-connections": { "get": { "tags": ["Git Connections"], "operationId": "listGitConnections", "responses": { "200": { "$ref": "#/components/responses/UserGitConnectionCollection" }, "401": { "$ref": "#/components/responses/Unauthenticated" } } }, "post": { "tags": ["Git Connections"], "operationId": "createGitConnection", "requestBody": { "$ref": "#/components/requestBodies/UserGitConnection" }, "responses": { "201": { "$ref": "#/components/responses/UserGitConnectionResource" }, "422": { "$ref": "#/components/responses/ValidationError" } } } }, "/git-connections/{gitConnection}": { "patch": { "tags": ["Git Connections"], "operationId": "updateGitConnection", "parameters": [ { "$ref": "#/components/parameters/GitConnectionId" } ], "requestBody": { "$ref": "#/components/requestBodies/UserGitConnection" }, "responses": { "200": { "$ref": "#/components/responses/UserGitConnectionResource" }, "403": { "$ref": "#/components/responses/Forbidden" }, "422": { "$ref": "#/components/responses/ValidationError" } } }, "delete": { "tags": ["Git Connections"], "operationId": "deleteGitConnection", "parameters": [ { "$ref": "#/components/parameters/GitConnectionId" } ], "responses": { "204": { "$ref": "#/components/responses/NoContent" }, "403": { "$ref": "#/components/responses/Forbidden" } } } }, "/users/{user}/assigned-tickets": { "get": { "tags": ["Users"], "operationId": "getUserAssignedTickets", "parameters": [ { "$ref": "#/components/parameters/UserId" } ], "responses": { "200": { "$ref": "#/components/responses/AssignedTicketsPayload" }, "401": { "$ref": "#/components/responses/Unauthenticated" } } } } }, "components": { "securitySchemes": { "ApplicationKey": { "type": "http", "scheme": "bearer", "bearerFormat": "KanbanGit application key", "description": "Use a first-party application key created in Settings > Applications." } }, "parameters": { "UserId": { "name": "user", "in": "path", "required": true, "schema": { "type": "integer" } }, "ProjectId": { "name": "project", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketId": { "name": "ticket", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketLinkId": { "name": "ticketLink", "in": "path", "required": true, "schema": { "type": "integer" } }, "BoardColumnId": { "name": "boardColumn", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketStatusId": { "name": "ticketStatus", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketTypeId": { "name": "ticketType", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketPriorityId": { "name": "ticketPriority", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketFieldDefinitionId": { "name": "ticketFieldDefinition", "in": "path", "required": true, "schema": { "type": "integer" } }, "TicketLinkTypeId": { "name": "ticketLinkType", "in": "path", "required": true, "schema": { "type": "integer" } }, "RepositoryConnectionId": { "name": "repositoryConnection", "in": "path", "required": true, "schema": { "type": "integer" } }, "GitConnectionId": { "name": "gitConnection", "in": "path", "required": true, "schema": { "type": "integer" } } }, "requestBodies": { "ProjectStore": { "$ref": "#/components/requestBodies/JsonProjectStore" }, "JsonProjectStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectStoreRequest" } } } }, "DeleteProject": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteProjectRequest" } } } }, "TicketStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketStoreRequest" } } } }, "TicketUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketUpdateRequest" } } } }, "TicketMove": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketMoveRequest" } } } }, "Branch": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BranchRequest" } } } }, "TicketLink": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketLinkRequest" } } } }, "BoardColumnStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BoardColumnStoreRequest" } } } }, "BoardColumnUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BoardColumnUpdateRequest" } } } }, "TicketStatusStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketStatusStoreRequest" } } } }, "TicketStatusUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketStatusUpdateRequest" } } } }, "TicketStatusTransitions": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketStatusTransitionsRequest" } } } }, "MetadataSettings": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MetadataSettingsRequest" } } } }, "TicketTypeStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketTypeStoreRequest" } } } }, "TicketTypeUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketTypeUpdateRequest" } } } }, "DeleteTicketType": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTicketTypeRequest" } } } }, "NamedSettingStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NamedSettingStoreRequest" } } } }, "NamedSettingUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NamedSettingUpdateRequest" } } } }, "TicketFieldDefinitionStore": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketFieldDefinitionStoreRequest" } } } }, "TicketFieldDefinitionUpdate": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketFieldDefinitionUpdateRequest" } } } }, "RepositorySelection": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RepositorySelectionRequest" } } } }, "UserGitConnection": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGitConnectionRequest" } } } } }, "responses": { "ProjectResource": { "description": "Project resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectEnvelope" } } } }, "ProjectCollection": { "description": "Project collection.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectCollectionEnvelope" } } } }, "TicketResource": { "description": "Ticket resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketEnvelope" } } } }, "TicketCollection": { "description": "Ticket collection.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketCollectionEnvelope" } } } }, "TicketLinkResource": { "description": "Ticket link resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketLinkEnvelope" } } } }, "BoardColumnResource": { "description": "Board column resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BoardColumnEnvelope" } } } }, "TicketStatusResource": { "description": "Ticket status resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketStatusEnvelope" } } } }, "TicketTypeResource": { "description": "Ticket type resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketTypeEnvelope" } } } }, "TicketPriorityResource": { "description": "Ticket priority resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketPriorityEnvelope" } } } }, "TicketFieldDefinitionResource": { "description": "Ticket field definition resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketFieldDefinitionEnvelope" } } } }, "TicketLinkTypeResource": { "description": "Ticket link type resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketLinkTypeEnvelope" } } } }, "RepositoryConnectionResource": { "description": "Repository connection resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RepositoryConnectionEnvelope" } } } }, "UserGitConnectionResource": { "description": "User Git connection resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGitConnectionEnvelope" } } } }, "UserGitConnectionCollection": { "description": "User Git connection collection.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGitConnectionCollectionEnvelope" } } } }, "BoardPayload": { "description": "Board page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BoardPayloadEnvelope" } } } }, "BacklogPayload": { "description": "Backlog page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BacklogPayloadEnvelope" } } } }, "TicketOptionsPayload": { "description": "Ticket creation option payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketOptionsPayloadEnvelope" } } } }, "TicketDetailPayload": { "description": "Ticket detail page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketDetailPayloadEnvelope" } } } }, "StatusTargetsPayload": { "description": "Allowed target statuses for a ticket move.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusTargetsPayloadEnvelope" } } } }, "BranchValidationPayload": { "description": "Branch validation result.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BranchValidationPayloadEnvelope" } } } }, "BranchCreatedPayload": { "description": "Created branch result.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BranchCreatedPayloadEnvelope" } } } }, "BoardSettingsPayload": { "description": "Board settings page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BoardSettingsPayloadEnvelope" } } } }, "MetadataSettingsPayload": { "description": "Metadata settings page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MetadataSettingsPayloadEnvelope" } } } }, "RepositorySettingsPayload": { "description": "Repository settings page-equivalent JSON payload.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RepositorySettingsPayloadEnvelope" } } } }, "AssignedTicketsPayload": { "description": "Tickets assigned to a user grouped by projects visible to the authenticated application key owner.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssignedTicketsPayloadEnvelope" } } } }, "ValidationError": { "description": "Laravel validation error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" } } } }, "Unauthenticated": { "description": "No authenticated user is available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageError" } } } }, "Forbidden": { "description": "The authenticated user is not authorized for this action.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageError" } } } }, "NotFound": { "description": "The resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageError" } } } }, "NoContent": { "description": "The resource was deleted successfully." } }, "schemas": { "Meta": { "type": "object", "properties": { "message": { "type": "string" } } }, "MessageError": { "type": "object", "properties": { "message": { "type": "string" } }, "required": ["message"] }, "ValidationError": { "type": "object", "properties": { "message": { "type": "string" }, "errors": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } } }, "required": ["message", "errors"] }, "Project": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "key": { "type": "string" }, "show_author": { "type": "boolean" }, "show_story_points": { "type": "boolean" }, "created_at": { "type": ["string", "null"], "format": "date-time" }, "updated_at": { "type": ["string", "null"], "format": "date-time" } }, "required": ["id", "name", "key"] }, "Ticket": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "ticket_key": { "type": "string" }, "title": { "type": "string" }, "description": { "type": ["string", "null"] }, "acceptance_criteria": { "type": ["string", "null"] }, "story_points": { "type": ["integer", "null"] }, "is_blocked": { "type": "boolean" }, "ticket_status_id": { "type": "integer" }, "ticket_type_id": { "type": "integer" }, "ticket_priority_id": { "type": "integer" } }, "required": ["id", "project_id", "ticket_key", "title"] }, "TicketReference": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "ticket_key": { "type": "string" }, "title": { "type": "string" } } }, "User": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "email": { "type": "string", "format": "email" } } }, "AssignedTicketsPayloadEnvelope": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/AssignedTicketsProjectGroup" } }, "meta": { "type": "object", "properties": { "assignee": { "$ref": "#/components/schemas/User" } }, "required": ["assignee"] } }, "required": ["data", "meta"] }, "AssignedTicketsProjectGroup": { "type": "object", "properties": { "project": { "$ref": "#/components/schemas/Project" }, "tickets": { "type": "array", "items": { "$ref": "#/components/schemas/Ticket" } } }, "required": ["project", "tickets"] }, "BoardColumn": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "name": { "type": "string" }, "position": { "type": "integer" } }, "required": ["id", "project_id", "name", "position"] }, "TicketStatus": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "board_column_id": { "type": ["integer", "null"] }, "name": { "type": "string" }, "slug": { "type": "string" }, "position": { "type": "integer" } } }, "TicketType": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "name": { "type": "string" }, "is_parent": { "type": "boolean" }, "position": { "type": "integer" } } }, "TicketPriority": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "name": { "type": "string" }, "position": { "type": "integer" } } }, "TicketFieldDefinition": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "label": { "type": "string" }, "field_type": { "type": "string", "enum": ["number", "user"] }, "position": { "type": "integer" } } }, "TicketLinkType": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "label": { "type": "string" }, "position": { "type": "integer" } } }, "TicketLink": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "linked_ticket": { "$ref": "#/components/schemas/TicketReference" }, "source_ticket_id": { "type": "integer" }, "target_ticket_id": { "type": "integer" }, "ticket_link_type_id": { "type": "integer" } } }, "RepositoryConnection": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "project_id": { "type": "integer" }, "provider": { "type": "string" }, "base_url": { "type": "string", "format": "uri" }, "provider_repository_id": { "type": "string" }, "repository_full_name": { "type": "string" }, "repository_url": { "type": "string", "format": "uri" }, "has_personal_access": { "type": "boolean" } } }, "UserGitConnection": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "integer" }, "user_id": { "type": "integer" }, "provider": { "type": "string" }, "provider_label": { "type": "string" }, "base_url": { "type": "string", "format": "uri" }, "provider_user_id": { "type": "string" }, "account_login": { "type": "string" }, "account_name": { "type": ["string", "null"] } } }, "ProjectEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/Project" } } } ] }, "ProjectCollectionEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Project" } } } } ] }, "TicketEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/Ticket" } } } ] }, "TicketCollectionEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Ticket" } } } } ] }, "TicketLinkEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "BoardColumnEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "TicketStatusEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "TicketTypeEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "TicketPriorityEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "TicketFieldDefinitionEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "TicketLinkTypeEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "RepositoryConnectionEnvelope": { "$ref": "#/components/schemas/GenericResourceEnvelope" }, "UserGitConnectionEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/UserGitConnection" } } } ] }, "UserGitConnectionCollectionEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/UserGitConnection" } } } } ] }, "GenericResourceEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "object", "additionalProperties": true } } } ] }, "Envelope": { "type": "object", "properties": { "data": {}, "meta": { "$ref": "#/components/schemas/Meta" } }, "required": ["data"] }, "BoardPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "BacklogPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "TicketOptionsPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "TicketDetailPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "BoardSettingsPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "MetadataSettingsPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "RepositorySettingsPayloadEnvelope": { "$ref": "#/components/schemas/GenericPayloadEnvelope" }, "StatusTargetsPayloadEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "object", "properties": { "current_status": { "anyOf": [ { "$ref": "#/components/schemas/TicketStatus" }, { "type": "null" } ] }, "target_statuses": { "type": "array", "items": { "$ref": "#/components/schemas/TicketStatus" } } } } } } ] }, "BranchValidationPayloadEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BranchValidationResult" } } } ] }, "BranchCreatedPayloadEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BranchCreatedResult" } } } ] }, "GenericPayloadEnvelope": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "object", "additionalProperties": true } } } ] }, "BranchValidationResult": { "type": "object", "properties": { "is_valid": { "type": "boolean" }, "message": { "type": "string" } }, "required": ["is_valid", "message"] }, "BranchCreatedResult": { "type": "object", "properties": { "branch_name": { "type": "string" }, "repository_full_name": { "type": "string" } }, "required": ["branch_name", "repository_full_name"] }, "ProjectStoreRequest": { "type": "object", "properties": { "key": { "type": "string", "maxLength": 5, "pattern": "^[A-Z0-9]+$" }, "name": { "type": "string", "maxLength": 255 } }, "required": ["key", "name"] }, "DeleteProjectRequest": { "type": "object", "properties": { "confirmation_key": { "type": "string" } }, "required": ["confirmation_key"] }, "TicketStoreRequest": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 255 }, "description": { "type": ["string", "null"] }, "acceptance_criteria": { "type": ["string", "null"] }, "assignee_user_id": { "type": ["integer", "null"] }, "story_points": { "type": ["integer", "null"], "minimum": 0 }, "ticket_priority_id": { "type": "integer" }, "ticket_status_id": { "type": "integer" }, "ticket_type_id": { "type": "integer" } }, "required": ["title", "ticket_priority_id", "ticket_status_id", "ticket_type_id"] }, "TicketUpdateRequest": { "allOf": [ { "$ref": "#/components/schemas/TicketStoreRequest" }, { "type": "object", "properties": { "author_user_id": { "type": ["integer", "null"] }, "blocked_comment": { "type": ["string", "null"] }, "is_blocked": { "type": "boolean" }, "parent_ticket_id": { "type": ["integer", "null"] }, "field_values": { "type": "array", "items": { "type": "object", "properties": { "ticket_field_definition_id": { "type": "integer" }, "value_number": { "type": ["number", "string", "null"] }, "value_user_id": { "type": ["integer", "string", "null"] } }, "required": ["ticket_field_definition_id"] } } }, "required": ["is_blocked"] } ] }, "TicketMoveRequest": { "type": "object", "properties": { "ticket_status_id": { "type": "integer" } }, "required": ["ticket_status_id"] }, "BranchRequest": { "type": "object", "properties": { "branch_name": { "type": "string", "maxLength": 255 }, "repository_connection_id": { "type": "integer" } }, "required": ["branch_name", "repository_connection_id"] }, "TicketLinkRequest": { "type": "object", "properties": { "linked_ticket_id": { "type": "integer" }, "ticket_link_type_id": { "type": "integer" } }, "required": ["linked_ticket_id", "ticket_link_type_id"] }, "BoardColumnStoreRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "position": { "type": ["integer", "null"], "minimum": 1 } }, "required": ["name"] }, "BoardColumnUpdateRequest": { "allOf": [ { "$ref": "#/components/schemas/BoardColumnStoreRequest" }, { "type": "object", "required": ["position"] } ] }, "TicketStatusStoreRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "board_column_id": { "type": ["integer", "null"] } }, "required": ["name"] }, "TicketStatusUpdateRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 } }, "required": ["name"] }, "TicketStatusTransitionsRequest": { "type": "object", "properties": { "allowed_ticket_status_ids": { "type": ["array", "null"], "items": { "type": "integer" } } } }, "MetadataSettingsRequest": { "type": "object", "properties": { "show_author": { "type": ["boolean", "null"] }, "show_story_points": { "type": ["boolean", "null"] } } }, "TicketTypeStoreRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "position": { "type": ["integer", "null"], "minimum": 1 }, "is_parent": { "type": ["boolean", "null"] } }, "required": ["name"] }, "TicketTypeUpdateRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "position": { "type": "integer", "minimum": 1 } }, "required": ["name", "position"] }, "DeleteTicketTypeRequest": { "type": "object", "properties": { "replacement_ticket_type_id": { "type": ["integer", "null"] } } }, "NamedSettingStoreRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "position": { "type": ["integer", "null"], "minimum": 1 } }, "required": ["name"] }, "NamedSettingUpdateRequest": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 255 }, "position": { "type": "integer", "minimum": 1 } }, "required": ["name", "position"] }, "TicketFieldDefinitionStoreRequest": { "type": "object", "properties": { "label": { "type": "string", "maxLength": 255 }, "field_type": { "type": "string", "enum": ["number", "user"] }, "position": { "type": ["integer", "null"], "minimum": 1 } }, "required": ["label", "field_type"] }, "TicketFieldDefinitionUpdateRequest": { "type": "object", "properties": { "label": { "type": "string", "maxLength": 255 }, "field_type": { "type": "string", "enum": ["number", "user"] }, "position": { "type": "integer", "minimum": 1 } }, "required": ["label", "field_type", "position"] }, "RepositorySelectionRequest": { "type": "object", "properties": { "provider_repository_id": { "type": "string", "maxLength": 255 }, "user_git_connection_id": { "type": "integer" } }, "required": ["provider_repository_id", "user_git_connection_id"] }, "UserGitConnectionRequest": { "type": "object", "properties": { "provider": { "type": "string", "enum": ["gitea"] }, "base_url": { "type": "string", "format": "uri", "maxLength": 255 }, "api_token": { "type": "string", "maxLength": 2048, "writeOnly": true } }, "required": ["provider", "base_url", "api_token"] } } } }