{
  "name": "Create Jira tickets from Streamlit forms with webhook & REST API",
  "nodes": [
    {
      "id": "26e7793d-e192-4075-8873-4c97fa2fe616",
      "name": "Webhook streamlit",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -352,
        16
      ]
    },
    {
      "id": "e3d42140-21c8-414e-92bb-9b370db03cd8",
      "name": "jira response",
      "type": "n8n-nodes-base.set",
      "position": [
        1488,
        0
      ]
    },
    {
      "id": "99fc511f-63a6-4bae-bd76-c71e7d8cd41f",
      "name": "Jira HTTP request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1248,
        0
      ]
    },
    {
      "id": "ed82c023-8052-4431-81cc-1474cdd41d7d",
      "name": "raw data from streamlit",
      "type": "n8n-nodes-base.set",
      "position": [
        80,
        16
      ]
    },
    {
      "id": "561cad41-bb3f-4c79-8040-dd8eea591ecf",
      "name": "Process streamlit data",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        16
      ]
    },
    {
      "id": "08a64f5f-a115-492b-a74d-729a26e91964",
      "name": "Processed data",
      "type": "n8n-nodes-base.set",
      "position": [
        928,
        0
      ]
    },
    {
      "id": "04a874db-e6f5-45b0-9c24-c1353fbe82c4",
      "name": "Result",
      "type": "n8n-nodes-base.code",
      "position": [
        1744,
        0
      ]
    },
    {
      "id": "f73b22ee-e14e-4d0c-a638-86c79c79b540",
      "name": "anti double",
      "type": "n8n-nodes-base.code",
      "position": [
        -144,
        16
      ]
    },
    {
      "id": "eb9ab21e-f39e-4f79-b7e1-7ea092e2d8e7",
      "name": "blocked request",
      "type": "n8n-nodes-base.code",
      "position": [
        624,
        416
      ]
    },
    {
      "id": "1d1a8b2d-6cbf-4844-9ca3-112d1786ae53",
      "name": "if for doubles",
      "type": "n8n-nodes-base.if",
      "position": [
        496,
        16
      ]
    },
    {
      "id": "25ce6d92-a06e-46fc-9cd4-61a3a598b9ab",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        -704
      ],
      "parameters": {
        "width": 304,
        "height": 176,
        "content": "## Required\n\n\n- Streamlit creation ticket app\n- Jira account"
      }
    },
    {
      "id": "f81324d8-fd8e-485a-8398-72768c64ff09",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -704
      ],
      "parameters": {
        "width": 416,
        "height": 1264,
        "content": "## 1) Trigger & intake (Streamlit → n8n)\n\nPurpose: receive the ticket from the app and hand it to the workflow.\n\nNodes\n\nWebhook streamlit – receives action=create_ticket and a ticket object (id, proje"
      }
    },
    {
      "id": "5e0bc57b-223c-46fe-bd90-5682ef4c5e67",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        -704
      ],
      "parameters": {
        "width": 464,
        "height": 1264,
        "content": "## 4) Create issue in Jira\n\nPurpose: call Jira REST API and create the real ticket.\n\nNodes\n\nProcessed data (Set) – passes through the fields object so you can inspect it.\n\nJira HTTP request (HTTP Requ"
      }
    },
    {
      "id": "5175079e-7ddc-46f1-bf93-532421c2e16a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        -704
      ],
      "parameters": {
        "width": 304,
        "height": 1264,
        "content": "## 3) Normalize & build Jira payload\n\nPurpose: transform app fields into a valid Jira JSON.\n\nNodes\n\nProcess streamlit data (Code) – outputs a clean fields object:\n\nproject.key (uppercase from projectK"
      }
    },
    {
      "id": "953b841a-8814-4047-bce8-a8644d266005",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        -704
      ],
      "parameters": {
        "width": 944,
        "height": 1264,
        "content": "## 2) De-dup guard & branching (count/IF)\n\nPurpose: prevent empty/invalid calls and duplicates from creating issues.\n\nNodes\n\nanti double (Code) – builds a short-lived memory in workflow static data.\n\n"
      }
    },
    {
      "id": "d933ae95-f6f6-4044-85de-f9a5fcca67e3",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1664,
        -704
      ],
      "parameters": {
        "width": null,
        "height": 1264,
        "content": "## 5) Return result to the app\n\nPurpose: send a friendly response back to Streamlit.\n\nNodes\n\njira response (Set) – optional pass-through of the Jira response for visibility.\n\nResult (Code) – returns t"
      }
    }
  ],
  "connections": {
    "Result": {
      "main": [
        []
      ]
    },
    "anti double": {
      "main": [
        [
          {
            "node": "raw data from streamlit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "jira response": {
      "main": [
        [
          {
            "node": "Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Processed data": {
      "main": [
        [
          {
            "node": "Jira HTTP request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "if for doubles": {
      "main": [
        [
          {
            "node": "Processed data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "blocked request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "blocked request": {
      "main": [
        []
      ]
    },
    "Jira HTTP request": {
      "main": [
        [
          {
            "node": "jira response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook streamlit": {
      "main": [
        [
          {
            "node": "anti double",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process streamlit data": {
      "main": [
        [
          {
            "node": "if for doubles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "raw data from streamlit": {
      "main": [
        [
          {
            "node": "Process streamlit data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}