Manage and visualize your Jira issues
This guide demonstrates how to bring your Jira issue management experience into Port. You will learn how to:
- Ingest Jira project and issue data into Port's software catalog using Port's Jira integration.
 - Set up self-service actions to manage issues (create, change status, and add comments).
 - Build dashboards in Port to monitor and act on issues.
 
Common use casesโ
- Monitor the status and health of all Jira issues from a centralized dashboard.
 - Empower teams to manage tickets and perform day-2 operations via self-service actions.
 - Track high-priority bugs and their resolution progress.
 
Prerequisitesโ
This guide assumes the following:
- You have a Port account and have completed the onboarding process.
 - Port's Jira integration is installed in your account.
 
Set up self-service actionsโ
We will create self-service actions in Port to directly interact with the Jira REST API. These actions let users:
- 
Create a new issue.
 - 
Change an issue's status.
 - 
Add comments to an issue.
 
Each action will be configured via JSON and triggered using synced webhooks secured with secrets. To implement these use-cases, follow the steps below:
Add Port secretsโ
To add a secret to your portal:
- 
Click on the
...button in the top right corner of your Port application. - 
Click on Credentials.
 - 
Click on the
Secretstab. - 
Click on
+ Secretand add the following secret:- 
JIRA_AUTH- Base64 encoded string of your Jira credentials. Generate this by running:echo -n "your-email@domain.com:your-api-token" | base64Replace
your-email@domain.comwith your Jira email andyour-api-tokenwith your Jira API token.One time generationThe base64 encoded string only needs to be generated once and will work for all webhook calls until you change your API token.
 
 - 
 
Create a new issueโ
- 
Go to the Self-service page of your portal.
 - 
Click on the
+ New Actionbutton. - 
Click on the
{...} Edit JSONbutton. - 
Copy and paste the following JSON configuration into the editor.
Create Jira issue action (Click to expand)
Configure your Jira environmentReplace
<JIRA_ORGANIZATION_URL>in the webhook URL with your Jira organization URL (e.g.,example.atlassian.net).{
"identifier": "create_jira_issue",
"title": "Create Jira Issue",
"icon": "Jira",
"description": "Create a new Jira issue in the specified project",
"trigger": {
"type": "self-service",
"operation": "CREATE",
"userInputs": {
"properties": {
"title": {
"type": "string",
"title": "Title"
},
"description": {
"type": "string",
"title": "Description"
},
"project": {
"type": "string",
"title": "Project",
"blueprint": "jiraProject",
"format": "entity"
},
"issue_type": {
"type": "string",
"title": "Issue Type",
"default": "Task",
"enum": [
"Task",
"Story",
"Bug",
"Epic"
],
"enumColors": {
"Task": "blue",
"Story": "green",
"Bug": "red",
"Epic": "purple"
}
}
},
"required": [
"title",
"description",
"project",
"issue_type"
],
"order": [
"title",
"description",
"project",
"issue_type"
]
}
},
"invocationMethod": {
"type": "WEBHOOK",
"url": "https://<JIRA_ORGANIZATION_URL>/rest/api/3/issue",
"agent": false,
"synchronized": true,
"method": "POST",
"headers": {
"Authorization": "Basic {{.secrets.JIRA_AUTH}}",
"Content-Type": "application/json"
},
"body": {
"fields": {
"project": {
"key": "{{.inputs.project.identifier}}"
},
"summary": "{{.inputs.title}}",
"description": {
"version": 1,
"type": "doc",
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "{{.inputs.description}}"
}
]
},
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "Reported by: {{.trigger.by.user.email}}"
}
]
}
]
},
"issuetype": {
"name": "{{.inputs.issue_type}}"
},
"labels": [
"port-ssa"
]
}
}
},
"requiredApproval": false
} - 
Click
Save. 
Now you should see the Create Jira Issue action in the self-service page. ๐
Change issue statusโ
- 
Go to the Self-service page of your portal.
 - 
