This resource represents plans. Use it to get, create, duplicate, update, trash and archive plans.
Returns a paginated list of plans.
Permissions required: Administer Jira global permission.
read:jira-work
Connect app scope required: ADMIN
boolean
boolean
string
integer
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 api, { route } from "@forge/api";
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan`, {
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
{
"cursor": "",
"isLast": true,
"maxResults": 2,
"nextPageCursor": "2",
"total": 10,
"values": [
{
"id": "100",
"issueSources": [
{
"type": "Project",
"value": 10000
}
],
"name": "Plan 1",
"status": "Active"
},
{
"id": "200",
"issueSources": [
{
"type": "Board",
"value": 20000
}
],
"name": "Plan 2",
"status": "Trashed"
}
]
}
Creates a plan.
Permissions required: Administer Jira global permission.
write:jira-work
Connect app scope required: ADMIN
boolean
array<CreateCrossProjectReleaseRequest>
array<CreateCustomFieldRequest>
CreateExclusionRulesRequest
array<CreateIssueSourceRequest>
Requiredstring
string
Requiredarray<CreatePermissionRequest>
CreateSchedulingRequest
RequiredReturned if the request is successful.
integer
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
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import api, { route } from "@forge/api";
var bodyData = `{
"crossProjectReleases": [
{
"name": "AB and BC merge",
"releaseIds": [
29,
39
]
}
],
"customFields": [
{
"customFieldId": 2335,
"filter": true
}
],
"exclusionRules": {
"issueIds": [
2,
3
],
"issueTypeIds": [
32,
33
],
"numberOfDaysToShowCompletedIssues": 50,
"releaseIds": [
42,
43
],
"workStatusCategoryIds": [
22,
23
],
"workStatusIds": [
12,
13
]
},
"issueSources": [
{
"type": "Project",
"value": 12
},
{
"type": "Board",
"value": 462
}
],
"leadAccountId": "abc-12-rbji",
"name": "ABC Quaterly plan",
"permissions": [
{
"holder": {
"type": "AccountId",
"value": "234-tgj-343"
},
"type": "Edit"
}
],
"scheduling": {
"dependencies": "Sequential",
"endDate": {
"type": "DueDate"
},
"estimation": "Days",
"inferredDates": "ReleaseDates",
"startDate": {
"type": "TargetStartDate"
}
}
}`;
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());
Returns a plan.
Permissions required: Administer Jira global permission.
read:jira-work
Connect app scope required: ADMIN
integer
Requiredboolean
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 api, { route } from "@forge/api";
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan/{planId}`, {
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
{
"crossProjectReleases": [
{
"name": "x-plr",
"releaseIds": [
345
]
}
],
"customFields": [
{
"customFieldId": 34,
"filter": false
},
{
"customFieldId": 39,
"filter": true
}
],
"exclusionRules": {
"issueIds": [
1,
2
],
"issueTypeIds": [
13,
23
],
"numberOfDaysToShowCompletedIssues": 50,
"releaseIds": [
14,
24
],
"workStatusCategoryIds": [
12,
22
],
"workStatusIds": [
11,
21
]
},
"id": 23,
"issueSources": [
{
"type": "Project",
"value": 12
},
{
"type": "Filter",
"value": 10293
}
],
"lastSaved": "2024-10-03T10:15:30Z",
"leadAccountId": "628f5e86d5ec1f006ne7363x2s",
"name": "Onset TBJ Plan",
"permissions": [
{
"holder": {
"type": "AccountId",
"value": "04jekw86d5jjje006ne7363x2s"
},
"type": "Edit"
}
],
"scheduling": {
"dependencies": "Concurrent",
"endDate": {
"dateCustomFieldId": 1098,
"type": "DateCustomField"
},
"estimation": "Hours",
"inferredDates": "ReleaseDates",
"startDate": {
"type": "TargetStartDate"
}
},
"status": "Active"
}
Updates any of the following details of a plan using JSON Patch.
name
leadAccountId
scheduling
estimation with StoryPoints, Days or Hours as possible values
startDate
endDate
inferredDates with None, SprintDates or ReleaseDates as possible values
dependencies with Sequential or Concurrent as possible values
issueSources
exclusionRules
crossProjectReleases
customFields
permissions
type with View or Edit as possible values
holder
Permissions required: Administer Jira global permission.
Note that "add" operations do not respect array indexes in target locations. Call the "Get plan" endpoint to find out the order of array elements.
write:jira-work
Connect app scope required: ADMIN
integer
Requiredboolean
object
Returned if the request is successful.
any
1
2
3
4
5
6
7
8
9
10
11
12
13
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import api, { route } from "@forge/api";
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan/{planId}`, {
method: 'PUT',
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());
Archives a plan.
Permissions required: Administer Jira global permission.
write:jira-work
Connect app scope required: ADMIN
integer
RequiredReturned if the request is successful.
any
1
2
3
4
5
6
7
8
9
10
11
12
13
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import api, { route } from "@forge/api";
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan/{planId}/archive`, {
method: 'PUT',
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());
Duplicates a plan.
Permissions required: Administer Jira global permission.
write:jira-work
Connect app scope required: ADMIN
integer
Requiredstring
RequiredReturned if the request is successful.
integer
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 api, { route } from "@forge/api";
var bodyData = `{
"name": "Copied Plan"
}`;
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan/{planId}/duplicate`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());
Moves a plan to trash.
Permissions required: Administer Jira global permission.
write:jira-work
Connect app scope required: ADMIN
integer
RequiredReturned if the request is successful.
any
1
2
3
4
5
6
7
8
9
10
11
12
13
// This sample uses Atlassian Forge
// https://developer.atlassian.com/platform/forge/
import api, { route } from "@forge/api";
const response = await api.asUser().requestJira(route`/rest/api/3/plans/plan/{planId}/trash`, {
method: 'PUT',
headers: {
'Accept': 'application/json'
}
});
console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());
Rate this page: