[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-infra\u002Faccess-tokens":3,"docs-tabs-infra\u002Faccess-tokens":6},{"content":4,"lastmod":5},"\n# Токены доступа\n\nКраткосрочные токены для внешнего доступа к развёрнутому приложению на BLACKHOLE-сервере. Два режима: `api-bearer` — JWT для HTTP-заголовка `Authorization`, `share-url` — ссылка для передачи получателю, аутентификация по куки.\n\nСкоуп: `vibe:infra`\n\n## Операции\n\n- [Выпустить токен](.\u002Faccess-tokens\u002Fcreate.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens`\n- [Список токенов](.\u002Faccess-tokens\u002Flist.md) — `GET \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens`\n- [Отозвать токен](.\u002Faccess-tokens\u002Fdelete.md) — `DELETE \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens\u002F:tokenId`\n\n## Сценарии\n\n**E2E-проверка деплоя через публичный путь:**\n\nРежим `api-bearer` позволяет убедиться, что запросы проходят через реальный маршрут `nginx → Gateway → туннель → приложение`. Вызов `exec + curl 127.0.0.1:3000` проверяет только localhost и не затрагивает Gateway-слой.\n\n1. [`POST \u002Faccess-tokens`](.\u002Faccess-tokens\u002Fcreate.md) с `mode: \"api-bearer\"`, `ttlSeconds: 600`.\n2. Прогнать ключевые эндпоинты приложения с заголовком `Authorization: Bearer \u003Ctoken>`.\n3. [`DELETE \u002Faccess-tokens\u002F:tokenId`](.\u002Faccess-tokens\u002Fdelete.md) — отозвать после проверки.\n\nЕсли Bearer возвращает 502, а `exec + curl 127.0.0.1:3000` проходит — проблема в Gateway или туннеле, а не в приложении.\n\n**Ссылка для внешнего просмотра:**\n\n1. [`POST \u002Faccess-tokens`](.\u002Faccess-tokens\u002Fcreate.md) с `mode: \"share-url\"` и нужным `ttlSeconds`.\n2. Передать поле `url` из ответа получателю — первый переход устанавливает куки, дальнейшие запросы работают без параметра `?s=`.\n3. При необходимости: [`DELETE \u002Faccess-tokens\u002F:tokenId`](.\u002Faccess-tokens\u002Fdelete.md) для досрочного отзыва.\n\n## Смотрите также\n\n- [Deploy API](\u002Fdocs\u002Finfra\u002Fdeploy)\n- [Доступ и режимы](\u002Fdocs\u002Finfra\u002Faccess)\n- [Инфраструктура](\u002Fdocs\u002Finfra)\n","2026-06-29",{"access-tokens\u002Fcreate.md":7,"access-tokens\u002Flist.md":8,"access-tokens\u002Fdelete.md":9},"\n## Выпустить токен доступа\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens`\n\nВыпускает краткосрочный токен для внешнего доступа к развёрнутому приложению. Два режима: `api-bearer` — JWT для HTTP-заголовка `Authorization`. `share-url` — ссылка, при переходе по которой устанавливается куки.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID BLACKHOLE-сервера |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | По умолч. | Описание |\n|------|-----|:-----:|-----------|----------|\n| `mode` | string | да | — | `\"api-bearer\"` или `\"share-url\"` |\n| `ttlSeconds` | number | нет | `86400` | Время жизни токена в секундах. Диапазон: 300–315 360 000 (от 5 минут до 10 лет). Значение 315 360 000 отображается в интерфейсе как «Бессрочно» |\n| `identityBound` | boolean | нет | `true` | Только для `share-url`. При `true` — потребует входа через Битрикс24, и в журнале окажется реальный идентификатор пользователя. При `false` — анонимный переход, синтетический идентификатор |\n| `name` | string | нет | — | Метка токена для отображения в списке (до 100 символов) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"mode\": \"api-bearer\",\n    \"ttlSeconds\": 600,\n    \"name\": \"ci-smoke\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"mode\": \"share-url\",\n    \"ttlSeconds\": 2592000,\n    \"identityBound\": false,\n    \"name\": \"предпросмотр\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens`,\n  {\n    method: 'POST',\n    headers: {\n      'X-Api-Key': 'YOUR_API_KEY',\n      'Content-Type': 'application\u002Fjson',\n    },\n    body: JSON.stringify({ mode: 'api-bearer', ttlSeconds: 600 }),\n  }\n)\nconst { data } = await res.json()\n\n\u002F\u002F E2E-проверка через публичный путь\nconst check = await fetch(`${data.appUrl}\u002Fapi\u002Fhealth`, {\n  headers: { Authorization: `Bearer ${data.token}` },\n})\nconsole.log(check.status) \u002F\u002F 200 — приложение отвечает через Gateway\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens`,\n  {\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({\n      mode: 'share-url',\n      ttlSeconds: 2592000,\n      name: 'предпросмотр',\n    }),\n  }\n)\nconst { data } = await res.json()\nconsole.log(data.url) \u002F\u002F https:\u002F\u002Fapp-xxxx.vibecode.bitrix24.tech\u002F?s=R8k3Zm2P\n```\n\n## Поля ответа\n\nНабор полей зависит от режима.\n\n**Режим `api-bearer`:**\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | string | ID токена для последующего отзыва |\n| `data.mode` | string | `\"api-bearer\"` |\n| `data.token` | string | JWT для заголовка `Authorization: Bearer`. Возвращается **один раз** — при выпуске |\n| `data.expiresAt` | string (ISO 8601) | Срок хранения записи токена — для листинга и отзыва |\n| `data.jwtExpiresAt` | string (ISO 8601) | Реальный срок действия Bearer-токена. Ограничен 10 минутами независимо от `ttlSeconds`. После истечения выпустите новый токен |\n| `data.note` | string | Пояснение о разнице между `expiresAt` и `jwtExpiresAt` |\n| `data.subdomain` | string | Субдомен сервера |\n| `data.appUrl` | string | Полный HTTPS-адрес приложения |\n| `data.curlExample` | string | Готовый `curl`-пример с токеном для быстрой проверки |\n\n**Режим `share-url`:**\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | string | ID токена для последующего отзыва |\n| `data.mode` | string | `\"share-url\"` |\n| `data.shortcode` | string | Код, вставляемый в URL как `?s=\u003Cshortcode>` |\n| `data.url` | string | Полная распространяемая ссылка |\n| `data.identityBound` | boolean | Требует ли переход входа через Битрикс24 |\n| `data.expiresAt` | string (ISO 8601) | Момент истечения токена |\n| `data.name` | string \\| null | Метка, переданная при выпуске |\n\n## Пример ответа\n\n**Режим `api-bearer`:**\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"tk_7d3fa2b1\",\n    \"mode\": \"api-bearer\",\n    \"token\": \"eyJhbGciOiJFUzI1NiJ9...\",\n    \"expiresAt\": \"2026-05-18T10:50:00.000Z\",\n    \"jwtExpiresAt\": \"2026-05-18T10:40:10.000Z\",\n    \"subdomain\": \"app-91306a4c\",\n    \"appUrl\": \"https:\u002F\u002Fapp-91306a4c.vibecode.bitrix24.tech\",\n    \"curlExample\": \"curl -H \\\"Authorization: Bearer eyJhbGciOiJFUzI1NiJ9...\\\" https:\u002F\u002Fapp-91306a4c.vibecode.bitrix24.tech\u002Fapi\u002Fhealth\",\n    \"note\": \"JWT is a 10-minute Gateway session token. Bearer stops working at jwtExpiresAt. POST ...\u002F:tokenId\u002Frefresh to renew the same token, or POST \u002Faccess-tokens for a new one.\"\n  }\n}\n```\n\n**Режим `share-url`:**\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"tk_8e4gb3c2\",\n    \"mode\": \"share-url\",\n    \"shortcode\": \"R8k3Zm2P\",\n    \"url\": \"https:\u002F\u002Fapp-91306a4c.vibecode.bitrix24.tech\u002F?s=R8k3Zm2P\",\n    \"identityBound\": false,\n    \"expiresAt\": \"2026-06-17T08:44:00.000Z\",\n    \"name\": \"предпросмотр\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n429 — превышен лимит выпуска токенов:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"TOKEN_MINT_RATE_LIMIT\",\n    \"message\": \"Rate limit: 50 mints\u002Fhour per API key\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 400 | `INVALID_MODE` | Передан недопустимый `mode` |\n| 400 | `INVALID_TTL` | `ttlSeconds` вне допустимого диапазона [300, 315 360 000] |\n| 400 | `NAME_TOO_LONG` | `name` превышает 100 символов |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 403 | `TOKEN_OWNER_MISMATCH` | Сервер принадлежит другому API-ключу |\n| 404 | `SERVER_NOT_FOUND` | Сервер не найден или удалён |\n| 409 | `ACTIVE_TOKEN_LIMIT` | Достигнут лимит 100 активных токенов на сервер |\n| 429 | `TOKEN_MINT_RATE_LIMIT` | Превышен лимит 50 выпусков в час на API-ключ. Заголовок `Retry-After: 3600` |\n| 503 | `FEATURE_DISABLED` | Токены доступа отключены на платформе |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **`token` действителен 10 минут независимо от `ttlSeconds`.** Сохраните `token` и `jwtExpiresAt` сразу: JWT перестаёт работать по истечении `jwtExpiresAt`, а не `expiresAt`. `expiresAt` — срок хранения записи (для листинга и отзыва). Чтобы продлить доступ — вызовите [обновление токена](.\u002Frefresh.md) (тот же токен, свежий JWT, без новой записи) или выпустите новый через `POST \u002Faccess-tokens`.\n- **`identityBound` игнорируется для `api-bearer`.** Идентификатором в журнале всегда выступает UUID владельца API-ключа.\n- **Лимиты:** 100 активных токенов на сервер, 50 выпусков в час на API-ключ, `ttlSeconds` от 300 до 315 360 000.\n\n## Смотрите также\n\n- [Обновить токен](.\u002Frefresh.md)\n- [Список токенов](.\u002Flist.md)\n- [Отозвать токен](.\u002Fdelete.md)\n- [Токены доступа](\u002Fdocs\u002Finfra\u002Faccess-tokens)\n- [Deploy API](\u002Fdocs\u002Finfra\u002Fdeploy)\n","\n## Список токенов сервера\n\n`GET \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens`\n\nВозвращает токены сервера с фильтрацией по статусу. По умолчанию — только активные.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID BLACKHOLE-сервера |\n| `status` | query | string | нет | Фильтр: `active` (по умолч.) \\| `expired` \\| `revoked` \\| `all` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -H \"X-Api-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens?status=active\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens?status=all\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens?status=active`,\n  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n)\nconst { data } = await res.json()\nconsole.log(`Активных токенов: ${data.tokens.length} \u002F ${data.limits.activeCountMax}`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens`,\n  {\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  }\n)\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.tokens` | array | Массив токенов |\n| `data.tokens[].id` | string | ID токена |\n| `data.tokens[].mode` | string | `\"api-bearer\"` или `\"share-url\"` |\n| `data.tokens[].name` | string \\| null | Метка токена |\n| `data.tokens[].identityBound` | boolean | Для `api-bearer` всегда `true`, для `share-url` — требуется ли вход через Битрикс24 |\n| `data.tokens[].shortcode` | string \\| null | Код ссылки для `share-url`, `null` для `api-bearer` |\n| `data.tokens[].expiresAt` | string (ISO 8601) | Момент истечения |\n| `data.tokens[].revokedAt` | string (ISO 8601) \\| null | Момент отзыва, `null` если не отозван |\n| `data.tokens[].createdAt` | string (ISO 8601) | Момент выпуска |\n| `data.tokens[].lastUsedAt` | string (ISO 8601) \\| null | Последнее использование |\n| `data.tokens[].sessionCount` | number | Число сессий, созданных через этот токен |\n| `data.tokens[].createdBy.id` | string | ID пользователя, выпустившего токен |\n| `data.tokens[].createdBy.name` | string | Имя пользователя |\n| `data.tokens[].createdBy.email` | string | Email пользователя |\n| `data.limits.activeCount` | number | Текущее число активных токенов сервера |\n| `data.limits.activeCountMax` | number | Лимит активных токенов на сервер (100) |\n| `data.limits.mintRateLimitPerHour` | number | Лимит выпусков в час на API-ключ (50) |\n| `data.limits.mintsLastHour` | number | Количество выпущенных токенов за последний час по данному API-ключу |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"tokens\": [\n      {\n        \"id\": \"tk_7d3fa2b1\",\n        \"mode\": \"api-bearer\",\n        \"name\": \"ci-smoke\",\n        \"identityBound\": true,\n        \"shortcode\": null,\n        \"expiresAt\": \"2026-05-18T10:50:00.000Z\",\n        \"revokedAt\": null,\n        \"createdAt\": \"2026-05-18T10:40:00.000Z\",\n        \"lastUsedAt\": \"2026-05-18T10:41:30.000Z\",\n        \"sessionCount\": 1,\n        \"createdBy\": { \"id\": \"usr_abc123\", \"name\": \"Иван Петров\", \"email\": \"ivan@example.bitrix24.ru\" }\n      },\n      {\n        \"id\": \"tk_8e4gb3c2\",\n        \"mode\": \"share-url\",\n        \"name\": \"предпросмотр\",\n        \"identityBound\": false,\n        \"shortcode\": \"R8k3Zm2P\",\n        \"expiresAt\": \"2026-06-17T08:44:00.000Z\",\n        \"revokedAt\": null,\n        \"createdAt\": \"2026-05-18T08:44:00.000Z\",\n        \"lastUsedAt\": null,\n        \"sessionCount\": 0,\n        \"createdBy\": { \"id\": \"usr_abc123\", \"name\": \"Иван Петров\", \"email\": \"ivan@example.bitrix24.ru\" }\n      }\n    ],\n    \"limits\": {\n      \"activeCount\": 2,\n      \"activeCountMax\": 100,\n      \"mintRateLimitPerHour\": 50,\n      \"mintsLastHour\": 1\n    }\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — сервер не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SERVER_NOT_FOUND\",\n    \"message\": \"Server not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 403 | `TOKEN_OWNER_MISMATCH` | Сервер принадлежит другому API-ключу |\n| 404 | `SERVER_NOT_FOUND` | Сервер не найден или удалён |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Поле `token` (JWT) не включается в список.** Значение JWT возвращается только при выпуске токена.\n- **`status=all` возвращает истёкшие и отозванные токены.** Статус токена определяется по полям `revokedAt` (не `null` → отозван) и `expiresAt` (меньше текущего времени → истёк).\n- **Список ограничен 500 токенами.** Фильтр `status` сужает выборку до нужной категории.\n\n## Смотрите также\n\n- [Выпустить токен](.\u002Fcreate.md)\n- [Отозвать токен](.\u002Fdelete.md)\n- [Токены доступа](\u002Fdocs\u002Finfra\u002Faccess-tokens)\n","\n## Отозвать токен\n\n`DELETE \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Faccess-tokens\u002F:tokenId`\n\nОтзывает токен досрочно. Новые переходы по `share-url` и вызовы с `api-bearer` блокируются немедленно.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID BLACKHOLE-сервера |\n| `tokenId` | path | string | да | ID токена из [`POST \u002Faccess-tokens`](.\u002Fcreate.md) или [`GET \u002Faccess-tokens`](.\u002Flist.md) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens\u002FTOKEN_ID\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Faccess-tokens\u002FTOKEN_ID\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens\u002F${tokenId}`,\n  {\n    method: 'DELETE',\n    headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n  }\n)\n\u002F\u002F 204 No Content — тело ответа отсутствует\nif (res.status !== 204) {\n  const { error } = await res.json()\n  throw new Error(error.code)\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Faccess-tokens\u002F${tokenId}`,\n  {\n    method: 'DELETE',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  }\n)\n```\n\n## Ответ\n\n`204 No Content` — тело ответа отсутствует.\n\n## Пример ответа при ошибке\n\n410 — токен уже отозван:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ALREADY_REVOKED\",\n    \"message\": \"Token already revoked\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 403 | `TOKEN_OWNER_MISMATCH` | Сервер или токен принадлежит другому API-ключу |\n| 404 | `SERVER_NOT_FOUND` | Сервер не найден или удалён |\n| 404 | `NOT_FOUND` | Токен с таким ID не найден или принадлежит другому серверу |\n| 410 | `ALREADY_REVOKED` | Токен уже отозван |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Куки `share-url` продолжают работать до 10 минут после отзыва.** Отзыв немедленно блокирует новые переходы, но браузер с уже установленными куки видит приложение до истечения сессионного JWT.\n- **Истёкший токен отозвать нельзя.** Для истёкших токенов вернётся `ALREADY_REVOKED`.\n\n## Смотрите также\n\n- [Выпустить токен](.\u002Fcreate.md)\n- [Список токенов](.\u002Flist.md)\n- [Токены доступа](\u002Fdocs\u002Finfra\u002Faccess-tokens)\n"]