Output formats
table, json, and yaml output, plus the stdout/stderr contract.
Add -o <format> to any list/get command:
-o table: default, human-readable-o json: parse withjq-o yaml: YAML output (same keys and values as-o json)
With -o json, a failure (including a usage error such as a missing argument or an
unknown flag) prints {"error": "...", "status_code": N} to stderr and exits 1.
Agents: always use -o json. Informational lines (e.g. "Created ABC-1", the
JQL used by issue list) go to stderr, so stdout stays clean for parsing.
jira whoami -o json | jq -r .accountId
jira issue search "project = ABC" -o json | jq '.[].key'Notes & gotchas
- Users are accountIds on Cloud, usernames on Server/DC. Commands accept email /
display name /
@me/id:<accountId>(id:<username>on Server/DC) and resolve to that identifier via user search before use. - Rich text is ADF on Cloud. Descriptions, comments, and worklog comments are sent
as Atlassian Document Format.
--markdowninterprets input as lightweight markdown (headings, lists, bold/italic/code/links). On Server/DC (API v2) the text is sent as Jira wiki markup and--markdownis rejected. - Transitions are discover-then-do. There is no "set status"; the CLI lists transitions and matches your argument against the transition name or its target status.
- Search pagination differs by deployment. Cloud uses the cursor-based
/search/jql; Server/DC uses the classic/search. The CLI handles both. JQL must be bounded. - Rate limits (429) are retried automatically (honoring
Retry-After, else exponential backoff). - API version defaults to v3 on Cloud, v2 on Server/DC; override with
--api-version.