{
  "name": "Security Reporter → Jira",
  "nodes": [
    {
      "parameters": {
        "includes": "assessment,documents",
        "conditions": "model.c_jira_issue_key && model.assessment.c_jira_project_key && model.is_published"
      },
      "name": "Reporter Trigger (Finding Updated)",
      "type": "CUSTOM.reporterTrigger",
      "typeVersion": 1,
      "position": [
        0,
        192
      ],
      "id": "4155fd63-bb11-4be3-91ad-742d71bd1645",
      "credentials": {
        "reporterApi": {
          "id": "aAhqc5MPSQgKB6eV",
          "name": "Reporter account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 1
          },
          "conditions": [
            {
              "leftValue": "={{ $json.id }}",
              "rightValue": 200,
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "name": "Issue Exists?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        816,
        0
      ],
      "alwaysOutputData": false,
      "id": "09a89449-b181-402f-801b-c386440ad156",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "event": "finding:published",
        "includes": "assessment,documents",
        "conditions": "model.assessment.c_jira_project_key != ''"
      },
      "name": "Reporter Trigger (Finding Published)",
      "type": "CUSTOM.reporterTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ],
      "id": "a66cd8d3-7646-4b93-9c64-2b6bce051ff2",
      "credentials": {
        "reporterApi": {
          "id": "aAhqc5MPSQgKB6eV",
          "name": "Reporter account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.atlassian.com/ex/jira/{{ $vars.jira_cloud_id }}/rest/api/2/issue",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "fields.project.key",
              "value": "={{ $('Prepare Data').first().json.model.assessment.c_jira_project_key }}"
            },
            {
              "name": "fields.summary",
              "value": "={{ $('Prepare Data').first().json.model.title }}"
            },
            {
              "name": "fields.issuetype.name",
              "value": "Bug"
            },
            {
              "name": "fields.priority.name",
              "value": "={{ $('Prepare Data').first().json.jira.priorityName }}"
            },
            {
              "name": "fields.labels",
              "value": "={{ $('Prepare Data').first().json.jira.labels }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1008,
        176
      ],
      "name": "Create Jira Issue",
      "id": "32dfba64-dfa7-4ed2-a51f-8648d1694380",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      }
    },
    {
      "parameters": {
        "resource": "finding",
        "operation": "updateAFinding",
        "id": "={{ $('Prepare Data').item.json.model.id }}",
        "additionalFields": {},
        "customFields": {
          "customFieldValues": [
            {
              "fieldName": "c_jira_issue_key",
              "value": "={{ $json.key }}"
            },
            {
              "fieldName": "c_jira_issue_link",
              "value": "=https://{{ $vars.jira_site }}/browse/{{ $json.key }}"
            }
          ]
        }
      },
      "type": "CUSTOM.reporter",
      "typeVersion": 1,
      "position": [
        1184,
        176
      ],
      "name": "Set Issue Key",
      "id": "ac26859e-3464-42f9-9e1f-380cfbc9fc35",
      "credentials": {
        "reporterApi": {
          "id": "aAhqc5MPSQgKB6eV",
          "name": "Reporter account"
        }
      }
    },
    {
      "parameters": {
        "content": "**Set Issue Key** will trigger the **Reporter Trigger (Finding Updated)** node.\n"
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        256
      ],
      "typeVersion": 1,
      "name": "Sticky Note",
      "id": "14830382-6d50-4fe4-b51d-f343acbb1edf"
    },
    {
      "parameters": {
        "jsCode": "function convertMarkdownFencedCodeBlocksToJira(input) {\n    return input\n        // 1) With language + caption: ```{.lang caption=\"Title\"}\n        .replace(\n            /```{\\.([a-zA-Z0-9_-]+)\\s+caption=\"([^\"]+)\"\\}\\r?\\n([\\s\\S]*?)\\r?\\n```/g,\n            (m, lang, cap, code) =>\n                `\\n\\n{code:${lang}|title=${cap}}\\n${code.trimEnd()}\\n{code}\\n\\n`\n        )\n\n        // 2) Caption only (no language): ```{caption=\"Title\"}\n        .replace(\n            /```{\\s*caption=\"([^\"]+)\"\\s*\\}\\r?\\n([\\s\\S]*?)\\r?\\n```/g,\n            (m, cap, code) =>\n                `\\n\\n{code:title=${cap}}\\n${code.trimEnd()}\\n{code}\\n\\n`\n        )\n\n        // 3) With language only: ```{.lang}\n        .replace(\n            /```{\\.([a-zA-Z0-9_-]+)\\}\\r?\\n([\\s\\S]*?)\\r?\\n```/g,\n            (m, lang, code) =>\n                `\\n\\n{code:${lang}}\\n${code.trimEnd()}\\n{code}\\n\\n`\n        )\n\n        // 4) Plain triple backticks\n        .replace(\n            /```\\r?\\n([\\s\\S]*?)\\r?\\n```/g,\n            (m, code) =>\n                `\\n\\n{code}\\n${code.trimEnd()}\\n{code}\\n\\n`\n        );\n}\n\nfunction scoreToPriority(score) {\n    const n = Number(score ?? 0);\n    return n >= 9 ? \"Highest\" : n >= 7 ? \"High\" : n >= 4 ? \"Medium\" : n >= 1 ? \"Low\" : \"Lowest\";\n}\n\nfunction slugifyForJiraLabel(input, { maxLen = 255 } = {}) {\n    const slug = input\n        .toLowerCase()\n        .normalize(\"NFKD\")\n        .replace(/[\\u0300-\\u036f]/g, \"\")\n        .replace(/[^a-z0-9]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n\n    return slug.length > maxLen ? slug.slice(0, maxLen) : slug;\n}\n\nfunction parseDocumentIdFromUrl(url) {\n    const u = String(url ?? \"\");\n    const m = u.match(/\\/documents\\/([a-f0-9]{32})/i);\n    return m ? m[1] : \"\";\n}\n\nfunction documentToJiraMarkup(doc, { block = false } = {}) {\n    if (!doc?.name || !doc?.mime_type_extension) return \"\";\n\n    const filename = `${doc.name}.${doc.mime_type_extension}`;\n    const macro = doc.can_be_displayed_inline ? `!${filename}|width=500!` : `[^${filename}]`;\n\n    return block ? `\\n\\n ${macro} \\n\\n` : ` ${macro} `;\n}\n\nfunction replaceMarkdownImagesWithJira(text, docsById) {\n    const imageRe = /!\\[[^\\]]*]\\(([^)]+)\\)(\\{[^}]*\\})?/g;\n\n    return text.replace(imageRe, (match, url) => {\n        const id = parseDocumentIdFromUrl(url);\n        const doc = docsById.get(id);\n        return doc ? (documentToJiraMarkup(doc) || match) : match;\n    });\n}\n\nfunction replaceDocumentComponentTagsWithJira(text, docsById) {\n    // Matches: [component=\"document\" ... id=\"32hex\"...]\n    const componentRe = /\\[component=(?:\"document\"|'document')([^\\]]*?)\\]/g;\n    const idRe = /id=(?:\"|')([a-f0-9]{32})(?:\"|')/i;\n\n    return text.replace(componentRe, (match, attrs) => {\n        const idMatch = idRe.exec(attrs);\n        if (!idMatch) return match;\n\n        const doc = docsById.get(idMatch[1]);\n        if (!doc) return match;\n\n        // Jira decides inline vs block based on macro position, not metadata\n        return (\n            documentToJiraMarkup({ ...doc, can_be_displayed_inline: false }) ||\n            match\n        );\n    });\n}\n\nfunction replaceAllDocReferences(text, docsById) {\n    if (!docsById?.size) return text;\n    text = replaceDocumentComponentTagsWithJira(text, docsById);\n    text = replaceMarkdownImagesWithJira(text, docsById);\n    return text;\n}\n\nreturn items.map(item => {\n    const model = item.json.model ?? {};\n\n    const labels = [\"securityreporter\"];\n    const assessmentLabel = slugifyForJiraLabel(`sr-assessment-${model.assessment.title}`);\n    labels.push(assessmentLabel);\n\n    const docsById = new Map(model.documents.map(d => [d.id, d]));\n\n    // Jira Text Formatting: https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all\n    const toJiraWiki = (text) => replaceAllDocReferences(convertMarkdownFencedCodeBlocksToJira(text), docsById);\n\n    item.json.jira = {\n        projectKey: model.assessment.c_jira_project_key,\n        issueKey: model.c_jira_issue_key,\n        summary: model.title,\n        priorityName: scoreToPriority(model.severity_score),\n        labels,\n        assessmentLabel: assessmentLabel,\n        descriptionWiki: [\n            \"h1. Description\",\n            \"\",\n            toJiraWiki(model.description),\n            \"\",\n            \"h1. Risk\",\n            \"\",\n            toJiraWiki(model.risk),\n            \"\",\n            \"h1. Recommendation\",\n            \"\",\n            toJiraWiki(model.recommendation),\n            \"\",\n            \"h1. Proof\",\n            \"\",\n            toJiraWiki(model.proof),\n        ].join(\"\\n\"),\n    };\n\n    return item;\n});\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        224,
        96
      ],
      "name": "Prepare Data",
      "id": "e1ca270a-17c6-4837-821e-461b347606b2"
    },
    {
      "parameters": {
        "url": "=https://api.atlassian.com/ex/jira/{{ $vars.jira_cloud_id }}/rest/api/2/issue/{{ $json.model.c_jira_issue_key }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        640,
        16
      ],
      "name": "Fetch Existing Jira Issue",
      "alwaysOutputData": false,
      "id": "14ec8710-156f-42f2-ae9d-4a83f7458a68",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "=https://api.atlassian.com/ex/jira/{{ $vars.jira_cloud_id }}/rest/api/2/issue/{{ $json.jiraIssueKey }}?fields=attachment",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1552,
        64
      ],
      "name": "Fetch Jira Attachments",
      "alwaysOutputData": true,
      "id": "4c4afcda-85f9-4c53-92e6-ae8ef0568169",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.atlassian.com/ex/jira/{{ $vars.jira_cloud_id }}/rest/api/2/issue/{{ $('Build New Attachment Uploads').item.json.jiraIssueKey }}/attachments",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-Atlassian-Token",
              "value": "no-check"
            }
          ]
        },
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "parameterType": "formBinaryData",
              "name": "file",
              "inputDataFieldName": "data"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        3328,
        304
      ],
      "name": "Upload Jira Attachment",
      "retryOnFail": true,
      "waitBetweenTries": 2000,
      "id": "cbae3d1a-2dd5-4329-9c33-c46e67c72129",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      }
    },
    {
      "parameters": {
        "method": "DELETE",
        "url": "=https://api.atlassian.com/ex/jira/{{$vars.jira_cloud_id}}/rest/api/3/attachment/{{ $json.attachmentId }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-Atlassian-Token",
              "value": "no-check"
            }
          ]
        },
        "options": {}
      },
      "name": "Delete Jira Attachment",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        2416,
        288
      ],
      "settings": {
        "onError": "continue"
      },
      "id": "6deb06f3-f595-4106-9da1-a65033f5492b",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "// Only delete the attachments added by Reporter (app user) or \"security reporter\" display name\nconst attachments = $json.fields?.attachment ?? [];\n\nconst botAttachments = attachments.filter(a => {\n  const accountType = String(a?.author?.accountType ?? \"\").toLowerCase();\n  const displayName = String(a?.author?.displayName ?? \"\").toLowerCase();\n  return accountType === \"app\" || displayName.includes(\"security reporter\");\n});\n\nconst issueKey = $('Resolve Jira Issue Key').first().json.jiraIssueKey;\n\nif (!botAttachments.length) {\n  return [{ json: { jiraIssueKey: issueKey, noDelete: true } }];\n}\n\nreturn botAttachments.map(a => ({\n  json: {\n    attachmentId: a.id,\n    filename: a.filename,\n    jiraIssueKey: issueKey,\n  },\n}));"
      },
      "id": "4989fbdf-b473-4e88-baf6-53fed096f10a",
      "name": "Extract Reporter Attachments",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1744,
        64
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "5868382d-b179-4edb-b2b8-ac4fa26fb9f8",
              "leftValue": "={{ $json.model.c_jira_issue_key }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        416,
        96
      ],
      "id": "dcd48beb-67e1-4d5d-86f9-87895d78d711",
      "name": "Has Jira Issue Key"
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "jiraIssueKey",
              "value": "={{ $json.c_jira_issue_key  || $('Prepare Data').item.json.model.c_jira_issue_key }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [
        1344,
        64
      ],
      "id": "a8daf8a7-08e8-4ca7-9fdd-f2ee0edda094",
      "name": "Resolve Jira Issue Key"
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.attachmentId }}",
              "operation": "isNotEmpty"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1952,
        64
      ],
      "id": "51fa11ac-9dcb-4dfe-9a1c-43dde62953ac",
      "name": "Has Attachments To Delete?"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        2208,
        176
      ],
      "id": "df3ba4f5-0dbc-4872-9185-6e4c9165fffb",
      "name": "Delete Loop"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 1
          },
          "conditions": [
            {
              "id": "8b63927a-d592-4bb1-a4f1-04b781a2f713",
              "leftValue": "={{ $json.upload }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2624,
        80
      ],
      "id": "d03fb4ac-a72c-4d09-b4d1-85b7914e2d80",
      "name": "Has Attachments To Upload?"
    },
    {
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        2896,
        176
      ],
      "id": "7f88ff72-1363-4196-a657-c5ced9582707",
      "name": "Upload Loop"
    },
    {
      "parameters": {
        "method": "PUT",
        "url": "=https://api.atlassian.com/ex/jira/{{ $vars.jira_cloud_id }}/rest/api/2/issue/{{ $('Resolve Jira Issue Key').first().json.jiraIssueKey }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "fields.summary",
              "value": "={{ $('Prepare Data').first().json.model.title }}"
            },
            {
              "name": "fields.description",
              "value": "={{ $('Prepare Data').first().json.jira.descriptionWiki }}"
            },
            {
              "name": "fields.priority.name",
              "value": "={{ $('Prepare Data').first().json.jira.priorityName }}"
            },
            {
              "name": "fields.labels",
              "value": "={{ $('Prepare Data').first().json.jira.labels }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        3328,
        96
      ],
      "id": "a74d7a4c-4c1b-4adf-b60d-659bd8c5e925",
      "name": "Update Jira Issue (Final)",
      "credentials": {
        "oAuth2Api": {
          "id": "ccgtZp8KM13dtSWh",
          "name": "Security Reporter Jira Bot"
        }
      }
    },
    {
      "parameters": {
        "resource": "document",
        "id": "={{ $json.document.id }}"
      },
      "type": "CUSTOM.reporter",
      "typeVersion": 1,
      "position": [
        3104,
        304
      ],
      "id": "1cd0206a-72bd-4a15-8363-5ba3f366940c",
      "name": "Retrieve Document",
      "credentials": {
        "reporterApi": {
          "id": "aAhqc5MPSQgKB6eV",
          "name": "Reporter account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const documents = $('Prepare Data').first().json.model.documents;\n\n\nconst issueKey = $('Resolve Jira Issue Key').first().json.jiraIssueKey;\n\n\nif (!documents.length) {\n  return [{ json: { jiraIssueKey: issueKey, upload: false } }];\n}\n\nreturn documents.map(d => ({\n  json: {\n    jiraIssueKey: issueKey,\n    upload: true,\n    document: d\n  },\n}));"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2448,
        80
      ],
      "id": "9026f1a0-11a3-4e5e-8483-e873cb370700",
      "name": "Build New Attachment Uploads"
    }
  ],
  "pinData": {},
  "connections": {
    "Reporter Trigger (Finding Updated)": {
      "main": [
        [
          {
            "node": "Prepare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Issue Exists?": {
      "main": [
        [
          {
            "node": "Resolve Jira Issue Key",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Jira Issue",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Jira Issue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Reporter Trigger (Finding Published)": {
      "main": [
        [
          {
            "node": "Prepare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Jira Issue": {
      "main": [
        [
          {
            "node": "Set Issue Key",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data": {
      "main": [
        [
          {
            "node": "Has Jira Issue Key",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Existing Jira Issue": {
      "main": [
        [
          {
            "node": "Issue Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Jira Attachments": {
      "main": [
        [
          {
            "node": "Extract Reporter Attachments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Jira Attachment": {
      "main": [
        [
          {
            "node": "Upload Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Reporter Attachments": {
      "main": [
        [
          {
            "node": "Has Attachments To Delete?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Jira Issue Key": {
      "main": [
        [
          {
            "node": "Fetch Existing Jira Issue",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Jira Issue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resolve Jira Issue Key": {
      "main": [
        [
          {
            "node": "Fetch Jira Attachments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Attachments To Delete?": {
      "main": [
        [
          {
            "node": "Delete Loop",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build New Attachment Uploads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete Loop": {
      "main": [
        [
          {
            "node": "Build New Attachment Uploads",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Delete Jira Attachment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete Jira Attachment": {
      "main": [
        [
          {
            "node": "Delete Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Attachments To Upload?": {
      "main": [
        [
          {
            "node": "Upload Loop",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Jira Issue (Final)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Loop": {
      "main": [
        [
          {
            "node": "Update Jira Issue (Final)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Retrieve Document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Document": {
      "main": [
        [
          {
            "node": "Upload Jira Attachment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build New Attachment Uploads": {
      "main": [
        [
          {
            "node": "Has Attachments To Upload?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "availableInMCP": false
  },
  "versionId": "f36584b5-9590-4c2f-8c1f-290dcacc7be9",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "118b928dd7434663cd70b041af45804a8239f06ed80a5b19a0c54811eb19f19c"
  },
  "id": "u-b3dcNgE2afaSIK8ExUa",
  "tags": []
}