Reading issues¶
Three read verbs: list and mine to find issues, view to read one in
full. JSON examples below show the data block only â the envelope wrapper and
exit codes live on Output, and each command links to its
reference page for the complete flag and output-field tables.
view¶
Read one issue when you already know its key. view returns everything list
drops: the ADF description, custom fields, and link, comment, and watcher
detail. To find the key first, use list or mine.
jira issue view PROJ-123
jira issue view PROJ-123 --web
jira issue view PROJ-1 PROJ-2 PROJ-3 -p 4 --output=json
Human output prints the summary, status, assignee, and priority, then the
rendered description. The JSON data is the raw Jira REST shape:
{
"issue": {
"id": "10401",
"key": "PROJ-123",
"fields": {
"summary": "Checkout returns 500 on empty cart",
"status": { "name": "In Progress" },
"priority": { "name": "High" },
"assignee": { "accountId": "712020:âĻ", "displayName": "John Doe" },
"description": { "type": "doc", "version": 1, "content": [ âĻ ] },
"customfield_10019": "0|i0007r:",
"customfield_10001": null
}
}
}
Raw Jira passthrough
data.issue.fields is Jira's own field shape: custom fields appear by their
stable IDs (customfield_10019, âĻ) with no label resolution. Human output
applies the labels you'd see in the web UI; JSON consumers map the IDs
themselves. The field-type reference lists the common
ones.
Reading many at once¶
view accepts several keys â separate arguments, comma lists, or inclusive
ranges (PROJ-1..PROJ-5). Add -p / --parallelism to fan the reads out
(default 1, max 16). A single key keeps the data.issue shape above; multiple
keys return ordered results under data.results[], each with ok and either
issue or error. If any key fails the command exits non-zero but keeps the
successful reads:
{
"results": [
{ "key": "PROJ-1", "ok": true, "issue": { "key": "PROJ-1", "fields": { "âĻ": "âĻ" } } },
{ "key": "PROJ-9", "ok": false, "error": { "type": "not_found", "message": "issue does not exist" } }
],
"succeeded": 1,
"failed": 1
}
Full flags & output fields â
list¶
Filter by project, key, assignee, reporter, status, priority, label, type, epic,
board, or date, and list builds the JQL for you and runs it. Drop or add flags
until the result is right, then reuse the resolved query with --jql. This is
the main terminal triage workflow.
jira issue list --project PROJ --status "In Progress"
jira issue list --project PROJ --status '!Done' --order-by created
jira issue list --updated -7d --type Bug --assignee me
jira issue list --jql "status = Done AND assignee = currentUser()" --count
jira issue list --project PROJ --status Done --as-jql --output=json
The default projection is a summary table, one row per issue:
INF âšī¸ Listed issues count=2 detail=false
KEY SUMMARY STATUS ASSIGNEE PRIORITY
PROJ-123 Checkout returns 500 on empty cart In Progress John Doe High
PROJ-118 Flaky login redirect To Do unassigned Medium
Each data.issues[] row carries the summary fields plus status_category
(Jira's workflow category â new, indeterminate, or done) and
status_color (the category colour used to tint the human output):
{
"board_scope": { "applied": false },
"detail": false,
"issues": [
{
"key": "PROJ-123",
"summary": "Checkout returns 500 on empty cart",
"status": "In Progress",
"status_category": "indeterminate",
"status_color": "yellow",
"priority": "High",
"assignee": null,
"updated": "2026-06-01T22:00:29.281-0400"
}
]
}
A few flags change what list does rather than what it filters:
--as-jqlbuilds and prints the JQL without calling Jira (meta.commandbecomesissue.list.jql,data.issuesis always[]). Use it to confirm a filter resolves the way you expect before a heavy read.--countasks Jira for an approximate match count and fetches no issues â a fast "how many?" Human output is the bare number; JSON carriescount. It calls Jira, so it can't combine with the offline--as-jql.--keynarrows to known keys (PROJ-1, comma lists,PROJ-1..PROJ-10ranges). Large key sets chunk and tolerate gaps; add-p Nto run the chunks concurrently.--limit/--all/--cursor/--unboundedpage the built query with the same contract assearch jql: one page of--limit(default 50) withmeta.pagination.nextCursorto resume via--cursor, or--allto drain (bounded;--unboundedlifts the caps). A--keylisting is looked up whole, so it refuses the pagination flags.
--detail is heavy
--detail returns the full view payload â description ADF, every custom
field â for every match. Reach for it only when a consumer needs the full
record, and pair it with a tight --project or --jql.
Date flags (--updated, --created, --resolved) take a relative window
(-7d), an absolute date (2026-01-01), a comparator (>=2026-01-01), or an
inclusive A..B range. A bare value is a lower bound. The full grammar is on the
JQL page.
Full flags & output fields â
mine¶
What's assigned to you right now â list with the assignee pinned to the current
user. It shares list's runner and output shape, and takes the same filter,
sort, and date flags, except --assignee and --reporter (assignee is the
point). There's no --count or -p here; reach for list when you need those.
jira issue mine
jira issue mine --status "In Progress" --priority High
jira issue mine --label regression --type Bug
jira issue mine --project PROJ --as-jql --output=json
Output is identical to list â same table, same data.issues[] shape.
Full flags & output fields â
See also¶
- Creating & editing issues â once you've found the issue
- JQL â the query language behind the filter flags
- Output â the JSON envelope and exit codes
- Search â raw and saved queries