Reference · Tools

Jira Software

Manage Jira issues, comments, attachments, and users via the Jira REST API.

Action (binary) Productivity v1 Binary data

The Jira Software node manages issues, comments, attachments and users through the Jira REST API, handling binary attachments in both directions. A typical build is opening an issue from an inbound bug report, attaching the customer's screenshot, and commenting as the investigation progresses.

Node type
Action (binary)
Parameters
66
Outputs
Output, Error
Credentials
Jira API

Jira Software

Manage Jira issues, comments, attachments, and users

Overview

The Jira Software tool provides full CRUD operations against the Jira REST API v2/v3. Supports four resources: (1) Issue — create, update, get, getAll (JQL search), delete, changelog, notify, transitions/status. (2) Issue Attachment — add (upload binary), get (download binary), getAll, remove. (3) Issue Comment — add, get, getAll, remove, update (supports ADF and wiki markup). (4) User — create, get, delete. Works with both Jira Cloud (email + API token) and Jira Server/Data Center (username + password, or PAT). Attachment operations handle binary data: upload reads from the item’s binary property, download writes fetched content to the binary store.

Category: Productivity
Tool Name: jira
Version: 1

Appearance: Icon: si-jira | Color: #0052CC

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Jira API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Issueissue
Issue AttachmentissueAttachment
Issue CommentissueComment
Useruser

Operations

Issue (issue)

OperationValueDescription
ChangelogchangelogGet issue changelog.
CreatecreateCreate a new issue.
DeletedeleteDelete an issue.
GetgetGet an issue.
Get ManygetAllSearch/get many issues via JQL.
NotifynotifyCreate an email notification for an issue.
StatustransitionsGet available transitions for an issue.
UpdateupdateUpdate an issue.

Issue Attachment (issueAttachment)

OperationValueDescription
AddaddAdd attachment to an issue.
GetgetGet an attachment.
Get ManygetAllGet many attachments from an issue.
RemoveremoveRemove an attachment.

Issue Comment (issueComment)

OperationValueDescription
AddaddAdd comment to an issue.
GetgetGet a comment.
Get ManygetAllGet many comments.
RemoveremoveRemove a comment.
UpdateupdateUpdate a comment.

User (user)

OperationValueDescription
CreatecreateCreate a new user.
DeletedeleteDelete a user.
GetgetRetrieve a user.

Parameters

Issue: Changelog

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue whose changelog to read (e.g. PROJ-123). Supports expressions.
Return All (returnAll)booleanNofalseWhether to return all results or only up to the limit.
Limit (limit)numberNo50Max number of results to return. Accepts 1–100. (shown when Return All is false)

Issue: Create

ParameterTypeRequiredDefaultDescription
ProjectstringYesProject ID. Obtain from Jira project settings or GET /rest/api/2/project. Supports expressions.
Issue TypestringYesIssue type ID. Obtain from GET /rest/api/2/project/{projectId} (issueTypes array). Supports expressions.
SummarystringYesIssue title/summary. Supports expressions.
Additional Fields (additionalFields)collectionNo{}Optional fields to set on the new issue.
— AssigneestringNoUser identifier. Cloud: accountId. Server: username.
— Component IDsstringNoComma-separated component IDs.
— Custom Fields (JSON)jsonNo{}JSON object of custom field key-value pairs (e.g. {“customfield_10001”: “value”}).
— DescriptionstringNoIssue description text.
— LabelsstringNoComma-separated label strings.
— Parent Issue KeystringNoParent issue key (required when issue type is sub-task). Will be upper-cased.
— PrioritystringNoPriority ID. Obtain from GET /rest/api/2/priority.
— ReporterstringNoReporter user identifier. Cloud: accountId. Server: username.
— Update HistorybooleanNofalseWhether to update the user’s issue view history.

Issue: Delete

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue to delete. Supports expressions.
Delete SubtasksbooleanNofalseWhether to also delete subtasks of this issue.

