Skip to content

getDevStatusDetail reviewer approved field is stale on Jira Server/DC — no mechanism for real-time review state, and dataType=review is unsupported #378

@ksodari

Description

@ksodari

Summary

When calling getDevStatusDetail (or the equivalent doRequest + makeDevStatusUri with dataType: 'pullrequest'), the reviewers[].approved boolean returned by the Jira dev-status API is a cached/stale snapshot of GitHub Enterprise review state. It does not reflect real-time approvals, and there appears to be no way to force a refresh or access live review state through any available API path.

Actual API Response (getDevStatusDetaildataType: 'pullrequest')

This is the real response returned by Jira Server/DC. At the time of this call, 2 of the 7 reviewers had already approved the PR on GitHub Enterprise. The API returns "approved": false for all of them:

{
  "errors": [],
  "detail": [
    {
      "branches": [
        {
          "name": "fix/PROJ-123-my-feature-branch",
          "url": "https://ghe.example.com/my-org/my-repo/tree/fix%2FPROJ-123-my-feature-branch",
          "createPullRequestUrl": "https://ghe.example.com/my-org/my-repo/compare",
          "repository": {
            "name": "my-repo",
            "url": "https://ghe.example.com/my-org/my-repo"
          }
        }
      ],
      "pullRequests": [
        {
          "author": {
            "name": "alice-reviewer",
            "avatar": "https://example.com/avatar.png"
          },
          "id": "#631",
          "name": "PROJ-123 - My feature description",
          "commentCount": 0,
          "source": {
            "branch": "fix/PROJ-123-my-feature-branch",
            "url": "https://ghe.example.com/my-org/my-repo/tree/fix%2FPROJ-123-my-feature-branch"
          },
          "destination": {
            "branch": "master",
            "url": "https://ghe.example.com/my-org/my-repo/tree/master"
          },
          "reviewers": [
            { "name": "bob-reviewer",   "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "carol-reviewer", "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "dave-reviewer",  "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "eve-reviewer",   "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "frank-reviewer", "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "alice-reviewer", "avatar": "https://example.com/avatar.png", "approved": false },
            { "name": "grace-reviewer", "avatar": "https://example.com/avatar.png", "approved": false }
          ],
          "status": "OPEN",
          "url": "https://ghe.example.com/my-org/my-repo/pull/631",
          "lastUpdate": "2026-04-02T16:33:23.000+0900"
        }
      ],
      "repositories": [],
      "_instance": {
        "singleInstance": true,
        "baseUrl": "https://github.com",
        "name": "GitHub Enterprise",
        "typeName": "GitHub Enterprise",
        "id": "githube",
        "type": "githube"
      }
    }
  ]
}

Key observations:

  • All 7 reviewers[].approved values are falsedespite 2 reviewers having approved on GHE
  • "lastUpdate": "2026-04-02T16:33:23.000+0900" — this matches the date the branch/PR was linked, not when approvals were given (approvals came after)
  • _instance.baseUrl shows "https://github.com" (GitHub Cloud) even though this is a GitHub Enterprise instance — a separate minor inaccuracy in the data
  • The reviewer object has only 3 fields: name, avatar, approved — no state field (e.g. APPROVED, CHANGES_REQUESTED, DISMISSED) that the GHE API provides

Note to maintainers: This sample was captured from a production Jira Data Center 9.x instance with GitHub Enterprise 3.15 integration. Names and URLs have been anonymized.


Additionally, dataType: 'review' — which would be the natural extension to fetch code-review data — is unsupported on Jira Server/DC, returning:

{ "errors": [{ "error": "java.lang.IllegalArgumentException: Unsupported type: review" }] }

Environment

  • jira-client version: 8.2.2
  • Jira type: Server / Data Center (self-hosted)
  • GHE integration: GitHub Enterprise (applicationType: githube)

Reproduction

// Returns PR with reviewer list — BUT approved is always false even when GHE shows approvals
const resp = await jira.getDevStatusDetail(issueId, 'githube', 'pullrequest')
// resp.detail[0].pullRequests[0].reviewers
// → [{ name: 'alice', approved: false }, { name: 'bob', approved: false }]
// ... even though alice and bob have both approved the PR on GitHub Enterprise

// Attempting to use dataType=review throws an error
await jira.doRequest(jira.makeRequestHeader(jira.makeDevStatusUri({
  pathname: '/detail',
  intermediatePath: '/rest/dev-status/1.0/issue',
  query: { issueId, applicationType: 'githube', dataType: 'review' }
})))
// → { errors: [{ error: 'java.lang.IllegalArgumentException: Unsupported type: review' }] }

What I tested (all return identical stale data)

Variant Result
/rest/dev-status/1.0/issue/detail approved: false (stale)
/rest/dev-status/latest/issue/detail approved: false (stale)
+ forceRefresh=true approved: false (stale)
+ showApprovals=true approved: false (stale)
dataType=review Unsupported type: review
dataType=build/deployment/commit detail: [] (empty)
summary + forceRecalculate=true Returns PR count/state — no reviewer data at all

I also checked every other available mechanism — findIssue with all expand values, getIssueChangelog, getRemoteLinks, /issue/{key}/properties, Agile getIssue(expand=pullRequests), /rest/gitplugin/1.0, /rest/jira/1.0/issue/.../pullRequests — none return reviewer approval state from GitHub Enterprise.


Questions / Feature Request

  1. Is reviewer.approved intentionally a cached/point-in-time snapshot? The Jira dev-status API appears to index reviewer state asynchronously and can lag hours or days. Is this a known Jira limitation on Server/DC, or is there an API call that forces a real-time sync?

  2. Is dataType=review planned for Server/DC? It's listed as a valid dataType in some Jira Cloud API docs but throws Unsupported type on Server 9.x / DC. Would it be feasible to add a getDevStatusReview helper (similar to getDevStatusDetail) that gracefully falls back when the endpoint is unavailable?

  3. Would a helper that wraps the GHE /api/v3/repos/:owner/:repo/pulls/:number/reviews endpoint be in scope? When applicationType=githube, the PR URL is available in the dev-status detail response. A getGHEPullRequestReviews(prUrl, gheToken) helper using the GHE REST API would provide real-time review state without requiring users to implement the HTTP call themselves.


Workaround (for others who hit this)

The only way to get live review state on Jira Server/DC with a githube integration is to call the GitHub Enterprise API directly:

GET https://<ghe-host>/api/v3/repos/:owner/:repo/pulls/:number/reviews
Authorization: token <GHE_PAT>

The PR URL (and therefore owner, repo, number) is available in getDevStatusDetail response under detail[0].pullRequests[0].url.


Tested on jira-client v8.2.2, Node.js v25.6.1, Jira Data Center 9.x, GitHub Enterprise Server 3.15

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions