Portal Community

When to Use

JQL Quick Reference

Example JQLWhat It Returns
project = PROJ AND status = "To Do"All backlog items in PROJ
assignee = currentUser()Issues assigned to the API token user
sprint in openSprints() AND project = DEVAll issues in the active sprint
priority = Highest AND status != DoneOpen critical issues across all projects
created >= -24h AND issuetype = BugBugs created in the last 24 hours
fixVersion = "v3.1.0" AND status = DoneResolved issues for a specific release
labels = "production" AND status in ("In Progress", "Open")Active production issues with label

Configuration

Connection

FieldRequiredDescription
HostRequiredJira instance base URL. Example: https://acmecorp.atlassian.net
EmailRequiredAtlassian account email. Example: automation@acmecorp.com
ApiTokenRequiredAPI token from Atlassian security settings. Store in Credentials Manager.

Operation Fields

FieldRequiredDescription
JqlOptionalJQL query string. If omitted, returns all issues accessible to the authenticated user (use with Limit to avoid large unfiltered result sets). Example: project = PROJ AND status = Open ORDER BY created DESC
LimitOptionalMaximum number of issues to return per page. Default: 50. Maximum: 100 per Jira API limits.
StartAtOptionalZero-based offset for pagination. To retrieve the second page with Limit=50: set StartAt = 50. Use total from the response to calculate how many pages remain.
JQL injection risk: Never interpolate unvalidated user input directly into a JQL string. If a workflow parameter comes from user input, sanitize it by escaping quotes and rejecting special JQL characters before interpolation. Use parameterized lookups where possible.

Sample Configuration

Retrieve all open P1/P2 bugs created in the last 24 hours, page 1:

{
  "resource": "issue",
  "operation": "getAll",
  "Host": "https://acmecorp.atlassian.net",
  "Email": "automation@acmecorp.com",
  "ApiToken": "{{ $credentials.jiraApiToken }}",
  "Jql": "project = OPS AND issuetype = Bug AND priority in (High, Highest) AND created >= -24h AND status != Done ORDER BY priority ASC, created ASC",
  "Limit": 50,
  "StartAt": 0
}

Pagination Pattern

To retrieve all results beyond the first page, use a Loop node with incrementing StartAt:

// Initial call: StartAt = 0, Limit = 50
// After response: check if startAt + maxResults < total
// If more pages: increment StartAt by Limit and repeat
// Loop condition: {{ $output.getAllIssues.startAt + $output.getAllIssues.maxResults < $output.getAllIssues.total }}

Validation Errors

Error CodeCause
VAL_INVALID_JQLThe JQL string contains a syntax error. Jira returns the parse error details in the message field.
VAL_INVALID_LIMITLimit is less than 1 or greater than 100.
VAL_INVALID_START_ATStartAt is negative.
AUTH_FAILEDInvalid credentials or expired API token.

Output Fields

FieldTypeDescription
statusstring"success" or "error"
issuesarrayArray of issue objects. Each contains id, key, summary, status, priority, assignee, issueType, created, updated.
totalintegerTotal number of issues matching the JQL query (not just the current page).
startAtintegerThe offset used for this page.
maxResultsintegerThe page size returned (may be less than Limit on the last page).
resourcestringAlways "issue"
operationstringAlways "getAll"

Sample Output

{
  "status": "success",
  "issues": [
    {
      "id": "10482",
      "key": "OPS-347",
      "summary": "[P1 ALERT] Payment gateway timeout — checkout-service",
      "status": "In Progress",
      "priority": "Highest",
      "assignee": "Sarah Chen",
      "issueType": "Bug",
      "created": "2026-05-26T08:14:23.000Z",
      "updated": "2026-05-26T09:02:11.000Z"
    },
    {
      "id": "10479",
      "key": "OPS-344",
      "summary": "Database connection pool exhausted — user-service",
      "status": "Open",
      "priority": "High",
      "assignee": "Marcus Webb",
      "issueType": "Bug",
      "created": "2026-05-26T06:45:00.000Z",
      "updated": "2026-05-26T07:12:55.000Z"
    }
  ],
  "total": 12,
  "startAt": 0,
  "maxResults": 50,
  "resource": "issue",
  "operation": "getAll"
}

Expression Reference

ExpressionTypeExample ValueUse
{{ $output.getAllIssues.issues }}arrayArray of issue objectsFeed into Loop node for per-issue processing
{{ $output.getAllIssues.total }}integer12Report total count or drive pagination
{{ $output.getAllIssues.issues[0].key }}string"OPS-347"Process the first matching issue
{{ $output.getAllIssues.issues.length }}integer2Check how many issues returned on this page
{{ $output.getAllIssues.startAt + $output.getAllIssues.maxResults }}integer50Next page StartAt value

Node Policies & GuardRails

Workflow Examples

Example 1 — Daily SLA Breach Report

Scheduled trigger runs every morning → queries open P1/P2 bugs older than 48h → sends Slack alert with breach list.

// Step 1: ScheduledTrigger (daily 08:00)
// Step 2: issue/getAll
{
  "resource": "issue",
  "operation": "getAll",
  "Jql": "project = OPS AND issuetype = Bug AND priority in (High, Highest) AND created <= -48h AND status != Done ORDER BY created ASC",
  "Limit": 100,
  "StartAt": 0
}
// Step 3: IfCondition — {{ $output.getAllIssues.total }} > 0
// Step 4 (if breaches found): Slack/postMessage
{
  "channel": "#engineering-leads",
  "text": ":warning: *SLA Breach Alert* — {{ $output.getAllIssues.total }} open high-priority bugs older than 48h\n{{ $output.getAllIssues.issues | map(i => i.key + ': ' + i.summary) | join('\n') }}"
}

Example 2 — Dedup Check Before Issue Creation

Before creating an issue from a webhook, search for a recent duplicate to prevent alert-flap duplicates.

// Step 1: WebhookTrigger
// Step 2: issue/getAll — dedup search
{
  "resource": "issue",
  "operation": "getAll",
  "Jql": "project = OPS AND summary ~ \"{{ $json.alert.title }}\" AND created >= -1h",
  "Limit": 1,
  "StartAt": 0
}
// Step 3: IfCondition
// Condition: {{ $output.getAllIssues.total }} === 0
// Step 4 (only if no duplicate): issue/create

Example 3 — Compile Release Notes from Fixed Issues

Pre-deployment trigger → query resolved issues for release version → build release notes document.

{
  "resource": "issue",
  "operation": "getAll",
  "Jql": "project = PROD AND fixVersion = \"{{ $json.releaseVersion }}\" AND status = Done ORDER BY issuetype ASC, priority ASC",
  "Limit": 100,
  "StartAt": 0
}