Issue: Get

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue (e.g. PROJ-123). Supports expressions.
Simplify OutputbooleanNofalseWhether to simplify the output by flattening field IDs to display names.
Additional Fields (additionalFields)collectionNo{}Controls how much of the issue is returned.
— ExpandstringNoComma-separated expand options: renderedFields, names, schema, transitions, editmeta, changelog, versionedRepresentations.
— FieldsstringNoComma-separated field list to return.
— Fields by KeybooleanNofalseUse field keys instead of IDs.
— PropertiesstringNoComma-separated issue property keys.
— Update HistorybooleanNofalseWhether to update the user’s recent issue view history.

Issue: Get Many

ParameterTypeRequiredDefaultDescription
Return All (returnAll)booleanNofalseWhether to return all results or only up to the limit.
Limit (limit)numberNo50Max number of results to return. Accepts 1–100. (shown when Return All is false)
Options (options)collectionNo{}Search options.
— ExpandstringNoComma-separated expand options.
— FieldsstringNo*navigableComma-separated list of fields to return. Default: *navigable.
— JQLstringNoJQL query to filter issues. Default searches all issues.

Issue: Notify

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue the notification is about. Supports expressions.
JSON Parameters (jsonParameters)booleanNofalseWhether to provide recipients as raw JSON.
Additional Fields (additionalFields)collectionNo{}The content of the email that is sent.
— SubjectstringNoEmail subject.
— Text BodystringNoPlain text email body.
— HTML BodystringNoHTML email body.
Notification Recipients (JSON)jsonNo{}JSON object for “to” field: { reporter: bool, assignee: bool, watchers: bool, voters: bool, users: [{accountId: ”…”}], groups: [{name: ”…”}] } (shown when JSON Parameters is true)
Notification Restrictions (JSON)jsonNo{}JSON object for “restrict” field: { groups: [{name: ”…”}] } (shown when JSON Parameters is true)
Notification RecipientscollectionNo{}Who receives the notification. (shown when JSON Parameters is false)
— ReporterbooleanNofalseNotify the issue reporter.
— AssigneebooleanNofalseNotify the current assignee.
— WatchersbooleanNofalseNotify everyone watching the issue.
— VotersbooleanNofalseNotify everyone who voted on the issue.
— Users (comma-separated accountIds)stringNoComma-separated list of user accountIds.
— Groups (comma-separated names)stringNoComma-separated list of group names.
Notification RestrictionscollectionNo{}Restricts delivery to the groups you name. (shown when JSON Parameters is false)
— Groups (comma-separated names)stringNoComma-separated list of group names to restrict notification to.

Issue: Status

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue whose transitions to list. Supports expressions.
Additional Fields (additionalFields)collectionNo{}Narrows or widens the transition list.
— Transition IDstringNoFilter to a specific transition ID.
— ExpandstringNoUse “transitions.fields” to get screen fields.
— Skip Remote Only ConditionbooleanNofalseInclude transitions normally hidden.

Issue: Update

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue to update (e.g. PROJ-123). Supports expressions.
Update FieldscollectionNo{}The fields to change. Anything you leave out keeps its current value.
— AssigneestringNoUser identifier. Cloud: accountId. Server: username.
— Custom Fields (JSON)jsonNo{}JSON object of custom field key-value pairs.
— DescriptionstringNoIssue description text.
— Issue TypestringNoIssue type ID to change to.
— LabelsstringNoComma-separated label strings.
— Parent Issue KeystringNoParent issue key (required for sub-task types).
— PrioritystringNoPriority ID.
— ReporterstringNoReporter user identifier.
— Status (Transition ID)stringNoTransition ID. If set, will first execute the transition, then update other fields.
— SummarystringNoIssue title/summary.

Issue Attachment: Add

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue to attach the file to. Supports expressions.
Binary Property (binaryPropertyName)stringYesdataName of the binary property on the input item containing the file to upload. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use.

Issue Attachment: Get

ParameterTypeRequiredDefaultDescription
Attachment ID (attachmentId)stringYesThe ID of the attachment. Supports expressions.
Download (download)booleanNofalseWhether to download the attachment binary content.
Binary Property (binaryProperty)stringNodataName of the output binary property to store the downloaded file. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when Download is true)

