For AI agents: markdown of this page — /docs-content-en/entities/tasks/flows-update.md documentation index — /llms.txt
Update a flow
PATCH /v1/tasks/flows/:flowId
Changes the settings of an existing task flow by its ID.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ParameterflowId (path) |
Typenumber | Requiredyes | DescriptionFlow ID, a positive integer. List: GET /v1/tasks/flows |
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
FieldflowData |
Typeobject | Requiredyes | DescriptionNew values of the flow fields. Sent to Bitrix24 unchanged; the flow ID is taken from the path |
FieldflowData.id |
Typenumber | Requiredno | DescriptionFlow ID. If passed, it must be a number equal to flowId from the path |
FieldflowData.name |
Typestring | Requiredno | DescriptionFlow name. It must not match the name of another flow in the Bitrix24 account |
FieldflowData.plannedCompletionTime |
Typenumber | Requiredno | DescriptionTime to complete a task, in seconds, for example 86400 — one day |
FieldflowData.distributionType |
Typestring | Requiredno | DescriptionHow tasks reach assignees: manually — a moderator assigns them, queue — in turn among the employees in responsibleList, himself — employees take tasks themselves |
FieldflowData.responsibleList |
Typearray | Requiredno | DescriptionWho receives the tasks: an array of pairs like ["user", "3"], where the second element is the employee ID as a string. With manually, the list holds the flow moderator. List: GET /v1/users |
FieldflowData.groupId |
Typenumber | Requiredno | DescriptionID of the workgroup to bind the flow to. List: GET /v1/workgroups |
FieldflowData.ownerId |
Typenumber | Requiredno | DescriptionFlow administrator ID. List: GET /v1/users |
FieldflowData.taskCreators |
Typearray | Requiredno | DescriptionWho can submit tasks to the flow: an array of pairs. [["meta-user", "all-users"]] — all employees |
FieldflowData.description |
Typestring | Requiredno | DescriptionFlow description. If not passed, reset to an empty string |
FieldflowData.matchWorkTime |
Typenumber | Requiredno | Description1 — weekends and holidays are skipped when the deadline is calculated, 0 — they are counted. If not passed, reset to 1 |
FieldflowData.responsibleCanChangeDeadline |
Typenumber | Requiredno | Description1 — the assignee can change the task deadline, 0 — cannot. If not passed, reset to 1 |
FieldflowData.taskControl |
Typenumber | Requiredno | Description1 — a completed task goes to its creator for review, 0 — no review. If not passed, reset to 0 |
FieldflowData.notifyAtHalfTime |
Typenumber | Requiredno | Description1 — remind the assignee halfway to the deadline, 0 — no reminder. If not passed, reset to 0 |
FieldflowData.notifyOnQueueOverflow |
Typenumber | Requiredno | DescriptionNotify the flow administrator when the number of tasks in the queue exceeds this number. If not passed, reset to null — no notification |
FieldflowData.notifyOnTasksInProgressOverflow |
Typenumber | Requiredno | DescriptionNotify the flow administrator when the number of tasks in progress exceeds this number. If not passed, reset to null — no notification |
FieldflowData.notifyWhenEfficiencyDecreases |
Typenumber | Requiredno | DescriptionNotify the flow administrator when efficiency drops below this value, in percent. If not passed, reset to null — no notification |
FieldanalyticsParams |
Typeobject | Requiredno | DescriptionInternal Bitrix24 analytics tags. They do not affect the flow |
The body must not contain keys other than flowData and analyticsParams. Flags are passed as the numbers 1 and 0 and come back in the response as true and false.
Important: the fields marked "If not passed, reset to …" are reset on every call, including a call with "flowData": {}. Other fields missing from flowData keep their current values. To change one setting without losing the others, read the flow with GET /v1/tasks/flows/:flowId and pass the resettable fields with their current values.
Examples
curl — personal key
curl -X PATCH "https://vibecode.bitrix24.com/v1/tasks/flows/20" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"flowData": {
"name": "Website request processing",
"description": "Customer requests from the website",
"plannedCompletionTime": 172800
}
}'
curl — OAuth application
curl -X PATCH "https://vibecode.bitrix24.com/v1/tasks/flows/20" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"flowData": {
"name": "Website request processing",
"description": "Customer requests from the website",
"plannedCompletionTime": 172800
}
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/tasks/flows/20', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
flowData: {
name: 'Website request processing',
description: 'Customer requests from the website',
plannedCompletionTime: 172800,
},
}),
})
const { success, data } = await res.json()
if (success) {
console.log('New name:', data.name)
}
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/tasks/flows/20', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
flowData: {
name: 'Website request processing',
description: 'Customer requests from the website',
plannedCompletionTime: 172800,
},
}),
})
const { success, data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on success |
Fielddata |
Typeobject | DescriptionThe flow after the change. The set of fields is the same as in the GET /v1/tasks/flows/:flowId response |
Fielddata.id |
Typenumber | DescriptionFlow ID |
Fielddata.taskCreators |
Typearray | DescriptionAn empty array, even if taskCreators was passed in the request or set earlier. The saved value is in GET /v1/tasks/flows/:flowId |
Fielddata.team |
Typearray | DescriptionAn empty array. The flow team is in GET /v1/tasks/flows/:flowId |
Response example
{
"success": true,
"data": {
"id": 20,
"creatorId": 1,
"ownerId": 1,
"groupId": 178,
"templateId": 0,
"efficiency": 100,
"active": true,
"plannedCompletionTime": 172800,
"activity": "2026-10-20T00:23:04+00:00",
"name": "Website request processing",
"description": "Customer requests from the website",
"distributionType": "queue",
"responsibleList": [
["user", "3"]
],
"demo": false,
"responsibleCanChangeDeadline": true,
"matchWorkTime": true,
"matchSchedule": false,
"taskControl": false,
"notifyAtHalfTime": false,
"notifyOnQueueOverflow": null,
"notifyOnTasksInProgressOverflow": null,
"notifyWhenEfficiencyDecreases": null,
"taskCreators": [],
"team": [],
"trialFeatureEnabled": false
}
}
Error response example
422 — no flow with this flowId exists:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "Unknown error. [Flow: 267]",
"b24Code": "0"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
DescriptionflowId is not a positive integer. Message: flowId must be a positive safe integer |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionThe body is not an object or contains keys other than flowData and analyticsParams. Message: body must be an object with supported fields only |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionflowData is not passed or is not an object. Message: flowData must be an object |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionflowData.id is not equal to flowId from the path or is passed as a string. Message: flowData.id must match flowId |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionanalyticsParams is not an object. Message: analyticsParams must be an object |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header is missing |
| HTTP401 | CodeINVALID_API_KEY |
DescriptionThe key is not found |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no Bitrix24 tokens |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key has neither the task nor the tasks scope |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionThe key is in read-only mode. error.details.switchUrl holds the address of the section where the mode is changed |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionNo flow with this flowId exists. The message looks like Unknown error. [Flow: 267]; there is no 404 response in this case |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionThe name is taken by another flow. Message: A flow with this name already exists |
| HTTP429 | CodeRATE_LIMITED |
DescriptionThe request rate to Bitrix24 or to the platform is exceeded. Retry after the delay in the Retry-After header |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
DescriptionBitrix24 is unreachable or returned a server error |
| HTTP503 | CodeBITRIX_TIMEOUT |
DescriptionBitrix24 did not respond in time |
Full list of common API errors — Errors.