For AI agents: markdown of this page — /docs-content-en/entities/tasks/complete.md documentation index — /llms.txt

Complete task

POST /v1/tasks/:taskId/complete

Completes a task. If the creator's review is enabled for the task, it moves to the Awaiting Control status. Otherwise it moves straight to Completed.

Parameters

Parameter Type Required Description
ParametertaskId (path) Typenumber Requiredyes DescriptionTask ID. List: GET /v1/tasks

Request fields (body)

Field Type Required Description
Fieldparams Typeobject Requiredno DescriptionAdditional action parameters. Passed to Bitrix24 unchanged

The request body can be empty or {}. Any field other than params is rejected with 400 INVALID_PARAMS.

Examples

curl — personal key

Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/tasks/289/complete' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'

curl — OAuth application

Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/tasks/289/complete' \
  -H 'X-Api-Key: YOUR_APP_KEY' \
  -H 'Authorization: Bearer USER_SESSION_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'

JavaScript — personal key

javascript
const response = await fetch('https://vibecode.bitrix24.com/v1/tasks/289/complete', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({}),
})
const result = await response.json()
console.log(result.data.task.status)

JavaScript — OAuth application

javascript
const response = await fetch('https://vibecode.bitrix24.com/v1/tasks/289/complete', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({}),
})
const result = await response.json()
console.log(result.data.task.status)

Response fields

Field Type Description
Fieldsuccess Typeboolean Descriptiontrue on success
Fielddata.task Typeobject DescriptionThe full task object after the action. Values arrive in raw form: numbers as strings ("id": "289"), flags as Y or N ("taskControl": "Y"). GET /v1/tasks/:id returns the same fields as numbers and true/false
Fielddata.task.id Typestring DescriptionTask ID
Fielddata.task.status Typestring DescriptionStatus after the action: 5 — Completed or 4 — Awaiting Control. Value meanings: GET /v1/tasks/fields → fields.status.enum
Fielddata.task.closedBy Typestring DescriptionID of the user who closed the task. List: GET /v1/users
Fielddata.task.closedDate Typestring DescriptionClosing date, ISO 8601
Fielddata.task.action Typeobject DescriptionWhich actions the key's user can take after the call: the key is the action name (start, pause, complete, approve, disapprove, defer, renew and others), the value is true or false

Response example

Only the main fields of the task object are shown. The task was completed by its creator, so it closed at once even though review is enabled.

JSON
{
  "success": true,
  "data": {
    "task": {
      "id": "289",
      "title": "Prepare the quarterly report",
      "status": "5",
      "statusChangedDate": "2026-10-13T13:46:55+02:00",
      "createdBy": "1",
      "responsibleId": "1",
      "closedBy": "1",
      "closedDate": "2026-10-13T13:46:55+02:00",
      "taskControl": "Y",
      "action": {
        "start": false,
        "pause": false,
        "complete": false,
        "approve": false,
        "disapprove": false,
        "defer": false,
        "renew": true
      }
    }
  }
}

Error response example

422 — the task is already completed:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "This task action is not allowed.",
    "b24Code": "0"
  }
}

The error.message text comes from Bitrix24, so its wording and language depend on the Bitrix24 account language. Branch on error.code, not on the message text.

Errors

HTTP Code Description
HTTP400 CodeINVALID_PARAMS DescriptiontaskId is not a positive integer: taskId must be a positive integer
HTTP400 CodeINVALID_PARAMS DescriptionThe request body is not a JSON object: body must be an object
HTTP400 CodeINVALID_PARAMS DescriptionThe body contains fields other than params: body contains unsupported fields
HTTP400 CodeINVALID_PARAMS Descriptionparams is not an object: params must be an object
HTTP401 CodeMISSING_API_KEY DescriptionX-Api-Key is missing
HTTP401 CodeINVALID_API_KEY DescriptionThe key is not found
HTTP401 CodeTOKEN_MISSING DescriptionThe key has no valid Bitrix24 token
HTTP403 CodeSCOPE_DENIED DescriptionThe key lacks the task or tasks scope
HTTP403 CodeWRITE_BLOCKED_READONLY_KEY DescriptionThe key is read-only
HTTP403 CodeBITRIX_ACCESS_DENIED DescriptionThe key's user has no rights to the task
HTTP422 CodeBITRIX_ERROR DescriptionThe task is already completed: This task action is not allowed.
HTTP422 CodeBITRIX_ERROR DescriptionNo task exists with this taskId: Action unavailable

The full list of common API errors — Errors.

Known specifics

  • Which statuses allow completion. The action works on a task in the Pending, In Progress, Deferred and Awaiting Control statuses. From Awaiting Control the task moves straight to Completed. Renew a completed task first.
  • Creator's review. When taskControl is enabled and someone other than the creator completes the task, it goes to Awaiting Control. The creator then approves or rejects the result. If the creator completes it, the task closes at once even with review enabled.
  • Availability is visible in advance. The action map in the GET /v1/tasks/:id response shows complete: true when the key's user can complete the task right now.
  • A missing task does not return 404. An unknown taskId gets 422 BITRIX_ERROR with the message Action unavailable. To tell it apart from a status refusal, request the task with GET /v1/tasks/:id: for a missing task it returns 404.

See also