Click on the
+ New Actionbutton. - 
Click on the
{...} Edit JSONbutton. - 
Copy and paste the following JSON configuration into the editor.
Change Jira issue status action (Click to expand)
Configure your Jira environmentReplace
<JIRA_ORGANIZATION_URL>in the webhook URL with your Jira organization URL (e.g.,example.atlassian.net).{
"identifier": "change_jira_issue_status",
"title": "Change Issue Status",
"icon": "Jira",
"description": "Update a Jira ticket's status using a synced webhook",
"trigger": {
"type": "self-service",
"operation": "DAY-2",
"userInputs": {
"properties": {
"status": {
"icon": "DefaultProperty",
"title": "Status",
"type": "string",
"description": "Select the status to transition the issue to",
"enum": [
"To Do",
"In Progress",
"Done",
"Code Review",
"Product Review",
"Waiting For Prod"
],
"enumColors": {
"To Do": "lightGray",
"In Progress": "bronze",
"Done": "green",
"Code Review": "darkGray",
"Product Review": "purple",
"Waiting For Prod": "orange"
}
}
},
"required": [
"status"
],
"order": [
"status"
]
},
"blueprintIdentifier": "jiraIssue"
},
"invocationMethod": {
"type": "WEBHOOK",
"url": "https://<JIRA_ORGANIZATION_URL>/rest/api/3/issue/{{.entity.identifier}}/transitions",
"agent": false,
"synchronized": true,
"method": "POST",
"headers": {
"Authorization": "Basic {{.secrets.JIRA_AUTH}}",
"Content-Type": "application/json"
},
"body": {
"transition": {
"{{ if .inputs.status == 'To Do' then 'id' else 'none' end }}": 11,
"{{ if .inputs.status == 'In Progress' then 'id' else 'none' end }}": 21,
"{{ if .inputs.status == 'Done' then 'id' else 'none' end }}": 31,
"{{ if .inputs.status == 'Code Review' then 'id' else 'none' end }}": 41,
"{{ if .inputs.status == 'Product Review' then 'id' else 'none' end }}": 51,
"{{ if .inputs.status == 'Waiting For Prod' then 'id' else 'none' end }}": 61
}
}
},
"requiredApproval": false
} - 
Click
Save. 
Now you should see the Change Issue Status action in the self-service page. ๐
Add comment to issueโ
- 
Go to the Self-service page of your portal.
 - 
Click on the
+ New Actionbutton. - 
Click on the
{...} Edit JSONbutton. - 
Copy and paste the following JSON configuration into the editor.
Add Jira issue comment action (Click to expand)
Configure your Jira environmentReplace
<JIRA_ORGANIZATION_URL>in the webhook URL with your Jira organization URL (e.g.,example.atlassian.net).{
"identifier": "addCommentOnJiraIssue",
"title": "Add Comment to Issue",
"icon": "Jira",
"description": "Add a comment to a Jira issue using a synced webhook",
"trigger": {
"type": "self-service",
"operation": "DAY-2",
"userInputs": {
"properties": {
"comment": {
"icon": "DefaultProperty",
"title": "Comment",
"type": "string",
"description": "Enter the comment to add to the Jira issue"
}
},
"required": [
"comment"
],
"order": [
"comment"
]
},
"blueprintIdentifier": "jiraIssue"
},
"invocationMethod": {
"type": "WEBHOOK",
"url": "https://<JIRA_ORGANIZATION_URL>/rest/api/3/issue/{{.entity.identifier}}/comment",
"agent": false,
"synchronized": true,
"method": "POST",
"headers": {
"Authorization": "Basic {{.secrets.JIRA_AUTH}}",
"Content-Type": "application/json"
},
"body": {
"body": {
"type": "doc",
"version": 1,
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "{{.inputs.comment}}"
}
]
}
]
}
}
},
"requiredApproval": false
} - 
Click
Save. 
Now you should see the Add Comment to Issue action in the self-service page. ๐
Visualize metricsโ
With issues ingested and actions configured, the next step is building a dashboard to monitor Jira data directly in Port. We can visualize key metrics using the following widgets: ticket status distribution, delivery timelines, and high-priority bug tracking. These customizable widgets provide insights into your Jira issues, helping you manage and prioritize effectively.
Create a dashboardโ
- Navigate to the Catalog page of your portal.
 - Click on the 
+ Newbutton in the left sidebar. - Select New dashboard.
 - Name the dashboard Jira Issue Management.
 - Input 
