utilitiesbeginner6 min setupby Mantle

Bug report webhook to a Jira issue

Let any tool — a status page, a form, your app's crash handler — raise a Jira issue over one webhook.

Bug webhookCreate the issue

Drag to pan, pinch to zoom. This is the real graph the template installs.

Purpose

Let any tool — a status page, a form, your app's crash handler — raise a Jira issue over one webhook.

How it works

What it does

  • Exposes a webhook that takes {reference, title, details, reporter}.
  • Creates a Jira issue, retrying once if Jira is briefly unavailable.
  • idempotency_path: reference means a caller that retries the same report does not open a second issue.

Validation

This template is contract-validated: the unit suite checks every node type, every config key and the whole graph against the same rules a saved workflow passes. It has not been run against the live provider — the ids, names and columns below are placeholders to replace with your own.

Nodes 2

  1. 01Bug webhooktrigger.webhookTrigger
  2. 02Create the issuejira.create_issueApp
View template JSON
{
  "format": "mantle-workflow/v1",
  "id": "jira-webhook-bug-intake",
  "name": "Bug report webhook to a Jira issue",
  "graph": {
    "nodes": [
      {
        "id": "hook",
        "type": "trigger.webhook",
        "label": "Bug webhook",
        "config": {
          "slug": "bug-intake",
          "idempotency_path": "reference",
          "response_mode": "immediate"
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 60,
          "y": 220
        }
      },
      {
        "id": "issue",
        "type": "jira.create_issue",
        "label": "Create the issue",
        "config": {
          "project_key": "ENG",
          "issue_type": "Bug",
          "summary": "{{ $json.title }}",
          "description": "{{ $json.details }}\n\nReported by {{ $json.reporter }} at {{ $now }}.\nReference: {{ $json.reference }}"
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 380,
          "y": 220
        },
        "retry": {
          "max_attempts": 2,
          "backoff": "fixed",
          "initial_ms": 3000,
          "max_ms": 3000
        }
      }
    ],
    "edges": [
      {
        "from": "hook",
        "to": "issue"
      }
    ]
  }
}

Requirements

The connections and permissions each step needs, from the node contracts in the catalog.

  • JiraUsername & password

    Used by Create the issue.

    Credential: {"email", "api_token"}

Setup

  • Set project_key and issue_type to a project and type that exist in your Jira.
  • Pick a Jira connection — its domain config key is your-org.atlassian.net.
  • Turn on require_signature on the trigger if the caller can sign its deliveries.

Sample input and output

Synthetic examples: node-contract samples or placeholders, never customer data.

Input

The fields the template declares or reads from the request body. Values are placeholders.

{
  "reference": "<reference>",
  "title": "<title>",
  "details": "<details>",
  "reporter": "<reporter>"
}

Output

Create the issue jira.create_issue

{
  "issue_key": "",
  "ok": false,
  "url": ""
}

Failure handling

What the graph does when a step fails, read from its retry settings, error branches and error policies.

  • Create the issue: up to 2 attempts, 3 s between attempts.
  • A step that fails, after any retries, fails the run. The failed step is kept with its input and error.

See it run, then make it yours.

Templates install as drafts. Edit any step, and Workflow Health re-checks the graph on every save.