Implement an action task#

Description#

Mark an action task as implemented by the issue owner and return it. Use it to carry completion of the work in an external system back to Workiva. Takes no request body.

Only status changes, to implemented, and implementedAt is set. assigneeStatus is unchanged. If the action task was sent from the Workiva app, the assignee’s Task Portal task is cancelled.

Allowed from notSent, inProgress or overdue. Implementing an action task that is already implemented returns it unchanged with 200. A cancelled action task returns 409.

An action task that does not exist, that belongs to a different issue than the one in the path, or that the caller cannot change returns 403, so the response does not reveal which ids exist.

POST /issues/{issueId}/actionTasks/{id}/implementation

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)

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.

Code Samples#

curl -X POST https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}/implementation \
    -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'
http POST https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}/implementation \
    X-Version:2026-09-01.grc.preview \
    Accept:application/json \
    Wk-Workspace:1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
    Authorization:"Bearer {access-token}"
wget --method=POST "https://api.app.wdesk.com/issues/{issueId}/actionTasks/{id}/implementation" \
    --output-document - \
    --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'
import requests

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

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

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": "cancelled",
  "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",
  "implementedAt": "2026-05-12T10:00:00Z",
  "issue": {
    "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
  },
  "modified": {
    "dateTime": "2026-05-12T10:00:00Z",
    "user": {
      "id": "u_4cc9f9128a684f45a7a37b08b70b54c1"
    }
  },
  "name": "Implement dual-approval workflow",
  "sentAt": "2026-03-20T09:00:00Z",
  "status": "implemented"
}
{
  "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"
}