Skip to main content

Word template token reference

The complete list of data paths (bindings) you can use in a Word template. This mirrors the in-product token reference panel and the binding catalog the validator enforces — if a path is not listed here, the editor flags it. For grammar and formatters see Word Template Mode.

How to read this page

  • A scalar binding is used in a value token: ${issue.summary}.
  • A collection binding is used in a loop: ${#each issue.subtasks as sub}…${/each}. Inside the loop, reach an item field through the loop variable: ${sub.key}.
  • TiersA is generally available; B ships only because the issue bundle already carries the data; C is visible but not bindable, listed so the product is honest about scope.
  • Which roots are available depends on the export context.

Export contexts and their roots

A Word template runs in one of seven contexts, each exposing a different set of top-level roots.

ContextAvailable roots
single-issueissue, generatedAt
automation (Jira Automation action)issue, generatedAt
multi-issue (JQL / board)issues, issueGroups, generatedAt
scheduledissues, issueGroups, generatedAt
sprintissues, issueGroups, sprint, generatedAt
releaseissues, issueGroups, release, generatedAt
backlogissues, issueGroups, backlog, generatedAt

generatedAt (a datetime) is available in every context.

Tier A — the issue surface (issue.*)

Available in single-issue and automation. The same fields are the per-item shape of the issues collection — inside ${#each issues as it} use ${it.key}, ${it.summary} and so on.

Scalars

PathType
issue.keystring
issue.summarystring
issue.descriptionrich text (ADF)
issue.statusstatus
issue.status.categorystring
issue.prioritypriority
issue.assigneeuser
issue.assignee.displayNamestring
issue.reporteruser
issue.reporter.displayNamestring
issue.createddatetime
issue.updateddatetime
issue.dueDatedate
issue.parent.keystring
issue.parent.summarystring
issue.parent.statusstring

A user-typed value renders the display name by default; use the user formatter to pick a part, e.g. ${issue.assignee | user("displayName")}. A rich-text value renders formatted; use | plain() to strip formatting.

Collections

CollectionItem fields (relative to the loop variable)
issue.labelsprimitive list — the loop variable is the label string
issue.componentsname
issue.fixVersionsname, released (boolean)
issue.affectsVersionsname
issue.subtaskskey, summary, status, priority, assignee, dueDate
issue.commentsauthor (user), author.displayName, body (ADF), created, updated
issue.attachmentsfilename, mimeType, size, isImage, created, author.displayNamemetadata only, no binary and no URL
issue.issueLinkstypeName, direction, linkedIssue.key, linkedIssue.summary, linkedIssue.status
issue.worklogsauthor.displayName, timeSpent, timeSpentSeconds, created, started

Example:

${#each issue.worklogs as wl}
${wl.author.displayName}: ${wl.timeSpentSeconds | duration("hm")} on ${wl.started | date("yyyy-MM-dd")}
${/each}

Tier A — multi-issue roots

Available in multi-issue, scheduled, sprint, release and backlog.

PathKindItem fields
issuescollectionthe full issue surface, relative to the loop variable
issueGroups.fixVersionscollectionkey, title, issues
issueGroups.sprintscollectionkey, title, issues
issueGroups.assigneescollectionkey, title, issues
issueGroups.worklogAssigneescollectionkey, title, issues

Example — group, then issues within each group:

${#each issueGroups.assignees as group}
## ${group.title}
${#each group.issues as it}
- ${it.key}: ${it.summary}
${/each}
${/each}

Tier A — context bundle roots

Available only in their own context.

sprint

PathType
sprint.sprint.namestring
sprint.sprint.goalstring
sprint.sprint.stateoption
sprint.stats.issueCountnumber
sprint.stats.percentDonenumber

release

PathType
release.release.namestring
release.release.releaseDatedate
release.release.releasedboolean
release.stats.issueCountnumber
release.stats.percentDonenumber

backlog

PathType / item fields
backlog.board.boardNamestring
backlog.board.boardTypeoption
backlog.stats.totalIssueCountnumber
backlog.groupscollection — kind, name, issueCount, issues

Tier A — metadata

PathTypeContexts
generatedAtdatetimeall

Tier B — changelog

PathKindItem fields
issue.changeHistorycollectionauthor.displayName, created, items

Tier C — visible but not bindable

These exist conceptually but are not resolvable; they are listed so the editor and validation can be honest about scope.

CapabilityNote
issue.jsmJira Service Management request, SLA and approval surface — deferred.
JQL-in-templateDetected by the migration scanner and diagnosed, never executed.
TempoA Tempo mirror may exist on a worklog, but is not bound.
Xray / ZephyrTest-management fields require a third-party app.
Assets / InsightObject fields are deferred.

Custom fields

Custom fields are bindable under a single namespace:

${ issue.customFields.<fieldId>.<…> }
  • Unknown custom-field ids are soft: the editor shows a warning and the value may render empty, but it is never a hard block — so a template can reference a field this site happens not to have without failing.
  • The bare path issue.customFields (the whole map) is never bindable.
  • Only safe identifier characters are allowed; __proto__, prototype and constructor segments are rejected.

Caveats when migrating from Xporter

The migration scanner suggests Exportelier paths for common Xporter field names. Two things to know so a suggested rewrite actually resolves:

  1. Auto-conversion fixes the syntax, not the existence of a path. The rewrite has the right shape, but the target must still be a real binding on this page, or it produces an unknown-binding warning:
    • Not in the catalog: Creatorissue.creator, Resolutionissue.resolution, Projectissue.project, IssueType/Typeissue.issuetype.
    • Case mismatch: DueDate is suggested as issue.duedate, but the binding is issue.dueDate.
    • Kind mismatch: Labels is suggested as a scalar, but issue.labels is a collection — use a loop.
  2. Issue links. The alias Links is suggested as links, but the real binding is issue.issueLinks.

See Xporter syntax: what works for the full migration map.

Paths that are never allowed

For safety, some paths are rejected with an unsafe-template error regardless of context — internal, credential or URL-bearing fields. These include roots such as auth, context, forge, internal, secrets, storage and token, and any path ending in accountId, apiToken, avatarUrl, baseUrl, contentUrl, thumbnailUrl, cookie, session, headers, private or storageRef. Stick to the bindings on this page and you will not hit these.