Skip to content

Instantly share code, notes, and snippets.

@calbrecht
Last active October 13, 2018 08:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save calbrecht/cb05e8968b341be87380c36dd0f74961 to your computer and use it in GitHub Desktop.
Save calbrecht/cb05e8968b341be87380c36dd0f74961 to your computer and use it in GitHub Desktop.
Comparison of NelmioApiDocBundle branch refactor-swagger vs. master
I took https://github.com/etraxis/etraxis, setup and symlinked the vendor/nelmio/api-doc-bundle to the local checkout of the repo,
and ran the project with ./bin/console server:start
cd ~/ws/NelmioApiDocBundle
git checkout refactor-swagger
curl http://127.0.0.1:8000/api/doc | \
sed -u -n -e 's/<script id="swagger-data" type="application\/json">\(.*\)<\/script>/\1/p' | jq -S '.' > refactor_swagger.json
git checkout master
curl http://127.0.0.1:8000/api/doc | \
sed -u -n -e 's/<script id="swagger-data" type="application\/json">\(.*\)<\/script>/\1/p' | jq -S '.' > master.json
diff -u master.json refactor_swagger.json > master_vs_refactor-swagger
--- master 2018-10-13 10:33:09.371806106 +0200
+++ refactor_swagger 2018-10-13 10:31:49.328324079 +0200
@@ -24,7 +24,9 @@
"Change": {
"properties": {
"field": {
- "$ref": "#/definitions/FieldInfo"
+ "$ref": "#/definitions/FieldInfo",
+ "description": "Changed field (NULL for the subject).",
+ "type": "object"
},
"id": {
"description": "Change ID.",
@@ -47,7 +49,9 @@
"type": "integer"
},
"user": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Author of the change.",
+ "type": "object"
}
},
"type": "object"
@@ -116,7 +120,9 @@
"type": "integer"
},
"user": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Author of the comment.",
+ "type": "object"
}
},
"type": "object"
@@ -1498,16 +1504,24 @@
"Event": {
"properties": {
"assignee": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Assignee, if applicable.",
+ "type": "object"
},
"file": {
- "$ref": "#/definitions/File"
+ "$ref": "#/definitions/File",
+ "description": "File, if applicable.",
+ "type": "object"
},
"issue": {
- "$ref": "#/definitions/IssueInfo"
+ "$ref": "#/definitions/IssueInfo",
+ "description": "Issue, if applicable.",
+ "type": "object"
},
"state": {
- "$ref": "#/definitions/StateInfo"
+ "$ref": "#/definitions/StateInfo",
+ "description": "State, if applicable.",
+ "type": "object"
},
"timestamp": {
"description": "Unix Epoch timestamp when the event has took place.",
@@ -1536,7 +1550,9 @@
"type": "string"
},
"user": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Initiator of the event.",
+ "type": "object"
}
},
"type": "object"
@@ -1569,7 +1585,9 @@
"type": "boolean"
},
"state": {
- "$ref": "#/definitions/State"
+ "$ref": "#/definitions/State",
+ "description": "Field state.",
+ "type": "object"
},
"type": {
"description": "Field type.",
@@ -1707,7 +1725,9 @@
"type": "string"
},
"user": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "User who attached the file.",
+ "type": "object"
}
},
"type": "object"
@@ -1735,7 +1755,9 @@
"type": "string"
},
"project": {
- "$ref": "#/definitions/Project"
+ "$ref": "#/definitions/Project",
+ "description": "Group project (null if the group is global).",
+ "type": "object"
}
},
"type": "object"
@@ -1748,7 +1770,9 @@
"type": "integer"
},
"author": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Author of the issue.",
+ "type": "object"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
@@ -1806,7 +1830,9 @@
"type": "integer"
},
"responsible": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Current responsible of the issue.",
+ "type": "object"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
@@ -1814,7 +1840,9 @@
"type": "integer"
},
"state": {
- "$ref": "#/definitions/State"
+ "$ref": "#/definitions/State",
+ "description": "Current state.",
+ "type": "object"
},
"subject": {
"description": "Subject of the issue.",
@@ -1832,7 +1860,9 @@
"type": "integer"
},
"author": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Author of the issue.",
+ "type": "object"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
@@ -1885,7 +1915,9 @@
"type": "integer"
},
"responsible": {
- "$ref": "#/definitions/UserInfo"
+ "$ref": "#/definitions/UserInfo",
+ "description": "Current responsible of the issue.",
+ "type": "object"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
@@ -1893,7 +1925,9 @@
"type": "integer"
},
"state": {
- "$ref": "#/definitions/State"
+ "$ref": "#/definitions/State",
+ "description": "Current state.",
+ "type": "object"
},
"subject": {
"description": "Subject of the issue.",
@@ -2102,7 +2136,9 @@
"type": "string"
},
"template": {
- "$ref": "#/definitions/Template"
+ "$ref": "#/definitions/Template",
+ "description": "State template.",
+ "type": "object"
},
"type": {
"description": "State type.",
@@ -2240,7 +2276,9 @@
"type": "string"
},
"project": {
- "$ref": "#/definitions/Project"
+ "$ref": "#/definitions/Project",
+ "description": "Template project.",
+ "type": "object"
}
},
"type": "object"
{
"spec": {
"definitions": {
"AddCommentCommand": {
"properties": {
"body": {
"description": "Text of the comment.",
"example": "Lorem ipsum",
"maxLength": "10000",
"type": "string"
},
"private": {
"description": "Whether should be private.",
"example": false,
"type": "boolean"
}
},
"required": [
"body",
"private"
],
"type": "object"
},
"Change": {
"properties": {
"field": {
"$ref": "#/definitions/FieldInfo",
"description": "Changed field (NULL for the subject).",
"type": "object"
},
"id": {
"description": "Change ID.",
"example": 123,
"type": "integer"
},
"new_value": {
"description": "New value of the field (depends on the field type).",
"example": 2,
"type": ""
},
"old_value": {
"description": "Old value of the field (depends on the field type).",
"example": 1,
"type": ""
},
"timestamp": {
"description": "Unix Epoch timestamp when the change has been made.",
"example": 1089280800,
"type": "integer"
},
"user": {
"$ref": "#/definitions/UserInfo",
"description": "Author of the change.",
"type": "object"
}
},
"type": "object"
},
"ChangeStateCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"type": "object"
},
"CloneIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
}
},
"required": [
"subject"
],
"type": "object"
},
"Comment": {
"properties": {
"id": {
"description": "Comment ID.",
"example": 123,
"type": "integer"
},
"private": {
"description": "Whether the comment is private.",
"example": false,
"type": "boolean"
},
"text": {
"description": "Text of the comment.",
"example": "Lorem ipsum",
"type": "string"
},
"timestamp": {
"description": "Unix Epoch timestamp when the comment has been posted.",
"example": 1089280800,
"type": "integer"
},
"user": {
"$ref": "#/definitions/UserInfo",
"description": "Author of the comment.",
"type": "object"
}
},
"type": "object"
},
"CreateCheckboxFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": true,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"defaultValue"
],
"type": "object"
},
"CreateDateFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateDecimalFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"minimumValue": {
"description": "Minimum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateDurationFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"minimumValue": {
"description": "Minimum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateGroupCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Group name.",
"example": "Team",
"maxLength": "25",
"type": "string"
},
"project": {
"description": "Project ID (null for global group).",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"name"
],
"type": "object"
},
"CreateIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
},
"template": {
"description": "Template ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"template",
"subject"
],
"type": "object"
},
"CreateIssueFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required"
],
"type": "object"
},
"CreateListFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required"
],
"type": "object"
},
"CreateListItemCommand": {
"properties": {
"text": {
"description": "Item's text.",
"example": "Friday",
"maxLength": "50",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"minimum": 1,
"type": "integer"
}
},
"required": [
"text"
],
"type": "object"
},
"CreateNumberFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 1,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 100,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateProjectCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Project name.",
"example": "Project A",
"maxLength": "25",
"type": "string"
},
"suspended": {
"description": "Whether should be suspended.",
"example": false,
"type": "boolean"
}
},
"required": [
"name",
"suspended"
],
"type": "object"
},
"CreateStateCommand": {
"properties": {
"name": {
"description": "State name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"nextState": {
"description": "ID of the next state.",
"example": 456,
"pattern": "\\d+",
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"template": {
"description": "Template ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"required": [
"template",
"name",
"type",
"responsible"
],
"type": "object"
},
"CreateStringFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message subject",
"maxLength": "250",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 100,
"maximum": 250,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"maximumLength"
],
"type": "object"
},
"CreateTemplateCommand": {
"properties": {
"criticalAge": {
"description": "'Critical Age' value.",
"example": 5,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"maxLength": "100",
"type": "string"
},
"frozenTime": {
"description": "'Frozen Time' value.",
"example": 10,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"prefix": {
"description": "Template prefix.",
"example": "bug",
"maxLength": "5",
"type": "string"
},
"project": {
"description": "Project ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"project",
"name",
"prefix"
],
"type": "object"
},
"CreateTextFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message body",
"maxLength": "10000",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 10000,
"maximum": 4000,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"maximumLength"
],
"type": "object"
},
"CreateUserCommand": {
"properties": {
"admin": {
"description": "Whether should have administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"maxLength": "100",
"type": "string"
},
"disabled": {
"description": "Whether should be disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"maxLength": "254",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"maxLength": "50",
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"enum": [
"bg",
"cs",
"de",
"en_AU",
"en_CA",
"en_GB",
"en_NZ",
"en_US",
"es",
"fr",
"hu",
"it",
"ja",
"lv",
"nl",
"pl",
"pt_BR",
"ro",
"ru",
"sv",
"tr"
],
"example": "en_NZ",
"type": "string"
},
"password": {
"description": "User's password.",
"example": "P@ssw0rd",
"maxLength": 4096,
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"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/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/Godthab",
"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/Nipigon",
"America/Nome",
"America/Noronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Ojinaga",
"America/Panama",
"America/Pangnirtung",
"America/Paramaribo",
"America/Phoenix",
"America/Port-au-Prince",
"America/Port_of_Spain",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Punta_Arenas",
"America/Rainy_River",
"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/Thunder_Bay",
"America/Tijuana",
"America/Toronto",
"America/Tortola",
"America/Vancouver",
"America/Whitehorse",
"America/Winnipeg",
"America/Yakutat",
"America/Yellowknife",
"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/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/Currie",
"Australia/Darwin",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"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/Kiev",
"Europe/Kirov",
"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/Uzhgorod",
"Europe/Vaduz",
"Europe/Vatican",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Europe/Zagreb",
"Europe/Zaporozhye",
"Europe/Zurich",
"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/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"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",
"UTC"
],
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [
"email",
"password",
"fullname",
"admin",
"disabled",
"locale",
"theme",
"timezone"
],
"type": "object"
},
"DisableUsersCommand": {
"properties": {
"users": {
"description": "List of user IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"users"
],
"type": "object"
},
"EnableUsersCommand": {
"properties": {
"users": {
"description": "List of user IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"users"
],
"type": "object"
},
"Event": {
"properties": {
"assignee": {
"$ref": "#/definitions/UserInfo",
"description": "Assignee, if applicable.",
"type": "object"
},
"file": {
"$ref": "#/definitions/File",
"description": "File, if applicable.",
"type": "object"
},
"issue": {
"$ref": "#/definitions/IssueInfo",
"description": "Issue, if applicable.",
"type": "object"
},
"state": {
"$ref": "#/definitions/StateInfo",
"description": "State, if applicable.",
"type": "object"
},
"timestamp": {
"description": "Unix Epoch timestamp when the event has took place.",
"example": 1089280800,
"type": "integer"
},
"type": {
"description": "Event type.",
"enum": [
"comment.private",
"comment.public",
"dependency.added",
"dependency.removed",
"file.attached",
"file.deleted",
"issue.assigned",
"state.changed",
"issue.closed",
"issue.created",
"issue.edited",
"issue.reopened",
"issue.resumed",
"issue.suspended"
],
"example": "issue.created",
"type": "string"
},
"user": {
"$ref": "#/definitions/UserInfo",
"description": "Initiator of the event.",
"type": "object"
}
},
"type": "object"
},
"Field": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"type": "string"
},
"id": {
"description": "Field ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"type": "string"
},
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": 1,
"type": "integer"
},
"required": {
"description": "Whether the field is required.",
"example": true,
"type": "boolean"
},
"state": {
"$ref": "#/definitions/State",
"description": "Field state.",
"type": "object"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"type": "object"
},
"FieldGroupPermission": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
}
},
"type": "object"
},
"FieldInfo": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"type": "string"
},
"id": {
"description": "Field ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"type": "string"
},
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": 1,
"type": "integer"
},
"required": {
"description": "Whether the field is required.",
"example": true,
"type": "boolean"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"type": "object"
},
"FieldRolePermission": {
"properties": {
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
},
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
}
},
"type": "object"
},
"File": {
"properties": {
"id": {
"description": "File ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "File name.",
"example": "enclosure.pdf",
"type": "string"
},
"size": {
"description": "File size (bytes).",
"example": 233074,
"type": "integer"
},
"timestamp": {
"description": "Unix Epoch timestamp when the file has been attached.",
"example": 1089280800,
"type": "integer"
},
"type": {
"description": "MIME type.",
"example": "application/pdf",
"type": "string"
},
"user": {
"$ref": "#/definitions/UserInfo",
"description": "User who attached the file.",
"type": "object"
}
},
"type": "object"
},
"Group": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"type": "string"
},
"global": {
"description": "Whether the group is a global one.",
"example": false,
"type": "boolean"
},
"id": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Group name.",
"example": "Team",
"type": "string"
},
"project": {
"$ref": "#/definitions/Project",
"description": "Group project (null if the group is global).",
"type": "object"
}
},
"type": "object"
},
"Issue": {
"properties": {
"age": {
"description": "Number of days the issue remained or remains opened.",
"example": 5,
"type": "integer"
},
"author": {
"$ref": "#/definitions/UserInfo",
"description": "Author of the issue.",
"type": "object"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
"example": 1089280800,
"type": "integer"
},
"closed_at": {
"description": "Unix Epoch timestamp when the issue has been closed, if so.",
"example": 1089280800,
"type": "integer"
},
"created_at": {
"description": "Unix Epoch timestamp when the issue has been created.",
"example": 1089280800,
"type": "integer"
},
"id": {
"description": "Issue ID.",
"example": 123,
"type": "integer"
},
"is_cloned": {
"description": "Whether the issue was cloned.",
"example": true,
"type": "boolean"
},
"is_closed": {
"description": "Whether the issue is closed.",
"example": false,
"type": "boolean"
},
"is_critical": {
"description": "Whether the issue is critical (remains opened for too long).",
"example": false,
"type": "boolean"
},
"is_frozen": {
"description": "Whether the issue is frozen.",
"example": false,
"type": "boolean"
},
"is_suspended": {
"description": "Whether the issue is suspended.",
"example": true,
"type": "boolean"
},
"origin": {
"description": "Original issue ID this issue was cloned from (when applicable).",
"example": 123,
"type": "integer"
},
"read_at": {
"description": "Unix Epoch timestamp when the issue was viewed by current user last time.",
"example": 1089280800,
"type": "integer"
},
"responsible": {
"$ref": "#/definitions/UserInfo",
"description": "Current responsible of the issue.",
"type": "object"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
"example": 1089280800,
"type": "integer"
},
"state": {
"$ref": "#/definitions/State",
"description": "Current state.",
"type": "object"
},
"subject": {
"description": "Subject of the issue.",
"example": "Test issue",
"type": "string"
}
},
"type": "object"
},
"IssueInfo": {
"properties": {
"age": {
"description": "Number of days the issue remained or remains opened.",
"example": 5,
"type": "integer"
},
"author": {
"$ref": "#/definitions/UserInfo",
"description": "Author of the issue.",
"type": "object"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
"example": 1089280800,
"type": "integer"
},
"closed_at": {
"description": "Unix Epoch timestamp when the issue has been closed, if so.",
"example": 1089280800,
"type": "integer"
},
"created_at": {
"description": "Unix Epoch timestamp when the issue has been created.",
"example": 1089280800,
"type": "integer"
},
"id": {
"description": "Issue ID.",
"example": 123,
"type": "integer"
},
"is_cloned": {
"description": "Whether the issue was cloned.",
"example": true,
"type": "boolean"
},
"is_closed": {
"description": "Whether the issue is closed.",
"example": false,
"type": "boolean"
},
"is_critical": {
"description": "Whether the issue is critical (remains opened for too long).",
"example": false,
"type": "boolean"
},
"is_frozen": {
"description": "Whether the issue is frozen.",
"example": false,
"type": "boolean"
},
"is_suspended": {
"description": "Whether the issue is suspended.",
"example": true,
"type": "boolean"
},
"origin": {
"description": "Original issue ID this issue was cloned from (when applicable).",
"example": 123,
"type": "integer"
},
"responsible": {
"$ref": "#/definitions/UserInfo",
"description": "Current responsible of the issue.",
"type": "object"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
"example": 1089280800,
"type": "integer"
},
"state": {
"$ref": "#/definitions/State",
"description": "Current state.",
"type": "object"
},
"subject": {
"description": "Subject of the issue.",
"example": "Test issue",
"type": "string"
}
},
"type": "object"
},
"ListItem": {
"properties": {
"id": {
"description": "Item ID.",
"example": 123,
"type": "integer"
},
"text": {
"description": "Item's text.",
"example": "Friday",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"type": "integer"
}
},
"type": "object"
},
"MarkAsReadCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"MarkAsUnreadCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"Profile": {
"properties": {
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"provider": {
"description": "Account provider.",
"enum": [
"etraxis",
"ldap"
],
"example": "etraxis",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"type": "object"
},
"Project": {
"properties": {
"created": {
"description": "Unix Epoch timestamp when the project has been registered.",
"example": 1089280800,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"type": "string"
},
"id": {
"description": "Project ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Project name.",
"example": "Project A",
"type": "string"
},
"suspended": {
"description": "Whether the project is suspended.",
"example": false,
"type": "boolean"
}
},
"type": "object"
},
"SetFieldPositionCommand": {
"properties": {
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": "1",
"minimum": 1,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"position"
],
"type": "object"
},
"SetPasswordCommand": {
"properties": {
"password": {
"description": "New password.",
"example": "P@ssw0rd",
"maxLength": 4096,
"type": "string"
}
},
"required": [
"password"
],
"type": "object"
},
"State": {
"properties": {
"id": {
"description": "State ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "State name.",
"example": "Assigned",
"type": "string"
},
"next_state": {
"description": "ID of the next state if specified.",
"example": 456,
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"template": {
"$ref": "#/definitions/Template",
"description": "State template.",
"type": "object"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"type": "object"
},
"StateGroupTransition": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"state": {
"description": "State ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"StateInfo": {
"properties": {
"id": {
"description": "State ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "State name.",
"example": "Assigned",
"type": "string"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"type": "object"
},
"StateRoleTransition": {
"properties": {
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"state": {
"description": "State ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"SuspendIssueCommand": {
"properties": {
"date": {
"description": "Date when the issue will be automatically resumed.",
"example": "2018-09-25",
"format": "YYYY-MM-DD",
"pattern": "\\d{4}\\-[0-1]\\d\\-[0-3]\\d",
"type": "string"
}
},
"required": [
"date"
],
"type": "object"
},
"Template": {
"properties": {
"critical": {
"description": "When an issue remains opened for more than this amount of days it's displayed in red in the list of issues.",
"example": 5,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"type": "string"
},
"frozen": {
"description": "When an issue is closed a user cannot change its state anymore, but one still can edit its fields, add comments and attach files. If frozen time is specified it will be allowed to edit the issue this amount of days after its closure. After that the issue becomes read-only. If this attribute is not specified, an issue will never become read-only.",
"example": 10,
"type": "integer"
},
"id": {
"description": "Template ID.",
"example": 123,
"type": "integer"
},
"locked": {
"description": "Whether the template is locked for edition.",
"example": false,
"type": "boolean"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"type": "string"
},
"prefix": {
"description": "Template prefix (used as a prefix in ID of the issues, created using this template).",
"example": "bug",
"type": "string"
},
"project": {
"$ref": "#/definitions/Project",
"description": "Template project.",
"type": "object"
}
},
"type": "object"
},
"TemplateGroupPermission": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
}
},
"type": "object"
},
"TemplateRolePermission": {
"properties": {
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
},
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
}
},
"type": "object"
},
"UnwatchIssuesCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"UpdateCheckboxFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": true,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"defaultValue"
],
"type": "object"
},
"UpdateDateFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateDecimalFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"minimumValue": {
"description": "Minimum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateDurationFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"minimumValue": {
"description": "Minimum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateGroupCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Group name.",
"example": "Team",
"maxLength": "25",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"UpdateIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
}
},
"type": "object"
},
"UpdateIssueFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required"
],
"type": "object"
},
"UpdateListFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value (list item ID).",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required"
],
"type": "object"
},
"UpdateListItemCommand": {
"properties": {
"text": {
"description": "Item's text.",
"example": "Friday",
"maxLength": "50",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"minimum": 1,
"type": "integer"
}
},
"required": [
"text"
],
"type": "object"
},
"UpdateNumberFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 1,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 100,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateProjectCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Project name.",
"example": "Project A",
"maxLength": "25",
"type": "string"
},
"suspended": {
"description": "Whether should be suspended.",
"example": false,
"type": "boolean"
}
},
"required": [
"name",
"suspended"
],
"type": "object"
},
"UpdateStateCommand": {
"properties": {
"name": {
"description": "State name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"nextState": {
"description": "ID of the next state.",
"example": 456,
"pattern": "\\d+",
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
}
},
"required": [
"name",
"responsible"
],
"type": "object"
},
"UpdateStringFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message subject",
"maxLength": "250",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 100,
"maximum": 250,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"maximumLength"
],
"type": "object"
},
"UpdateTemplateCommand": {
"properties": {
"criticalAge": {
"description": "'Critical Age' value.",
"example": 5,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"maxLength": "100",
"type": "string"
},
"frozenTime": {
"description": "'Frozen Time' value.",
"example": 10,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"prefix": {
"description": "Template prefix.",
"example": "bug",
"maxLength": "5",
"type": "string"
}
},
"required": [
"name",
"prefix"
],
"type": "object"
},
"UpdateTextFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message body",
"maxLength": "10000",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 10000,
"maximum": 4000,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"maximumLength"
],
"type": "object"
},
"UpdateUserCommand": {
"properties": {
"admin": {
"description": "Whether should have administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"maxLength": "100",
"type": "string"
},
"disabled": {
"description": "Whether should be disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"maxLength": "254",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"maxLength": "50",
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"enum": [
"bg",
"cs",
"de",
"en_AU",
"en_CA",
"en_GB",
"en_NZ",
"en_US",
"es",
"fr",
"hu",
"it",
"ja",
"lv",
"nl",
"pl",
"pt_BR",
"ro",
"ru",
"sv",
"tr"
],
"example": "en_NZ",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"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/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/Godthab",
"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/Nipigon",
"America/Nome",
"America/Noronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Ojinaga",
"America/Panama",
"America/Pangnirtung",
"America/Paramaribo",
"America/Phoenix",
"America/Port-au-Prince",
"America/Port_of_Spain",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Punta_Arenas",
"America/Rainy_River",
"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/Thunder_Bay",
"America/Tijuana",
"America/Toronto",
"America/Tortola",
"America/Vancouver",
"America/Whitehorse",
"America/Winnipeg",
"America/Yakutat",
"America/Yellowknife",
"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/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/Currie",
"Australia/Darwin",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"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/Kiev",
"Europe/Kirov",
"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/Uzhgorod",
"Europe/Vaduz",
"Europe/Vatican",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Europe/Zagreb",
"Europe/Zaporozhye",
"Europe/Zurich",
"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/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"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",
"UTC"
],
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [
"email",
"fullname",
"admin",
"disabled",
"locale",
"theme",
"timezone"
],
"type": "object"
},
"User": {
"properties": {
"admin": {
"description": "Whether the user has administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"type": "string"
},
"disabled": {
"description": "Whether the user's account is disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"locked": {
"description": "Whether the user's account is locked.",
"example": false,
"type": "boolean"
},
"provider": {
"description": "Account provider.",
"enum": [
"etraxis",
"ldap"
],
"example": "etraxis",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"type": "object"
},
"UserInfo": {
"properties": {
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"WatchIssuesCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
}
},
"info": {
"description": "API Reference Guide",
"title": "eTraxis",
"version": "1.0.0"
},
"paths": {
"/api/fields": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first field to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of fields to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "integer"
},
"project": {
"type": "integer"
},
"required": {
"type": "boolean"
},
"state": {
"type": "integer"
},
"template": {
"type": "integer"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"position": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"required": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"type": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Field"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned field.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned field.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found fields.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of fields.",
"tags": [
"Fields"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "checkbox",
"schema": {
"$ref": "#/definitions/CreateCheckboxFieldCommand"
}
},
{
"in": "body",
"name": "date",
"schema": {
"$ref": "#/definitions/CreateDateFieldCommand"
}
},
{
"in": "body",
"name": "decimal",
"schema": {
"$ref": "#/definitions/CreateDecimalFieldCommand"
}
},
{
"in": "body",
"name": "duration",
"schema": {
"$ref": "#/definitions/CreateDurationFieldCommand"
}
},
{
"in": "body",
"name": "issue",
"schema": {
"$ref": "#/definitions/CreateIssueFieldCommand"
}
},
{
"in": "body",
"name": "list",
"schema": {
"$ref": "#/definitions/CreateListFieldCommand"
}
},
{
"in": "body",
"name": "number",
"schema": {
"$ref": "#/definitions/CreateNumberFieldCommand"
}
},
{
"in": "body",
"name": "string",
"schema": {
"$ref": "#/definitions/CreateStringFieldCommand"
}
},
{
"in": "body",
"name": "text",
"schema": {
"$ref": "#/definitions/CreateTextFieldCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
},
"409": {
"description": "Field with specified name already exists."
}
},
"summary": "Creates new field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}": {
"delete": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified field.",
"tags": [
"Fields"
]
},
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Field"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns specified field.",
"tags": [
"Fields"
]
},
"put": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "checkbox",
"schema": {
"$ref": "#/definitions/UpdateCheckboxFieldCommand"
}
},
{
"in": "body",
"name": "date",
"schema": {
"$ref": "#/definitions/UpdateDateFieldCommand"
}
},
{
"in": "body",
"name": "decimal",
"schema": {
"$ref": "#/definitions/UpdateDecimalFieldCommand"
}
},
{
"in": "body",
"name": "duration",
"schema": {
"$ref": "#/definitions/UpdateDurationFieldCommand"
}
},
{
"in": "body",
"name": "issue",
"schema": {
"$ref": "#/definitions/UpdateIssueFieldCommand"
}
},
{
"in": "body",
"name": "list",
"schema": {
"$ref": "#/definitions/UpdateListFieldCommand"
}
},
{
"in": "body",
"name": "number",
"schema": {
"$ref": "#/definitions/UpdateNumberFieldCommand"
}
},
{
"in": "body",
"name": "string",
"schema": {
"$ref": "#/definitions/UpdateStringFieldCommand"
}
},
{
"in": "body",
"name": "text",
"schema": {
"$ref": "#/definitions/UpdateTextFieldCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
},
"409": {
"description": "Field with specified name already exists."
}
},
"summary": "Updates specified field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/items": {
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/ListItem"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns field's list items.",
"tags": [
"Fields"
]
},
"post": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateListItemCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
},
"409": {
"description": "Item with specified value or text already exists."
}
},
"summary": "Creates new list item.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/permissions": {
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/FieldGroupPermission"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/FieldRolePermission"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns permissions of specified field.",
"tags": [
"Fields"
]
},
"put": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
}
},
"required": [
"permission"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Sets permissions of specified field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/position": {
"post": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SetFieldPositionCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Sets position of the specified field.",
"tags": [
"Fields"
]
}
},
"/api/files/{id}": {
"delete": {
"parameters": [
{
"description": "File ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "File is not found."
}
},
"summary": "Deletes specified file.",
"tags": [
"Files"
]
},
"get": {
"parameters": [
{
"description": "File ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "File is not found."
}
},
"summary": "Downloads specified file.",
"tags": [
"Files"
]
}
},
"/api/groups": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first group to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of groups to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"global": {
"type": "boolean"
},
"name": {
"type": "string"
},
"project": {
"type": "integer"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"global": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Group"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned group.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned group.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found groups.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of groups.",
"tags": [
"Groups"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateGroupCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Group with specified name already exists."
}
},
"summary": "Creates new group.",
"tags": [
"Groups"
]
}
},
"/api/groups/{id}": {
"delete": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified group.",
"tags": [
"Groups"
]
},
"get": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Group"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Returns specified group.",
"tags": [
"Groups"
]
},
"put": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateGroupCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
},
"409": {
"description": "Group with specified name already exists."
}
},
"summary": "Updates specified group.",
"tags": [
"Groups"
]
}
},
"/api/groups/{id}/members": {
"get": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/User"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Returns members for the specified group.",
"tags": [
"Groups"
]
},
"patch": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of user IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of user IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Sets members for the specified group.",
"tags": [
"Groups"
]
}
},
"/api/issues": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first issue to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of issues to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"age": {
"type": "integer"
},
"author": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"id": {
"type": "string"
},
"is_cloned": {
"type": "boolean"
},
"is_closed": {
"type": "boolean"
},
"is_critical": {
"type": "boolean"
},
"is_suspended": {
"type": "boolean"
},
"project": {
"type": "integer"
},
"project_name": {
"type": "string"
},
"responsible": {
"type": "integer"
},
"responsible_name": {
"type": "string"
},
"state": {
"type": "integer"
},
"state_name": {
"type": "string"
},
"subject": {
"type": "string"
},
"template": {
"type": "integer"
},
"template_name": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"age": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"author": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"changed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"closed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"created_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"subject": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Issue"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned issue.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned issue.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found issues.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of issues.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Creates new issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/read": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/MarkAsReadCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Marks specified issues as read.",
"tags": [
"Issues"
]
}
},
"/api/issues/unread": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/MarkAsUnreadCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Marks specified issues as unread.",
"tags": [
"Issues"
]
}
},
"/api/issues/unwatch": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UnwatchIssuesCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Stops watching for specified issues.",
"tags": [
"Issues"
]
}
},
"/api/issues/watch": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/WatchIssuesCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Starts watching for specified issues.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}": {
"delete": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified issue.",
"tags": [
"Issues"
]
},
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Issue"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns specified issue.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CloneIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Clones specified issue.",
"tags": [
"Issues"
]
},
"put": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Updates specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/assign/{user}": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "User ID.",
"in": "path",
"name": "user",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue or user is not found."
}
},
"summary": "Reassigns specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/changes": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Change"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue changes.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/comments": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Comment"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue comments.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/AddCommentCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Creates new comment.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/dependencies": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"default": 0,
"description": "Zero-based index of the first issue to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of issues to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"age": {
"type": "integer"
},
"author": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"id": {
"type": "string"
},
"is_cloned": {
"type": "boolean"
},
"is_closed": {
"type": "boolean"
},
"is_critical": {
"type": "boolean"
},
"is_suspended": {
"type": "boolean"
},
"project": {
"type": "integer"
},
"project_name": {
"type": "string"
},
"responsible": {
"type": "integer"
},
"responsible_name": {
"type": "string"
},
"state": {
"type": "integer"
},
"state_name": {
"type": "string"
},
"subject": {
"type": "string"
},
"template": {
"type": "integer"
},
"template_name": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"age": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"author": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"changed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"closed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"created_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"subject": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Issue"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned issue.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned issue.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found issues.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue dependencies.",
"tags": [
"Issues"
]
},
"patch": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of issue IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of issue IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Updates list of issue dependencies.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/events": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Event"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue events.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/files": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/File"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue files.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "Uploaded file.",
"in": "formData",
"name": "attachment",
"required": true,
"type": "file"
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Attaches new file.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/resume": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Resumes specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/state/{state}": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "State ID.",
"in": "path",
"name": "state",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/ChangeStateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue or state is not found."
}
},
"summary": "Changes state of specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/suspend": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SuspendIssueCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Suspends specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/watchers": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"default": 0,
"description": "Zero-based index of the first watcher to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of watchers to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"email": {
"type": "string"
},
"fullname": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"email": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"fullname": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/UserInfo"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned watcher.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned watcher.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found watchers.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue watchers.",
"tags": [
"Issues"
]
}
},
"/api/items/{id}": {
"delete": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified list item.",
"tags": [
"List Items"
]
},
"get": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/ListItem"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Item is not found."
}
},
"summary": "Returns specified list item.",
"tags": [
"List Items"
]
},
"put": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateListItemCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Item is not found."
},
"409": {
"description": "Item with specified value or text already exists."
}
},
"summary": "Updates specified list item.",
"tags": [
"List Items"
]
}
},
"/api/my/password": {
"put": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"properties": {
"current": {
"description": "Current password.",
"maxLength": 4096,
"type": "string"
},
"new": {
"description": "New password.",
"maxLength": 4096,
"type": "string"
}
},
"required": [
"current",
"new"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "Wrong current password, or The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Password cannot be set for external accounts."
}
},
"summary": "Sets new password for the current user.",
"tags": [
"My Account"
]
}
},
"/api/my/profile": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Profile"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns profile of the current user.",
"tags": [
"My Account"
]
},
"patch": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"properties": {
"email": {
"description": "Email address (RFC 5322). Ignored for external accounts.",
"maxLength": 254,
"type": "string"
},
"fullname": {
"description": "Full name. Ignored for external accounts.",
"maxLength": 50,
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Updates profile of the current user.",
"tags": [
"My Account"
]
}
},
"/api/my/projects": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Project"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of projects which can be used to create new issue.",
"tags": [
"My Account"
]
}
},
"/api/my/templates": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Template"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of templates which can be used to create new issue.",
"tags": [
"My Account"
]
}
},
"/api/projects": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first project to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of projects to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"suspended": {
"type": "boolean"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"created": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"suspended": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Project"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned project.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned project.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found projects.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of projects.",
"tags": [
"Projects"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateProjectCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"409": {
"description": "Project with specified name already exists."
}
},
"summary": "Creates new project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}": {
"delete": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified project.",
"tags": [
"Projects"
]
},
"get": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Project"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Returns specified project.",
"tags": [
"Projects"
]
},
"put": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateProjectCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Project with specified name already exists."
}
},
"summary": "Updates specified project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}/resume": {
"post": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Resumes specified project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}/suspend": {
"post": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Suspends specified project.",
"tags": [
"Projects"
]
}
},
"/api/states": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first state to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of states to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "integer"
},
"responsible": {
"type": "string"
},
"template": {
"type": "integer"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"type": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/State"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned state.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned state.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found states.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of states.",
"tags": [
"States"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateStateCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
},
"409": {
"description": "State with specified name already exists."
}
},
"summary": "Creates new state.",
"tags": [
"States"
]
}
},
"/api/states/{id}": {
"delete": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified state.",
"tags": [
"States"
]
},
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/State"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateStateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
},
"409": {
"description": "State with specified name already exists."
}
},
"summary": "Updates specified state.",
"tags": [
"States"
]
}
},
"/api/states/{id}/initial": {
"post": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets specified state as initial.",
"tags": [
"States"
]
}
},
"/api/states/{id}/responsibles": {
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns responsible groups of specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
}
},
"required": [
"groups"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets responsible groups of specified state.",
"tags": [
"States"
]
}
},
"/api/states/{id}/transitions": {
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/StateGroupTransition"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/StateRoleTransition"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns available transitions from specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
},
"state": {
"description": "Destination state ID.",
"example": "123",
"type": "integer"
}
},
"required": [
"state"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets transitions from specified state.",
"tags": [
"States"
]
}
},
"/api/templates": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first template to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of templates to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"critical": {
"type": "integer"
},
"description": {
"type": "string"
},
"frozen": {
"type": "integer"
},
"locked": {
"type": "boolean"
},
"name": {
"type": "string"
},
"prefix": {
"type": "string"
},
"project": {
"type": "integer"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"critical": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"frozen": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"locked": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"prefix": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Template"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned template.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned template.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found templates.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of templates.",
"tags": [
"Templates"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateTemplateCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Template with specified name or prefix already exists."
}
},
"summary": "Creates new template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}": {
"delete": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified template.",
"tags": [
"Templates"
]
},
"get": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Template"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Returns specified template.",
"tags": [
"Templates"
]
},
"put": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateTemplateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
},
"409": {
"description": "Template with specified name or prefix already exists."
}
},
"summary": "Updates specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/lock": {
"post": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Locks specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/permissions": {
"get": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/TemplateGroupPermission"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/TemplateRolePermission"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Returns permissions of specified template.",
"tags": [
"Templates"
]
},
"put": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
}
},
"required": [
"permission"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Sets permissions of specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/unlock": {
"post": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Unlocks specified template.",
"tags": [
"Templates"
]
}
},
"/api/users": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first user to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of users to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"admin": {
"type": "boolean"
},
"description": {
"type": "string"
},
"disabled": {
"type": "boolean"
},
"email": {
"type": "string"
},
"fullname": {
"type": "string"
},
"locked": {
"type": "boolean"
},
"provider": {
"enum": [
"eTraxis",
"LDAP"
],
"example": "LDAP",
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"admin": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"email": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"fullname": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"provider": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/User"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned user.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned user.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found users.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of users.",
"tags": [
"Users"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateUserCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Creates new user.",
"tags": [
"Users"
]
}
},
"/api/users/disable": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/DisableUsersCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Disables specified users.",
"tags": [
"Users"
]
}
},
"/api/users/enable": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/EnableUsersCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Enables specified users.",
"tags": [
"Users"
]
}
},
"/api/users/{id}": {
"delete": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified user.",
"tags": [
"Users"
]
},
"get": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/User"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Returns specified user.",
"tags": [
"Users"
]
},
"put": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateUserCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Updates specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/groups": {
"get": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Group"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Returns groups for the specified user.",
"tags": [
"Users"
]
},
"patch": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of group IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of group IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Sets groups for the specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/password": {
"put": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SetPasswordCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Sets password for the specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/unlock": {
"post": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Unlocks specified user.",
"tags": [
"Users"
]
}
}
},
"swagger": "2.0"
}
}
{
"spec": {
"definitions": {
"AddCommentCommand": {
"properties": {
"body": {
"description": "Text of the comment.",
"example": "Lorem ipsum",
"maxLength": "10000",
"type": "string"
},
"private": {
"description": "Whether should be private.",
"example": false,
"type": "boolean"
}
},
"required": [
"body",
"private"
],
"type": "object"
},
"Change": {
"properties": {
"field": {
"$ref": "#/definitions/FieldInfo"
},
"id": {
"description": "Change ID.",
"example": 123,
"type": "integer"
},
"new_value": {
"description": "New value of the field (depends on the field type).",
"example": 2,
"type": ""
},
"old_value": {
"description": "Old value of the field (depends on the field type).",
"example": 1,
"type": ""
},
"timestamp": {
"description": "Unix Epoch timestamp when the change has been made.",
"example": 1089280800,
"type": "integer"
},
"user": {
"$ref": "#/definitions/UserInfo"
}
},
"type": "object"
},
"ChangeStateCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"type": "object"
},
"CloneIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
}
},
"required": [
"subject"
],
"type": "object"
},
"Comment": {
"properties": {
"id": {
"description": "Comment ID.",
"example": 123,
"type": "integer"
},
"private": {
"description": "Whether the comment is private.",
"example": false,
"type": "boolean"
},
"text": {
"description": "Text of the comment.",
"example": "Lorem ipsum",
"type": "string"
},
"timestamp": {
"description": "Unix Epoch timestamp when the comment has been posted.",
"example": 1089280800,
"type": "integer"
},
"user": {
"$ref": "#/definitions/UserInfo"
}
},
"type": "object"
},
"CreateCheckboxFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": true,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"defaultValue"
],
"type": "object"
},
"CreateDateFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateDecimalFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"minimumValue": {
"description": "Minimum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateDurationFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"minimumValue": {
"description": "Minimum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateGroupCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Group name.",
"example": "Team",
"maxLength": "25",
"type": "string"
},
"project": {
"description": "Project ID (null for global group).",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"name"
],
"type": "object"
},
"CreateIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"responsible": {
"description": "User ID, who should be assigned to the issue.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
},
"template": {
"description": "Template ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"template",
"subject"
],
"type": "object"
},
"CreateIssueFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required"
],
"type": "object"
},
"CreateListFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required"
],
"type": "object"
},
"CreateListItemCommand": {
"properties": {
"text": {
"description": "Item's text.",
"example": "Friday",
"maxLength": "50",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"minimum": 1,
"type": "integer"
}
},
"required": [
"text"
],
"type": "object"
},
"CreateNumberFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 1,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 100,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"CreateProjectCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Project name.",
"example": "Project A",
"maxLength": "25",
"type": "string"
},
"suspended": {
"description": "Whether should be suspended.",
"example": false,
"type": "boolean"
}
},
"required": [
"name",
"suspended"
],
"type": "object"
},
"CreateStateCommand": {
"properties": {
"name": {
"description": "State name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"nextState": {
"description": "ID of the next state.",
"example": 456,
"pattern": "\\d+",
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"template": {
"description": "Template ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"required": [
"template",
"name",
"type",
"responsible"
],
"type": "object"
},
"CreateStringFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message subject",
"maxLength": "250",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 100,
"maximum": 250,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"maximumLength"
],
"type": "object"
},
"CreateTemplateCommand": {
"properties": {
"criticalAge": {
"description": "'Critical Age' value.",
"example": 5,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"maxLength": "100",
"type": "string"
},
"frozenTime": {
"description": "'Frozen Time' value.",
"example": 10,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"prefix": {
"description": "Template prefix.",
"example": "bug",
"maxLength": "5",
"type": "string"
},
"project": {
"description": "Project ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"project",
"name",
"prefix"
],
"type": "object"
},
"CreateTextFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message body",
"maxLength": "10000",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 10000,
"maximum": 4000,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
},
"state": {
"description": "State ID.",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"required": [
"state",
"name",
"required",
"maximumLength"
],
"type": "object"
},
"CreateUserCommand": {
"properties": {
"admin": {
"description": "Whether should have administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"maxLength": "100",
"type": "string"
},
"disabled": {
"description": "Whether should be disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"maxLength": "254",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"maxLength": "50",
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"enum": [
"bg",
"cs",
"de",
"en_AU",
"en_CA",
"en_GB",
"en_NZ",
"en_US",
"es",
"fr",
"hu",
"it",
"ja",
"lv",
"nl",
"pl",
"pt_BR",
"ro",
"ru",
"sv",
"tr"
],
"example": "en_NZ",
"type": "string"
},
"password": {
"description": "User's password.",
"example": "P@ssw0rd",
"maxLength": 4096,
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"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/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/Godthab",
"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/Nipigon",
"America/Nome",
"America/Noronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Ojinaga",
"America/Panama",
"America/Pangnirtung",
"America/Paramaribo",
"America/Phoenix",
"America/Port-au-Prince",
"America/Port_of_Spain",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Punta_Arenas",
"America/Rainy_River",
"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/Thunder_Bay",
"America/Tijuana",
"America/Toronto",
"America/Tortola",
"America/Vancouver",
"America/Whitehorse",
"America/Winnipeg",
"America/Yakutat",
"America/Yellowknife",
"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/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/Currie",
"Australia/Darwin",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"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/Kiev",
"Europe/Kirov",
"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/Uzhgorod",
"Europe/Vaduz",
"Europe/Vatican",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Europe/Zagreb",
"Europe/Zaporozhye",
"Europe/Zurich",
"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/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"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",
"UTC"
],
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [
"email",
"password",
"fullname",
"admin",
"disabled",
"locale",
"theme",
"timezone"
],
"type": "object"
},
"DisableUsersCommand": {
"properties": {
"users": {
"description": "List of user IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"users"
],
"type": "object"
},
"EnableUsersCommand": {
"properties": {
"users": {
"description": "List of user IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"users"
],
"type": "object"
},
"Event": {
"properties": {
"assignee": {
"$ref": "#/definitions/UserInfo"
},
"file": {
"$ref": "#/definitions/File"
},
"issue": {
"$ref": "#/definitions/IssueInfo"
},
"state": {
"$ref": "#/definitions/StateInfo"
},
"timestamp": {
"description": "Unix Epoch timestamp when the event has took place.",
"example": 1089280800,
"type": "integer"
},
"type": {
"description": "Event type.",
"enum": [
"comment.private",
"comment.public",
"dependency.added",
"dependency.removed",
"file.attached",
"file.deleted",
"issue.assigned",
"state.changed",
"issue.closed",
"issue.created",
"issue.edited",
"issue.reopened",
"issue.resumed",
"issue.suspended"
],
"example": "issue.created",
"type": "string"
},
"user": {
"$ref": "#/definitions/UserInfo"
}
},
"type": "object"
},
"Field": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"type": "string"
},
"id": {
"description": "Field ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"type": "string"
},
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": 1,
"type": "integer"
},
"required": {
"description": "Whether the field is required.",
"example": true,
"type": "boolean"
},
"state": {
"$ref": "#/definitions/State"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"type": "object"
},
"FieldGroupPermission": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
}
},
"type": "object"
},
"FieldInfo": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"type": "string"
},
"id": {
"description": "Field ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"type": "string"
},
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": 1,
"type": "integer"
},
"required": {
"description": "Whether the field is required.",
"example": true,
"type": "boolean"
},
"type": {
"description": "Field type.",
"enum": [
"checkbox",
"date",
"decimal",
"duration",
"issue",
"list",
"number",
"string",
"text"
],
"example": "list",
"type": "string"
}
},
"type": "object"
},
"FieldRolePermission": {
"properties": {
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
},
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
}
},
"type": "object"
},
"File": {
"properties": {
"id": {
"description": "File ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "File name.",
"example": "enclosure.pdf",
"type": "string"
},
"size": {
"description": "File size (bytes).",
"example": 233074,
"type": "integer"
},
"timestamp": {
"description": "Unix Epoch timestamp when the file has been attached.",
"example": 1089280800,
"type": "integer"
},
"type": {
"description": "MIME type.",
"example": "application/pdf",
"type": "string"
},
"user": {
"$ref": "#/definitions/UserInfo"
}
},
"type": "object"
},
"Group": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"type": "string"
},
"global": {
"description": "Whether the group is a global one.",
"example": false,
"type": "boolean"
},
"id": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Group name.",
"example": "Team",
"type": "string"
},
"project": {
"$ref": "#/definitions/Project"
}
},
"type": "object"
},
"Issue": {
"properties": {
"age": {
"description": "Number of days the issue remained or remains opened.",
"example": 5,
"type": "integer"
},
"author": {
"$ref": "#/definitions/UserInfo"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
"example": 1089280800,
"type": "integer"
},
"closed_at": {
"description": "Unix Epoch timestamp when the issue has been closed, if so.",
"example": 1089280800,
"type": "integer"
},
"created_at": {
"description": "Unix Epoch timestamp when the issue has been created.",
"example": 1089280800,
"type": "integer"
},
"id": {
"description": "Issue ID.",
"example": 123,
"type": "integer"
},
"is_cloned": {
"description": "Whether the issue was cloned.",
"example": true,
"type": "boolean"
},
"is_closed": {
"description": "Whether the issue is closed.",
"example": false,
"type": "boolean"
},
"is_critical": {
"description": "Whether the issue is critical (remains opened for too long).",
"example": false,
"type": "boolean"
},
"is_frozen": {
"description": "Whether the issue is frozen.",
"example": false,
"type": "boolean"
},
"is_suspended": {
"description": "Whether the issue is suspended.",
"example": true,
"type": "boolean"
},
"origin": {
"description": "Original issue ID this issue was cloned from (when applicable).",
"example": 123,
"type": "integer"
},
"read_at": {
"description": "Unix Epoch timestamp when the issue was viewed by current user last time.",
"example": 1089280800,
"type": "integer"
},
"responsible": {
"$ref": "#/definitions/UserInfo"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
"example": 1089280800,
"type": "integer"
},
"state": {
"$ref": "#/definitions/State"
},
"subject": {
"description": "Subject of the issue.",
"example": "Test issue",
"type": "string"
}
},
"type": "object"
},
"IssueInfo": {
"properties": {
"age": {
"description": "Number of days the issue remained or remains opened.",
"example": 5,
"type": "integer"
},
"author": {
"$ref": "#/definitions/UserInfo"
},
"changed_at": {
"description": "Unix Epoch timestamp when the issue has been changed last time.",
"example": 1089280800,
"type": "integer"
},
"closed_at": {
"description": "Unix Epoch timestamp when the issue has been closed, if so.",
"example": 1089280800,
"type": "integer"
},
"created_at": {
"description": "Unix Epoch timestamp when the issue has been created.",
"example": 1089280800,
"type": "integer"
},
"id": {
"description": "Issue ID.",
"example": 123,
"type": "integer"
},
"is_cloned": {
"description": "Whether the issue was cloned.",
"example": true,
"type": "boolean"
},
"is_closed": {
"description": "Whether the issue is closed.",
"example": false,
"type": "boolean"
},
"is_critical": {
"description": "Whether the issue is critical (remains opened for too long).",
"example": false,
"type": "boolean"
},
"is_frozen": {
"description": "Whether the issue is frozen.",
"example": false,
"type": "boolean"
},
"is_suspended": {
"description": "Whether the issue is suspended.",
"example": true,
"type": "boolean"
},
"origin": {
"description": "Original issue ID this issue was cloned from (when applicable).",
"example": 123,
"type": "integer"
},
"responsible": {
"$ref": "#/definitions/UserInfo"
},
"resumes_at": {
"description": "Unix Epoch timestamp when the issue will be resumed, if suspended.",
"example": 1089280800,
"type": "integer"
},
"state": {
"$ref": "#/definitions/State"
},
"subject": {
"description": "Subject of the issue.",
"example": "Test issue",
"type": "string"
}
},
"type": "object"
},
"ListItem": {
"properties": {
"id": {
"description": "Item ID.",
"example": 123,
"type": "integer"
},
"text": {
"description": "Item's text.",
"example": "Friday",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"type": "integer"
}
},
"type": "object"
},
"MarkAsReadCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"MarkAsUnreadCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"Profile": {
"properties": {
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"provider": {
"description": "Account provider.",
"enum": [
"etraxis",
"ldap"
],
"example": "etraxis",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"type": "object"
},
"Project": {
"properties": {
"created": {
"description": "Unix Epoch timestamp when the project has been registered.",
"example": 1089280800,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"type": "string"
},
"id": {
"description": "Project ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "Project name.",
"example": "Project A",
"type": "string"
},
"suspended": {
"description": "Whether the project is suspended.",
"example": false,
"type": "boolean"
}
},
"type": "object"
},
"SetFieldPositionCommand": {
"properties": {
"position": {
"description": "Ordinal number of the field among other fields of the same state.",
"example": "1",
"minimum": 1,
"pattern": "\\d+",
"type": "integer"
}
},
"required": [
"position"
],
"type": "object"
},
"SetPasswordCommand": {
"properties": {
"password": {
"description": "New password.",
"example": "P@ssw0rd",
"maxLength": 4096,
"type": "string"
}
},
"required": [
"password"
],
"type": "object"
},
"State": {
"properties": {
"id": {
"description": "State ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "State name.",
"example": "Assigned",
"type": "string"
},
"next_state": {
"description": "ID of the next state if specified.",
"example": 456,
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"template": {
"$ref": "#/definitions/Template"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"type": "object"
},
"StateGroupTransition": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"state": {
"description": "State ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"StateInfo": {
"properties": {
"id": {
"description": "State ID.",
"example": 123,
"type": "integer"
},
"name": {
"description": "State name.",
"example": "Assigned",
"type": "string"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
},
"type": {
"description": "State type.",
"enum": [
"initial",
"intermediate",
"final"
],
"example": "intermediate",
"type": "string"
}
},
"type": "object"
},
"StateRoleTransition": {
"properties": {
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"state": {
"description": "State ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"SuspendIssueCommand": {
"properties": {
"date": {
"description": "Date when the issue will be automatically resumed.",
"example": "2018-09-25",
"format": "YYYY-MM-DD",
"pattern": "\\d{4}\\-[0-1]\\d\\-[0-3]\\d",
"type": "string"
}
},
"required": [
"date"
],
"type": "object"
},
"Template": {
"properties": {
"critical": {
"description": "When an issue remains opened for more than this amount of days it's displayed in red in the list of issues.",
"example": 5,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"type": "string"
},
"frozen": {
"description": "When an issue is closed a user cannot change its state anymore, but one still can edit its fields, add comments and attach files. If frozen time is specified it will be allowed to edit the issue this amount of days after its closure. After that the issue becomes read-only. If this attribute is not specified, an issue will never become read-only.",
"example": 10,
"type": "integer"
},
"id": {
"description": "Template ID.",
"example": 123,
"type": "integer"
},
"locked": {
"description": "Whether the template is locked for edition.",
"example": false,
"type": "boolean"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"type": "string"
},
"prefix": {
"description": "Template prefix (used as a prefix in ID of the issues, created using this template).",
"example": "bug",
"type": "string"
},
"project": {
"$ref": "#/definitions/Project"
}
},
"type": "object"
},
"TemplateGroupPermission": {
"properties": {
"group": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
}
},
"type": "object"
},
"TemplateRolePermission": {
"properties": {
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
},
"role": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
}
},
"type": "object"
},
"UnwatchIssuesCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
},
"UpdateCheckboxFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": true,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"defaultValue"
],
"type": "object"
},
"UpdateDateFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 2147483647,
"minimum": -2147483648,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateDecimalFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"minimumValue": {
"description": "Minimum value.",
"example": "3.1415",
"maximum": "9999999999.9999999999",
"minimum": "-9999999999.9999999999",
"pattern": ".*(^(\\-|\\+)?\\d{1,10}(\\.\\d{1,10})?$).*",
"type": "decimal"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateDurationFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"minimumValue": {
"description": "Minimum value.",
"example": "23:59",
"pattern": "\\d{1,6}:[0-5][0-9]",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateGroupCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Project developers",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Group name.",
"example": "Team",
"maxLength": "25",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"UpdateIssueCommand": {
"properties": {
"fields": {
"description": "Fields values (keys are field IDs).",
"title": "All the constraints are configured at run-time.",
"type": "object"
},
"subject": {
"description": "Issue subject.",
"example": "Short bug description",
"maxLength": "250",
"type": "string"
}
},
"type": "object"
},
"UpdateIssueFieldCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required"
],
"type": "object"
},
"UpdateListFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value (list item ID).",
"example": 123,
"pattern": "\\d+",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required"
],
"type": "object"
},
"UpdateListItemCommand": {
"properties": {
"text": {
"description": "Item's text.",
"example": "Friday",
"maxLength": "50",
"type": "string"
},
"value": {
"description": "Item's value.",
"example": 5,
"minimum": 1,
"type": "integer"
}
},
"required": [
"text"
],
"type": "object"
},
"UpdateNumberFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": 1,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumValue": {
"description": "Maximum value.",
"example": 100,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"minimumValue": {
"description": "Minimum value.",
"example": 0,
"maximum": 1000000000,
"minimum": -1000000000,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"minimumValue",
"maximumValue"
],
"type": "object"
},
"UpdateProjectCommand": {
"properties": {
"description": {
"description": "Optional description.",
"example": "Our initial startup",
"maxLength": "100",
"type": "string"
},
"name": {
"description": "Project name.",
"example": "Project A",
"maxLength": "25",
"type": "string"
},
"suspended": {
"description": "Whether should be suspended.",
"example": false,
"type": "boolean"
}
},
"required": [
"name",
"suspended"
],
"type": "object"
},
"UpdateStateCommand": {
"properties": {
"name": {
"description": "State name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"nextState": {
"description": "ID of the next state.",
"example": 456,
"pattern": "\\d+",
"type": "integer"
},
"responsible": {
"description": "State responsibility.",
"enum": [
"keep",
"assign",
"remove"
],
"example": "assign",
"type": "string"
}
},
"required": [
"name",
"responsible"
],
"type": "object"
},
"UpdateStringFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message subject",
"maxLength": "250",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 100,
"maximum": 250,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"maximumLength"
],
"type": "object"
},
"UpdateTemplateCommand": {
"properties": {
"criticalAge": {
"description": "'Critical Age' value.",
"example": 5,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"description": {
"description": "Optional description.",
"example": "Error reports",
"maxLength": "100",
"type": "string"
},
"frozenTime": {
"description": "'Frozen Time' value.",
"example": 10,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"name": {
"description": "Template name.",
"example": "Bugfix",
"maxLength": "50",
"type": "string"
},
"prefix": {
"description": "Template prefix.",
"example": "bug",
"maxLength": "5",
"type": "string"
}
},
"required": [
"name",
"prefix"
],
"type": "object"
},
"UpdateTextFieldCommand": {
"properties": {
"defaultValue": {
"description": "Default value.",
"example": "Message body",
"maxLength": "10000",
"type": "string"
},
"description": {
"description": "Optional description.",
"example": "Error severity",
"maxLength": "1000",
"type": "string"
},
"maximumLength": {
"description": "Maximum length.",
"example": 10000,
"maximum": 4000,
"minimum": 1,
"pattern": ".*(^(\\-|\\+)?\\d+$).*",
"type": "integer"
},
"name": {
"description": "Field name.",
"example": "Severity",
"maxLength": "50",
"type": "string"
},
"pcreCheck": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"pcreReplace": {
"description": "Perl-compatible regular expression.",
"example": "($1) $2-$3",
"maxLength": "500",
"type": "string"
},
"pcreSearch": {
"description": "Perl-compatible regular expression.",
"example": "(\\d{3})-(\\d{3})-(\\d{4})",
"maxLength": "500",
"type": "string"
},
"required": {
"description": "Whether should be required.",
"example": true,
"type": "boolean"
}
},
"required": [
"name",
"required",
"maximumLength"
],
"type": "object"
},
"UpdateUserCommand": {
"properties": {
"admin": {
"description": "Whether should have administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"maxLength": "100",
"type": "string"
},
"disabled": {
"description": "Whether should be disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"maxLength": "254",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"maxLength": "50",
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"enum": [
"bg",
"cs",
"de",
"en_AU",
"en_CA",
"en_GB",
"en_NZ",
"en_US",
"es",
"fr",
"hu",
"it",
"ja",
"lv",
"nl",
"pl",
"pt_BR",
"ro",
"ru",
"sv",
"tr"
],
"example": "en_NZ",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"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/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/Godthab",
"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/Nipigon",
"America/Nome",
"America/Noronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Ojinaga",
"America/Panama",
"America/Pangnirtung",
"America/Paramaribo",
"America/Phoenix",
"America/Port-au-Prince",
"America/Port_of_Spain",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Punta_Arenas",
"America/Rainy_River",
"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/Thunder_Bay",
"America/Tijuana",
"America/Toronto",
"America/Tortola",
"America/Vancouver",
"America/Whitehorse",
"America/Winnipeg",
"America/Yakutat",
"America/Yellowknife",
"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/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/Currie",
"Australia/Darwin",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"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/Kiev",
"Europe/Kirov",
"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/Uzhgorod",
"Europe/Vaduz",
"Europe/Vatican",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Europe/Zagreb",
"Europe/Zaporozhye",
"Europe/Zurich",
"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/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"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",
"UTC"
],
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [
"email",
"fullname",
"admin",
"disabled",
"locale",
"theme",
"timezone"
],
"type": "object"
},
"User": {
"properties": {
"admin": {
"description": "Whether the user has administrator privileges.",
"example": false,
"type": "boolean"
},
"description": {
"description": "Optional description.",
"example": "very lovely daughter",
"type": "string"
},
"disabled": {
"description": "Whether the user's account is disabled.",
"example": false,
"type": "boolean"
},
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"locked": {
"description": "Whether the user's account is locked.",
"example": false,
"type": "boolean"
},
"provider": {
"description": "Account provider.",
"enum": [
"etraxis",
"ldap"
],
"example": "etraxis",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"type": "object"
},
"UserInfo": {
"properties": {
"email": {
"description": "Email address (RFC 5322).",
"example": "anna@example.com",
"type": "string"
},
"fullname": {
"description": "Full name.",
"example": "Anna Rodygina",
"type": "string"
},
"id": {
"description": "User ID.",
"example": 123,
"type": "integer"
}
},
"type": "object"
},
"WatchIssuesCommand": {
"properties": {
"issues": {
"description": "List of issue IDs.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"maxItems": "100",
"minItems": "1",
"type": "array"
}
},
"required": [
"issues"
],
"type": "object"
}
},
"info": {
"description": "API Reference Guide",
"title": "eTraxis",
"version": "1.0.0"
},
"paths": {
"/api/fields": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first field to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of fields to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "integer"
},
"project": {
"type": "integer"
},
"required": {
"type": "boolean"
},
"state": {
"type": "integer"
},
"template": {
"type": "integer"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"position": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"required": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"type": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Field"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned field.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned field.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found fields.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of fields.",
"tags": [
"Fields"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "checkbox",
"schema": {
"$ref": "#/definitions/CreateCheckboxFieldCommand"
}
},
{
"in": "body",
"name": "date",
"schema": {
"$ref": "#/definitions/CreateDateFieldCommand"
}
},
{
"in": "body",
"name": "decimal",
"schema": {
"$ref": "#/definitions/CreateDecimalFieldCommand"
}
},
{
"in": "body",
"name": "duration",
"schema": {
"$ref": "#/definitions/CreateDurationFieldCommand"
}
},
{
"in": "body",
"name": "issue",
"schema": {
"$ref": "#/definitions/CreateIssueFieldCommand"
}
},
{
"in": "body",
"name": "list",
"schema": {
"$ref": "#/definitions/CreateListFieldCommand"
}
},
{
"in": "body",
"name": "number",
"schema": {
"$ref": "#/definitions/CreateNumberFieldCommand"
}
},
{
"in": "body",
"name": "string",
"schema": {
"$ref": "#/definitions/CreateStringFieldCommand"
}
},
{
"in": "body",
"name": "text",
"schema": {
"$ref": "#/definitions/CreateTextFieldCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
},
"409": {
"description": "Field with specified name already exists."
}
},
"summary": "Creates new field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}": {
"delete": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified field.",
"tags": [
"Fields"
]
},
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Field"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns specified field.",
"tags": [
"Fields"
]
},
"put": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "checkbox",
"schema": {
"$ref": "#/definitions/UpdateCheckboxFieldCommand"
}
},
{
"in": "body",
"name": "date",
"schema": {
"$ref": "#/definitions/UpdateDateFieldCommand"
}
},
{
"in": "body",
"name": "decimal",
"schema": {
"$ref": "#/definitions/UpdateDecimalFieldCommand"
}
},
{
"in": "body",
"name": "duration",
"schema": {
"$ref": "#/definitions/UpdateDurationFieldCommand"
}
},
{
"in": "body",
"name": "issue",
"schema": {
"$ref": "#/definitions/UpdateIssueFieldCommand"
}
},
{
"in": "body",
"name": "list",
"schema": {
"$ref": "#/definitions/UpdateListFieldCommand"
}
},
{
"in": "body",
"name": "number",
"schema": {
"$ref": "#/definitions/UpdateNumberFieldCommand"
}
},
{
"in": "body",
"name": "string",
"schema": {
"$ref": "#/definitions/UpdateStringFieldCommand"
}
},
{
"in": "body",
"name": "text",
"schema": {
"$ref": "#/definitions/UpdateTextFieldCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
},
"409": {
"description": "Field with specified name already exists."
}
},
"summary": "Updates specified field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/items": {
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/ListItem"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns field's list items.",
"tags": [
"Fields"
]
},
"post": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateListItemCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
},
"409": {
"description": "Item with specified value or text already exists."
}
},
"summary": "Creates new list item.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/permissions": {
"get": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/FieldGroupPermission"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/FieldRolePermission"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Returns permissions of specified field.",
"tags": [
"Fields"
]
},
"put": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"permission": {
"description": "Specific permission.",
"enum": [
"R",
"RW"
],
"example": "RW",
"type": "string"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
}
},
"required": [
"permission"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Sets permissions of specified field.",
"tags": [
"Fields"
]
}
},
"/api/fields/{id}/position": {
"post": {
"parameters": [
{
"description": "Field ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SetFieldPositionCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Field is not found."
}
},
"summary": "Sets position of the specified field.",
"tags": [
"Fields"
]
}
},
"/api/files/{id}": {
"delete": {
"parameters": [
{
"description": "File ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "File is not found."
}
},
"summary": "Deletes specified file.",
"tags": [
"Files"
]
},
"get": {
"parameters": [
{
"description": "File ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "File is not found."
}
},
"summary": "Downloads specified file.",
"tags": [
"Files"
]
}
},
"/api/groups": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first group to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of groups to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"global": {
"type": "boolean"
},
"name": {
"type": "string"
},
"project": {
"type": "integer"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"global": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Group"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned group.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned group.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found groups.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of groups.",
"tags": [
"Groups"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateGroupCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Group with specified name already exists."
}
},
"summary": "Creates new group.",
"tags": [
"Groups"
]
}
},
"/api/groups/{id}": {
"delete": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified group.",
"tags": [
"Groups"
]
},
"get": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Group"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Returns specified group.",
"tags": [
"Groups"
]
},
"put": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateGroupCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
},
"409": {
"description": "Group with specified name already exists."
}
},
"summary": "Updates specified group.",
"tags": [
"Groups"
]
}
},
"/api/groups/{id}/members": {
"get": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/User"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Returns members for the specified group.",
"tags": [
"Groups"
]
},
"patch": {
"parameters": [
{
"description": "Group ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of user IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of user IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Group is not found."
}
},
"summary": "Sets members for the specified group.",
"tags": [
"Groups"
]
}
},
"/api/issues": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first issue to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of issues to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"age": {
"type": "integer"
},
"author": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"id": {
"type": "string"
},
"is_cloned": {
"type": "boolean"
},
"is_closed": {
"type": "boolean"
},
"is_critical": {
"type": "boolean"
},
"is_suspended": {
"type": "boolean"
},
"project": {
"type": "integer"
},
"project_name": {
"type": "string"
},
"responsible": {
"type": "integer"
},
"responsible_name": {
"type": "string"
},
"state": {
"type": "integer"
},
"state_name": {
"type": "string"
},
"subject": {
"type": "string"
},
"template": {
"type": "integer"
},
"template_name": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"age": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"author": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"changed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"closed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"created_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"subject": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Issue"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned issue.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned issue.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found issues.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of issues.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Creates new issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/read": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/MarkAsReadCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Marks specified issues as read.",
"tags": [
"Issues"
]
}
},
"/api/issues/unread": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/MarkAsUnreadCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Marks specified issues as unread.",
"tags": [
"Issues"
]
}
},
"/api/issues/unwatch": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UnwatchIssuesCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Stops watching for specified issues.",
"tags": [
"Issues"
]
}
},
"/api/issues/watch": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/WatchIssuesCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Starts watching for specified issues.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}": {
"delete": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified issue.",
"tags": [
"Issues"
]
},
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Issue"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns specified issue.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CloneIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Clones specified issue.",
"tags": [
"Issues"
]
},
"put": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateIssueCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Updates specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/assign/{user}": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "User ID.",
"in": "path",
"name": "user",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue or user is not found."
}
},
"summary": "Reassigns specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/changes": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Change"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue changes.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/comments": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Comment"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue comments.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/AddCommentCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Creates new comment.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/dependencies": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"default": 0,
"description": "Zero-based index of the first issue to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of issues to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"age": {
"type": "integer"
},
"author": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"id": {
"type": "string"
},
"is_cloned": {
"type": "boolean"
},
"is_closed": {
"type": "boolean"
},
"is_critical": {
"type": "boolean"
},
"is_suspended": {
"type": "boolean"
},
"project": {
"type": "integer"
},
"project_name": {
"type": "string"
},
"responsible": {
"type": "integer"
},
"responsible_name": {
"type": "string"
},
"state": {
"type": "integer"
},
"state_name": {
"type": "string"
},
"subject": {
"type": "string"
},
"template": {
"type": "integer"
},
"template_name": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"age": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"author": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"changed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"closed_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"created_at": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"state": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"subject": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Issue"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned issue.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned issue.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found issues.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue dependencies.",
"tags": [
"Issues"
]
},
"patch": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of issue IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of issue IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Updates list of issue dependencies.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/events": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Event"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue events.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/files": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/File"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue files.",
"tags": [
"Issues"
]
},
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "Uploaded file.",
"in": "formData",
"name": "attachment",
"required": true,
"type": "file"
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Attaches new file.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/resume": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Resumes specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/state/{state}": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"description": "State ID.",
"in": "path",
"name": "state",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/ChangeStateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue or state is not found."
}
},
"summary": "Changes state of specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/suspend": {
"post": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SuspendIssueCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Suspends specified issue.",
"tags": [
"Issues"
]
}
},
"/api/issues/{id}/watchers": {
"get": {
"parameters": [
{
"description": "Issue ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"default": 0,
"description": "Zero-based index of the first watcher to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of watchers to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"email": {
"type": "string"
},
"fullname": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"email": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"fullname": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/UserInfo"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned watcher.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned watcher.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found watchers.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Issue is not found."
}
},
"summary": "Returns list of issue watchers.",
"tags": [
"Issues"
]
}
},
"/api/items/{id}": {
"delete": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified list item.",
"tags": [
"List Items"
]
},
"get": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/ListItem"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Item is not found."
}
},
"summary": "Returns specified list item.",
"tags": [
"List Items"
]
},
"put": {
"parameters": [
{
"description": "Item ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateListItemCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Item is not found."
},
"409": {
"description": "Item with specified value or text already exists."
}
},
"summary": "Updates specified list item.",
"tags": [
"List Items"
]
}
},
"/api/my/password": {
"put": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"properties": {
"current": {
"description": "Current password.",
"maxLength": 4096,
"type": "string"
},
"new": {
"description": "New password.",
"maxLength": 4096,
"type": "string"
}
},
"required": [
"current",
"new"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "Wrong current password, or The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Password cannot be set for external accounts."
}
},
"summary": "Sets new password for the current user.",
"tags": [
"My Account"
]
}
},
"/api/my/profile": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Profile"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns profile of the current user.",
"tags": [
"My Account"
]
},
"patch": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"properties": {
"email": {
"description": "Email address (RFC 5322). Ignored for external accounts.",
"maxLength": 254,
"type": "string"
},
"fullname": {
"description": "Full name. Ignored for external accounts.",
"maxLength": 50,
"type": "string"
},
"locale": {
"description": "Locale (ISO 639-1 / ISO 3166-1).",
"example": "en_NZ",
"type": "string"
},
"theme": {
"description": "Theme.",
"enum": [
"azure",
"emerald",
"humanity",
"mars"
],
"example": "azure",
"type": "string"
},
"timezone": {
"description": "Timezone (IANA database value).",
"example": "Pacific/Auckland",
"type": "string"
}
},
"required": [],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Updates profile of the current user.",
"tags": [
"My Account"
]
}
},
"/api/my/projects": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Project"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of projects which can be used to create new issue.",
"tags": [
"My Account"
]
}
},
"/api/my/templates": {
"get": {
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Template"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
}
},
"summary": "Returns list of templates which can be used to create new issue.",
"tags": [
"My Account"
]
}
},
"/api/projects": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first project to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of projects to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"suspended": {
"type": "boolean"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"created": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"suspended": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Project"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned project.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned project.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found projects.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of projects.",
"tags": [
"Projects"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateProjectCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"409": {
"description": "Project with specified name already exists."
}
},
"summary": "Creates new project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}": {
"delete": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified project.",
"tags": [
"Projects"
]
},
"get": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Project"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Returns specified project.",
"tags": [
"Projects"
]
},
"put": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateProjectCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Project with specified name already exists."
}
},
"summary": "Updates specified project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}/resume": {
"post": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Resumes specified project.",
"tags": [
"Projects"
]
}
},
"/api/projects/{id}/suspend": {
"post": {
"parameters": [
{
"description": "Project ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
}
},
"summary": "Suspends specified project.",
"tags": [
"Projects"
]
}
},
"/api/states": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first state to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of states to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "integer"
},
"responsible": {
"type": "string"
},
"template": {
"type": "integer"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"responsible": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"template": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"type": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/State"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned state.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned state.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found states.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of states.",
"tags": [
"States"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateStateCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
},
"409": {
"description": "State with specified name already exists."
}
},
"summary": "Creates new state.",
"tags": [
"States"
]
}
},
"/api/states/{id}": {
"delete": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified state.",
"tags": [
"States"
]
},
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/State"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateStateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
},
"409": {
"description": "State with specified name already exists."
}
},
"summary": "Updates specified state.",
"tags": [
"States"
]
}
},
"/api/states/{id}/initial": {
"post": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets specified state as initial.",
"tags": [
"States"
]
}
},
"/api/states/{id}/responsibles": {
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns responsible groups of specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
}
},
"required": [
"groups"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets responsible groups of specified state.",
"tags": [
"States"
]
}
},
"/api/states/{id}/transitions": {
"get": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/StateGroupTransition"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/StateRoleTransition"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Returns available transitions from specified state.",
"tags": [
"States"
]
},
"put": {
"parameters": [
{
"description": "State ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
},
"state": {
"description": "Destination state ID.",
"example": "123",
"type": "integer"
}
},
"required": [
"state"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "State is not found."
}
},
"summary": "Sets transitions from specified state.",
"tags": [
"States"
]
}
},
"/api/templates": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first template to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of templates to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"critical": {
"type": "integer"
},
"description": {
"type": "string"
},
"frozen": {
"type": "integer"
},
"locked": {
"type": "boolean"
},
"name": {
"type": "string"
},
"prefix": {
"type": "string"
},
"project": {
"type": "integer"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"critical": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"frozen": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"locked": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"name": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"prefix": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"project": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/Template"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned template.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned template.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found templates.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of templates.",
"tags": [
"Templates"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateTemplateCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Project is not found."
},
"409": {
"description": "Template with specified name or prefix already exists."
}
},
"summary": "Creates new template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}": {
"delete": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified template.",
"tags": [
"Templates"
]
},
"get": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/Template"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Returns specified template.",
"tags": [
"Templates"
]
},
"put": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateTemplateCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
},
"409": {
"description": "Template with specified name or prefix already exists."
}
},
"summary": "Updates specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/lock": {
"post": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Locks specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/permissions": {
"get": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"groups": {
"items": {
"$ref": "#/definitions/TemplateGroupPermission"
},
"type": "array"
},
"roles": {
"items": {
"$ref": "#/definitions/TemplateRolePermission"
},
"type": "array"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Returns permissions of specified template.",
"tags": [
"Templates"
]
},
"put": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"groups": {
"items": {
"description": "Group ID.",
"example": 123,
"type": "integer"
},
"type": "array"
},
"permission": {
"description": "Specific permission.",
"enum": [
"comment.add",
"comment.private",
"dependency.add",
"dependency.remove",
"file.attach",
"file.delete",
"issue.create",
"issue.delete",
"issue.edit",
"issue.reassign",
"issue.reopen",
"issue.resume",
"issue.suspend",
"issue.view",
"reminder.send"
],
"example": "issue.edit",
"type": "string"
},
"roles": {
"items": {
"description": "System role.",
"enum": [
"anyone",
"author",
"responsible"
],
"example": "author",
"type": "string"
},
"type": "array"
}
},
"required": [
"permission"
],
"type": "object"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Sets permissions of specified template.",
"tags": [
"Templates"
]
}
},
"/api/templates/{id}/unlock": {
"post": {
"parameters": [
{
"description": "Template ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "Template is not found."
}
},
"summary": "Unlocks specified template.",
"tags": [
"Templates"
]
}
},
"/api/users": {
"get": {
"parameters": [
{
"default": 0,
"description": "Zero-based index of the first user to return.",
"in": "query",
"minimum": 0,
"name": "offset",
"required": false,
"type": "integer"
},
{
"default": 100,
"description": "Maximum number of users to return.",
"in": "query",
"maximum": 100,
"minimum": 1,
"name": "limit",
"required": false,
"type": "integer"
},
{
"description": "Optional search value.",
"in": "body",
"name": "X-Search",
"required": false,
"schema": {
"type": "string"
},
"type": "string"
},
{
"description": "Optional filters.",
"in": "body",
"name": "X-Filter",
"required": false,
"schema": {
"properties": {
"admin": {
"type": "boolean"
},
"description": {
"type": "string"
},
"disabled": {
"type": "boolean"
},
"email": {
"type": "string"
},
"fullname": {
"type": "string"
},
"locked": {
"type": "boolean"
},
"provider": {
"enum": [
"eTraxis",
"LDAP"
],
"example": "LDAP",
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
{
"description": "Optional sorting.",
"in": "body",
"name": "X-Sort",
"required": false,
"schema": {
"properties": {
"admin": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"description": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"email": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"fullname": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"id": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
},
"provider": {
"enum": [
"ASC",
"DESC"
],
"example": "ASC",
"type": "string"
}
},
"type": "object"
},
"type": "object"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"properties": {
"data": {
"items": {
"$ref": "#/definitions/User"
},
"type": "array"
},
"from": {
"description": "Zero-based index of the first returned user.",
"example": 0,
"type": "integer"
},
"to": {
"description": "Zero-based index of the last returned user.",
"example": 99,
"type": "integer"
},
"total": {
"description": "Total number of all found users.",
"example": 100,
"type": "integer"
}
},
"type": "object"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Returns list of users.",
"tags": [
"Users"
]
},
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/CreateUserCommand"
}
}
],
"responses": {
"201": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Creates new user.",
"tags": [
"Users"
]
}
},
"/api/users/disable": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/DisableUsersCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Disables specified users.",
"tags": [
"Users"
]
}
},
"/api/users/enable": {
"post": {
"parameters": [
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/EnableUsersCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Enables specified users.",
"tags": [
"Users"
]
}
},
"/api/users/{id}": {
"delete": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
}
},
"summary": "Deletes specified user.",
"tags": [
"Users"
]
},
"get": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"$ref": "#/definitions/User"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Returns specified user.",
"tags": [
"Users"
]
},
"put": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/UpdateUserCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
},
"409": {
"description": "Account with specified email already exists."
}
},
"summary": "Updates specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/groups": {
"get": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success.",
"schema": {
"items": {
"$ref": "#/definitions/Group"
},
"type": "array"
}
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Returns groups for the specified user.",
"tags": [
"Users"
]
},
"patch": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"properties": {
"add": {
"description": "List of group IDs to add.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
},
"remove": {
"description": "List of group IDs to remove.",
"example": [
123,
456
],
"items": {
"type": "integer"
},
"type": "array"
}
}
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Sets groups for the specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/password": {
"put": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
},
{
"in": "body",
"name": "",
"schema": {
"$ref": "#/definitions/SetPasswordCommand"
}
}
],
"responses": {
"200": {
"description": "Success."
},
"400": {
"description": "The request is malformed."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Sets password for the specified user.",
"tags": [
"Users"
]
}
},
"/api/users/{id}/unlock": {
"post": {
"parameters": [
{
"description": "User ID.",
"in": "path",
"name": "id",
"pattern": "\\d+",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "Success."
},
"401": {
"description": "Client is not authenticated."
},
"403": {
"description": "Client is not authorized for this request."
},
"404": {
"description": "User is not found."
}
},
"summary": "Unlocks specified user.",
"tags": [
"Users"
]
}
}
},
"swagger": "2.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment