Send an action task for work in an external system#

Description#

Mark an action task as sent because the work is now being done in an external system, such as a Jira or ServiceNow ticket. Takes no request body.

The call sets both status and assigneeStatus to inProgress and records sentAt.

This is not the same as sending an action task from the Workiva app. Workiva does not create a Task Portal task for the assignee, does not send the assignee a notification or email, and reminders cannot be sent for the action task afterwards. Sending from the Workiva app does all of those.

overdue is computed from the due date: an action task whose due date has passed reports status: overdue until it is implemented or cancelled, including after this call. In that case status stays overdue while assigneeStatus shows inProgress.

Allowed only while the action task has not been sent (notSent, or overdue for one that was never sent). Retrying is safe: an action task that was already sent through this endpoint is returned unchanged with 200. An action task that was sent from the Workiva app, or that is implemented or cancelled, 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}/externalSubmission

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}/externalSubmission \
    -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}/externalSubmission \
    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}/externalSubmission" \
    --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}/externalSubmission', 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": "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"
}