Jira
Port's Jira Cloud integration allows you to model Jira Cloud resources in your software catalog and ingest data into them.
This integration is designed for Jira Cloud. For Jira Server (self-hosted), use Port's Jira Server Ocean integration.
Setup
Choose one of the following installation methods: Not sure which method is right for your use case? Check the available installation methods.
Configuration
Port integrations use a YAML mapping block to ingest data from the third-party api into Port.
The mapping makes use of the JQ JSON processor to select, modify, concatenate, transform and perform other operations on existing fields and values from the integration API.
Default mapping configuration
This is the default mapping configuration for this integration:
Default mapping configuration (click to expand)
deleteDependentEntities: true
createMissingRelatedEntities: true
enableMergeEntity: true
resources:
- kind: user
selector:
query: 'true'
port:
entity:
mappings:
identifier: .accountId
title: .displayName
blueprint: '"jiraUser"'
properties:
emailAddress: .emailAddress
displayName: .displayName
active: .active
accountType: .accountType
- kind: project
selector:
query: 'true'
port:
entity:
mappings:
identifier: .key
title: .name
blueprint: '"jiraProject"'
properties:
url: (.self | split("/") | .[:3] | join("/")) + "/projects/" + .key
- kind: issue
selector:
query: 'true'
jql: (statusCategory != Done) OR (created >= -1w) OR (updated >= -1w)
port:
entity:
mappings:
identifier: .key
title: .fields.summary
blueprint: '"jiraIssue"'
properties:
url: (.self | split("/") | .[:3] | join("/")) + "/browse/" + .key
status: .fields.status.name
issueType: .fields.issuetype.name
components: .fields.components
creator: .fields.creator.emailAddress
priority: .fields.priority.name
labels: .fields.labels
created: .fields.created
updated: .fields.updated
resolutionDate: .fields.resolutiondate
relations:
project: .fields.project.key
parentIssue: .fields.parent.key
subtasks: .fields.subtasks | map(.key)
jira_user_assignee: .fields.assignee.accountId
jira_user_reporter: .fields.reporter.accountId
assignee:
combinator: '"or"'
rules:
- property: '"jira_user_id"'
operator: '"="'
value: .fields.assignee.accountId
- property: '"$identifier"'
operator: '"="'
value: .fields.assignee.email
reporter:
combinator: '"or"'
rules:
- property: '"jira_user_id"'
operator: '"="'
value: .fields.reporter.accountId
- property: '"$identifier"'
operator: '"="'
value: .fields.reporter.email
- kind: issue
selector:
query: 'true'
jql: (statusCategory != Done) OR (created >= -1w) OR (updated >= -1w)
port:
entity:
mappings:
identifier: .key
title: .fields.summary
blueprint: '"jiraIssue"'
relations:
pull_request:
combinator: '"and"'
rules:
- property: '"$title"'
operator: '"contains"'
value: .key
Capabilities
See the capabilities page for more configuration options and examples.
Mapping & selectors per resource
Use the explorer below to view sample payloads and the resulting Port entities for each resource type. For additional resources and advanced configurations, see the examples page.
- kind: user
selector:
query: 'true'
port:
entity:
mappings:
identifier: .accountId
title: .displayName
blueprint: '"jiraUser"'
properties:
emailAddress: .emailAddress
displayName: .displayName
active: .active
accountType: .accountType
{
"accountId": "U-PA",
"accountType": "app",
"active": true,
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"24x24": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"32x32": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"48x48": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png"
},
"displayName": "AI",
"key": "",
"name": "",
"self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=U-PA"
},
{
"accountId": "U-PA-2",
"accountType": "app",
"active": true,
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"24x24": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"32x32": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png",
"48x48": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png"
},
"displayName": "AI-2",
"key": "",
"name": "",
"self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=U-PA-2"
}
{
"identifier": "U-PA",
"title": "AI",
"team": [],
"properties": {
"accountId": "U-PA",
"displayName": "AI",
"active": true,
"accountType": "app",
"avatarUrl": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png"
},
"relations": {},
"icon": "User"
}
- kind: project
selector:
query: 'true'
port:
entity:
mappings:
identifier: .key
title: .name
blueprint: '"jiraProject"'
properties:
url: (.self | split("/") | .[:3] | join("/")) + "/projects/" + .key
{
"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight",
"self": "https://myaccount.atlassian.net/rest/api/3/project/10000",
"id": "10000",
"key": "PA",
"name": "Port-AI",
"avatarUrls": {
"48x48": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413",
"24x24": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=small",
"16x16": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=xsmall",
"32x32": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=medium"
},
"projectTypeKey": "software",
"simplified": true,
"style": "next-gen",
"isPrivate": false,
"properties": {},
"entityId": "7f4f8d6f-705b-4074-84be-46f0d012cd8e",
"uuid": "7f4f8d6f-705b-4074-84be-46f0d012cd8e"
}
{
"identifier": "PA",
"title": "Port-AI",
"icon": "Jira",
"blueprint": "jiraProject",
"team": [],
"properties": {
"url": "https://myaccount.atlassian.net/projects/PA",
"totalIssues": 100
},
"relations": {},
"createdAt": "2023-11-06T11:22:05.433Z",
"createdBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW",
"updatedAt": "2023-11-06T11:22:05.433Z",
"updatedBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW"
}
Below are the supported selectors for this resource. Use them under the selector key in your integration mapping configuration to control which resources are returned from the API.
| Selector | Type | Description |
|---|---|---|
exportEnvVariables | array | Environment variable names whose values should be included in lakehouse ingest payloads for DSP processing. |
expand | string | Comma-separated list of additional project properties to expand in the response. Supported values include 'description', 'lead', 'url', 'projectKeys', and 'insight'. Default: "insight". |
- kind: issue
selector:
query: 'true'
jql: (statusCategory != Done) OR (created >= -1w) OR (updated >= -1w)
port:
entity:
mappings:
identifier: .key
title: .fields.summary
blueprint: '"jiraIssue"'
properties:
url: (.self | split("/") | .[:3] | join("/")) + "/browse/" + .key
status: .fields.status.name
issueType: .fields.issuetype.name
components: .fields.components
creator: .fields.creator.emailAddress
priority: .fields.priority.name
labels: .fields.labels
created: .fields.created
updated: .fields.updated
resolutionDate: .fields.resolutiondate
relations:
project: .fields.project.key
parentIssue: .fields.parent.key
subtasks: .fields.subtasks | map(.key)
jira_user_assignee: .fields.assignee.accountId
jira_user_reporter: .fields.reporter.accountId
assignee:
combinator: '"or"'
rules:
- property: '"jira_user_id"'
operator: '"="'
value: .fields.assignee.accountId
- property: '"$identifier"'
operator: '"="'
value: .fields.assignee.email
reporter:
combinator: '"or"'
rules:
- property: '"jira_user_id"'
operator: '"="'
value: .fields.reporter.accountId
- property: '"$identifier"'
operator: '"="'
value: .fields.reporter.email
- kind: issue
selector:
query: 'true'
jql: (statusCategory != Done) OR (created >= -1w) OR (updated >= -1w)
port:
entity:
mappings:
identifier: .key
title: .fields.summary
blueprint: '"jiraIssue"'
relations:
pull_request:
combinator: '"and"'
rules:
- property: '"$title"'
operator: '"contains"'
value: .key
{
"expand": "operations,versionedRepresentations,editmeta,changelog,customfield_10010.requestTypePractice,renderedFields",
"id": "10000",
"self": "https://myaccount.atlassian.net/rest/api/3/issue/10000",
"key": "PA-1",
"fields": {
"statuscategorychangedate": "2023-11-06T11:02:59.341+0000",
"issuetype": {
"self": "https://myaccount.atlassian.net/rest/api/3/issuetype/10001",
"id": "10001",
"description": "Tasks track small, distinct pieces of work.",
"iconUrl": "https://myaccount.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium",
"name": "Task",
"subtask": false,
"avatarId": 10318,
"entityId": "a7309bf9-70c5-4237-bdaf-0261037b6ecc",
"hierarchyLevel": 0
},
"timespent": "None",
"customfield_10030": "None",
"project": {
"self": "https://myaccount.atlassian.net/rest/api/3/project/10000",
"id": "10000",
"key": "PA",
"name": "Port-AI",
"projectTypeKey": "software",
"simplified": true,
"avatarUrls": {
"48x48": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413",
"24x24": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=small",
"16x16": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=xsmall",
"32x32": "https://myaccount.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10413?size=medium"
}
},
"customfield_10031": "None",
"customfield_10032": "None",
"fixVersions": [],
"aggregatetimespent": "None",
"resolution": "None",
"customfield_10027": "None",
"customfield_10028": "None",
"customfield_10029": "None",
"resolutiondate": "None",
"workratio": -1,
"watches": {
"self": "https://myaccount.atlassian.net/rest/api/3/issue/PA-1/watchers",
"watchCount": 1,
"isWatching": true
},
"lastViewed": "None",
"created": "2023-11-06T11:02:59.000+0000",
"customfield_10020": "None",
"customfield_10021": "None",
"customfield_10022": "None",
"priority": {
"self": "https://myaccount.atlassian.net/rest/api/3/priority/3",
"iconUrl": "https://myaccount.atlassian.net/images/icons/priorities/medium.svg",
"name": "Medium",
"id": "3"
},
"customfield_10023": "None",
"customfield_10024": "None",
"customfield_10025": "None",
"labels": ["infra"],
"customfield_10026": "None",
"customfield_10016": "None",
"customfield_10017": "None",
"customfield_10018": {
"hasEpicLinkFieldDependency": false,
"showField": false,
"nonEditableReason": {
"reason": "PLUGIN_LICENSE_ERROR",
"message": "The Parent Link is only available to Jira Premium users."
}
},
"customfield_10019": "0|hzzzzz:",
"timeestimate": "None",
"aggregatetimeoriginalestimate": "None",
"versions": [],
"issuelinks": [],
"assignee": {
"self": "https://myaccount.atlassian.net/rest/api/3/user?accountId=712020%3A05acda87-42da-44d8-b21e-f71a508e5d11",
"accountId": "712020:05acda87-42da-44d8-b21e-f71a508e5d11",
"emailAddress": "username@example.com.io",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"24x24": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"16x16": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"32x32": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png"
},
"displayName": "User Name",
"active": true,
"timeZone": "UTC",
"accountType": "atlassian"
},
"updated": "2023-11-06T11:03:18.244+0000",
"status": {
"self": "https://myaccount.atlassian.net/rest/api/3/status/10000",
"description": "",
"iconUrl": "https://myaccount.atlassian.net/",
"name": "To Do",
"id": "10000",
"statusCategory": {
"self": "https://myaccount.atlassian.net/rest/api/3/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
"components": [],
"timeoriginalestimate": "None",
"description": "None",
"customfield_10010": "None",
"customfield_10014": "None",
"customfield_10015": "None",
"customfield_10005": "None",
"customfield_10006": "None",
"security": "None",
"customfield_10007": "None",
"customfield_10008": "None",
"aggregatetimeestimate": "None",
"customfield_10009": "None",
"summary": "Setup infra",
"creator": {
"self": "https://myaccount.atlassian.net/rest/api/3/user?accountId=712020%3A05acda87-42da-44d8-b21e-f71a508e5d11",
"accountId": "712020:05acda87-42da-44d8-b21e-f71a508e5d11",
"emailAddress": "username@example.com.io",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"24x24": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"16x16": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"32x32": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png"
},
"displayName": "User Name",
"active": true,
"timeZone": "UTC",
"accountType": "atlassian"
},
"subtasks": [],
"reporter": {
"self": "https://myaccount.atlassian.net/rest/api/3/user?accountId=712020%3A05acda87-42da-44d8-b21e-f71a508e5d11",
"accountId": "712020:05acda87-42da-44d8-b21e-f71a508e5d11",
"emailAddress": "username@example.com.io",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"24x24": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"16x16": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png",
"32x32": "https://secure.gravatar.com/avatar/0d5d34ceb820d324d69046a1b2f51dc0?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIC-3.png"
},
"displayName": "User Name",
"active": true,
"timeZone": "UTC",
"accountType": "atlassian"
},
"aggregateprogress": {
"progress": 0,
"total": 0
},
"customfield_10001": "None",
"customfield_10002": "None",
"customfield_10003": "None",
"customfield_10004": "None",
"environment": "None",
"duedate": "None",
"progress": {
"progress": 0,
"total": 0
},
"votes": {
"self": "https://myaccount.atlassian.net/rest/api/3/issue/PA-1/votes",
"votes": 0,
"hasVoted": false
}
}
}
{
"identifier": "PA-1",
"title": "Setup infra",
"icon": null,
"blueprint": "jiraIssue",
"team": [],
"properties": {
"url": "https://myaccount.atlassian.net/browse/PA-1",
"status": "To Do",
"issueType": "Task",
"components": [],
"creator": "username@example.com.io",
"priority": "Medium",
"created": "2023-11-06T11:02:59.000+0000",
"updated": "2023-11-06T11:03:18.244+0000"
},
"relations": {
"parentIssue": null,
"project": "PA",
"assignee": "username@example.com.io",
"reporter": "username@example.com.io",
"subtasks": []
},
"createdAt": "2023-11-06T11:22:07.550Z",
"createdBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW",
"updatedAt": "2023-11-06T11:22:07.550Z",
"updatedBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW"
}
Below are the supported selectors for this resource. Use them under the selector key in your integration mapping configuration to control which resources are returned from the API.
| Selector | Type | Description |
|---|---|---|
exportEnvVariables | array | Environment variable names whose values should be included in lakehouse ingest payloads for DSP processing. |
jql | string | JQL (Jira Query Language) expression used to filter which issues are synced. Defaults to open issues and those created or updated within the last week. Default: "(statusCategory != Done) OR (created >= -1w) OR (updated >= -1w)". |
fields | string | Comma-separated list of issue fields to return. Use '*all' to return all fields, or specify individual field names (e.g. 'summary,status,assignee') to reduce payload size. Default: "*all". |
expand | string | Comma-separated list of additional issue properties to expand. Supported values include 'renderedFields', 'names', 'schema', 'transitions', 'operations', 'editmeta', and 'changelog'. |
- kind: team
selector:
query: "true"
includeMembers: true
port:
entity:
mappings:
identifier: .teamId
title: .displayName
blueprint: '"jiraTeam"'
properties:
organizationId: .organizationId
teamType: .teamType
description: .description
relations:
members: if .__members != null then .__members | map(.accountId) else [] end
{
"description": "Port-AI",
"displayName": "AI",
"organizationId": "10000",
"teamId": "T-PA",
"teamType": "OPEN"
},
{
"description": "Port-AI",
"displayName": "AI-2",
"organizationId": "10000",
"teamId": "T-PA-2",
"teamType": "OPEN"
}
{
"identifier": "T-PA",
"title": "Port-AI",
"icon": "Users",
"properties": {
"organizationId": "10000",
"teamType": "OPEN",
"description": "Port-AI"
},
"relations": {
"members": [
"U-PA",
"U-PA-2"
]
},
"mirrorProperties": {},
"calculationProperties": {},
"aggregationProperties": {}
}
Below are the supported selectors for this resource. Use them under the selector key in your integration mapping configuration to control which resources are returned from the API.
| Selector | Type | Description |
|---|---|---|
exportEnvVariables | array | Environment variable names whose values should be included in lakehouse ingest payloads for DSP processing. |
includeMembers | boolean | Whether to fetch and include the list of members for each team. Enabling this will make additional API calls and may increase sync time for large teams. Default: false. |
- kind: release
selector:
query: "true"
port:
entity:
mappings:
identifier: .id | tostring
title: .name
blueprint: '"jiraRelease"'
properties:
description: .description
released: .released
archived: .archived
releaseDate: .releaseDate
overdue: .overdue
relations:
project: .__projectKey
{
"self": "https://your-domain.atlassian.net/rest/api/3/version/10000",
"id": "10000",
"name": "New Version 1",
"description": "An excellent version",
"archived": false,
"released": true,
"releaseDate": "2010-07-06",
"userReleaseDate": "6/Jul/2010",
"overdue": true,
"projectId": 10000,
"__projectKey": "PR"
}
{
"identifier": "10000",
"title": "New Version 1",
"icon": "Jira",
"blueprint": "jiraRelease",
"properties": {
"description": "An excellent version",
"released": true,
"archived": false,
"releaseDate": "2010-07-06",
"overdue": true
},
"relations": {
"project": "PR"
},
"mirrorProperties": {},
"calculationProperties": {},
"aggregationProperties": {}
}
resources:
- kind: backlog
selector:
query: 'true'
jql: statusCategory != Done
port:
# Maps to jiraIssue blueprint; uses enableMergeEntity so the board relation
# is merged onto existing issue entities ingested by the issue kind without duplication.
entity:
mappings:
identifier: .key
title: .fields.summary
blueprint: '"jiraIssue"'
properties:
url: (.self | split("/") | .[:3] | join("/")) + "/browse/" + .key
status: .fields.status.name
issueType: .fields.issuetype.name
priority: .fields.priority.name
labels: .fields.labels
components: '[.fields.components[]?.name]'
created: .fields.created
updated: .fields.updated
resolutionDate: .fields.resolutiondate
creator: .fields.creator.accountId
dueDate: .fields.duedate
storyPoints: .fields.customfield_10026 // null
team: .fields.customfield_10001.name // null
sprint: .fields.customfield_10020 | if . != null and length > 0 then .[-1].name else null end
sprintHistory: '[.fields.customfield_10020[]?.name] | if length > 0 then . else null end'
relations:
project: .fields.project.key
parentIssue: (.fields.parent // null) | if . != null then .key else null end
board: '.__boardId | tostring'
jira_user_assignee: .fields.assignee.accountId // null
jira_user_reporter: .fields.reporter.accountId // null
{
"expand": "schema,names",
"issues": [
{
"id": "20115",
"key": "PORT-9446",
"self": "https://your-domain.atlassian.net/rest/agile/1.0/issue/20115",
"fields": {
"summary": "K8s Exporter | Don't fail initialization on existing blueprints",
"status": {
"name": "To Do",
"id": "10000",
"statusCategory": {
"key": "new",
"name": "To Do"
}
},
"issuetype": {
"name": "Task",
"subtask": false,
"hierarchyLevel": 0
},
"priority": {
"name": "Must Have",
"id": "10002"
},
"labels": [],
"components": [],
"created": "2024-07-27T14:22:00.989+0300",
"updated": "2025-08-03T09:32:44.267+0300",
"resolutiondate": null,
"creator": {
"accountId": "712020:5df2157d-063f-4a8a-89d1-1b8e6035ec11",
"displayName": "Tom Tankilevitch"
},
"project": {
"key": "PORT",
"name": "Port"
},
"parent": null,
"sprint": null,
"flagged": false
}
}
],
"nextPageToken": "CpEB...",
"isLast": false
}
{
"identifier": "PORT-9446",
"title": "K8s Exporter | Don't fail initialization on existing blueprints",
"blueprint": "jiraIssue",
"properties": {
"url": "https://your-domain.atlassian.net/browse/PORT-9446",
"status": "To Do",
"issueType": "Task",
"priority": "Must Have",
"labels": [],
"components": [],
"creator": "712020:5df2157d-063f-4a8a-89d1-1b8e6035ec11",
"created": "2024-07-27T14:22:00.989+0300",
"updated": "2025-08-03T09:32:44.267+0300",
"resolutionDate": null
},
"relations": {
"project": "PORT",
"parentIssue": null,
"board": "1"
}
}
resources:
- kind: worklog
selector:
query: 'true'
jql: updated >= -1w
port:
entity:
mappings:
identifier: .id
title: .author.displayName + " - " + .started
blueprint: '"jiraWorklog"'
properties:
timeSpent: .timeSpent
timeSpentSeconds: .timeSpentSeconds
started: .started
created: .created
updated: .updated
authorAccountId: .author.accountId
authorDisplayName: .author.displayName
authorEmail: .author.emailAddress
relations:
issue: .__issueKey
{
"startAt": 0,
"maxResults": 5000,
"total": 1,
"worklogs": [
{
"self": "https://your-domain.atlassian.net/rest/api/3/issue/10001/worklog/10100",
"author": {
"self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=712020%3Aabcdef12-3456-7890-abcd-ef1234567890",
"accountId": "712020:abcdef12-3456-7890-abcd-ef1234567890",
"emailAddress": "john.smith@example.com",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"24x24": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"16x16": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"32x32": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png"
},
"displayName": "John Smith",
"active": true,
"timeZone": "America/New_York",
"accountType": "atlassian"
},
"updateAuthor": {
"self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=712020%3Aabcdef12-3456-7890-abcd-ef1234567890",
"accountId": "712020:abcdef12-3456-7890-abcd-ef1234567890",
"emailAddress": "john.smith@example.com",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"24x24": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"16x16": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png",
"32x32": "https://secure.gravatar.com/avatar/abc123?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJS-1.png"
},
"displayName": "John Smith",
"active": true,
"timeZone": "America/New_York",
"accountType": "atlassian"
},
"comment": {
"type": "doc",
"version": 1,
"content": []
},
"created": "2024-01-15T10:00:00.000+0000",
"updated": "2024-01-15T10:00:00.000+0000",
"started": "2024-01-15T09:00:00.000+0000",
"timeSpent": "1d",
"timeSpentSeconds": 28800,
"id": "10100",
"issueId": "10001"
}
]
}
{
"identifier": "10100",
"title": "John Smith - 2024-01-15T09:00:00.000+0000",
"blueprint": "jiraWorklog",
"properties": {
"timeSpent": "1d",
"timeSpentSeconds": 28800,
"started": "2024-01-15T09:00:00.000+0000",
"created": "2024-01-15T10:00:00.000+0000",
"updated": "2024-01-15T10:00:00.000+0000",
"authorAccountId": "712020:abcdef12-3456-7890-abcd-ef1234567890",
"authorDisplayName": "John Smith",
"authorEmail": "john.smith@example.com"
},
"relations": {
"issue": "TEST-1"
}
}
- kind: board
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id | tostring
title: .name
blueprint: '"jiraBoard"'
properties:
type: .type
isPrivate: .isPrivate
projectKey: .location.projectKey // null
projectTypeKey: .location.projectTypeKey // null
adminUsers: '[.admins.users[]? | select(.accountId != null) | .accountId] | if length > 0 then . else null end'
adminGroups: '[.admins.groups[]? | select(.name != null) | .name] | if length > 0 then . else null end'
relations:
project: '.__projectKeys // null'
{
"id": 1,
"self": "https://api.atlassian.com/ex/jira/33f08530-afd8-42fd-82cc-1dd5ebfeece8/rest/agile/1.0/board/1",
"name": "PORT board",
"type": "scrum",
"location": {
"projectId": 10000,
"displayName": "Port (PORT)",
"projectName": "Port",
"projectKey": "PORT",
"projectTypeKey": "software",
"avatarURI": "https://api.atlassian.com/ex/jira/33f08530-afd8-42fd-82cc-1dd5ebfeece8/rest/api/2/universal_avatar/view/type/project/avatar/10560?size=small",
"name": "Port (PORT)"
},
"isPrivate": false,
"__projectKeys": ["PORT"]
}
{
"identifier": "1",
"title": "PORT board",
"icon": "Jira",
"blueprint": "jiraBoard",
"team": [],
"properties": {
"type": "scrum",
"isPrivate": false,
"projectKey": "PORT",
"projectTypeKey": "software",
"adminUsers": null,
"adminGroups": null
},
"relations": {
"project": ["PORT"]
},
"createdAt": "2026-04-20T11:22:05.433Z",
"createdBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW",
"updatedAt": "2024-11-06T11:22:05.433Z",
"updatedBy": "hBx3VFZjqgLPEoQLp7POx5XaoB0cgsxW"
}
- kind: sprint
selector:
query: "true"
sprintState:
- active
port:
entity:
mappings:
identifier: .id | tostring
title: .name
blueprint: '"jiraSprint"'
properties:
state: .state
startDate: .startDate // null
endDate: .endDate // null
completeDate: .completeDate // null
goal: .goal // null
relations:
board: .originBoardId | tostring
{
"id": 353,
"self": "https://api.atlassian.com/ex/jira/33f08530-afd8-42fd-82cc-1dd5ebfeece8/rest/agile/1.0/sprint/353",
"state": "closed",
"name": "June 2025",
"startDate": "2025-06-01T08:33:48.592Z",
"endDate": "2025-06-29T21:00:00.000Z",
"completeDate": "2025-07-01T14:22:26.265Z",
"createdDate": "2025-05-28T08:28:50.585Z",
"originBoardId": 1,
"goal": "To boldly sprint where no sprint has ran before"
}
{
"identifier": "353",
"title": "June 2025",
"blueprint": "jiraSprint",
"properties": {
"state": "closed",
"startDate": "2025-06-01T08:33:48.592Z",
"endDate": "2025-06-29T21:00:00.000Z",
"completeDate": "2025-07-01T14:22:26.265Z",
"goal": "To boldly sprint where no sprint has ran before"
},
"relations": {
"board": "1"
}
}
- kind: epic
selector:
query: "true"
status: ["incomplete"]
port:
entity:
mappings:
identifier: .id | tostring
title: .name // .key
blueprint: '"jiraEpic"'
properties:
name: .name // .key
summary: .summary
done: .done
relations:
board: .__boardId | tostring
{
"id": 54339,
"key": "PORT-10833",
"self": "https://api.atlassian.com/ex/jira/33f08530-afd8-42fd-82cc-1dd5ebfeece8/rest/agile/1.0/epic/54339",
"name": "Frontend Infra",
"summary": "Frontend Infra",
"color": {
"key": "color_6"
},
"issueColor": {
"key": "green"
},
"done": false
}
{
"identifier": "54339",
"title": "Frontend Infra",
"blueprint": "jiraEpic",
"properties": {
"name": "Frontend Infra",
"summary": "Frontend Infra",
"done": false
},
"relations": {
"board": "1"
}
}
resources:
- kind: component
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id | tostring
title: .name
blueprint: '"jiraComponent"'
properties:
description: .description
assigneeType: .assigneeType
issueCount: .issueCount
ari: .componentBean.ari // null
relations:
project: .__project.key
lead: .lead.accountId // null
{
"isLast": false,
"maxResults": 2,
"nextPage": "https://your-domain.atlassian.net/rest/api/2/project/HSP/component?startAt=2&maxResults=2",
"self": "https://your-domain.atlassian.net/rest/api/2/project/HSP/component?startAt=0&maxResults=2",
"startAt": 0,
"total": 7,
"values": [
{
"id": "10000",
"name": "Component 1",
"description": "This is a Jira component",
"assigneeType": "PROJECT_LEAD",
"isAssigneeTypeValid": false,
"issueCount": 1,
"project": "HSP",
"projectId": 10000,
"realAssigneeType": "PROJECT_LEAD",
"self": "https://your-domain.atlassian.net/rest/api/2/component/10000",
"lead": {
"accountId": "5b10a2844c20165700ede21g",
"accountType": "atlassian",
"active": false,
"displayName": "Mia Krystof",
"self": "https://your-domain.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g"
},
"assignee": {
"accountId": "5b10a2844c20165700ede21g",
"accountType": "atlassian",
"active": false,
"displayName": "Mia Krystof",
"self": "https://your-domain.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g"
},
"realAssignee": {
"accountId": "5b10a2844c20165700ede21g",
"accountType": "atlassian",
"active": false,
"displayName": "Mia Krystof",
"self": "https://your-domain.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g"
},
"componentBean": {
"ari": "ari:cloud:compass:fdb3fdec-4e70-be56-11ee-0242ac120002:component/fdb3fdec-4e70-11ee-be56-0242ac120002/fdb3fdec-11ee-4e70-be56-0242ac120002",
"id": "10000",
"name": "Component 1",
"description": "This is a Jira component",
"project": "HSP",
"projectId": 10000,
"assigneeType": "PROJECT_LEAD",
"isAssigneeTypeValid": false,
"realAssigneeType": "PROJECT_LEAD",
"self": "https://your-domain.atlassian.net/rest/api/2/component/10000"
}
}
]
}
{
"identifier": "10000",
"title": "Component 1",
"blueprint": "jiraComponent",
"properties": {
"description": "This is a Jira component",
"assigneeType": "PROJECT_LEAD",
"issueCount": 1,
"ari": "ari:cloud:compass:fdb3fdec-4e70-be56-11ee-0242ac120002:component/fdb3fdec-4e70-11ee-be56-0242ac120002/fdb3fdec-11ee-4e70-be56-0242ac120002"
},
"relations": {
"project": "HSP",
"lead": "5b10a2844c20165700ede21g"
}
}
Monitoring and sync status
To learn more about how to monitor and check the sync status of your integration, see the relevant documentation.
Limitations
Getting user emails
By default, Jira does not include user emails in API responses. To enable this:
- Go to the Jira admin panel and verify your domain under Settings > Domains.
- After verification, claim your user accounts under the same Domains section.
Once complete, Jira API responses will include the emailAddress field. See Jira's documentation for full details.
Examples
To view and test the integration's mapping against examples of the third-party API responses, use the jq playground in your data sources page. Find the integration in the list of data sources and click on it to open the playground.
Additional examples of blueprints and the relevant integration configurations can be found on the jira examples page
Relevant Guides
For relevant guides and examples, see the guides section.