[{"data":1,"prerenderedAt":16},["ShallowReactive",2],{"docs-chats\u002Fstickers":3,"docs-tabs-chats\u002Fstickers":6},{"content":4,"lastmod":5},"# Stickers\n\nRead the user's sticker packs and manage them: renaming and deleting your own packs, adding other users' packs, deleting stickers and clearing the recent list.\n\n**Scope:** `im` | **Base URL:** `https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1` | **Authorization:** `X-Api-Key`\n\n## Operations\n\n- [List of packs](.\u002Fstickers\u002Fpacks.md) — `GET \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks`\n- [Get a pack](.\u002Fstickers\u002Fpack-get.md) — `GET \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n- [Rename a pack](.\u002Fstickers\u002Fpack-update.md) — `PATCH \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n- [Delete a pack](.\u002Fstickers\u002Fpack-delete.md) — `DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n- [Add a pack](.\u002Fstickers\u002Flink-create.md) — `POST \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Flink`\n- [Remove a pack](.\u002Fstickers\u002Flink-delete.md) — `DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Flink`\n- [Delete stickers from a pack](.\u002Fstickers\u002Fpack-stickers.md) — `DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Fstickers`\n- [Clear the recent list](.\u002Fstickers\u002Frecent.md) — `DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent`\n- [Remove a sticker from the recent list](.\u002Fstickers\u002Frecent-delete.md) — `DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F:stickerId`\n\n## Two kinds of packs\n\n- `vendor` — built-in Bitrix24 packs. They can be read but cannot be renamed, deleted or removed from the list.\n- `custom` — packs uploaded by users. Only the author can rename or delete a pack; another user's pack can be added to your own list.\n\nThe two kinds are numbered independently: a built-in pack and a user pack may share the same `id`. That is why a pack is always addressed by a pair — `packId` in the path and `packType` in the query parameters.\n\nYou cannot create a pack or add stickers to it through the API.\n\n## See also\n\n- [Chats and messages](\u002Fdocs\u002Fchats)\n- [Messages](\u002Fdocs\u002Fchats\u002Fmessages)\n","2026-10-07",{"stickers\u002Fpacks.md":7,"stickers\u002Fpack-get.md":8,"stickers\u002Fpack-update.md":9,"stickers\u002Fpack-delete.md":10,"stickers\u002Flink-create.md":11,"stickers\u002Flink-delete.md":12,"stickers\u002Fpack-stickers.md":13,"stickers\u002Frecent.md":14,"stickers\u002Frecent-delete.md":15},"## List of sticker packs\n\n`GET \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks`\n\nReturns the current user's sticker packs page by page: user packs (`custom`) first, then built-in ones (`vendor`). To get the next page, pass the `id` and `type` of the last pack of the previous page.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `limit` | number | no | Packs per page: 10 by default, from 1 to 200. An out-of-range value is clamped to the nearest bound; the requested and applied values are returned in `meta` |\n| `lastId` | number | no | Cursor: `id` of the last pack of the previous page. Passed only together with `lastType` |\n| `lastType` | string | no | Cursor: `type` of the last pack of the previous page — `vendor` or `custom`. Passed only together with `lastId` |\n\nWithout a cursor, the first page is returned. Other parameters, a repeated parameter or only one half of the cursor are rejected with `400 INVALID_PARAMS` before any Bitrix24 call.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks?limit=20\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks?limit=20\" \\\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\u002Fchats\u002Fstickers\u002Fpacks?limit=20', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data } = await res.json()\nconsole.log('Packs:', data.packs.length, 'more:', data.hasNextPage)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks?limit=20', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\nconsole.log('Packs:', data.packs.length, 'more:', data.hasNextPage)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.packs` | array | Packs on the page |\n| `data.packs[].id` | number | Pack ID. Unique only together with `type`. Pass it as `packId` to [get a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get) |\n| `data.packs[].type` | string | `custom` — a user pack, `vendor` — a built-in pack |\n| `data.packs[].name` | string | Pack name |\n| `data.packs[].authorId` | number \\| null | ID of the author of a user pack; `null` for a built-in pack. Profile — by [user ID](\u002Fdocs\u002Fentities\u002Fusers\u002Fget) |\n| `data.packs[].isAdded` | boolean | The pack is in the user's list |\n| `data.stickers` | array | Stickers of the page's packs and, on the first page, also the recent stickers |\n| `data.stickers[].id` | number | Sticker ID — for [deleting stickers from a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-stickers) |\n| `data.stickers[].packId` | number | ID of the sticker's pack — matches `data.packs[].id` |\n| `data.stickers[].packType` | string | Kind of the sticker's pack |\n| `data.stickers[].uri` | string | Path to the image in the Bitrix24 account — relative, without the domain |\n| `data.stickers[].type` | string | Sticker type (`image`) |\n| `data.stickers[].width` | number | Image width in pixels |\n| `data.stickers[].height` | number | Image height in pixels |\n| `data.stickers[].sort` | number | Sticker order in the pack |\n| `data.recentStickers` | array | First page only: stickers the user sent recently, at most 12, newest first — `{ id, packId, packType }` |\n| `data.hasNextPage` | boolean | There is a next page |\n| `meta.requestedLimit` | number | The `limit` passed — only if it was clamped to a bound |\n| `meta.appliedLimit` | number | The `limit` applied — only if it was clamped to a bound |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"stickers\": [\n      { \"id\": 1, \"uri\": \"\u002Fupload\u002Fim\u002Fstickers\u002F3\u002F1.png\", \"type\": \"image\", \"width\": 512, \"height\": 512, \"packId\": 3, \"packType\": \"custom\", \"sort\": 1 },\n      { \"id\": 2, \"uri\": \"\u002Fbitrix\u002Fimages\u002Fim\u002Fstickers\u002FaiHelp\u002F2.png?v1\", \"type\": \"image\", \"width\": 512, \"height\": 512, \"packId\": 14, \"packType\": \"vendor\", \"sort\": 2 }\n    ],\n    \"packs\": [\n      { \"id\": 3, \"name\": \"Work stickers\", \"type\": \"custom\", \"authorId\": 7, \"isAdded\": true },\n      { \"id\": 14, \"name\": \"AI, help\", \"type\": \"vendor\", \"authorId\": null, \"isAdded\": true }\n    ],\n    \"recentStickers\": [\n      { \"id\": 2, \"packId\": 14, \"packType\": \"vendor\" }\n    ],\n    \"hasNextPage\": true\n  }\n}\n```\n\n## Error response example\n\n400 — only one half of the cursor was passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"`lastId` needs `lastType`: pass the `id` and the `type` of the last pack of the previous page together.\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | An unknown query parameter was passed |\n| 400 | `INVALID_PARAMS` | A parameter was passed more than once |\n| 400 | `INVALID_PARAMS` | `limit` is not an integer |\n| 400 | `INVALID_PARAMS` | `lastId` was passed without `lastType` |\n| 400 | `INVALID_PARAMS` | `lastType` was passed without `lastId` |\n| 400 | `INVALID_PARAMS` | `lastId` is not a positive integer |\n| 400 | `INVALID_PARAMS` | `lastType` is neither `vendor` nor `custom` |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | A read-only key requested the first page — without `lastId` and `lastType`. Cursor pages work with a read-only key too |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object. The portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | Bitrix24 returned an error. The portal code is in `error.b24Code` |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- The last page may be empty, with `hasNextPage: false`.\n- If the cursor pack was deleted or removed from the user's list between requests, the list of user packs starts over from the beginning. Deduplicate packs by the `type` and `id` pair.\n- `recentStickers` arrives on the first page only. The first request deletes recent-sticker rows beyond 12, so it is classified as a write: a read-only key receives `403 WRITE_BLOCKED_READONLY_KEY` before any Bitrix24 call. Cursor pages remain reads.\n- `uri` is a path in the Bitrix24 account. The full image address is the Bitrix24 account domain plus `uri`.\n\n## See also\n\n- [Get a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get)\n- [Recent stickers](\u002Fdocs\u002Fchats\u002Fstickers\u002Frecent)\n- [Stickers](\u002Fdocs\u002Fchats\u002Fstickers)\n","## Get a sticker pack\n\n`GET \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n\nReturns a sticker pack with all its stickers: a built-in pack or any user pack in the Bitrix24 account, not only your own. This is how Bitrix24 shows the pack of a sticker that arrived in a message.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — `data.packs[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) or the `packId` of a sticker from a message (the `data.stickers` field of the [first page of messages](\u002Fdocs\u002Fchats\u002Fmessages\u002Finitial)) |\n| `packType` (query) | string | yes | `vendor` — a built-in pack, `custom` — a user pack |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F14?packType=vendor\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F14?packType=vendor\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F14?packType=vendor', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data } = await res.json()\nconsole.log(data.pack.name, '— stickers:', data.stickers.length)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F14?packType=vendor', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\nconsole.log(data.pack.name, '— stickers:', data.stickers.length)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.pack` | object | The pack |\n| `data.pack.id` | number | Pack ID |\n| `data.pack.name` | string | Pack name |\n| `data.pack.type` | string | Pack type: `vendor` or `custom` |\n| `data.pack.authorId` | number \\| null | ID of the author of a user pack; `null` for a built-in pack |\n| `data.pack.isAdded` | boolean | The pack is in the user's list |\n| `data.stickers` | array | Stickers of the pack |\n| `data.stickers[].id` | number | Sticker ID |\n| `data.stickers[].packId` | number | Pack ID |\n| `data.stickers[].packType` | string | Pack type: `vendor` or `custom` |\n| `data.stickers[].uri` | string | Path to the image in the Bitrix24 account — relative, without the domain |\n| `data.stickers[].type` | string | Sticker type: `image` |\n| `data.stickers[].width` | number | Image width in pixels |\n| `data.stickers[].height` | number | Image height in pixels |\n| `data.stickers[].sort` | number | Sticker order in the pack |\n\n## Response example\n\nTwo stickers of the pack are shown:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"stickers\": [\n      { \"id\": 1, \"uri\": \"\u002Fbitrix\u002Fimages\u002Fim\u002Fstickers\u002FaiHelp\u002F1.png?v1\", \"type\": \"image\", \"width\": 512, \"height\": 512, \"packId\": 14, \"packType\": \"vendor\", \"sort\": 1 },\n      { \"id\": 2, \"uri\": \"\u002Fbitrix\u002Fimages\u002Fim\u002Fstickers\u002FaiHelp\u002F2.png?v1\", \"type\": \"image\", \"width\": 512, \"height\": 512, \"packId\": 14, \"packType\": \"vendor\", \"sort\": 2 }\n    ],\n    \"pack\": { \"id\": 14, \"name\": \"AI Help\", \"type\": \"vendor\", \"authorId\": null, \"isAdded\": true }\n  }\n}\n```\n\n## Error response example\n\n422 — there is no pack with this `id` and `packType`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"PACK_NOT_AVAILABLE\",\n    \"b24Code\": \"PACK_NOT_AVAILABLE\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `packId` is not a positive integer, `packType` is missing or is not `vendor` \u002F `custom`, another parameter was passed, or a parameter was repeated |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object; the portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `PACK_NOT_AVAILABLE` — the pack does not exist |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- A built-in pack and a user pack may have the same `id`, so `packType` is required.\n\n## See also\n\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Rename a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-update)\n- [Delete a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-delete)\n- [Add a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Flink-create)\n","## Rename a pack\n\n`PATCH \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n\nChanges the name of a user sticker pack — only the pack's author can rename it.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — `data.packs[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) |\n| `packType` (query) | string | yes | Pack type. Only `custom` packs can be changed |\n\n## Request body fields\n\n| Field | Type | Required | Description |\n|------|-----|:-----:|----------|\n| `name` | string | yes | New name: non-empty, up to 255 characters as stored by Bitrix24. An emoji above U+FFFF counts as 10 characters |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"name\": \"Team stickers\"}'\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"name\": \"Team stickers\"}'\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom', {\n  method: 'PATCH',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application\u002Fjson' },\n  body: JSON.stringify({ name: 'Team stickers' }),\n})\n\nconst { success } = await res.json()\nconsole.log('Renamed:', success)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom', {\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({ name: 'Team stickers' }),\n})\n\nconst { success } = await res.json()\nconsole.log('Renamed:', success)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.result` | boolean | `true` — the name was changed |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n422 — the pack does not exist:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"PACK_NOT_FOUND\",\n    \"b24Code\": \"PACK_NOT_FOUND\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `MISSING_PARAMS` | The `name` field is missing |\n| 400 | `INVALID_PARAMS` | `name` is empty, not a string or longer than 255 characters, the body contains a field other than `name`, the body is not a JSON object, `packId` or `packType` is invalid, another query parameter was passed or a parameter was repeated. `packType` goes in the query parameters, not in the body |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 403 | `BITRIX_ACCESS_DENIED` | The pack is built-in or its author is another user |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object; the portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `PACK_NOT_FOUND` — the pack does not exist, `EMPTY_PACK_NAME` — Bitrix24 considered the name empty |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- A built-in pack and a user pack may have the same `id`, so `packType` is required.\n- Leading and trailing spaces are trimmed from the name. The name `0` counts as empty — the response is `422` with `error.b24Code` set to `EMPTY_PACK_NAME`.\n\n## See also\n\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Get a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get)\n- [Delete a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-delete)\n","## Delete a pack\n\n`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId`\n\nDeletes a user pack: it disappears for everyone who added it, and its sticker files are deleted. The pack cannot be restored. Only the pack author can delete it.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — `data.packs[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) |\n| `packType` (query) | string | yes | Pack type. Only `custom` can be deleted |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom', {\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3?packType=custom', {\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 | Always `true` on success |\n| `data.result` | boolean | `true` — the pack was deleted |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n422 — the pack does not exist, for example because it has already been deleted:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"PACK_NOT_FOUND\",\n    \"b24Code\": \"PACK_NOT_FOUND\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `packId` is not a positive integer, `packType` is missing or invalid, another parameter or body field was passed, a parameter was repeated |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 403 | `BITRIX_ACCESS_DENIED` | The pack is built-in or its author is another user |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object; the portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `PACK_NOT_FOUND` — the pack does not exist |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- A built-in pack and a user pack may have the same `id`, so `packType` is required.\n\n## See also\n\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Get a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get)\n- [Rename a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-update)\n- [Delete stickers from a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-stickers)\n","## Add a pack\n\n`POST \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Flink`\n\nAdds another author's user sticker pack to the current user's list of packs. This is how you add the pack of a sticker that arrived in a message. No request body is needed.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — the `packId` of a sticker from a message, the `data.stickers` field of the [first page of messages](\u002Fdocs\u002Fchats\u002Fmessages\u002Finitial) |\n| `packType` (query) | string | yes | Pack type. Only `custom` can be added |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom', {\n  method: 'POST',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data } = await res.json()\nconsole.log('Added pack', data.pack.name)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\nconsole.log('Added pack', data.pack.name)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.pack` | object | The added pack — the same fields as in the [get a pack response](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get) |\n| `data.stickers` | array | Stickers of the pack — the same fields as in the [get a pack response](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get) |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"stickers\": [\n      { \"id\": 1, \"uri\": \"\u002Fupload\u002Fim\u002Fstickers\u002F3\u002F1.png\", \"type\": \"image\", \"width\": 512, \"height\": 512, \"packId\": 3, \"packType\": \"custom\", \"sort\": 1 }\n    ],\n    \"pack\": { \"id\": 3, \"name\": \"Work stickers\", \"type\": \"custom\", \"authorId\": 7, \"isAdded\": true }\n  }\n}\n```\n\n## Error response example\n\n403 — the pack is built-in:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ACCESS_DENIED\",\n    \"message\": \"ACCESS_DENIED\",\n    \"hint\": \"Bitrix24 refused this call; the cause is not determined.\",\n    \"cause\": \"unknown\",\n    \"fix\": { \"action\": \"none\" }\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `packId` is not a positive integer, `packType` is missing or invalid, another parameter or body field was passed, a parameter was repeated |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 403 | `BITRIX_ACCESS_DENIED` | The pack is built-in |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object; the portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `LINK_EXISTS` — the pack is already in the list, `PACK_NOT_FOUND` — the pack does not exist, `MAX_PACKS_ERROR` — the list already has 50 user packs |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- An author's own pack is in their list from the moment it is created: it cannot be added again, and the response is `422` with `error.b24Code` `LINK_EXISTS`.\n- Sticker error codes come without a message text: `message` equals the code.\n\n## See also\n\n- [Remove a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Flink-delete)\n- [Get a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get)\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n","## Remove a pack\n\n`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Flink`\n\nRemoves an added user sticker pack from the current user's list of packs. The pack stays with its author and with other users, and it can be added again. The author cannot remove their own pack, only delete it.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — `data.packs[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) |\n| `packType` (query) | string | yes | Pack type. Only `custom` can be removed |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success } = await res.json()\nconsole.log('Removed:', success)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Flink?packType=custom', {\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('Removed:', success)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.result` | boolean | `true` — the pack was removed from the list |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n422 — the pack does not exist:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"PACK_NOT_FOUND\",\n    \"b24Code\": \"PACK_NOT_FOUND\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `packId` is not a positive integer, `packType` is missing or invalid, another parameter or body field was passed, a parameter was repeated |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 403 | `BITRIX_ACCESS_DENIED` | The pack is built-in or it is the user's own pack |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object; the portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `PACK_NOT_FOUND` — the pack does not exist |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- Removing an existing pack that is not in the user's list succeeds without an error.\n\n## See also\n\n- [Add a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Flink-create)\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Delete a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-delete)\n","## Delete stickers from a pack\n\n`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F:packId\u002Fstickers`\n\nDeletion is irreversible: the stickers disappear from the pack for everyone who added it, and their files are deleted.\n\nDeletes stickers from a user pack. Only the pack author can delete stickers. Stickers in built-in packs cannot be deleted.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `packId` (path) | number | yes | Pack ID — `data.packs[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) |\n| `ids` (query) | string | yes | Comma-separated sticker IDs, 1 to 50 positive integers — for example `45,46`. IDs come from the [sticker pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-get). Duplicates are dropped |\n| `packType` (query) | string | yes | Pack type — `data.packs[].type` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks). Stickers can be deleted only from `custom` packs |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Fstickers?ids=45,46&packType=custom\" \\\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\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Fstickers?ids=45,46&packType=custom\" \\\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 ids = [45, 46].join(',')\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Fstickers?ids=${ids}&packType=custom`, {\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 ids = [45, 46].join(',')\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Fpacks\u002F3\u002Fstickers?ids=${ids}&packType=custom`, {\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 | Always `true` on success |\n| `data.result` | boolean | `true` — the request succeeded |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n400 — the `ids` list is empty or invalid:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"`ids` is required: 1 to 50 sticker ids, positive integers separated by commas (`ids=101,102`).\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `ids` is missing or empty, contains a value that is not a positive integer, or has more than 50 distinct values. `packId` or `packType` is invalid. Another parameter or body field was passed |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 403 | `BITRIX_ACCESS_DENIED` | The pack is built-in or its author is another user |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object. The portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | `error.b24Code`: `PACK_NOT_FOUND` — the pack does not exist |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- If `ids` lists all stickers in the pack, the whole pack is deleted — as with [deleting a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-delete). The same happens to an empty pack, whatever `ids` contains.\n- Sticker IDs that are not in the pack are skipped without an error: a `true` response does not mean that anything was deleted.\n- A pack holds at most 50 stickers, so `ids` takes at most 50 values.\n\n## See also\n\n- [Delete a pack](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpack-delete)\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Stickers](\u002Fdocs\u002Fchats\u002Fstickers)\n","## Clear the recent list\n\n`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent`\n\nDeletes the current user's entire recent stickers list. Irreversible: the list cannot be restored — it fills up again only as stickers are sent.\n\nRecent stickers are the stickers the user sent most recently, at most 12. The list can be read in the `recentStickers` field of the first page of the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks). Clearing the list does not change the stickers or packs themselves. To remove a single sticker from the list, use [`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F:stickerId`](\u002Fdocs\u002Fchats\u002Fstickers\u002Frecent-delete).\n\n## Parameters\n\nThere are no parameters. Any query parameter or body field is rejected with `400 INVALID_PARAMS`.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Frecent\" \\\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\u002Fchats\u002Fstickers\u002Frecent\" \\\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\u002Fchats\u002Fstickers\u002Frecent', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success } = await res.json()\nconsole.log('List cleared:', success)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Frecent', {\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('List cleared:', success)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.result` | boolean | `true` — the list was cleared |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n400 — a query parameter was passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Query parameter `packType` is not accepted by DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent. It takes no query parameters.\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | A query parameter or body field was passed — the operation takes none |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object. The portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | Bitrix24 returned an error. The portal code is in `error.b24Code` |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Remove a sticker from the recent list](\u002Fdocs\u002Fchats\u002Fstickers\u002Frecent-delete)\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Stickers](\u002Fdocs\u002Fchats\u002Fstickers)\n","## Remove a sticker from the recent list\n\n`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F:stickerId`\n\nRemoves one sticker from the current user's recent list. The sticker and its pack do not change.\n\nRecent stickers are the stickers the user sent most recently, at most 12. The list can be read in the `recentStickers` field of the first page of the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks). To clear the whole list, use [`DELETE \u002Fv1\u002Fchats\u002Fstickers\u002Frecent`](\u002Fdocs\u002Fchats\u002Fstickers\u002Frecent).\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|----------|\n| `stickerId` (path) | number | yes | Sticker ID — `recentStickers[].id` from the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) |\n| `packId` (query) | number | yes | ID of the sticker's pack — `recentStickers[].packId` |\n| `packType` (query) | string | yes | Type of the sticker's pack — `recentStickers[].packType`: `vendor` or `custom` |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F5?packId=15&packType=vendor\" \\\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\u002Fchats\u002Fstickers\u002Frecent\u002F5?packId=15&packType=vendor\" \\\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 sticker = { id: 5, packId: 15, packType: 'vendor' } \u002F\u002F a recentStickers item\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F${sticker.id}?packId=${sticker.packId}&packType=${sticker.packType}`,\n  { method: 'DELETE', headers: { 'X-Api-Key': 'YOUR_API_KEY' } },\n)\n\nconst { success } = await res.json()\nconsole.log('Removed from recent:', success)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst sticker = { id: 5, packId: 15, packType: 'vendor' } \u002F\u002F a recentStickers item\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fchats\u002Fstickers\u002Frecent\u002F${sticker.id}?packId=${sticker.packId}&packType=${sticker.packType}`,\n  {\n    method: 'DELETE',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  },\n)\n\nconst { success } = await res.json()\nconsole.log('Removed from recent:', success)\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data.result` | boolean | Always `true`, even if the sticker was not in the list |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"result\": true }\n}\n```\n\n## Error response example\n\n400 — `packId` was not passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"`packId` is required: the id of the pack the sticker belongs to, a positive integer.\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `stickerId` or `packId` is not a positive integer, `packId` or `packType` is missing, `packType` is not `vendor` \u002F `custom`, another parameter or body field was passed |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 tokens |\n| 403 | `SCOPE_DENIED` | The key lacks the `im` scope |\n| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in read-only mode |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find the object. The portal code is in `error.b24Code` if supplied |\n| 422 | `BITRIX_ERROR` | Bitrix24 returned an error. The portal code is in `error.b24Code` |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable or returned a server error |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- Opening the first page of the [list of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks) leaves at most 12 rows in the recent list, as the Bitrix24 sticker panel does.\n\n## See also\n\n- [Clear the recent list](\u002Fdocs\u002Fchats\u002Fstickers\u002Frecent)\n- [List of packs](\u002Fdocs\u002Fchats\u002Fstickers\u002Fpacks)\n- [Stickers](\u002Fdocs\u002Fchats\u002Fstickers)\n",1794739554794]