Issue Attachment: Get Many

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue whose attachments to list. Supports expressions.
Return All (returnAll)booleanNofalseWhether to return all results or only up to the limit.
Limit (limit)numberNo50Max number of results to return. Accepts 1–100. (shown when Return All is false)
Download (download)booleanNofalseWhether to download the attachment binary content.
Binary Property (binaryProperty)stringNodataName of the output binary property. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when Download is true)

Issue Attachment: Remove

ParameterTypeRequiredDefaultDescription
Attachment ID (attachmentId)stringYesThe ID of the attachment to remove. Supports expressions.

Issue Comment: Add

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue to comment on. Supports expressions.
JSON Parameters (jsonParameters)booleanNofalseWhether to provide the comment body as raw Atlassian Document Format JSON.
CommentstringNoThe comment text. On Cloud, this is sent as ADF (unless wiki markup is enabled). On Server, this is plain text. Supports expressions. (shown when JSON Parameters is false)
Document Format (JSON)jsonNoRaw Atlassian Document Format JSON body for the comment. Provide it as a JSON string. (shown when JSON Parameters is true)
Options (options)collectionNo{}Extra comment options.
— ExpandstringNoUse “renderedBody” to get rendered HTML.
— Wiki MarkupbooleanNofalseCloud only: send comment as wiki markup using API v2 instead of ADF v3.

Issue Comment: Get

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue the comment belongs to. Supports expressions.
Comment ID (commentId)stringYesThe ID of the comment to retrieve. Supports expressions.
Options (options)collectionNo{}Extra comment options.
— ExpandstringNoUse “renderedBody” to get rendered HTML.

Issue Comment: Get Many

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue whose comments to list. Supports expressions.
Return All (returnAll)booleanNofalseWhether to return all results or only up to the limit.
Limit (limit)numberNo50Max number of results to return. Accepts 1–100. (shown when Return All is false)
Options (options)collectionNo{}Extra comment options.
— ExpandstringNoUse “renderedBody” to get rendered HTML.
— Order ByoptionsNo+createdSort order for comments.
Options: +created (created ascending), -created (created descending)

Issue Comment: Remove

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue the comment belongs to. Supports expressions.
Comment ID (commentId)stringYesThe ID of the comment to remove. Supports expressions.

Issue Comment: Update

ParameterTypeRequiredDefaultDescription
Issue Key (issueKey)stringYesThe key of the issue the comment belongs to. Supports expressions.
Comment ID (commentId)stringYesThe ID of the comment to update. Supports expressions.
JSON Parameters (jsonParameters)booleanNofalseWhether to provide the comment body as raw Atlassian Document Format JSON.
CommentstringNoThe comment text. On Cloud, this is sent as ADF (unless wiki markup is enabled). On Server, this is plain text. Supports expressions. (shown when JSON Parameters is false)
Document Format (JSON)jsonNoRaw Atlassian Document Format JSON body for the comment. Provide it as a JSON string. (shown when JSON Parameters is true)
Options (options)collectionNo{}Extra comment options.
— ExpandstringNoUse “renderedBody” to get rendered HTML.
— Wiki MarkupbooleanNofalseCloud only: send comment as wiki markup using API v2 instead of ADF v3.

User: Create

ParameterTypeRequiredDefaultDescription
UsernamestringYesThe user name to create the account under. Supports expressions.
Email AddressstringYesEmail address of the new user. Supports expressions.
Display NamestringYesName shown for the new user in Jira. Supports expressions.
Additional Fields (additionalFields)collectionNo{}Optional settings applied when the account is created.
— PasswordstringNoPassword for the user. If not set, a random password is generated.
— NotificationbooleanNofalseWhether to send the user an email confirmation.

User: Delete

ParameterTypeRequiredDefaultDescription
Account ID (accountId)stringYesThe account ID of the user to delete. Supports expressions.

User: Get

ParameterTypeRequiredDefaultDescription
Account ID (accountId)stringYesThe account ID of the user to retrieve. Supports expressions.
Additional Fields (additionalFields)collectionNo{}Extra detail to include with the user.
— ExpandmultiOptionsNo[]Extra sections to return alongside the user record.
Options: groups (include all groups to which the user belongs), applicationRoles (include details of all applications the user can access)

