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
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
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
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
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.
{
"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:
{
"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
taskControlis 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
actionmap in theGET /v1/tasks/:idresponse showscomplete: truewhen the key's user can complete the task right now. - A missing task does not return
404. An unknowntaskIdgets422 BITRIX_ERRORwith the messageAction unavailable. To tell it apart from a status refusal, request the task withGET /v1/tasks/:id: for a missing task it returns404.