[{"data":1,"prerenderedAt":10},["ShallowReactive",2],{"docs-scrum\u002Fbacklogs":3,"docs-tabs-scrum\u002Fbacklogs":6},{"content":4,"lastmod":5},"# Scrum backlogs\n\nCreate, update and delete the backlog of a Scrum project. A project has one backlog. Tasks are added to it through [task placement in scrum](\u002Fdocs\u002Fscrum\u002Ftasks).\n\n**Scope:** `task` | **Base URL:** `https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1` | **Auth:** `X-Api-Key`\n\n## Operations\n\n- [Create a backlog](.\u002Fbacklogs\u002Fcreate.md) — `POST \u002Fv1\u002Fscrum\u002Fbacklogs`\n- [Update a backlog](.\u002Fbacklogs\u002Fupdate.md) — `PATCH \u002Fv1\u002Fscrum\u002Fbacklogs\u002F:id`\n- [Delete a backlog](.\u002Fbacklogs\u002Fdelete.md) — `DELETE \u002Fv1\u002Fscrum\u002Fbacklogs\u002F:id`\n\n## How to get the backlog ID\n\nA backlog is addressed by its own `id`, not by the group ID. It is returned by [backlog creation](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fcreate). For a task placed in the backlog, the same ID comes in the `entityId` field of the [`GET \u002Fv1\u002Fscrum\u002Ftasks\u002F:taskId`](\u002Fdocs\u002Fscrum\u002Ftasks\u002Fget) response.\n\n## See also\n\n- [Scrum](\u002Fdocs\u002Fscrum)\n- [Task placement](\u002Fdocs\u002Fscrum\u002Ftasks)\n- [Workgroups](\u002Fdocs\u002Fentities\u002Fworkgroups)\n","2026-10-19",{"backlogs\u002Fcreate.md":7,"backlogs\u002Fupdate.md":8,"backlogs\u002Fdelete.md":9},"## Create a backlog\n\n`POST \u002Fv1\u002Fscrum\u002Fbacklogs`\n\nCreates a backlog in a Scrum project that does not have one. The request body is flat, with no `fields` wrapper.\n\n## Request fields (body)\n\n| Field | Type | Required | Description |\n|------|-----|:-----:|---------|\n| `groupId` | number | yes | Scrum project ID. Group list: [`GET \u002Fv1\u002Fworkgroups`](\u002Fdocs\u002Fentities\u002Fworkgroups\u002Flist) |\n| `createdBy` | number | yes | Creator user ID. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n| `modifiedBy` | number | no | ID of the user who modified the backlog. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n\nWithout `createdBy` the backlog is not created: the response is `422 BITRIX_ERROR` with the message `Unable to add backlog`.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"groupId\": 175, \"createdBy\": 1 }'\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"groupId\": 175, \"createdBy\": 1 }'\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ groupId: 175, createdBy: 1 }),\n})\n\nconst { data } = await res.json()\nconsole.log('Backlog ID:', data.id)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs', {\n  method: 'POST',\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({ groupId: 175, createdBy: 1 }),\n})\n\nconst { data } = await res.json()\nconsole.log('Backlog ID:', data.id)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | `true` on successful creation, HTTP status `201` |\n| `data.id` | number | ID of the created backlog |\n| `data.groupId` | number | Scrum project ID |\n| `data.createdBy` | number | Creator user ID |\n| `data.modifiedBy` | number | ID of the user who modified the backlog. `0` if `modifiedBy` is not passed |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 43,\n    \"groupId\": 175,\n    \"createdBy\": 1,\n    \"modifiedBy\": 0\n  }\n}\n```\n\n## Error response example\n\n422 — the project already has a backlog:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Backlog already added\",\n    \"b24Code\": \"0\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `groupId` is missing, a field outside the table is passed, or an ID is not a positive integer |\n| 422 | `BITRIX_ERROR` | `Backlog already added` — the project already has a backlog |\n| 422 | `BITRIX_ERROR` | `Unable to add backlog` — `createdBy` is missing or the group is not a Scrum project |\n| 422 | `BITRIX_ERROR` | `Access denied` — no group with this ID exists or there is no access to it |\n| 403 | `SCOPE_DENIED` | The key lacks the `task` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is read-only |\n| 401 | `TOKEN_MISSING` | The key has no configured tokens |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Update a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fupdate)\n- [Delete a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fdelete)\n- [Scrum backlogs](\u002Fdocs\u002Fscrum\u002Fbacklogs)\n","## Update a backlog\n\n`PATCH \u002Fv1\u002Fscrum\u002Fbacklogs\u002F:id`\n\nChanges the fields of a Scrum project backlog. Partial update — pass only what changes.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | yes | Backlog ID, not the group ID. Where to get it — [Scrum backlogs](\u002Fdocs\u002Fscrum\u002Fbacklogs) |\n\n## Request fields (body)\n\n| Field | Type | Required | Description |\n|------|-----|:-----:|---------|\n| `groupId` | number | no | Scrum project ID. Group list: [`GET \u002Fv1\u002Fworkgroups`](\u002Fdocs\u002Fentities\u002Fworkgroups\u002Flist) |\n| `createdBy` | number | no | Creator user ID. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n| `modifiedBy` | number | no | ID of the user who modified the backlog. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers\u002Flist) |\n\nAt least one field is required.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43 \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"modifiedBy\": 1 }'\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"modifiedBy\": 1 }'\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ modifiedBy: 1 }),\n})\n\nconst { data } = await res.json()\nconsole.log(data.modifiedBy)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43', {\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({ modifiedBy: 1 }),\n})\n\nconst { data } = await res.json()\nconsole.log(data.modifiedBy)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | `true` on successful update |\n| `data.id` | number | Backlog ID |\n| `data.groupId` | number | Scrum project ID |\n| `data.createdBy` | number | Creator user ID |\n| `data.modifiedBy` | number | ID of the user who modified the backlog |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 43,\n    \"groupId\": 175,\n    \"createdBy\": 1,\n    \"modifiedBy\": 1\n  }\n}\n```\n\n## Error response example\n\n404 — no backlog with this ID exists:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Backlog not found\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Empty body, a field not listed in the table, or an ID that is not a positive integer |\n| 404 | `ENTITY_NOT_FOUND` | No backlog with this `id` exists |\n| 422 | `BITRIX_ERROR` | `createdBy user not found` — no user with this ID exists |\n| 403 | `SCOPE_DENIED` | The key lacks the `task` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is read-only |\n| 401 | `TOKEN_MISSING` | The key has no configured tokens |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Create a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fcreate)\n- [Delete a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fdelete)\n- [Scrum backlogs](\u002Fdocs\u002Fscrum\u002Fbacklogs)\n","## Delete a backlog\n\n`DELETE \u002Fv1\u002Fscrum\u002Fbacklogs\u002F:id`\n\nDeletes a Scrum project backlog. A deleted backlog cannot be restored through the API — create a new one if needed.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | yes | Backlog ID, not the group ID. Where to get it — [Scrum backlogs](\u002Fdocs\u002Fscrum\u002Fbacklogs) |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success } = await res.json()\nconsole.log('Deleted:', success)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fscrum\u002Fbacklogs\u002F43', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success } = await res.json()\nconsole.log('Deleted:', success)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | `true` on successful deletion, HTTP status `200` |\n| `data` | array | Empty array |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": []\n}\n```\n\n## Error response example\n\n404 — no backlog with this ID exists, including on repeated deletion:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Backlog not found\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `id` is not a positive integer |\n| 404 | `ENTITY_NOT_FOUND` | No backlog with this `id` exists |\n| 403 | `SCOPE_DENIED` | The key lacks the `task` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is read-only |\n| 401 | `TOKEN_MISSING` | The key has no configured tokens |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Create a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fcreate)\n- [Update a backlog](\u002Fdocs\u002Fscrum\u002Fbacklogs\u002Fupdate)\n- [Scrum backlogs](\u002Fdocs\u002Fscrum\u002Fbacklogs)\n",1794739600947]