All Operations

ParameterTypeRequiredDefaultDescription
Jira VersionoptionsNocloudSelect Jira deployment type. Cloud uses email + API token. Server uses email + password. Server PAT uses a personal access token.
Options: cloud, server (self hosted), serverPat (self hosted, authenticates with a personal access token)
Max ConcurrencynumberNo10Maximum number of items to process concurrently. Accepts 1–100.

Output Data

Each output item’s JSON is the Jira response for that call — the incoming item JSON is replaced, not merged, so read anything you still need from the item upstream of this node. Operations that only confirm an action emit { "success": true } instead of a record. Binary data on the input item is forwarded on every Issue Attachment, Issue Comment and User operation, and on the Issue operations that fan out; the single-item Issue operations (Create, Update, Get, Delete, Notify) emit JSON only.

Five operations fan out, producing one output item per record instead of one per input item:

  • Issue: Get Many — one item per matching issue. With Return All on, every page of the JQL search is fetched; otherwise the search is capped at Limit. When the search matches nothing, that input item produces no output items at all.
  • Issue: Changelog — one item per changelog entry, with the same Return All / Limit behavior, and likewise no output items when the issue has no changelog history.
  • Issue: Status — one item per available transition. When the issue has no available transitions, a single item { "transitions": [] } is emitted instead.
  • Issue Attachment: Get Many — one item per attachment on the issue, capped at Limit unless Return All is on. With Download on, each item also carries that attachment’s file on the binary property you named. When the issue has no attachments, a single item { "attachments": [] } is emitted instead.
  • Issue Comment: Get Many — one item per comment, with the same Return All / Limit behavior. No comments means no output items for that input item.
Resource / OperationWhat lands on the item
issue / createThe created issue as Jira returns it, or success: true if the response carries no body.
issue / updatesuccess: true. When Status (Transition ID) is set the transition runs first, then the field changes are applied.
issue / getThe issue as Jira returns it. With Simplify Output on it is reshaped into a flat object of id, key, self and one property per field, keyed by that field’s display name; a display name that collides with one already present gets a _1, _2 … suffix, and requesting renderedFields through Expand puts the rendered values on those properties.
issue / getAllOne item per issue — see the fan-out notes above.
issue / deletesuccess: true.
issue / changelogOne item per changelog entry — see the fan-out notes above.
issue / notifysuccess: true.
issue / transitionsOne item per transition, or a single transitions: [] item.
issueAttachment / addThe attachment record Jira created for the uploaded file. The input item’s binary passes through unchanged.
issueAttachment / getThe attachment’s metadata. With Download on, the file is added to the binary property you named, alongside any binary already on the item.
issueAttachment / getAllOne item per attachment, or a single attachments: [] item.
issueAttachment / removesuccess: true.
issueComment / addThe created comment as Jira returns it.
issueComment / getThe requested comment.
issueComment / getAllOne item per comment — see the fan-out notes above.
issueComment / removesuccess: true.
issueComment / updateThe updated comment as Jira returns it.
user / createThe created user as Jira returns it.
user / deletesuccess: true.
user / getThe requested user.

Reference the result downstream by expression, e.g. {{ $json.key }}.

Usage Examples

  • Create a Jira issue in project ABC
  • Upload a file attachment to issue KEY-123
  • Download all attachments from a Jira issue
  • Search issues with JQL query
  • Add a comment to a Jira issue
  • Transition an issue status

Example Configuration

Create an issue with an assignee, priority and labels:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "create",
    "project": "10000",
    "issueType": "1",
    "summary": "New bug report",
    "additionalFields": {
      "description": "Detailed description of the issue",
      "assignee": "557058:a12345-1234-1234-1234-123456789012",
      "priority": "2",
      "labels": "bug,urgent"
    }
  }
}

Update an issue and move it through a transition in the same call:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "update",
    "issueKey": "PROJ-123",
    "updateFields": {
      "summary": "Updated issue title",
      "description": "Updated description",
      "statusId": "3",
      "assignee": "557058:a12345-1234-1234-1234-123456789012"
    }
  }
}

