docs

Jira

Receive Jira issue events in Plural

A Jira webhook delivers Jira issues into Plural. Each issue becomes an issue record in Plural that a workbench can act on.

You can send issues to Plural in two ways:

  • A Jira admin webhook (Settings → System → WebHooks) configured with the Plural secret. Jira signs each delivery with it. This needs Jira admin rights.
  • A Jira Automation rule with the Send web request action, which sends the Plural secret in a header. Project admins can create one.

An issue event does not start a job by itself. A job starts only when a webhook trigger on a workbench matches the issue, and only when the issue has just become open: a new open issue, or an issue that moved back into a status Plural treats as open. Edits to an issue that is already open do not start another job, and the same issue starts at most one job per workbench in an hour.

What Plural reads from the payload

Plural reads any JSON body with a top-level issue object. It does not look at the event name (webhookEvent in admin webhook deliveries), so created, updated, and transitioned issues are handled the same way. A body without issue is acknowledged and ignored. Admin webhook issue events and the Work item data (Jira format) body of Send web request both have this shape:

json
{
  "issue": {
    "self": "https://example.atlassian.net/rest/api/2/issue/10001",
    "key": "OPS-42",
    "fields": {
      "summary": "Checkout is down",
      "description": "500s from the payments service",
      "status": { "name": "In Progress" }
    }
  }
}
  • key becomes the issue ID. Later events for the same key update the existing record instead of creating a new one.
  • fields.summary and fields.description become the issue title and body. A plain-text description is used as is. An Atlassian Document Format description from Jira Cloud is flattened to its text, one line per paragraph. An empty description is stored as {empty}, and bodies longer than 10,000 characters are truncated.
  • The link is built from the site in self and the key, for example https://example.atlassian.net/browse/OPS-42.
  • fields.status.name sets the status.

key, self, and fields.summary are required. An issue without them is not recorded.

A trigger matches against the title and body joined by a newline.