Get Jira Ticket

Retrieves the full detail of a single Jira ticket by its issue key. Unlike the list endpoint, this always makes a live call to the Jira API (no caching) and returns the complete normalized ticket. This is typically used when a user selects a ticket from the list and needs to see full details before linking it to a job.

The raw Jira issue is normalized using the same field mapping logic as the list endpoint — custom fields for part number, quantity, and epic link are resolved from the configured mappings in App Settings.

Request

Path Parameters

ParameterTypeRequiredDescription
keystringYesThe Jira issue key (e.g. "PI-42", "PROJ-123"). Case-sensitive and must match the exact key in Jira.

Response

200 OK

Returns a single JiraTicket object with all normalized fields.

FieldTypeDescription
keystringJira issue key (e.g. "PI-42")
summarystringIssue summary / title
statusstringCurrent Jira status name (e.g. "In Progress")
prioritystringPriority name (e.g. "High", "Medium")
assigneestringDisplay name of the assignee, or empty string if unassigned
reporterstringDisplay name of the reporter
labelsstring[]Array of Jira labels
partNumberstring | nullPart number from the configured custom field or parsed from summary
goalQuantitynumber | nullQuantity from the configured custom field
epicLinkstring | nullEpic link key from the configured custom field
createdAtstringISO 8601 creation timestamp from Jira
updatedAtstringISO 8601 last-updated timestamp from Jira
rawFieldsobjectThe raw Jira fields object

400 Bad Request

ConditionMessage
Jira integration is disabled in settings"Jira integration is not enabled"

404 Not Found

ConditionMessage
Ticket key does not exist in JiraJira API returns a 404, which is re-thrown as a server error

502 Bad Gateway

ConditionMessage
Jira API unreachable or returned a non-OK status"Jira API error: {status} {statusText}"
Request timed out (10-second limit)Abort error from the fetch signal

Examples

Request

curl http://localhost:3000/api/jira/tickets/PI-42

Response

{
  "key": "PI-42",
  "summary": "Build 50 aluminum housings",
  "status": "In Progress",
  "priority": "High",
  "assignee": "Jane Smith",
  "reporter": "John Doe",
  "labels": ["Q1-2024", "rush"],
  "partNumber": "ALU-HOUSING-7075",
  "goalQuantity": 50,
  "epicLink": "PI-10",
  "createdAt": "2024-01-10T08:00:00.000Z",
  "updatedAt": "2024-01-14T16:30:00.000Z",
  "rawFields": {
    "summary": "Build 50 aluminum housings",
    "status": { "name": "In Progress" },
    "priority": { "name": "High" },
    "customfield_10908": "ALU-HOUSING-7075",
    "customfield_10900": 50,
    "customfield_10014": "PI-10"
  }
}

Error — Jira disabled

curl http://localhost:3000/api/jira/tickets/PI-42
# 400: { "message": "Jira integration is not enabled" }

Notes

  • This endpoint does not use the in-memory cache. It always makes a live Jira API call, so it reflects the most current ticket state.
  • The rawFields object is included for debugging and advanced integrations. It contains the unprocessed Jira fields exactly as returned by the Jira REST API.
  • A 10-second timeout applies to the Jira API call. Slow Jira instances may cause timeouts.
  • The ticket key is URL-encoded before being sent to Jira, so special characters are handled safely.