Forge apps can subscribe to Jira events for:
Your Forge app must have permission from the site admin to access the data it provides within the event payload. The OAuth scope required for each event is documented below.
You can subscribe to these Jira issue events in Forge apps:
avi:jira:created:issue
avi:jira:updated:issue
avi:jira:deleted:issue
avi:jira:assigned:issue
avi:jira:viewed:issue
avi:jira:mentioned:issue
Each event has a different payload format.
An event with the name avi:jira:created:issue
is sent when an issue is created.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:created:issue . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
associatedUsers? | AssociatedUsers | [Optional] An object containing an array of one user, with the user being the one who created the issue. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface AssociatedUsers { associatedUsers: User[]; } interface User { accountId: string; }
This is an example of a payload for a newly created issue:.
1 2{ "eventType": "avi:jira:created:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/2/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/2/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T15:58:12.797+1100", "status": { "self": "https://example.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "associatedUsers": [ { "accountId": "4ad9aa0c52dc1b420a791d12" } ] }
An event with the name avi:jira:updated:issue
is sent when any field on an issue is modified.
The level of detail in the event's changelog depends on which field is changed.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:updated:issue . |
issue | Issue | The issue the event relates to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
changelog | Changelog |
A list of changes that have occurred in the update. The to and from
fields display the accounts IDs of the assignees that the issue was to and from respectively,
or null when the issue is unassigned or was previously unassigned.
|
associatedUsers? | AssociatedUsers | [Optional] An object containing an array of users, with the users being the one who made the update, and any assigned or unassigned users in the update being made. |
associatedStatuses? | AssociatedStatuses | [Optional] If the issue status is updated, this contains an array of the current and previous statuses. Otherwise, this field is undefined. You can tell which is the current status by checking the changelog field. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface Changelog { items: Change[]; } interface Change { field: string; fieldId: string; from: string | null; fromString: string | null; to: string | null; toString: string | null; } interface AssociatedUsers { associatedUsers: User[]; } interface User { accountId: string; }
This is an example of updating an issue's description.
1 2{ "eventType": "avi:jira:updated:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:13:59.255+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "changelog": { "id": "10154", "items": [ { "field": "description", "fieldId": "description", "from": null, "fromString": null, "to": null, "toString": null } ] }, "associatedUsers": [ { "accountId": "4ad9aa0c52dc1b420a791d12" } ] }
An event with the name avi:jira:deleted:issue
is sent when an issue is deleted.
Keep in mind that cascading events aren’t emitted. For more information, see: Cascading events guide.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:deleted:issue . |
issue | Issue | The issue the event relates to. |
atlassianId? | string | [Optional] The ID of the user that triggered the event. |
associatedUsers? | AssociatedUsers | [Optional] An array containing the name of the user who deleted the issue. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface AssociatedUsers { associatedUsers: User[]; } interface User { accountId: string; }
This is an example of deleting an issue.
1 2{ "eventType": "avi:jira:deleted:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:13:59.255+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "associatedUsers": [ { "accountId": "4ad9aa0c52dc1b420a791d12" } ] }
An event with the name avi:jira:assigned:issue
is sent when a user is assigned or unassigned from an issue.
An "issue updated" event will also be sent when this occurs.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:assigned:issue . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
changelog | Changelog |
A list of changes that have occurred in the update. The to and from
fields display the accounts IDs of the assignees that the issue was to and from respectively,
or null when the issue is unassigned or was previously unassigned.
|
associatedUsers? | AssociatedUsers | [Optional] An object containing an array of users, with the users being the one who made the update, and any users assigned or unassigned in the update being made. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface Changelog { items: Change[]; } interface Change { field: string; fieldId: string; from: string | null; fromString: string | null; to: string | null; toString: string | null; } interface AssociatedUsers { associatedUsers: User[]; } interface User { accountId: string; }
This is an example of assigning a user to a previously unassigned issue.
1 2{ "eventType": "avi:jira:assigned:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": { "accountId": "123456:9af5200e-7667-459b-9c1f-38915c3644b9" }, "updated": "2021-01-20T16:27:53.457+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "changelog": { "id": "10159", "items": [ { "field": "assignee", "fieldtype": "jira", "fieldId": "assignee", "from": null, "fromString": null, "to": "123456:9af5200e-7667-459b-9c1f-38915c3644b9", "toString": null, "tmpFromAccountId": null, "tmpToAccountId": "123456:9af5200e-7667-459b-9c1f-38915c3644b9" } ] }, "associatedUsers": [ { "accountId": "4ad9aa0c52dc1b420a791d12" }, { "accountId": "123456:9af5200e-7667-459b-9c1f-38915c3644b9" } ] }
An event with the name avi:jira:viewed:issue
is sent every time an issue is viewed by a user.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:viewed:issue . |
issue | Issue | The issue the event is related to. |
atlassianId | string | The ID of the user that has caused the event. |
user | User | The user who has viewed the issue. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface User { accountId: string; }
This is an example of an issue's creator viewing the issue.
1 2{ "eventType": "avi:jira:viewed:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/2/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/2/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T15:58:12.797+1100", "status": { "self": "https://example.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "user": { "accountId": "4ad9aa0c52dc1b420a791d12" } }
An event with the name avi:jira:mentioned:issue
is sent every time an issue description is updated and users are mentioned.
All users mentioned in the description are included in one event. A user mentioning themselves does not count as a mention.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:mentioned:issue . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
mentionedAccountIds | string[] | A list of account IDs of mentioned users. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface User { accountId: string; }
This is an example of the issue's creator mentioning a different user in the issue's description.
1 2{ "eventType": "avi:jira:mentioned:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:34:44.233+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "mentionedAccountIds": ["123456:9af5200e-7667-459b-9c1f-38915c3644b9"], "atlassianId": "4ad9aa0c52dc1b420a791d12" }
You can subscribe to the following Jira issue link events in Forge apps:
avi:jira:created:issuelink
avi:jira:deleted:issuelink
The payload for all of these events is the same.
The required OAuth scope is read:jira-work
.
We only support issue links within a single Jira instance.
This means that an event will not be triggered for links created between two Jira instances.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:issuelink . |
id | string | ID of the link. |
sourceIssueId | string | ID of the source issue. |
destinationIssueId | string | ID of the destination issue. |
issueLinkType | IssueLinkType | An object containing information about the link type. |
1 2interface IssueLinkType { id: string; name: string; inward: string; outward: string; }
This is an example of the payload for when a Blocks
issue link is created:
1 2{ "eventType": "avi:jira:created:issuelink", "id": "10000", "sourceIssueId": "10001", "destinationIssueId": "10002", "issueLinkType": { "id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks" } }
You can subscribe to these worklog events in Forge apps:
avi:jira:created:worklog
avi:jira:updated:worklog
avi:jira:deleted:worklog
Keep in mind that for deletions, cascading events aren’t emitted. For more information, see: Cascading events guide.
OAuth 2.0 scopes required:
Classic: read:jira-work
Granular: read:comment:jira
, read:group:jira
, read:issue-worklog:jira
, read:issue-worklog.property:jira
, read:project-role:jira
, read:user:jira
, read:avatar:jira
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:updated:worklog . |
worklog | Worklog |
The worklog the event is related to. Available for avi:jira:created:worklog /avi:jira:updated:worklog events.
|
worklog | WorklogDeleted |
The worklog the event is related to. Available for avi:jira:deleted:worklog events.
|
We've temporarily introduced the WorklogDeleted
event to support the optional author
and updateAuthor
fields for the newly introduced avi:jira:deleted:worklog
events
and retain the current behaviour for the existing avi:jira:created:worklog
and avi:jira:updated:worklog
events.
The target state is that we'll use the new WorklogDeleted
type for all worklog-related events.
We plan to remove support for the old Worklog
type on the 8th of January 2025.
We'll put out a changelog announcement when that happens.
1 2interface Worklog { id: string; issueId: string; author: User; updateAuthor: User; created: string; updated: string; started: string; timeSpent: string; timeSpentSeconds: number; } interface WorklogDeleted { id: string; issueId: string; author?: User; updateAuthor?: User; created: string; updated: string; started: string; timeSpent: string; timeSpentSeconds: number; } interface User { accountId: string; }
This is an example of the payload for worklog changes:
1 2{ "eventType": "avi:jira:created:worklog", "worklog": { "id": "10010", "issueId": "10000", "author": { "accountId": "70121:8a9e64b3-6662-0000-a57b-3cbc53fccf4d" }, "updateAuthor": { "accountId": "70121:8a9e64b3-6662-0000-a57b-3cbc53fccf4d" }, "created": "2023-03-01T17:00:00.000+0200", "updated": "2023-03-01T17:00:00.000+0200", "started": "2023-03-01T13:00:00.000+0200", "timeSpent": "4h", "timeSpentSeconds": 14400 } }
Your app must have permission from the site admin to access the data it provides within the event payload. The OAuth scopes required for each event are documented below. You can subscribe to the following issue type events in Forge apps:
avi:jira:created:issuetype
avi:jira:updated:issuetype
avi:jira:deleted:issuetype
OAuth 2.0 scopes required:
Classic: manage:jira-configuration
Granular: read:issue-type:jira
All events have the same payload format.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:issuetype . |
issueType | issueType | The issueType the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
1 2interface IssueType { id: string; name: string; description: string; scope: Scope; } interface Scope { type: 'GLOBAL' | 'PROJECT'; projectId?: string; // present when type is PROJECT }
This is an example of a payload for a newly created issueType
:
1 2{ "eventType": "avi:jira:created:issuetype", "issueType": { "id": "10000", "name": "IssueType 1", "description": "This is a Jira issueType", "scope": { "type": "GLOBAL" } }, "atlassianId": "60da07f475365000708f0119" }
This is an example of a payload for updating the name of an issueType
:
1 2{ "eventType": "avi:jira:updated:issuetype", "issueType": { "id": "10000", "name": "IssueType 1 updated", "description": "This is a Jira issueType", "scope": { "type": "GLOBAL" } }, "atlassianId": "60da07f475365000708f0119" }
Forge apps can subscribe to these Jira comment events:
avi:jira:commented:issue
avi:jira:mentioned:comment
avi:jira:deleted:comment
An event with the name avi:jira:commented:issue
is sent each time a comment is created or edited.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:commented:issue . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
associatedUsers? | AssociatedUsers | [Optional] The user who has made the comment. |
comment | Comment | An object describing the comment, including its author, body content, and other metadata. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface AssociatedUsers { associatedUsers: User[]; } interface Comment { id: string; author?: User; body: any; updateAuthor?: User; created: string; updated: string; jsdPublic: boolean; visibility?: Visibility; } interface User { accountId: string; } interface Visibility { type: string, value: string, identifier: string }
This is an example of the issue's creator adding a comment to the issue.
1 2{ "eventType": "avi:jira:commented:issue", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:43:22.076+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "associatedUsers": [ { "accountId": "4ad9aa0c52dc1b420a791d12" } ], "comment": { "id": "10038", "author": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "body": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "This is a very normal comment" } ] }, { "type": "mediaSingle", "content": [ { "type": "media", "attrs": { "type": "file", "id": "d7357622-de83-40c1-a40f-0365c0f6589f", "collection": "", "width": 620, "height": 465 } } ], "attrs": { "layout": "align-start" } } ] }, "updateAuthor": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T16:43:44.320+1100", "updated": "2021-01-20T16:43:44.320+1100", "jsdPublic": true, "visibility": { "type": "group", "value": "site-admins", "identifier": "b9c0b7da-5fe9-42dc-90a6-2c46faddb518" } } }
An event with the name avi:jira:mentioned:comment
is sent each time users are mentioned when a comment is created or edited.
All users mentioned in the comment are included in one event.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:mentioned:comment . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
mentionedAccountIds | string[] | A list of the account IDs of the users mentioned in the comment. |
comment | Comment | An object describing the comment, including its author, body content, and other metadata. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface Comment { id: string; author?: User; body: any; updateAuthor?: User; created: string; updated: string; jsdPublic: boolean; } interface User { accountId: string; }
This is an example of the issue's creator mentioning a different user in a comment.
1 2{ "eventType": "avi:jira:mentioned:comment", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:43:44.320+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "mentionedAccountIds": [ "123456:9af5200e-7667-459b-9c1f-38915c3644b9" ], "atlassianId": "4ad9aa0c52dc1b420a791d12", "comment": { "id": "10039", "author": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "body": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "This is a comment and I am going to mention " }, { "type": "mention", "attrs": { "id": "123456:9af5200e-7667-459b-9c1f-38915c3644b9", "text": "Firstname Lastname" } }, { "type": "text", "text": " in it" } ] } ] }, "updateAuthor": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T16:44:23.078+1100", "updated": "2021-01-20T16:44:23.078+1100", "jsdPublic": true } }
An event with the name avi:jira:deleted:comment
is sent each time a comment is deleted.
Keep in mind that cascading events aren’t emitted. For more information, see: Cascading events guide.
The required OAuth scope is read:jira-work
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:deleted:comment . |
issue | Issue | The issue the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
comment | Comment | An object describing the comment, including its author, body content, and other metadata. |
1 2interface Issue { id: string; key: string; fields: { summary?: string; issueType?: any; creator?: any; created?: string; project?: any; reporter?: User; assignee?: User | null; updated?: string; status?: any; }; } interface Comment { id: string; author?: User; body: any; updateAuthor?: User; created: string; updated: string; jsdPublic: boolean; visibility?: Visibility; } interface User { accountId: string; } interface Visibility { type: string, value: string, identifier: string }
This is an example of a user deleting a comment they wrote on an issue.
1 2{ "eventType": "avi:jira:deleted:comment", "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/3/issuetype/10001", "id": "10001", "description": "Functionality or a feature expressed as a user goal.", "iconUrl": "https://example.atlassian.net/secure/viewavatar?size=medium&avatarId=10315&avatarType=issuetype", "name": "Story", "subtask": false, "avatarId": 10315 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://example.atlassian.net/secure/projectavatar?pid=10000&avatarId=10419", "24x24": "https://example.atlassian.net/secure/projectavatar?size=small&s=small&pid=10000&avatarId=10419", "16x16": "https://example.atlassian.net/secure/projectavatar?size=xsmall&s=xsmall&pid=10000&avatarId=10419", "32x32": "https://example.atlassian.net/secure/projectavatar?size=medium&s=medium&pid=10000&avatarId=10419" } }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T16:43:22.076+1100", "status": { "self": "https://example.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://example.atlassian.net/", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "atlassianId": "4ad9aa0c52dc1b420a791d12", "comment": { "id": "10038", "author": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "body": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "This is a very normal comment" } ] }, { "type": "mediaSingle", "content": [ { "type": "media", "attrs": { "type": "file", "id": "d7357622-de83-40c1-a40f-0365c0f6589f", "collection": "", "width": 620, "height": 465 } } ], "attrs": { "layout": "align-start" } } ] }, "updateAuthor": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T16:43:44.320+1100", "updated": "2021-01-20T16:43:44.320+1100", "jsdPublic": true, "visibility": { "type": "group", "value": "site-admins", "identifier": "b9c0b7da-5fe9-42dc-90a6-2c46faddb518" } } }
You can subscribe to these Jira custom field events in Forge apps:
avi:jira:created:field
avi:jira:updated:field
avi:jira:trashed:field
avi:jira:restored:field
avi:jira:deleted:field
The payload for all of these events is the same.
The required OAuth scope is manage:jira-configuration
.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:field . |
id | string | ID of the custom field. |
key | string | Key of the custom field. |
type | string | Custom field type. |
typeName | string | Custom field type name. |
name | string | Name of the custom field. |
description | string | Description of the custom field. |
This is an example of the payload for a new floating-point number field:
1 2{ "eventType": "avi:jira:created:field", "id": "customfield_10000", "key": "customfield_10000", "type": "com.atlassian.jira.plugin.system.customfieldtypes:float", "typeName": "Number Field", "name": "custom-number-field", "description": "Float value" }
This is an example of the payload for a new Forge custom field (note that the key format is different):
1 2{ "id": "customfield_10001", "key": "forge-custom-field-type__df712142-1fd0-4ca9-8822-91e931c44ad8", "type": "com.atlassian.forge:ari:cloud:ecosystem::extension/8e921916-9c66-4611-ad0b-5a9a47324a12/0f483ab5-ba3a-4961-9dda-37e106c227af/static/forge-custom-field-type", "typeName": "forge-custom-field-type", "name": "forge-custom-field", "description": "Forge custom field" }
You can subscribe to these Jira custom field context events in Forge apps:
avi:jira:created:field:context
avi:jira:updated:field:context
avi:jira:deleted:field:context
The payload for all of these events is the same.
The required OAuth scope is manage:jira-configuration
.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:field:context . |
id | string | ID of the context. |
fieldId | string | ID of the custom field. |
fieldKey | string | Key of the custom field. |
name | string | Name of the custom field context. |
description | string | Description of the custom field context. |
projectIds | long[] | List of project IDs associated with the context. If the list is empty, the context is global. |
issueTypeIds | string[] | List of issue types IDs for the context. If the list is empty, the context refers to all issue types. |
This is an example of the payload for a new default custom field context:
1 2{ "eventType": "avi:jira:created:field:context", "id": "10169", "fieldId": "customfield_10061", "fieldKey": "customfield_10061", "name": "Default configuration scheme for new custom field", "description": "Default configuration scheme generated by Jira", "projectIds": [], "issueTypeIds": [] }
This is an example of the payload for a new Forge custom field context (note that the key format is different):
1 2{ "id": "10169", "fieldId": "customfield_10061", "fieldKey": "forge-custom-field-type__df712142-1fd0-4ca9-8822-91e931c44ad8", "name": "Bug fields context", "description": "A context used to define the custom field options for bugs.", "projectIds": [ 10002, 10003 ], "issueTypeIds": [ "10012", "10009" ] }
An event with the name avi:jira:updated:field:context:configuration
is sent each time the
custom field context configuration
is updated.
You can subscribe to this event in Forge apps.
The required OAuth scope is manage:jira-configuration
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:updated:field:context:configuration . |
customFieldId | string | ID of the custom field. |
customFieldKey | string | Key of the custom field. |
configurationId | long | ID of the configuration. |
fieldContextId | long | ID of the context. |
configuration | string | Stringified JSON of the updated configuration. |
This is an example of a custom field context with the configuration set to an object:
1 2{ "eventType": "avi:jira:updated:field:context:configuration", "customFieldId": "customfield_10039", "customFieldKey": "forge-custom-field__df712142-1fd0-4ca9-8822-91e931c44ad8", "configurationId": 10139, "fieldContextId": 10139, "configuration": "{\"value1\": 5, \"value2\": 1}" }
This is an example of a custom field context with the configuration set to null:
1 2{ "customFieldId": "customfield_10039", "customFieldKey": "forge-custom-field__df712142-1fd0-4ca9-8822-91e931c44ad8", "configurationId": 10139, "fieldContextId": 10139 }
You can subscribe to these Jira workflow events in Forge apps:
avi:jira:failed:expression
Other Jira product events can also be sent after transitioning an issue, depending on what has changed during the transition:
avi:jira:created:issue
for the initial transitionavi:jira:updated:issue
for other transitionsavi:jira:deleted:issue
when issue has been deletedavi:jira:assigned:issue
if the issue is assigned while making a transitionavi:jira:mentioned:issue
when a user is mentioned on an issue while making a transitionavi:jira:commented:issue
if a comment is added while making a transitionWhenever an
app-registered Forge workflow condition or
Forge workflow validator
based on a Jira expression fails while executing, an avi:jira:failed:expression
event is sent.
You can subscribe to this event in Forge apps. This event will only reach the app that registered the failing expression.
OAuth 2.0 scopes required:
Classic: manage:jira-configuration
Granular: read:workflow:jira
, read:issue:jira
, read:project:jira
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:failed:expression . |
timestamp | string | The time when the expression failed to evaluate, in epoch milliseconds. |
extensionId | string | The ID of the extension where the expression is defined. |
workflowId | string | The ID of the workflow where the expression was evaluated. |
workflowName | string | The name of the workflow where the expression was evaluated. |
conditionId | string | [Optional] The ID of the workflow condition where the expression is used. |
validatorId | string | [Optional] The ID of the workflow validator where the expression is used. |
expression | string | The evaluated Jira expression. |
errorMessages | string[] | The reasons why the expression failed to evaluate. |
context | Context | The context of the expression's execution. |
1 2interface Context { issue: IdKey; project: IdKey; user: User; transition: Transition; } interface IdKey { id: string; key: string; } interface User { accountId: string; } interface Transition { id: string; name: string; from: StatusId; to: StatusId; } interface StatusId { id: string; }
This is an example of Jira expression evaluation failure when used in a Forge workflow condition:
1 2{ "eventType": "avi:jira:failed:expression", "timestamp": "1651155160997", "extensionId": "ari:cloud:ecosystem::extension/appId/envId/static/forge-condition", "workflowId": "0283338c-0de0-4920-823b-286af0a36965", "workflowName": "Test Workflow", "conditionId": "c23ff04e-9fd2-4a6f-be37-ade253d1cdc9", "expression": "issue.assignee.unknown", "errorMessages": [ "Evaluation failed: \"issue.assignee.unknown\" - Unrecognized property of `issue.assignee`: \"unknown\" ('unknown'). Available properties of type 'User' are: 'accountId', 'displayName', 'getProjectRoles', 'groupIds', 'groups', 'permissions', 'properties'" ], "context": { "issue": { "id": "10000", "key": "TEST-1" }, "project": { "id": "10000", "key": "TEST" }, "user": { "accountId": "00000-0000-0000-00000" }, "transition": { "id": "11", "name": "In progress", "from": { "id": "1" }, "to": { "id": "2" } } } }
A post function event is sent each time the transition with configured Forge workflow post function is performed.
It is used to invoke the Forge function defined in the jira:workflowPostFunction
module.
OAuth 2.0 scopes required:
Classic: read:jira-work
, manage:jira-configuration
Granular: read:issue-meta:jira
, read:issue-security-level:jira
, read:issue.vote:jira
, read:issue.changelog:jira
, read:avatar:jira
,
read:issue:jira
, read:status:jira
, read:user:jira
, read:field-configuration:jira
, read:issue.transition:jira
, read:comment:jira
, read:comment.property:jira
,
read:group:jira
, read:project:jira
, read:project-role:jira
, read:screen:jira
, read:workflow:jira
, read:webhook:jira
, read:project-category:jira
Name | Type | Description |
---|---|---|
issue | Issue | The issue the event is related to. |
transition | Transition | The workflow transition details. The executionId field displays a random string that has the same value for all post functions executed as part of single issue transition. |
workflow | Workflow | The workflow to which the post function is related. |
atlassianId | string | The ID of the user that triggered the event. |
changelog | Changelog | A list of changes that occurred on the transition. |
comment | Comment | An object containing the comment ID if the comment has been added on the transition. |
configuration | any | A JSON object of the post function configuration. |
context | Context | A JSON object of the event context. |
retryContext | RetryOptions | A JSON object of the retry context if a retry occurred. |
1 2interface Issue { id: string; key: string; fields: { summary: string; issuetype: IssueType; creator: User; created: string; project: Project; reporter: User; assignee: User | null; updated: string; status: Status; }; } interface IssueType { self: string; id: string; name: string; subtask: boolean; avatarId: number; hierarchyLevel: number; } interface User { accountId: string; } interface Project { self: string; id: string; key: string; name: string; projectTypeKey: string; simplified: boolean; } interface Status { self: string; name: string; id: string; statusCategory: StatusCategory; } interface StatusCategory { self: string; id: string; key: string; colorName: string name: string } interface Transition { id: string; name: string; from: StatusId; to: StatusId; executionId: string; } interface StatusId { id: string; } interface Workflow { id: string; name: string; } interface Changelog { id: string items: Change[]; } interface Change { field: string; fieldId: string; fieldtype: string } interface Comment { id: string; } interface Context { cloudId: string; moduleKey: string } interface RetryOptions { retryData: any; retryCount: number; retryReason: InvocationErrorCode }
1 2{ "issue": { "id": "10073", "key": "SP-10", "fields": { "summary": "A descriptive title", "issuetype": { "self": "https://example.atlassian.net/rest/api/2/issuetype/10001", "id": "10001", "name": "Story", "subtask": false, "avatarId": 10315, "hierarchyLevel": 0 }, "creator": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "created": "2021-01-20T15:58:12.797+1100", "project": { "self": "https://example.atlassian.net/rest/api/2/project/10000", "id": "10000", "key": "SP", "name": "Sample Project", "projectTypeKey": "software", "simplified": false }, "reporter": { "accountId": "4ad9aa0c52dc1b420a791d12" }, "assignee": null, "updated": "2021-01-20T15:58:12.797+1100", "status": { "self": "https://example.atlassian.net/rest/api/2/status/10000", "name": "Backlog", "id": "10000", "statusCategory": { "self": "https://example.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } } } }, "transition": { "id": "11", "name": "In progress", "from": { "id": "1" }, "to": { "id": "2" }, "executionId": "6540951a-7c88-4620-835b-61aab8bbb13e" }, "workflow": { "id": "b02bda32-5d09-4cbd-bab1-d0114fe7cf1c", "name": "Software Simplified Workflow" }, "atlassianId": "60da07f475365000708f0119", "changelog": { "id": "10050", "items": [ { "field": "status", "fieldtype": "jira", "fieldId": "status" } ] }, "comment": { "id": "10076" }, "configuration": { "key1": "value", "key2": "value2" }, "context": { "cloudId": "my-cloud-id", "moduleKey": "my-forge-module" }, "retryContext": { "retryData": null, "retryCount": 3, "retryReason": "TUNNEL_PLATFORM_ERROR" } }
You can subscribe to these project version events in Forge apps:
Created: avi:jira:created:version
Updated: avi:jira:updated:version
Deleted: avi:jira:deleted:version
Released: avi:jira:released:version
Unreleased: avi:jira:unreleased:version
Archived: avi:jira:archived:version
Unarchived: avi:jira:unarchived:version
Moved: avi:jira:moved:version
Merged: avi:jira:merged:version
OAuth 2.0 scopes required:
Classic: read:jira-work
Granular: read:project-version:jira
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:version . |
version | Version | The version which triggered the event. |
mergedVersion? | Version | [Optional] The version that was merged with the version which triggered the event. Applicable only with avi:jira:merged:version . |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
These are examples of the payloads for version changes:
1 2{ "eventType": "avi:jira:created:version", "version": { "id": "10000", "projectId": "10000", "name": "Version 1.0a", "sequence": "1", "archived": false, "released": false, "overdue": true }, "atlassianId": "4ad9aa0c52dc1b420a791d12" }
1 2{ "eventType": "avi:jira:merged:version", "version": { "id": "10001", "projectId": "10000", "name": "Version 19c", "sequence": "2", "startDate": "2019-11-17", "releaseDate": "2020-03-11", "archived": false, "released": true, "overdue": false }, "mergedVersion": { "id": "10000", "projectId": "10000", "name": "Version 1.0b", "sequence": "1", "archived": false, "released": false, "overdue": true }, "atlassianId": "4ad9aa0c52dc1b420a791d12" }
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:deleted:version . |
version | Version | The version which triggered the event. |
mergedVersion? | Version | [Optional] The version that was merged with the version which triggered the event. |
newAffectsVersion? | Version | [Optional] The version that was placed into the field "Affects versions" instead of the deleted version. |
newFixVersion? | Version | [Optional] The version that was placed into the field "Fix versions" instead of the deleted version. |
customFieldReplacements | CustomFieldReplacement[] | The versions that were placed into custom fields instead of the deleted version. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
This is an example payload for a project version deleted event:
1 2{ "eventType": "avi:jira:deleted:version", "version": { "id": "10067", "projectId": "10003", "name": "Version 1.0b", "sequence": "34", "archived": false, "released": false, "overdue": false }, "newFixVersion": { "id": "10015", "projectId": "10003", "name": "Version 1.0c", "sequence": "4", "releaseDate": "2010-07-06", "archived": false, "released": true, "overdue": false }, "newAffectsVersion": { "id": "10021", "projectId": "10003", "name": "Version 1.0d", "sequence": "8", "releaseDate": "2010-07-06", "archived": false, "released": true, "overdue": false }, "customFieldReplacements": [ { "fieldId": "10037", "newVersionId": "10055" } ], "atlassianId": "4ad9aa0c52dc1b420a791d12" }
1 2interface Version { id: string; projectId: string; name: string; description?: string; // limited to 16384 characters sequence: string; startDate?: string; releaseDate?: string; released: boolean; archived: boolean; overdue: boolean; } interface CustomFieldReplacement { fieldId: string; newVersionId: string; }
You can subscribe to the following Jira project events in Forge apps:
avi:jira:created:project
avi:jira:updated:project
avi:jira:softdeleted:project
avi:jira:deleted:project
avi:jira:archived:project
avi:jira:unarchived:project
avi:jira:restored:project
OAuth 2.0 scopes required:
Classic: read:jira-work
Granular: read:project:jira
All events have the same payload format.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:created:project . |
project | Project | The project the event is related to. |
1 2interface Project { id: string; key: string; scopeType: string; 'GLOBAL | PROJECT' product: string; projectTemplateKey?:string; // only present in avi:jira:created:project }
This is an example of a payload for a newly created project with projectTemplateKey:
1 2{ "eventType": "avi:jira:created:project", "project": { "id": "10003", "key": "EX", "scopeType": "GLOBAL", "product": "software", "projectTemplateKey": "com.atlassian.jira-core-project-templates:jira-core-simplified-process-control" } }
This is an example of a payload for an updated project:
1 2{ "eventType": "avi:jira:updated:project", "project": { "id": "10003", "key": "EX", "scopeType": "GLOBAL", "product": "software" } }
This is an example of a payload for a deleted project:
1 2{ "eventType": "avi:jira:deleted:project", "project": { "id": "10003", "key": "EX", "scopeType": "GLOBAL", "product": "software" } }
You can subscribe to this Jira attachment event in Forge apps:
avi:jira:created:attachment
avi:jira:deleted:attachment
Keep in mind that for deletions, cascading events aren’t emitted. For more information, see: Cascading events guide.
OAuth 2.0 scopes required:
Classic: read:jira-work
Granular: read:attachment:jira
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:created:attachment . |
attachment | Attachment | The attachment the event is related to. |
1 2interface Attachment { id: string; issueId: string; fileName: string; createDate: string; size: string; mimeType: string; author?: User; } interface User { accountId: string; }
This is an example of a newly created attachment event:
1 2{ "eventType": "avi:jira:created:attachment", "attachment": { "id": "10", "issueId": "10001", "fileName": "fileName.png", "createDate": "2023-08-04 07:53:12.189", "size": "10587", "mimeType": "image/png", "author": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" } } }
This is an example of an attachment deleted event:
1 2{ "eventType": "avi:jira:deleted:attachment", "attachment": { "id": "10", "issueId": "10001", "fileName": "fileName.png", "createDate": "2023-08-04 07:53:12.189", "size": "10587", "mimeType": "image/png", "author": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" } } }
You can subscribe to these component events in Forge apps:
avi:jira:created:component
avi:jira:updated:component
avi:jira:deleted:component
Keep in mind that cascading events for deleted components aren’t emitted. For more information, see: Cascading events guide.
OAuth 2.0 scopes required:
Classic: read:jira-work
Granular (Component created/updated): read:project:jira
, read:user:jira
Granular (Component deleted): read:project:jira
, read:user:jira
, read:project.component:jira
All events have the same payload format.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:component . |
component | Component | The component the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
1 2interface Component { id: string; name: string; // limited to 256 characters, dropped when the limit is exceeded description: string; // limited to 256 characters, dropped when the limit is exceeded assigneeType: string; lead: User; realAssignee: User; isAssigneeTypeValid: boolean; project: string; projectId: string } interface User { accountId: string; }
This is an example of a payload for a newly created component:
1 2{ "eventType": "avi:jira:created:component", "atlassianId": "4ad9aa0c52dc1b420a791d12", "component": { "id": "10000", "name": "Component 1", "description": "This is a Jira component", "assigneeType": "PROJECT_LEAD", "lead": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" }, "realAssignee": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" }, "isAssigneeTypeValid": true, "project": "RB", "projectId": 10010 } }
This is an example of a payload for an updated name of component:
1 2{ "eventType": "avi:jira:updated:component", "atlassianId": "4ad9aa0c52dc1b420a791d12", "component": { "id": "10000", "name": "Component 1 updated", "description": "This is a Jira component", "assigneeType": "PROJECT_LEAD", "lead": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" }, "realAssignee": { "accountId": "70121:8a9e64b3-6662-4485-a57b-3cbc53fccf4d" }, "isAssigneeTypeValid": true, "project": "RB", "projectId": 10010 } }
You can subscribe to these user events in Forge apps:
avi:jira:created:user
avi:jira:updated:user
avi:jira:deleted:user
OAuth 2.0 scopes required:
Classic: read:jira-user
Granular: read:application-role:jira
, read:group:jira
, read:user:jira
, read:avatar:jira
User created and updated events have the same payload format.
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:user . |
user | UserDetails | The user the event is related to. |
1 2interface UserDetails { accountId: string; avatarUrls: any; displayName: string; emailAddress?: string; // Depending on the user’s privacy setting, this may not be present. active: boolean; timeZone?: string; // Depending on the user’s privacy setting, this may not be present. accountType: 'atlassian' // Regular Atlassian user account. | 'app' // System account used by Connect applications and OAuth to represent external systems. | 'customer' // Used by Jira Service Desk for external service desks. | 'unknown'; }
This is an example of a payload for a user updated event:
1 2{ "eventType": "avi:jira:updated:user", "user": { "accountId": "l345klhgk456gkg45lkg45lj", "avatarUrls": { "48x48": "https://example.atlassian.net/secure/useravatar?avatarId=10419", "24x24": "https://example.atlassian.net/secure/useravatar?size=small&s=small&avatarId=10419", "16x16": "https://example.atlassian.net/secure/useravatar?size=xsmall&s=xsmall&avatarId=10419", "32x32": "https://example.atlassian.net/secure/useravatar?size=medium&s=medium&avatarId=10419" }, "displayName": "Charlie Atlas", "emailAddress": "charlie@atlassian.com", "active": true, "timeZone": "Australia/Sydney", "accountType": "atlassian" } }
User deleted event has the following payload format.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:deleted:user . |
user | User | The user the event is related to. |
1 2interface User { accountId: string; }
This is an example of a payload for a user deleted event:
1 2{ "eventType": "avi:jira:deleted:user", "user": { "accountId": "l345klhgk456gkg45lkg45lj" } }
You can subscribe to these filter events in Forge apps:
avi:jira:created:filter
avi:jira:updated:filter
avi:jira:deleted:filter
The payload for all of these events is the same.
OAuth 2.0 scopes required:
Classic: manage:jira-configuration
Granular: read:filter:jira
, read:jql:jira
Name | Type | Description |
---|---|---|
eventType | string | The event name, such as avi:jira:created:filter . |
filter | Filter | The filter the event is related to. |
atlassianId? | string | [Optional] The ID of the user that has caused the event. |
1 2interface Filter { id: string; name: string; description?: string; // limited to 10K characters, dropped when the limit is exceeded jql: string; // limited to 90K characters, dropped when the limit is exceeded owner: User; } interface User { accountId: string; }
This is an example of a payload for a user updated event:
1 2{ "eventType": "avi:jira:updated:filter", "filter": { "id": "10006", "name": "Important issues", "description": "Some description", "jql": "labels in (important, very-important)", "owner": { "accountId": "456xyz0c52dc1b420a791ta4" } }, "atlassianId": "4ad9aa0c52dc1b420a791d12" }
An event with the name avi:jira:timetracking:provider:changed
is sent each time the
time tracking provider
is changed.
You can subscribe to this event in Forge apps.
The required OAuth scope is manage:jira-configuration
.
Name | Type | Description |
---|---|---|
eventType | string | The event name avi:jira:timetracking:provider:changed . |
property | Property | The property with key set to jira.timetracking.selected and value indicating the selected time tracking provider. |
1 2interface Property { key: string; value: string; }
This is an example of a time tracking provider changed event with the provider set to a Forge app provider:
1 2{ "eventType": "avi:jira:timetracking:provider:changed", "property": { "key": "jira.timetracking.selected", "value": "ari:cloud:ecosystem::extension/e62f20a2-4b61-4dbe-bfb9-9a88b5e3ac84/548c5df1-24aa-4f7c-bbbb-3038d947cb05/static/timetracking-provider" } }
This is an example of a time tracking provider changed event with the provider set to a Connect app provider:
1 2{ "eventType": "avi:jira:timetracking:provider:changed", "property": { "key": "jira.timetracking.selected", "value": "com.example.timetracking-plugin__timetracking-provider" } }
Rate this page: