[{"data":1,"prerenderedAt":7},["ShallowReactive",2],{"docs-entities\u002Ftasks\u002Fflows-update":3,"docs-tabs-entities\u002Ftasks\u002Fflows-update":6},{"content":4,"lastmod":5},"## Update a flow\n\n`PATCH \u002Fv1\u002Ftasks\u002Fflows\u002F:flowId`\n\nChanges the settings of an existing task flow by its ID.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `flowId` (path) | number | yes | Flow ID, a positive integer. List: [`GET \u002Fv1\u002Ftasks\u002Fflows`](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-list) |\n\n## Request fields (body)\n\n| Field | Type | Required | Description |\n|------|-----|:-----:|----------|\n| `flowData` | object | yes | New values of the flow fields. Sent to Bitrix24 unchanged; the flow ID is taken from the path |\n| `flowData.id` | number | no | Flow ID. If passed, it must be a number equal to `flowId` from the path |\n| `flowData.name` | string | no | Flow name. It must not match the name of another flow in the Bitrix24 account |\n| `flowData.plannedCompletionTime` | number | no | Time to complete a task, in seconds, for example `86400` — one day |\n| `flowData.distributionType` | string | no | How tasks reach assignees: `manually` — a moderator assigns them, `queue` — in turn among the employees in `responsibleList`, `himself` — employees take tasks themselves |\n| `flowData.responsibleList` | array | no | Who 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 \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n| `flowData.groupId` | number | no | ID of the workgroup to bind the flow to. List: [`GET \u002Fv1\u002Fworkgroups`](\u002Fdocs\u002Fentities\u002Fworkgroups\u002Flist) |\n| `flowData.ownerId` | number | no | Flow administrator ID. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n| `flowData.taskCreators` | array | no | Who can submit tasks to the flow: an array of pairs. `[[\"meta-user\", \"all-users\"]]` — all employees |\n| `flowData.description` | string | no | Flow description. If not passed, reset to an empty string |\n| `flowData.matchWorkTime` | number | no | `1` — weekends and holidays are skipped when the deadline is calculated, `0` — they are counted. If not passed, reset to `1` |\n| `flowData.responsibleCanChangeDeadline` | number | no | `1` — the assignee can change the task deadline, `0` — cannot. If not passed, reset to `1` |\n| `flowData.taskControl` | number | no | `1` — a completed task goes to its creator for review, `0` — no review. If not passed, reset to `0` |\n| `flowData.notifyAtHalfTime` | number | no | `1` — remind the assignee halfway to the deadline, `0` — no reminder. If not passed, reset to `0` |\n| `flowData.notifyOnQueueOverflow` | number | no | Notify the flow administrator when the number of tasks in the queue exceeds this number. If not passed, reset to `null` — no notification |\n| `flowData.notifyOnTasksInProgressOverflow` | number | no | Notify the flow administrator when the number of tasks in progress exceeds this number. If not passed, reset to `null` — no notification |\n| `flowData.notifyWhenEfficiencyDecreases` | number | no | Notify the flow administrator when efficiency drops below this value, in percent. If not passed, reset to `null` — no notification |\n| `analyticsParams` | object | no | Internal Bitrix24 analytics tags. They do not affect the flow |\n\nThe 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`.\n\n**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 \u002Fv1\u002Ftasks\u002Fflows\u002F:flowId`](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-get) and pass the resettable fields with their current values.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Ftasks\u002Fflows\u002F20\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"flowData\": {\n      \"name\": \"Website request processing\",\n      \"description\": \"Customer requests from the website\",\n      \"plannedCompletionTime\": 172800\n    }\n  }'\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Ftasks\u002Fflows\u002F20\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"flowData\": {\n      \"name\": \"Website request processing\",\n      \"description\": \"Customer requests from the website\",\n      \"plannedCompletionTime\": 172800\n    }\n  }'\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Ftasks\u002Fflows\u002F20', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    flowData: {\n      name: 'Website request processing',\n      description: 'Customer requests from the website',\n      plannedCompletionTime: 172800,\n    },\n  }),\n})\n\nconst { success, data } = await res.json()\nif (success) {\n  console.log('New name:', data.name)\n}\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Ftasks\u002Fflows\u002F20', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    flowData: {\n      name: 'Website request processing',\n      description: 'Customer requests from the website',\n      plannedCompletionTime: 172800,\n    },\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|----------|\n| `success` | boolean | `true` on success |\n| `data` | object | The flow after the change. The set of fields is the same as in the [`GET \u002Fv1\u002Ftasks\u002Fflows\u002F:flowId`](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-get) response |\n| `data.id` | number | Flow ID |\n| `data.taskCreators` | array | An empty array, even if `taskCreators` was passed in the request or set earlier. The saved value is in [`GET \u002Fv1\u002Ftasks\u002Fflows\u002F:flowId`](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-get) |\n| `data.team` | array | An empty array. The flow team is in [`GET \u002Fv1\u002Ftasks\u002Fflows\u002F:flowId`](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-get) |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 20,\n    \"creatorId\": 1,\n    \"ownerId\": 1,\n    \"groupId\": 178,\n    \"templateId\": 0,\n    \"efficiency\": 100,\n    \"active\": true,\n    \"plannedCompletionTime\": 172800,\n    \"activity\": \"2026-10-20T00:23:04+00:00\",\n    \"name\": \"Website request processing\",\n    \"description\": \"Customer requests from the website\",\n    \"distributionType\": \"queue\",\n    \"responsibleList\": [\n      [\"user\", \"3\"]\n    ],\n    \"demo\": false,\n    \"responsibleCanChangeDeadline\": true,\n    \"matchWorkTime\": true,\n    \"matchSchedule\": false,\n    \"taskControl\": false,\n    \"notifyAtHalfTime\": false,\n    \"notifyOnQueueOverflow\": null,\n    \"notifyOnTasksInProgressOverflow\": null,\n    \"notifyWhenEfficiencyDecreases\": null,\n    \"taskCreators\": [],\n    \"team\": [],\n    \"trialFeatureEnabled\": false\n  }\n}\n```\n\n## Error response example\n\n422 — no flow with this `flowId` exists:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Unknown error. [Flow: 267]\",\n    \"b24Code\": \"0\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | `flowId` is not a positive integer. Message: `flowId must be a positive safe integer` |\n| 400 | `INVALID_PARAMS` | The body is not an object or contains keys other than `flowData` and `analyticsParams`. Message: `body must be an object with supported fields only` |\n| 400 | `INVALID_PARAMS` | `flowData` is not passed or is not an object. Message: `flowData must be an object` |\n| 400 | `INVALID_PARAMS` | `flowData.id` is not equal to `flowId` from the path or is passed as a string. Message: `flowData.id must match flowId` |\n| 400 | `INVALID_PARAMS` | `analyticsParams` is not an object. Message: `analyticsParams must be an object` |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `INVALID_API_KEY` | The key is not found |\n| 401 | `TOKEN_MISSING` | The key has no Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key has neither the `task` nor the `tasks` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode. `error.details.switchUrl` holds the address of the section where the mode is changed |\n| 422 | `BITRIX_ERROR` | No flow with this `flowId` exists. The message looks like `Unknown error. [Flow: 267]`; there is no `404` response in this case |\n| 422 | `BITRIX_ERROR` | The name is taken by another flow. Message: `A flow with this name already exists` |\n| 429 | `RATE_LIMITED` | The request rate to Bitrix24 or to the platform is exceeded. Retry after the delay in the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unreachable or returned a server error |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Flows and flow tasks](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows)\n- [Get a flow](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-get)\n- [List flows](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-list)\n- [Create a flow](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-create)\n- [Toggle flow activity](\u002Fdocs\u002Fentities\u002Ftasks\u002Fflows-activate)\n- [Employees](\u002Fdocs\u002Fentities\u002Fusers)\n- [Workgroups](\u002Fdocs\u002Fentities\u002Fworkgroups)\n","2026-10-20",{},1794739435197]