Issue Event

trigger.jira_event
TriggerBusiness appsconnection requiredruns in-engine

Mantle registers a Jira Cloud webhook on publish and deletes it on unpublish; one run per delivered event.

Start a run when a Jira issue, comment or worklog changes.

Connection

Required
Yes — the node will not save without one
Auth type
Username & password
Providers
Jira
Secret shape
{"email", "api_token"}
Config it needs
domain
Resolved by
config.connection_id, else node.connection_id

Configuration

3 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
events
Which Jira events start a run. At least one.
arrayNo["jira:issue_created","jira:issue_updated"]≥ 1 characters; array of string—
jql_filter
JQL restricting which issues fire, e.g. project = ENG AND issuetype = Bug. Leave empty and every issue in the site fires this workflow.
stringNo——project = ENG AND issuetype = Bug
allow_unsigned
Arm this trigger even when Jira will not sign its deliveries. Every request to the callback URL is then accepted unverified — only tick it if your site cannot sign (Jira Server / Data Center).
booleanNofalse——

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "allow_unsigned": false,
  "events": [
    "jira:issue_created",
    "jira:issue_updated"
  ],
  "jql_filter": "project = ENG AND issuetype = Bug"
}

Output

One shape.

event

One Jira event, flattened. `payload` keeps the raw delivery.

FieldTypeExample
webhookEvent
Jira's event name, e.g. jira:issue_updated.
stringjira:issue_updated
issue_event_type_name
The finer-grained issue event, e.g. issue_generic, issue_commented.
stringissue_updated
timestamp
When Jira raised the event, epoch milliseconds.
number—
issue.key
Issue key, e.g. ENG-412.
stringENG-412
issue.id
Jira's numeric issue id, as a string.
string—
issue.summary
The issue title.
string—
issue.status
Status name, e.g. In Progress.
string—
issue.status_category
To Do / In Progress / Done.
string—
issue.issue_type
Issue type name, e.g. Bug.
string—
issue.priority
Priority name, e.g. High.
string—
issue.labels
Label strings on the issue.
array—
issue.url
Browse URL for a human, e.g. https://site.atlassian.net/browse/ENG-412.
string—
issue.assignee.accountId
Atlassian account id, or null when unassigned.
string—
issue.assignee.displayName
Assignee's display name.
string—
issue.assignee.emailAddress
Assignee's email, when Jira exposes it.
string—
issue.reporter.accountId
string—
issue.reporter.displayName
string—
issue.reporter.emailAddress
string—
issue.project.id
string—
issue.project.key
Project key, e.g. ENG.
stringENG
issue.project.name
string—
user.accountId
Who caused the event.
string—
user.displayName
string—
user.emailAddress
Only when Jira exposes it; often absent.
string—
changelog
Field changes on an update, each {field, field_type, from, to, from_id, to_id} — from/to are Jira's human values (fromString/toString), *_id the raw ids.
array—
changelog_id
Jira's change-group id; part of the idempotency key.
string—
comment.id
Present on comment_created / comment_updated.
string—
comment.body
Comment text, flattened out of ADF when the site sends ADF.
string—
comment.author.accountId
string—
comment.author.displayName
string—
comment.author.emailAddress
string—
comment.created
ISO 8601, as Jira sends it.
string—
comment.updated
ISO 8601, as Jira sends it.
string—
worklog.id
Present on the worklog_* events.
string—
worklog.time_spent
Human form, e.g. 3h 30m.
string—
worklog.time_spent_seconds
number—
worklog.started
ISO 8601 start of the logged work.
string—
worklog.comment
string—
worklog.author.accountId
Who logged the work.
string—
worklog.author.displayName
string—
worklog.author.emailAddress
string—
payload
The whole Jira delivery, verbatim — for anything the flattened fields above omit.
object—
{
  "changelog": [],
  "changelog_id": "",
  "comment": {
    "author": {
      "accountId": "",
      "displayName": "",
      "emailAddress": ""
    },
    "body": "",
    "created": "",
    "id": "",
    "updated": ""
  },
  "issue": {
    "assignee": {
      "accountId": "",
      "displayName": "",
      "emailAddress": ""
    },
    "id": "",
    "issue_type": "",
    "key": "ENG-412",
    "labels": [],
    "priority": "",
    "project": {
      "id": "",
      "key": "ENG",
      "name": ""
    },
    "reporter": {
      "accountId": "",
      "displayName": "",
      "emailAddress": ""
    },
    "status": "",
    "status_category": "",
    "summary": "",
    "url": ""
  },
  "issue_event_type_name": "issue_updated",
  "payload": {},
  "timestamp": 0,
  "user": {
    "accountId": "",
    "displayName": "",
    "emailAddress": ""
  },
  "webhookEvent": "jira:issue_updated",
  "worklog": {
    "author": {
      "accountId": "",
      "displayName": "",
      "emailAddress": ""
    },
    "comment": "",
    "id": "",
    "started": "",
    "time_spent": "",
    "time_spent_seconds": 0
  }
}

Notes

  • Mantle creates the webhook in Jira when the workflow is published and deletes it when the workflow is unpublished, disabled or archived — do not add it by hand.
  • The connection's account must be a Jira administrator: registering a webhook is an admin operation, and publish fails with Jira's own message if it is not.
  • Deliveries are signed. Mantle generates a random secret, registers it, and verifies the X-Hub-Signature HMAC over the raw body; a bad signature is refused before any run starts.
  • If your site does not confirm signing (no isSigned on registration) the webhook is deleted again and the publish fails, rather than leaving an unauthenticated URL armed. Tick allow_unsigned to accept URL-only authentication anyway — then anyone who learns the callback URL can start runs.
  • jql_filter and events are applied when the workflow is published, so they cannot use {{ }} expressions — there is no run to evaluate them against.
  • Jira sends no delivery id. Runs are deduped on webhookEvent + issue id + timestamp + the change-group / comment / worklog id, so a Jira retry cannot start a second run.
  • MANTLE_APP_PUBLIC_BASE_URL must be a public https:// URL — Jira refuses to register a plain-http or unreachable callback.

See Issue Event run in a workflow.

In a technical demo we add the Jira connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.