Batch get issues by id#

Description#

Return the full representations of up to 50 remediation issues in a single request, the same representation GET /issues/{id} returns. The response data array preserves the order of the requested ids, duplicates included. The request is all-or-nothing and returns no partial results: a malformed id fails it with 400 and an error targeted at /data/{index}; an id that does not exist or that the caller cannot read fails it with 403 permissionDenied, with no per-id detail, so the response does not reveal which ids exist. A request with no ids or more than 50 ids fails with 400.

POST /issues/batchRetrieval

Required OAuth Scopes

grc:read

Parameters#

Parameter

In

Type

Required

Description

X-Version

header

string

true

Version of the API (2026-09-01.grc.preview)

body

body

IssueBatchRetrievalRequest

true

The set of issue ids to retrieve.

Wk-Workspace

header

string

true

The id of the Workiva workspace to operate in. Authorization is enforced against the authenticated user’s access within this workspace.

Body parameter example#

{
  "data": [
    "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    "2b3c4d5e-6f70-4b8c-9d0e-1f2a3b4c5d6e"
  ]
}

Code Samples#

curl -X POST 'https://api.app.wdesk.com/issues/batchRetrieval' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Wk-Workspace: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d' \
    -H 'Authorization: Bearer {access-token}' \
    -H 'X-Version: 2026-09-01.grc.preview' \
    --data-raw '{"data":["1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","2b3c4d5e-6f70-4b8c-9d0e-1f2a3b4c5d6e"]}'
echo '{"data":["1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","2b3c4d5e-6f70-4b8c-9d0e-1f2a3b4c5d6e"]}' | http POST https://api.app.wdesk.com/issues/batchRetrieval \
    X-Version:2026-09-01.grc.preview \
    Content-Type:application/json \
    Accept:application/json \
    Wk-Workspace:1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
    Authorization:"Bearer {access-token}"
wget --method=POST "https://api.app.wdesk.com/issues/batchRetrieval" \
    --output-document - \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Wk-Workspace: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d' \
    --header 'Authorization: Bearer {access-token}' \
    --header 'X-Version: 2026-09-01.grc.preview' \
    --body-data='{"data":["1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","2b3c4d5e-6f70-4b8c-9d0e-1f2a3b4c5d6e"]}'
import requests

headers = {
  'X-Version': '2026-09-01.grc.preview',
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Wk-Workspace': '1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d',
  'Authorization': 'Bearer {access-token}'
}

body = {
  "data": [
    "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    "2b3c4d5e-6f70-4b8c-9d0e-1f2a3b4c5d6e"
  ]
}

r = requests.post('https://api.app.wdesk.com/issues/batchRetrieval', headers = headers, json=body)

print(r.json())

Returns#

200 - The requested issues, in request order.#

The issues requested by a batch get, in request order. Batch results are not paginated.

400 - The request was invalid.#

Error response indicating the service could not process the request.

401 - Authentication is missing or invalid.#

Error response indicating the service could not process the request.

403 - The caller is not permitted to access this resource.#

Error response indicating the service could not process the request.

429 - The rate limit has been exceeded.#

Error response indicating the service could not process the request.

500 - An unexpected error occurred.#

Error response indicating the service could not process the request.

503 - Service Unavailable#

Error response indicating the service could not process the request.

Example Responses#

{
  "data": [
    {
      "auditTeamOwner": {
        "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
      },
      "businessOwner": {
        "id": "u_9f8e7d6c5b4a43210f1e2d3c4b5a6978"
      },
      "collaborators": [
        {
          "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
        }
      ],
      "controls": [
        {
          "controlId": "BEN.001",
          "id": "d9c09501-214c-432e-85c9-8cd1009b9660",
          "name": "General Ledger Reconciliation"
        }
      ],
      "created": {
        "dateTime": "2026-03-15T14:30:00Z",
        "user": {
          "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
        }
      },
      "customFields": [
        {
          "enumValue": "High",
          "id": "8f3c1a2b-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
          "name": "Risk Rating",
          "type": "singleSelectEnum"
        }
      ],
      "description": "The same individual can both create and approve purchase orders in the AP system without a secondary review.",
      "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "isOverdue": false,
      "modified": {
        "dateTime": "2026-03-20T09:00:00Z",
        "user": {
          "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
        }
      },
      "name": "Segregation of duties violation in AP processing",
      "processes": [
        {
          "id": "2b1e5a7c-3d4f-4a1b-9c2d-6e7f8a9b0c1d",
          "name": "Financial Reporting"
        }
      ],
      "reportedDate": "2026-03-15",
      "risks": [],
      "rootCause": "Access controls not configured for dual-approval workflow.",
      "severity": "high",
      "soxDeficiency": "deficiency",
      "status": "open",
      "supplementalInformation": "Identified during Q3 walkthrough testing.",
      "targetRemediationDate": "2026-06-30",
      "type": "auditFinding"
    }
  ]
}
{
  "code": "invalidFilter",
  "message": "The $filter value could not be parsed.",
  "target": "$filter"
}
{
  "code": "unauthenticated",
  "message": "Authentication credentials were missing or invalid."
}
{
  "code": "permissionDenied",
  "message": "You do not have permission to access this resource."
}
{
  "code": "rateLimitExceeded",
  "message": "Rate limit exceeded. Retry after the period indicated in the response headers."
}
{
  "code": "internalError",
  "message": "An unexpected error occurred. Please try again later."
}
{
  "code": "503ServiceUnavailable",
  "message": "The server cannot handle the request due to a temporary overload or scheduled maintenance"
}