When to Use
- Incident post-mortem report generation: After an incident is closed, a workflow retrieves all comments on the incident issue to compile a timeline of responses, identifies who posted updates and when, and assembles this into a post-mortem document pushed to Notion or Confluence.
- Latest comment extraction: A reporting workflow needs to display the most recent activity on each open issue. It calls
comment/getAll and returns the last item in the comments array to show the latest update in a dashboard.
- Automation comment dedup check: Before posting a deployment status comment, the workflow calls
comment/getAll and checks if any comment from the automation user in the last hour contains the same deployment ID — preventing duplicate comments from retried webhooks.
- Customer support transcript: When a Jira issue is used as a support case, all comments represent the support thread. A workflow retrieves all comments, formats them as a transcript, and emails it to the customer when the case is closed.
- Comment-based approval tracking: In a lightweight approval workflow where managers post approval comments (e.g. "APPROVED" or "REJECTED"), the workflow reads all comments, filters by the manager's username, and extracts the approval decision for automated processing.
Configuration
Connection
| Field | Required | Description |
Host | Required | Jira instance base URL. Example: https://acmecorp.atlassian.net |
Email | Required | Atlassian account email. Example: automation@acmecorp.com |
ApiToken | Required | API token from Atlassian security settings. Store in Credentials Manager. |
Operation Fields
| Field | Required | Description |
IssueKey | Required | The key of the issue to retrieve comments from. Example: PROJ-123. All comments are returned regardless of author. |
Sample Configuration
{
"resource": "comment",
"operation": "getAll",
"Host": "https://acmecorp.atlassian.net",
"Email": "automation@acmecorp.com",
"ApiToken": "{{ $credentials.jiraApiToken }}",
"IssueKey": "{{ $json.issueKey }}"
}
Validation Errors
| Error Code | Cause |
VAL_MISSING_ISSUE_KEY | IssueKey is empty or null. |
ISSUE_NOT_FOUND | No issue exists with the given key, or the user lacks access. |
AUTH_FAILED | Invalid credentials or expired API token. |
Output Fields
| Field | Type | Description |
status | string | "success" or "error" |
comments | array | Array of comment objects, each with id, body, author (display name), created, updated. |
total | integer | Total number of comments on the issue. |
resource | string | Always "comment" |
operation | string | Always "getAll" |
Sample Output
{
"status": "success",
"comments": [
{
"id": "10280",
"body": "Investigating the payment gateway timeout. Checking network latency between checkout-service and payment-gw.",
"author": "Sarah Chen",
"created": "2026-05-26T08:20:00.000Z",
"updated": "2026-05-26T08:20:00.000Z"
},
{
"id": "10281",
"body": "DEPLOYMENT CONFIRMED — 2026-05-26 14:30 UTC\nEnvironment: production\nVersion: v2.4.1\nAll health checks passing.",
"author": "BizFirst Automation",
"created": "2026-05-26T14:30:05.000Z",
"updated": "2026-05-26T14:30:05.000Z"
}
],
"total": 2,
"resource": "comment",
"operation": "getAll"
}
Expression Reference
| Expression | Type | Example Value | Use |
{{ $output.getAllComments.comments }} | array | All comment objects | Iterate for transcript generation |
{{ $output.getAllComments.total }} | integer | 2 | Check if any comments exist before iterating |
{{ $output.getAllComments.comments.at(-1).body }} | string | Latest comment text | Show most recent update in dashboard |
{{ $output.getAllComments.comments.at(-1).author }} | string | "BizFirst Automation" | Identify who posted the latest update |
{{ $output.getAllComments.comments.filter(c => c.author === "manager@acmecorp.com") }} | array | Filtered comments | Find approval decision comments from specific author |
Node Policies & GuardRails
- Comments are returned in creation order: The array is ordered oldest first. Use
.at(-1) to access the most recent comment.
- No server-side filtering: All comments are returned. Filter by author, date, or content in a Function node after retrieval. This means the full payload is transferred even if you need only one comment.
- Large comment bodies: Issues with many long comments (incidents, support cases) may return a large payload. Consider processing with streaming or chunked approach in your Function node.
Workflow Example — Incident Post-Mortem Compilation
// Step 1: issue/getAll — find all incidents closed this week
// Step 2: Loop over each incident issue
// Step 3 per incident: comment/getAll
{
"resource": "comment",
"operation": "getAll",
"IssueKey": "{{ $loopItem.key }}"
}
// Step 4: Function node — format timeline
// const timeline = $output.getAllComments.comments.map(c =>
// `${c.created} [${c.author}]: ${c.body}`
// ).join('\n\n');
// Step 5: Notion/createPage — create post-mortem page with timeline