Read one issue with field names flattened for downstream use:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "get",
    "issueKey": "PROJ-123",
    "simplifyOutput": true,
    "additionalFields": {
      "expand": "changelog,names",
      "fields": "*navigable",
      "updateHistory": true
    }
  }
}

Search issues with JQL and cap the result set:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "jql": "project = PROJ AND status = Open",
      "fields": "summary,status,assignee,created",
      "expand": "names"
    }
  }
}

Add a plain-text comment:

{
  "type": "jira",
  "parameters": {
    "resource": "issueComment",
    "operation": "add",
    "issueKey": "PROJ-123",
    "jsonParameters": false,
    "comment": "This is a new comment on the issue",
    "options": {
      "expand": "renderedBody",
      "wikiMarkup": false
    }
  }
}

Add a formatted comment by supplying Atlassian Document Format directly:

{
  "type": "jira",
  "parameters": {
    "resource": "issueComment",
    "operation": "add",
    "issueKey": "PROJ-123",
    "jsonParameters": true,
    "commentJson": "{\"version\":1,\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"This is a comment with formatted text\"}]}]}"
  }
}

Upload the file on the item’s data binary property to an issue:

{
  "type": "jira",
  "parameters": {
    "resource": "issueAttachment",
    "operation": "add",
    "issueKey": "PROJ-123",
    "binaryPropertyName": "data"
  }
}

Fetch an attachment and download its contents into a named binary property:

{
  "type": "jira",
  "parameters": {
    "resource": "issueAttachment",
    "operation": "get",
    "attachmentId": "12345",
    "download": true,
    "binaryProperty": "attachmentData"
  }
}

Email an issue notification to the reporter, the assignee and a named group:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "notify",
    "issueKey": "PROJ-123",
    "jsonParameters": false,
    "additionalFields": {
      "subject": "Issue Update Notification",
      "textBody": "This issue has been updated",
      "htmlBody": "<p>This <strong>issue</strong> has been updated</p>"
    },
    "notificationRecipientsUi": {
      "reporter": true,
      "assignee": true,
      "watchers": false,
      "voters": false,
      "users": "557058:a12345-1234-1234-1234-123456789012",
      "groups": "jira-administrators"
    }
  }
}

Create a user with a temporary password:

{
  "type": "jira",
  "parameters": {
    "resource": "user",
    "operation": "create",
    "username": "john.doe",
    "emailAddress": "john.doe@company.com",
    "displayName": "John Doe",
    "additionalFields": {
      "password": "temporaryPassword123",
      "notification": true
    }
  }
}

The three steps of a create-if-missing pattern. First, search for existing issues:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "getAll",
    "options": {
      "jql": "project = MYPROJ AND status != Done"
    }
  }
}

Then create the issue when the search found nothing:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "create",
    "project": "10000",
    "issueType": "1",
    "summary": "Automated issue creation"
  }
}

Then move the issue to its next status:

{
  "type": "jira",
  "parameters": {
    "resource": "issue",
    "operation": "update",
    "issueKey": "MYPROJ-123",
    "updateFields": {
      "statusId": "3"
    }
  }
}

Report the outcome back on the issue, taking the key from the incoming item:

{
  "type": "jira",
  "parameters": {
    "resource": "issueComment",
    "operation": "add",
    "issueKey": "{{ $json.key }}",
    "comment": "Processing completed successfully"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Manage Jira issues, comments, attachments, and users — supports binary attachment upload and download.

Frequently asked questions

Can it upload and download attachments?

Yes, both. Binary data from an upstream node can be attached to an issue, and existing attachments can be pulled down as binary for storage or processing.

What can it manage besides issues?

Comments, attachments and users, so a workflow can create the issue, add context as comments, and look up the people involved without a second integration.

How do I react to changes in Jira?

Use the Jira Trigger for inbound events. Note the two use different credentials — this node takes a Jira API credential, the trigger a Jira Software Cloud credential.

Does it work with Jira Cloud and self-hosted?

It talks to the Jira REST API, so it works wherever that API is reachable with the credential you supply.

Build with the Jira Software node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Jira API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.