Create, view and manage your Jira issuesunder Description. - Select the 
Jiraicon. - Click 
Create. 
We now have a blank dashboard where we can start adding widgets to visualize insights from our Jira issues.
Add widgetsโ
In the new dashboard, create the following widgets:
Average monthly closed bugs (click to expand)
- Click 
+ Widgetand select Number Chart. - Title: 
Monthly closed bugs(add theJiraicon). - Select 
Count entitiesChart type and choose Jira Issue as the Blueprint. - Select 
averagefor the Function and choosemonthunder Average of. - Select 
resolutionDatefor the Measure time by. - Add this JSON to the Additional filters editor to filter closed bugs in the current month:
[
{
"combinator":"and",
"rules":[
{
"property":"issueType",
"operator":"=",
"value": "Bug"
},
{
"property":"status",
"operator":"=",
"value": "Done"
}
]
}
] - Select 
customas the Unit and inputbugsas the Custom unit. - Click 
Save. 
Mean time to resolve (MTTR) in days (click to expand)
- Click 
+ Widgetand select Number Chart. - Title: 
Mean time to resolve (MTTR)(add theJiraicon). - Select 
Aggregate by propertyChart type and choose Jira Issue as the Blueprint. - Select 
Handling Duration (Days)for the Property and choosemedianfor the Function. - Select 
customas the Unit and inputdaysas the Custom unit. - Click 
Save. 
Total critical issues found per month (click to expand)
- Click 
+ Widgetand select Number Chart. - Title: 
Critical issues found per month(add theJiraicon). - Select 
Count entitiesChart type and choose Jira Issue as the Blueprint. - Select 
averagefor the Function and choosemonthunder Average of. - Select 
createdfor the Measure time by. - Add this JSON to the Additional filters editor to filter critical issues created this month:
[
{
"combinator":"and",
"rules":[
{
"property":"priority",
"operator":"in",
"value": ["High", "Now (Urgent)"]
},
{
"property":"issueType",
"operator":"=",
"value": "Bug"
}
]
}
] - Select 
customas the Unit and inputissuesas the Custom unit. - Click 
Save. 
High open priority bugs (click to expand)
- Click 
+ Widgetand select Number Chart. - Title: 
High open priority bugs(add theJiraicon). - Select 
Count entitiesChart type and choose Jira Issue as the Blueprint. - Select 
countfor the Function. - Add this JSON to the Additional filters editor to filter high priority open bugs:
[
{
"combinator":"and",
"rules":[
{
"property":"issueType",
"operator":"=",
"value": "Bug"
},
{
"property":"priority",
"operator":"in",
"value": ["Now (Urgent)", "High"]
},
{
"property":"status",
"operator":"!=",
"value": "Done"
}
]
}
] - Select 
customas the Unit and inputbugsas the Custom unit. - Click 
Save. 
Create Jira issue action (click to expand)
- Click 
+ Widgetand select Action card. - Choose the Create Jira Issue action we created in this guide.
 - Click Save.
 
Critical ongoing bugs in the past week (click to expand)
- Click 
+ Widgetand select Table. - Title the widget Critical ongoing bugs.
 - Choose the Jira Issue blueprint.
 - Add this JSON to the Additional filters editor to show only high/critical issues in progress or code review:
{
"combinator": "and",
"rules": [
{
"property": "status",
"operator": "in",
"value": [
"In Progress",
"Code Review"
]
},
{
"property": "issueType",
"operator": "=",
"value": "Bug"
},
{
"property": "created",
"operator": "between",
"value": {
"preset": "lastWeek"
}
},
{
"operator": "=",
"value": "jiraIssue",
"property": "$blueprint"
}
]
} - Click Save to add the widget to the dashboard.
 - Click on the 
...button in the top right corner of the table and select Customize table. - In the top right corner of the table, click on 
Manage Propertiesand add the following properties:- Status: The current status of the issue.
 - Assignee: The assignee of the issue.
 - Priority: The issue priority.
 - Created: The date the issue was created.
 - Project: The related Jira project.
 
 - Click on the save icon in the top right corner of the widget to save the customized table.
 
Issue types distribution (click to expand)
- Click 
+ Widgetand select Pie chart. - Title: 
Issue types distribution(add theJiraicon). - Choose the Jira Issue blueprint.
 - Under 
Breakdown by property, select the Type property. - Add this JSON to the Additional filters editor to show only issues created in the past 3 months:
[
{
"combinator":"and",
"rules":[
{
"property":"created",
"operator":"between",
"value": {
"preset":"last3Months"
}
}
]
}
] - Click Save.