This resource represents workflows. Use it to:
Returns a workflow and related statuses for a specified workflow id and version number.
Note: Stored workflow data expires after 60 days. Additionally, no data from before the 30th of October 2025 is available.
Permissions required:
manage:jira-configurationread:workflow:jiraConnect app scope required: ADMIN
integer
string
Returned if the request is successful.
The specified workflow version read from history.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"version": 4,
"workflowId": "c5ef565c-1b1e-427e-bc3b-e677b0dc027c"
}`;
const response = await requestJira(`/rest/api/3/workflow/history`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{
"statuses": [
{
"description": "An example status description.",
"id": "10003",
"name": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "To Do Category",
"statusReference": "10003"
}
],
"workflows": [
{
"created": "2025-10-20 02:32:12.410331",
"description": "An example workflow description.",
"id": "c5ef565c-1b1e-427e-bc3b-e677b0dc027c",
"lastUpdateAuthorAAID": "123456789",
"name": "Example Workflow",
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": 20,
"y": 40
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 10,
"y": 20
},
"properties": {},
"statusReference": "10003"
}
],
"transitions": [],
"updated": "2025-11-21 03:20:39.15096",
"version": {
"id": "93a7cb12-c503-442a-9e09-654eb7f4dfe2",
"versionNumber": 4
}
}
]
}Returns a list of workflow history entries for a specified workflow id.
Note: Stored workflow data expires after 60 days. Additionally, no data from before the 30th of October 2025 is available.
Permissions required:
manage:jira-configurationread:workflow:jiraConnect app scope required: ADMIN
string
string
Returned if the request is successful.
A list of workflow history entries.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"workflowId": "c5ef565c-1b1e-427e-bc3b-e677b0dc027c"
}`;
const response = await requestJira(`/rest/api/3/workflow/history/list`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"entries": [
{
"isIntermediate": false,
"workflowId": "c5ef565c-1b1e-427e-bc3b-e677b0dc027c",
"workflowVersion": 4,
"writtenAt": "2025-11-20 02:21:19.598"
},
{
"isIntermediate": true,
"workflowId": "c5ef565c-1b1e-427e-bc3b-e677b0dc027c",
"workflowVersion": 3,
"writtenAt": "2025-11-19 02:23:17.465"
}
]
}This will be removed on June 1, 2026; use Search workflows instead.
Returns a paginated list of published classic workflows. When workflow names are specified, details of those workflows are returned. Otherwise, all published classic workflows are returned.
This operation does not return next-gen workflows.
Permissions required: Administer Jira global permission.
manage:jira-projectread:group:jira, read:issue-security-level:jira, read:project-role:jira, read:screen:jira, read:status:jira ...(Show more)Connect app scope required: ADMIN
integer
integer
array<string>
string
string
string
boolean
Returned if the request is successful.
A page of items.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflow/search`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{
"isLast": false,
"maxResults": 1,
"startAt": 0,
"total": 5,
"values": [
{
"id": {
"name": "SCRUM Workflow",
"entityId": "5ed312c5-f7a6-4a78-a1f6-8ff7f307d063"
},
"description": "A workflow used for Software projects in the SCRUM methodology",
"transitions": [
{
"id": "5",
"name": "In Progress",
"description": "Start working on the issue.",
"from": [
"10",
"13"
],
"to": "14",
"type": "directed",
"screen": {
"id": "10000",
"name": "Issue screen"
},
"rules": {
"conditionsTree": {
"nodeType": "compound",
"operator": "AND",
"conditions": [
{
"nodeType": "simple",
"type": "PermissionCondition",
"configuration": {
"permissionKey": "WORK_ON_ISSUES"
}
},
{
"nodeType": "simple",
"type": "PermissionCondition",
"configuration": {
"permissionKey": "RESOLVE_ISSUES"
}
}
]
},
"validators": [
{
"type": "FieldRequiredValidator",
"configuration": {
"errorMessage": "A custom error message",
"fields": [
"description",
"assignee"
],
"ignoreContext": true
}
}
],
"postFunctions": [
{
"type": "UpdateIssueStatusFunction"
},
{
"type": "GenerateChangeHistoryFunction"
},
{
"type": "FireIssueEventFunction"
}
]
},
"properties": {
"jira.fieldscreen.id": 1
}
}
],
"statuses": [
{
"id": "3",
"name": "In Progress",
"properties": {
"issueEditable": false,
"jira.issue.editable": "false"
}
}
],
"isDefault": false,
"schemes": [
{
"id": "10001",
"name": "Test Workflow Scheme"
}
],
"projects": [
{
"avatarUrls": {
"16x16": "secure/projectavatar?size=xsmall&pid=10000",
"24x24": "secure/projectavatar?size=small&pid=10000",
"32x32": "secure/projectavatar?size=medium&pid=10000",
"48x48": "secure/projectavatar?size=large&pid=10000"
},
"id": "10000",
"key": "EX",
"name": "Example",
"projectCategory": {
"description": "Project category description",
"id": "10000",
"name": "A project category"
},
"projectTypeKey": "ProjectTypeKey{key='software'}",
"self": "project/EX",
"simplified": false
}
],
"hasDraftWorkflow": true,
"operations": {
"canEdit": true,
"canDelete": false
},
"created": "2018-12-10T16:30:15.000+0000",
"updated": "2018-12-11T11:45:13.000+0000"
}
]
}Deletes a workflow.
The workflow cannot be deleted if it is:
Permissions required: Administer Jira global permission.
manage:jira-configurationdelete:workflow:jiraConnect app scope required: ADMIN
string
RequiredReturned if the workflow is deleted.
1
2
3
4
5
6
7
8
9
10
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflow/{entityId}`, {
method: 'DELETE'
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.text());Returns a page of issue types using a given workflow within a project.
manage:jira-configurationread:project:jira, read:workflow:jira, read:issue-type:jiraConnect app scope required: ADMIN
string
Requiredinteger
Requiredstring
integer
Returned if the request is successful.
Issue types associated with the workflow for a project.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
{
"issueTypes": {
"nextPageToken": "eyJvIjoyfQ==",
"values": [
{
"id": "1000"
}
]
},
"projectId": "6e2bde9f-f213-4920-95cd-28e015af59a1",
"workflowId": "2000"
}Returns a page of projects using a given workflow.
manage:jira-configurationread:project:jira, read:workflow:jiraConnect app scope required: ADMIN
string
Requiredstring
integer
Returned if the request is successful.
Projects using the workflow.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflow/{workflowId}/projectUsages`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
{
"projects": {
"nextPageToken": "eyJvIjoyfQ==",
"values": [
{
"id": "1003"
}
]
},
"workflowId": "fb759d53-a3a4-45ff-9de4-547c4b638dde"
}Returns a page of workflow schemes using a given workflow.
manage:jira-configurationread:workflow-scheme:jira, read:workflow:jiraConnect app scope required: ADMIN
string
Requiredstring
integer
Returned if the request is successful.
Workflow schemes using the workflow.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflow/{workflowId}/workflowSchemes`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
{
"workflowId": "fb759d53-a3a4-45ff-9de4-547c4b638dde",
"workflowSchemes": {
"nextPageToken": "eyJvIjoyfQ==",
"values": [
{
"id": "1000"
}
]
}
}Returns a list of workflows and related statuses by providing workflow names, workflow IDs, or project and issue types.
Permissions required:
manage:jira-configurationread:workflow:jiraConnect apps cannot access this REST resource.
array<ProjectAndIssueTypePair>
array<string>
array<string>
Returned if the request is successful.
Details of workflows and related statuses.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"projectAndIssueTypes": [],
"workflowIds": [],
"workflowNames": [
"Workflow 1",
"Workflow 2"
]
}`;
const response = await requestJira(`/rest/api/3/workflows`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{
"statuses": [
{
"description": "",
"id": "10003",
"name": "Done",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "DONE",
"statusReference": "10003"
},
{
"description": "",
"id": "10001",
"name": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "TODO",
"statusReference": "10001"
},
{
"description": "",
"id": "10002",
"name": "In Progress",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "IN_PROGRESS",
"statusReference": "10002"
}
],
"workflows": [
{
"description": "",
"id": "b9ff2384-d3b6-4d4e-9509-3ee19f607168",
"isEditable": true,
"name": "Workflow 1",
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "10002"
},
{
"deprecated": false,
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "10003"
},
{
"deprecated": false,
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "10001"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "41",
"links": [
{
"fromPort": 0,
"fromStatusReference": "10001",
"toPort": 1
}
],
"name": "Start work",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "DIRECTED",
"validators": []
},
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "31",
"links": [],
"name": "Done",
"properties": {},
"toStatusReference": "10003",
"triggers": [],
"type": "GLOBAL",
"validators": []
}
],
"version": {
"id": "f010ac1b-3dd3-43a3-aa66-0ee8a447f76e",
"versionNumber": 0
}
}
]
}Get the list of workflow capabilities for a specific workflow using either the workflow ID, or the project and issue type ID pair. The response includes the scope of the workflow, defined as global/project-based, and a list of project types that the workflow is scoped to. It also includes all rules organised into their broad categories (conditions, validators, actions, triggers, screens) as well as the source location (Atlassian-provided, Connect, Forge).
Permissions required:
The current list of Atlassian-provided rules:
A validator rule that checks if a user has the required permissions to execute the transition in the workflow.
A validator rule that checks if a user has the required permissions to execute the transition in the workflow.
1 2 3 4 5 6{ "ruleKey": "system:check-permission-validator", "parameters": { "permissionKey": "ADMINISTER_PROJECTS" } }
Parameters:
permissionKey The permission required to perform the transition. Allowed values: built-in Jira permissions.A validator to block the child issue's transition depending on the parent issue's status.
1 2 3 4 5 6 7{ "ruleKey" : "system:parent-or-child-blocking-validator" "parameters" : { "blocker" : "PARENT" "statusIds" : "1,2,3" } }
Parameters:
blocker currently only supports PARENT.statusIds a comma-separated list of status IDs.A validator that checks if an issue has transitioned through specified previous status(es) before allowing the current transition to occur.
1 2 3 4 5 6 7{ "ruleKey": "system:previous-status-validator", "parameters": { "previousStatusIds": "10014", "mostRecentStatusOnly": "true" } }
Parameters:
previousStatusIds a comma-separated list of status IDs, currently only support one ID.mostRecentStatusOnly when true only considers the most recent status for the condition evaluation. Allowed values: true, false.A validation that ensures a specific field's value meets the defined criteria before allowing an issue to transition in the workflow.
Depending on the rule type, the result will vary:
1 2 3 4 5 6 7 8 9{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "fieldRequired", "fieldsRequired": "assignee", "ignoreContext": "true", "errorMessage": "An assignee must be set!" } }
Parameters:
fieldsRequired the ID of the field that is required. For a custom field, it would look like customfield_123.ignoreContext controls the impact of context settings on field validation. When set to true, the validator doesn't check a required field if its context isn't configured for the current issue. When set to false, the validator requires a field even if its context is invalid. Allowed values: true, false.errorMessage is the error message to display if the user does not provide a value during the transition. A default error message will be shown if you don't provide one (Optional).1 2 3 4 5 6 7 8 9{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "fieldChanged", "groupsExemptFromValidation": "6862ac20-8672-4f68-896d-4854f5efb79e", "fieldKey": "versions", "errorMessage": "Affect versions must be modified before transition" } }
Parameters:
groupsExemptFromValidation a comma-separated list of group IDs to be exempt from the validation.fieldKey the ID of the field that has changed. For a custom field, it would look like customfield_123.errorMessage the error message to display if the user does not provide a value during the transition. A default error message will be shown if you don't provide one (Optional).1 2 3 4 5 6 7 8{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "fieldHasSingleValue", "fieldKey": "created", "excludeSubtasks": "true" } }
Parameters:
fieldKey the ID of the field to validate. For a custom field, it would look like customfield_123.excludeSubtasks Option to exclude values copied from sub-tasks. Allowed values: true, false.1 2 3 4 5 6 7 8{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "fieldMatchesRegularExpression", "regexp": "[0-9]{4}", "fieldKey": "description" } }
Parameters:
regexp the regular expression used to validate the field\u2019s content.fieldKey the ID of the field to validate. For a custom field, it would look like customfield_123.1 2 3 4 5 6 7 8 9 10{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "dateFieldComparison", "date1FieldKey": "duedate", "date2FieldKey": "customfield_10054", "includeTime": "true", "conditionSelected": ">=" } }
Parameters:
date1FieldKey the ID of the first field to compare. For a custom field, it would look like customfield_123.date2FieldKey the ID of the second field to compare. For a custom field, it would look like customfield_123.includeTime if true, compares both date and time. Allowed values: true, false.conditionSelected the condition to compare with. Allowed values: >, >=, =, <=, <, !=.1 2 3 4 5 6 7 8 9{ "ruleKey": "system:validate-field-value", "parameters": { "ruleType": "windowDateComparison", "date1FieldKey": "customfield_10009", "date2FieldKey": "customfield_10054", "numberOfDays": "3" } }
Parameters:
date1FieldKey the ID of the first field to compare. For a custom field, it would look like customfield_123.date2FieldKey the ID of the second field to compare. For a custom field, it would look like customfield_123.numberOfDays maximum number of days past the reference date (date2FieldKey) to pass validation.This rule is composed by aggregating the following legacy rules:
Validates that one or more forms are attached to the issue.
1 2 3 4{ "ruleKey" : "system:proforma-forms-attached" "parameters" : {} }
Validates that all forms attached to the issue have been submitted.
1 2 3 4{ "ruleKey" : "system:proforma-forms-submitted" "parameters" : {} }
Conditions enable workflow rules that govern whether a transition can execute.
A condition rule evaluates as true if a specific field's value meets the defined criteria. This rule ensures that an issue can only transition to the next step in the workflow if the field's value matches the desired condition.
1 2 3 4 5 6 7 8 9{ "ruleKey": "system:check-field-value", "parameters": { "fieldId": "description", "fieldValue": "[\"Done\"]", "comparator": "=", "comparisonType": "STRING" } }
Parameters:
fieldId The ID of the field to check the value of. For non-system fields, it will look like customfield_123. Note: fieldId is used interchangeably with the idea of fieldKey here, they refer to the same field.fieldValue the list of values to check against the field\u2019s value.comparator The comparison logic. Allowed values: >, >=, =, <=, <, !=.comparisonType The type of data being compared. Allowed values: STRING, NUMBER, DATE, DATE_WITHOUT_TIME, OPTIONID.This rule ensures that issue transitions are restricted based on user accounts, roles, group memberships, and permissions, maintaining control over who can transition an issue. This condition evaluates as true if any of the following criteria is met.
1 2 3 4 5 6 7 8 9 10 11 12{ "ruleKey": "system:restrict-issue-transition", "parameters": { "accountIds": "allow-reporter,5e68ac137d64450d01a77fa0", "roleIds": "10002,10004", "groupIds": "703ff44a-7dc8-4f4b-9aa6-a65bf3574fa4", "permissionKeys": "ADMINISTER_PROJECTS", "groupCustomFields": "customfield_10028", "allowUserCustomFields": "customfield_10072,customfield_10144,customfield_10007", "denyUserCustomFields": "customfield_10107" } }
Parameters:
accountIds a comma-separated list of the user account IDs. It also allows generic values like: allow-assignee, allow-reporter, and accountIds Note: This is only supported in team-managed projectsroleIds a comma-separated list of role IDs.groupIds a comma-separated list of group IDs.permissionKeys a comma-separated list of permission keys. Allowed values: built-in Jira permissions.groupCustomFields a comma-separated list of group custom field IDs.allowUserCustomFields a comma-separated list of user custom field IDs to allow for issue transition.denyUserCustomFields a comma-separated list of user custom field IDs to deny for issue transition.This rule is composed by aggregating the following legacy rules:
A condition that evaluates based on an issue's previous status(es) and specific criteria.
1 2 3 4 5 6 7 8 9 10{ "ruleKey" : "system:previous-status-condition" "parameters" : { "previousStatusIds" : "10004", "not": "true", "mostRecentStatusOnly" : "true", "includeCurrentStatus": "true", "ignoreLoopTransitions": "true" } }
Parameters:
previousStatusIds a comma-separated list of status IDs, current only support one ID.not indicates if the condition should be reversed. When true it checks that the issue has not been in the selected statuses. Allowed values: true, false.mostRecentStatusOnly when true only considers the most recent status for the condition evaluation. Allowed values: true, false.includeCurrentStatus includes the current status when evaluating if the issue has been through the selected statuses. Allowed values: true, false.ignoreLoopTransitions ignore loop transitions. Allowed values: true, false.A condition to block the parent\u2019s issue transition depending on the child\u2019s issue status.
1 2 3 4 5 6 7{ "ruleKey" : "system:parent-or-child-blocking-condition" "parameters" : { "blocker" : "CHILD", "statusIds" : "1,2,3" } }
Parameters:
blocker currently only supports CHILD.statusIds a comma-separated list of status IDs.A condition preventing the user from performing, if the user has already performed a transition on the issue.
1 2 3 4 5 6 7{ "ruleKey": "system:separation-of-duties", "parameters": { "fromStatusId": "10161", "toStatusId": "10160" } }
Parameters:
fromStatusId represents the status ID from which the issue is transitioning. It ensures that the user performing the current transition has not performed any actions when the issue was in the specified status.toStatusId represents the status ID to which the issue is transitioning. It ensures that the user performing the current transition is not the same user who has previously transitioned the issue.A condition preventing all users from transitioning the issue can also optionally include APIs as well.
1 2 3 4 5 6{ "ruleKey": "system:restrict-from-all-users", "parameters": { "restrictMode": "users" } }
Parameters:
restrictMode restricts the issue transition including/excluding APIs. Allowed values: "users", "usersAndAPI".Block an issue transition until approval. Note: This is only supported in team-managed projects.
1 2 3 4 5 6{ "ruleKey": "system:jsd-approvals-block-until-approved", "parameters": { "approvalConfigurationJson": "{"statusExternalUuid...}" } }
Parameters:
approvalConfigurationJson a stringified JSON holding the Jira Service Management approval configuration.Block an issue transition until rejected. Note: This is only supported in team-managed projects.
1 2 3 4 5 6{ "ruleKey": "system:jsd-approvals-block-until-rejected", "parameters": { "approvalConfigurationJson": "{"statusExternalUuid...}" } }
Parameters:
approvalConfigurationJson a stringified JSON holding the Jira Service Management approval configuration.Condition to block issue transition if there is pending approval. Note: This is only supported in company-managed projects.
1 2 3 4{ "ruleKey": "system:block-in-progress-approval", "parameters": {} }
Post functions carry out any additional processing required after a workflow transition is executed.
A post function rule that changes the assignee of an issue after a transition.
1 2 3 4 5 6 7{ "ruleKey": "system:change-assignee", "parameters": { "type": "to-selected-user", "accountId": "example-account-id" } }
Parameters:
type the parameter used to determine the new assignee. Allowed values: to-selected-user, to-unassigned, to-current-user, to-current-user, to-default-user, to-default-useraccountId the account ID of the user to assign the issue to. This parameter is required only when the type is "to-selected-user".A post function that automates the process of copying values between fields during a specific transition, ensuring data consistency and reducing manual effort.
1 2 3 4 5 6 7 8{ "ruleKey": "system:copy-value-from-other-field", "parameters": { "sourceFieldKey": "description", "targetFieldKey": "components", "issueSource": "SAME" } }
Parameters:
sourceFieldKey the field key to copy from. For a custom field, it would look like customfield_123targetFieldKey the field key to copy to. For a custom field, it would look like customfield_123issueSource SAME or PARENT. Defaults to SAME if no value is provided.A post function that updates or appends a specific field with the given value.
1 2 3 4 5 6 7 8{ "ruleKey": "system:update-field", "parameters": { "field": "customfield_10056", "value": "asdf", "mode": "append" } }
Parameters:
field the ID of the field to update. For a custom field, it would look like customfield_123value the value to update the field with.mode append or replace. Determines if a value will be appended to the current value, or if the current value will be replaced.A post function that automatically triggers a predefined webhook when a transition occurs in the workflow.
1 2 3 4 5 6{ "ruleKey": "system:trigger-webhook", "parameters": { "webhookId": "1" } }
Parameters:
webhookId the ID of the webhook.A post function that triggers a Jira AI agent for the issue after the transition runs, using the configured agent and an optional prompt. The agent run is asynchronous: it is scheduled after the transition finishes and does not block the transition.
1 2 3 4 5 6 7{ "ruleKey": "system:trigger-agent", "parameters": { "agentId": "712020:3c6d3f05-331a-4488-932e-37c34b704720", "promptValue": "" } }
Parameters:
agentId the identifier of the agent to trigger (the Atlassian account ID of the agent).promptValue optional text passed to the agent as a user prompt after the transition runs; use an empty string if no extra prompt is needed.A screen rule that prompts users to update a specific field when they interact with an issue screen during a transition. This rule is useful for ensuring that users provide or modify necessary information before moving an issue to the next step in the workflow.
1 2 3 4 5 6 7 8{ "ruleKey": "system:remind-people-to-update-fields", "params": { "remindingFieldIds": "assignee,customfield_10025", "remindingMessage": "The message", "remindingAlwaysAsk": "true" } }
Parameters:
remindingFieldIds a comma-separated list of field IDs. Note: fieldId is used interchangeably with the idea of fieldKey here, they refer to the same field.remindingMessage the message to display when prompting the users to update the fields.remindingAlwaysAsk always remind to update fields. Allowed values: true, false.A common screen that is shared between transitions in a workflow.
1 2 3 4 5 6{ "ruleKey": "system:transition-screen", "params": { "screenId": "3" } }
Parameters:
screenId the ID of the screen.Validator/Condition/Post function for Connect app.
1 2 3 4 5 6 7 8 9 10{ "ruleKey": "connect:expression-validator", "parameters": { "appKey": "com.atlassian.app", "config": "", "id": "90ce590f-e90c-4cd3-8281-165ce41f2ac3", "disabled": "false", "tag": "" } }
Parameters:
ruleKey Validator: connect:expression-validator, Condition: connect:expression-condition, and Post function: connect:remote-workflow-functionappKey the reference to the Connect appconfig a JSON payload string describing the configurationid the ID of the ruledisabled determine if the Connect app is disabled. Allowed values: true, false.tag additional tags for the Connect appValidator/Condition/Post function for Forge app.
1 2 3 4 5 6 7 8 9 10{ "ruleKey": "forge:expression-validator", "parameters": { "key": "ari:cloud:ecosystem::extension/{appId}/{environmentId}/static/{moduleKey}", "config": "{"searchString":"workflow validator"}", "id": "a865ddf6-bb3f-4a7b-9540-c2f8b3f9f6c2", "disabled": "false", "tag": "" } }
Parameters:
ruleKey Validator: forge:expression-validator, Condition: forge:expression-condition, and Post function: forge:workflow-post-functionkey the identifier for the Forge appconfig the persistent stringified JSON configuration for the Forge ruleid the ID of the Forge ruledisabled determine if the Forge app is disabled. Allowed values: true, false.tag additional tags for the Forge appmanage:jira-configurationread:workflow:jiraConnect apps cannot access this REST resource.
string
string
string
Returned if the request is successful.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflows/capabilities`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
"connectRules": [
{
"addonKey": "com.atlassian.jira.refapp",
"createUrl": "/validators/jira-expression/create?id={validator.id}",
"description": "Validates if the given Jira expression is true.",
"editUrl": "/validators/jira-expression/edit?id={validator.id}",
"moduleKey": "jiraExpressionValidator",
"name": "Jira expression validator (by APPNAME)",
"ruleKey": "connect:expression-validator",
"ruleType": "Validator",
"viewUrl": "/validators/jira-expression/view?id={validator.id}"
}
],
"editorScope": "GLOBAL",
"forgeRules": [
{
"description": "A Jira workflow validator example.",
"id": "ari:cloud:ecosystem::extension/9df6d15f-1bbe-443e-be08-150309e8dbb0/f6a3bed3-737f-4e7a-8942-130df302b749/static/workflow-validator-example-workflow-validator",
"name": "workflow-validator",
"ruleKey": "forge:expression-validator",
"ruleType": "Validator"
}
],
"projectTypes": [
"software",
"business"
],
"systemRules": [
{
"description": "Automatically assign a request to someone after moving the request using a particular transition.",
"incompatibleRuleKeys": [],
"isAvailableForInitialTransition": true,
"isVisible": true,
"name": "Assign a request",
"ruleKey": "system:change-assignee",
"ruleType": "Function"
}
],
"triggerRules": [
{
"availableTypes": [
{
"description": "Automatically transitions the issue when a related branch is created in a connected repository",
"name": "Branch created",
"type": "com.atlassian.jira.plugins.jira-development-integration-plugin:branch-created-trigger"
}
],
"ruleKey": "system:development-triggers"
}
]
}Create workflows and related statuses.
Permissions required:
manage:jira-configurationwrite:workflow:jiraConnect apps cannot access this REST resource.
WorkflowScope
array<WorkflowStatusUpdate>
array<WorkflowCreate>
Returned if the request is successful.
Details of the created workflows and statuses.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"scope": {
"type": "GLOBAL"
},
"statuses": [
{
"description": "",
"name": "To Do",
"statusCategory": "TODO",
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"description": "",
"name": "In Progress",
"statusCategory": "IN_PROGRESS",
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"description": "",
"name": "Done",
"statusCategory": "DONE",
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"workflows": [
{
"description": "",
"name": "Software workflow 1",
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "Move a work item from in progress to done",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
]
}
]
}`;
const response = await requestJira(`/rest/api/3/workflows/create`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
{
"statuses": [
{
"description": "",
"id": "10003",
"name": "Done",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "DONE",
"statusReference": "10003"
},
{
"description": "",
"id": "10001",
"name": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "TODO",
"statusReference": "10001"
},
{
"description": "",
"id": "10002",
"name": "In Progress",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "IN_PROGRESS",
"statusReference": "10002"
}
],
"workflows": [
{
"description": "",
"id": "b9ff2384-d3b6-4d4e-9509-3ee19f607168",
"isEditable": true,
"name": "Software workflow 1",
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "10002"
},
{
"deprecated": false,
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "10003"
},
{
"deprecated": false,
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "10001"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "Move a work item from in progress to done",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "10002",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "10003",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
],
"version": {
"id": "f010ac1b-3dd3-43a3-aa66-0ee8a447f76e",
"versionNumber": 0
}
}
]
}Validate the payload for bulk create workflows.
Permissions required:
manage:jira-configurationwrite:workflow:jiraConnect apps cannot access this REST resource.
WorkflowCreateRequest
RequiredValidationOptionsForCreate
Returned if the request is successful.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"payload": {
"scope": {
"type": "GLOBAL"
},
"statuses": [
{
"description": "",
"name": "To Do",
"statusCategory": "TODO",
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"description": "",
"name": "In Progress",
"statusCategory": "IN_PROGRESS",
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"description": "",
"name": "Done",
"statusCategory": "DONE",
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"workflows": [
{
"description": "",
"name": "Software workflow 1",
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "Move a work item from in progress to done",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
]
}
]
},
"validationOptions": {
"levels": [
"ERROR",
"WARNING"
]
}
}`;
const response = await requestJira(`/rest/api/3/workflows/create/validation`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"errors": [
{
"additionalDetails": "Additional details about the error message.",
"code": "NON_UNIQUE_STATUS_NAME",
"elementReference": {
"statusReference": "1f0443ff-47e4-4306-9c26-0af696059a43"
},
"level": "ERROR",
"message": "You must use a unique status name.",
"type": "STATUS"
}
]
}Get the user's default workflow editor. This can be either the new editor or the legacy editor.
manage:jira-configurationread:workflow:jiraConnect apps cannot access this REST resource.
This request has no parameters.
Returned if the request is successful.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflows/defaultEditor`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
{
"value": "NEW"
}Returns a requested workflow within a given project. The response provides a read-only preview of the workflow, omitting full configuration details.
Permissions required:
manage:jira-configurationread:workflow:jiraConnect apps cannot access this REST resource.
array<string>
string
Requiredarray<string>
array<string>
Returned if the request is successful.
The preview workflow response containing workflows and statuses.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"issueTypeIds": [],
"projectId": "10011",
"workflowIds": [
"3215e5cd-f09f-4c8a-921b-dca92bd1e9aa",
"5f485405-a237-40e5-aeea-ad2c206cff95"
],
"workflowNames": []
}`;
const response = await requestJira(`/rest/api/3/workflows/preview`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
{
"statuses": [
{
"description": "The initial status for tasks",
"id": "1",
"name": "Zrobic",
"rawName": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "TODO",
"statusReference": "1"
},
{
"description": "Work is actively being done on this task",
"id": "2",
"name": "W toku",
"rawName": "In Progress",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "IN_PROGRESS",
"statusReference": "2"
},
{
"description": "The task has been completed",
"id": "3",
"name": "Zrobione",
"rawName": "Done",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "DONE",
"statusReference": "3"
}
],
"workflows": [
{
"description": "A sample workflow for demonstration purposes",
"id": "b9ff2384-d3b6-4d4e-9509-3ee19f607168",
"name": "Sample Workflow",
"queryContext": [
{
"issueTypes": [
"10001",
"10002"
],
"project": "10000"
}
],
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": 30,
"y": 40
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 100,
"y": 200
},
"statusReference": "1"
},
{
"deprecated": false,
"layout": {
"x": 300,
"y": 200
},
"statusReference": "2"
},
{
"deprecated": false,
"layout": {
"x": 500,
"y": 200
},
"statusReference": "3"
}
],
"transitions": [
{
"actions": [],
"description": "Creates the issue",
"id": "1",
"links": [],
"name": "Create",
"toStatusReference": "1",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "Begin work on the issue",
"id": "21",
"links": [
{
"fromPort": 0,
"fromStatusReference": "1",
"toPort": 0
}
],
"name": "Start Progress",
"toStatusReference": "2",
"triggers": [],
"type": "DIRECTED",
"validators": []
},
{
"actions": [],
"description": "Complete the issue",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "2",
"toPort": 0
}
],
"name": "Done",
"toStatusReference": "3",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
],
"version": {
"id": "f010ac1b-3dd3-43a3-aa66-0ee8a447f76e",
"versionNumber": 1
}
}
]
}Returns a paginated list of global and project workflows. If workflow names are specified in the query string, details of those workflows are returned. Otherwise, all workflows are returned.
Permissions required:
manage:jira-configurationread:workflow:jiraConnect apps cannot access this REST resource.
integer
integer
string
string
string
string
boolean
Returned if the request is successful.
Page of items, including workflows and related statuses.
1
2
3
4
5
6
7
8
9
10
11
12
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
const response = await requestJira(`/rest/api/3/workflows/search`, {
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{
"isLast": false,
"maxResults": 50,
"nextPage": "https://your-domain.atlassian.net/rest/api/3/workflows/search?startAt=50",
"self": "https://your-domain.atlassian.net/rest/api/3/workflows/search",
"startAt": 0,
"statuses": [
{
"description": "",
"id": "10003",
"name": "Done",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "DONE",
"statusReference": "10003"
},
{
"description": "",
"id": "10001",
"name": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "TODO",
"statusReference": "10001"
},
{
"description": "",
"id": "10002",
"name": "In Progress",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "IN_PROGRESS",
"statusReference": "10002"
}
],
"total": 100,
"values": [
{
"description": "",
"id": "b9ff2384-d3b6-4d4e-9509-3ee19f607168",
"isEditable": true,
"name": "Workflow 1",
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "10002"
},
{
"deprecated": false,
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "10003"
},
{
"deprecated": false,
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "10001"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "41",
"links": [
{
"fromPort": 0,
"fromStatusReference": "10001",
"toPort": 1
}
],
"name": "Start work",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "DIRECTED",
"validators": []
},
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "31",
"links": [],
"name": "Done",
"properties": {},
"toStatusReference": "10003",
"triggers": [],
"type": "GLOBAL",
"validators": []
}
],
"version": {
"id": "f010ac1b-3dd3-43a3-aa66-0ee8a447f76e",
"versionNumber": 0
}
}
]
}Update workflows and related statuses.
Permissions required:
manage:jira-configurationwrite:workflow:jiraConnect apps cannot access this REST resource.
array<WorkflowStatusUpdate>
array<WorkflowUpdate>
Returned if the request is successful.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"statuses": [
{
"description": "",
"name": "To Do",
"statusCategory": "TODO",
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"description": "",
"name": "In Progress",
"statusCategory": "IN_PROGRESS",
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"description": "",
"name": "Done",
"statusCategory": "DONE",
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"workflows": [
{
"defaultStatusMappings": [
{
"newStatusReference": "10011",
"oldStatusReference": "10010"
}
],
"description": "",
"id": "10001",
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statusMappings": [
{
"issueTypeId": "10002",
"projectId": "10003",
"statusMigrations": [
{
"newStatusReference": "10011",
"oldStatusReference": "10010"
}
]
}
],
"statuses": [
{
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "Move a work item from in progress to done",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
],
"version": {
"id": "6f6c988b-2590-4358-90c2-5f7960265592",
"versionNumber": 1
}
}
]
}`;
const response = await requestJira(`/rest/api/3/workflows/update`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{
"statuses": [
{
"description": "",
"id": "10003",
"name": "Done",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "DONE",
"statusReference": "10003"
},
{
"description": "",
"id": "10001",
"name": "To Do",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "TODO",
"statusReference": "10001"
},
{
"description": "",
"id": "10002",
"name": "In Progress",
"scope": {
"type": "GLOBAL"
},
"statusCategory": "IN_PROGRESS",
"statusReference": "10002"
}
],
"taskId": "10001",
"workflows": [
{
"description": "",
"id": "b9ff2384-d3b6-4d4e-9509-3ee19f607168",
"isEditable": true,
"name": "Software workflow 1",
"scope": {
"type": "GLOBAL"
},
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statuses": [
{
"deprecated": false,
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "10002"
},
{
"deprecated": false,
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "10003"
},
{
"deprecated": false,
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "10001"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "10002",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "10003",
"triggers": [],
"type": "DIRECTED",
"validators": []
},
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "10001",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "10002",
"triggers": [],
"type": "GLOBAL",
"validators": []
}
],
"version": {
"id": "f010ac1b-3dd3-43a3-aa66-0ee8a447f76e",
"versionNumber": 0
}
}
]
}Validate the payload for bulk update workflows.
Permissions required:
manage:jira-configurationwrite:workflow:jiraConnect apps cannot access this REST resource.
WorkflowUpdateRequest
RequiredValidationOptionsForUpdate
Returned if the request is successful.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import { requestJira } from "@forge/bridge";
var bodyData = `{
"payload": {
"statuses": [
{
"description": "",
"name": "To Do",
"statusCategory": "TODO",
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"description": "",
"name": "In Progress",
"statusCategory": "IN_PROGRESS",
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"description": "",
"name": "Done",
"statusCategory": "DONE",
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"workflows": [
{
"defaultStatusMappings": [
{
"newStatusReference": "10011",
"oldStatusReference": "10010"
}
],
"description": "",
"id": "10001",
"startPointLayout": {
"x": -100.00030899047852,
"y": -153.00020599365234
},
"statusMappings": [
{
"issueTypeId": "10002",
"projectId": "10003",
"statusMigrations": [
{
"newStatusReference": "10011",
"oldStatusReference": "10010"
}
]
}
],
"statuses": [
{
"layout": {
"x": 114.99993896484375,
"y": -16
},
"properties": {},
"statusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0"
},
{
"layout": {
"x": 317.0000915527344,
"y": -16
},
"properties": {},
"statusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8"
},
{
"layout": {
"x": 508.000244140625,
"y": -16
},
"properties": {},
"statusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849"
}
],
"transitions": [
{
"actions": [],
"description": "",
"id": "1",
"links": [],
"name": "Create",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "INITIAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "11",
"links": [],
"name": "To Do",
"properties": {},
"toStatusReference": "f0b24de5-25e7-4fab-ab94-63d81db6c0c0",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "",
"id": "21",
"links": [],
"name": "In Progress",
"properties": {},
"toStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"triggers": [],
"type": "GLOBAL",
"validators": []
},
{
"actions": [],
"description": "Move a work item from in progress to done",
"id": "31",
"links": [
{
"fromPort": 0,
"fromStatusReference": "c7a35bf0-c127-4aa6-869f-4033730c61d8",
"toPort": 1
}
],
"name": "Done",
"properties": {},
"toStatusReference": "6b3fc04d-3316-46c5-a257-65751aeb8849",
"triggers": [],
"type": "DIRECTED",
"validators": []
}
],
"version": {
"id": "6f6c988b-2590-4358-90c2-5f7960265592",
"versionNumber": 1
}
}
]
},
"validationOptions": {
"levels": [
"ERROR",
"WARNING"
]
}
}`;
const response = await requestJira(`/rest/api/3/workflows/update/validation`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"errors": [
{
"additionalDetails": "Additional details about the error message.",
"code": "NON_UNIQUE_STATUS_NAME",
"elementReference": {
"statusReference": "1f0443ff-47e4-4306-9c26-0af696059a43"
},
"level": "ERROR",
"message": "You must use a unique status name.",
"type": "STATUS"
}
]
}Rate this page: