Update an action task#

Description#

Apply a JSON Patch (RFC 6902) to an action task of the issue. Only the replace operation is supported. Include one operation per field you want to change, at most 3 operations; fields without an operation are left unchanged.

Options#

| Path | PATCH Operations Supported | Value Type | |—————-|—————————-|———————————| | /name | replace | Non-empty string | | /description | replace | Non-empty string | | /dueDate | replace | RFC 3339 date-time string | null is not accepted for any of these paths. /dueDate takes an RFC 3339 date-time, as returned by dueDate; the action task is due at the end of that date (UTC), so the time of day is not kept. A due date in the past is allowed, so an overdue date can be synced; the action task then has the overdue status. The assignee and the status are not patchable; patching /assignee or /status returns 400. An action task that has been implemented or cancelled can no longer be changed and returns 409. Changes to an action task that has already been sent through Workiva are also applied to the assignee’s task.

An action task that does not exist, that does not belong to the issue, or that the caller cannot update returns 403, so the response does not reveal which ids exist.

PATCH /issues/{issueId}/actionTasks/{id}

Required OAuth Scopes

grc:write

Parameters#

Parameter

In

Type

Required

Description

X-Version

header

string

true

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

body

body

JSONPatchDocument

true

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.

issueId

path

string

true

The unique system identifier of the issue.

id

path

string

true

The unique system identifier of the resource.

Body parameter example#

[
  {
    "op": "replace",
    "path": "/name",
    "value": "Implement dual-approval workflow"
  },
  {
    "op": "replace",
    "path": "/dueDate",
    "value": "2099-06-30T23:59:00Z"
  }
]

Code Samples#

curl -X PATCH 'https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}' \
    -H 'Content-Type: application/json-patch+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 '[{"op":"replace","path":"/name","value":"Implement dual-approval workflow"},{"op":"replace","path":"/dueDate","value":"2099-06-30T23:59:00Z"}]'
echo '[{"op":"replace","path":"/name","value":"Implement dual-approval workflow"},{"op":"replace","path":"/dueDate","value":"2099-06-30T23:59:00Z"}]' | http PATCH https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id} \
    X-Version:2026-09-01.grc.preview \
    Content-Type:application/json-patch+json \
    Accept:application/json \
    Wk-Workspace:1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
    Authorization:"Bearer {access-token}"
wget --method=PATCH "https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}" \
    --output-document - \
    --header 'Content-Type: application/json-patch+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='[{"op":"replace","path":"/name","value":"Implement dual-approval workflow"},{"op":"replace","path":"/dueDate","value":"2099-06-30T23:59:00Z"}]'
import requests

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

body = [
  {
    "op": "replace",
    "path": "/name",
    "value": "Implement dual-approval workflow"
  },
  {
    "op": "replace",
    "path": "/dueDate",
    "value": "2099-06-30T23:59:00Z"
  }
]

r = requests.patch('https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}', headers = headers, json=body)

print(r.json())

Returns#

200 - The updated action task.#

An action task on a remediation issue — a discrete piece of remediation work assigned to a user and tracked through completion. Action tasks are available through GET /issues/{issueId}/actionTasks and GET /issues/{issueId}/actionTasks/{id}. No survey answers, survey templates, reminder schedules, schedule summaries, or file uploads are exposed.

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.

409 - The request conflicts with the state of the target resource, for example an operation attempted on an unsupported project type.#

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#

{
  "assignee": {
    "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
  },
  "assigneeStatus": "inProgress",
  "created": {
    "dateTime": "2026-03-15T14:30:00Z",
    "user": {
      "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
    }
  },
  "description": "Configure the AP system so purchase order creation and approval require two distinct users.",
  "dueDate": "2026-06-30T23:59:00Z",
  "id": "3f2b1a4c-6d5e-4f7a-8b9c-1d2e3f4a5b6c",
  "issue": {
    "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
  },
  "modified": {
    "dateTime": "2026-03-20T09:00:00Z",
    "user": {
      "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
    }
  },
  "name": "Implement dual-approval workflow",
  "sentAt": "2026-03-20T09:00:00Z",
  "status": "inProgress"
}
{
  "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": "unsupportedProjectType",
  "message": "This operation is only supported for Independent Controls Testing projects.",
  "target": "/type"
}
{
  "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"
}