> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Кнопки каналов на своей странице

> Когда кнопки «Войти через …» рисует ваше приложение: запрос bootstrap, поля channels_enabled и feature_flags, кэш и поведение при недоступном облаке.

Этот путь нужен, только если кнопки «Войти через Telegram / WhatsApp / …» вы рисуете **у себя**, а
не отправляете пользователя на страницу входа Veriqa. Если кнопок у вас нет — читать эту страницу
не нужно, вам достаточно [обычного подключения](/docs/ru/cloud/connect).

## Зачем нужен `bootstrap`

Набор включённых каналов задаёт владелец проекта в Console и меняет когда угодно. Зашитый в код
список превращается в мёртвую кнопку: канал отключили — пользователь жмёт и попадает в никуда до
следующего передеплоя.

`bootstrap` — один GET на старте приложения, которым вы забираете **актуальную** конфигурацию
проекта вместо того, чтобы держать её у себя в конфиге. Это расширение Veriqa, а не стандартный
эндпоинт OIDC.

```http theme={null}
GET /p/{project}/v1/bootstrap?client_id={client_id}
X-Veriqa-Cloud-Key: {cloud_key}   // опционально
Accept: application/json
```

Без cloud key ответ содержит только публичные поля. Ответ — **эффективная** конфигурация для
конкретного `client_id` (значения проекта, суженные приложением), а не дамп настроек проекта.

## Что в ответе

```json theme={null}
{
  "issuer": "https://<хост облака>/p/{project}",
  "authorization_endpoint": "…/connect/authorize",
  "token_endpoint": "…/connect/token",
  "userinfo_endpoint": "…/connect/userinfo",
  "jwks_uri": "…/.well-known/jwks.json",

  "channels_enabled": ["telegram", "whatsapp", "max", "email"],
  "feature_flags": { "step_up_enabled": true, "channel_linking_enabled": true },
  "ttl_seconds": 300
}
```

Два поля здесь рабочие, остальные — вспомогательные:

* **`channels_enabled`** — ради него механизм и существует: это ровно тот набор кнопок, который
  нужно показать сейчас;
* **`feature_flags`** — по ним вы решаете, показывать ли у себя step-up, привязку канала и
  подтверждение операции.

Адреса эндпоинтов дублируют discovery и экономят один запрос на старте. `ttl_seconds` — срок
кэша ответа, по умолчанию 300 секунд; по истечении конфигурацию нужно перезапросить.

<Warning>
  Стабильные поля контракта — `channels_enabled` и `feature_flags`. Стройте логику на них; на
  остальные поля не завязывайте код, который будет дорого переписывать.

  Числовые лимиты, если они придут в ответе, — **информационные**: это не обязательство и не
  замена защите на стороне облака.
</Warning>

<Note>
  Брендинга в ответе нет. Имя проекта, логотип, цвет и тему применяет **сервер** при отрисовке
  страницы входа — интегратору они не нужны и в контракт не вынесены.
</Note>

## Поведение при сбоях

| Ситуация | Что происходит |
| - | - |
| облако недоступно, кэша нет | отказ сразу — работать «наугад» приложение не должно |
| облако недоступно, кэш валиден | при включённом откате на кэш — старая конфигурация, предупреждение и фоновое обновление; иначе отказ |
| `404` по `client_id` | отказ: приложение не найдено в проекте |
| `401` | отказ: cloud key неверен или отсутствует |
| ответ не соответствует контракту | отказ |

## Чего bootstrap не гарантирует

<Warning>
  Ответ `bootstrap` **не обещает**, что именно это увидит пользователь. Авторитетна серверная
  резолюция на `/connect/authorize`: переданные `ui_config` и `acr_values`, а также
  пользовательские переопределения могут дать другой итог.
</Warning>

Смотрите на bootstrap как на способ узнать, что включено в проекте, а не как на предпросмотр
окна входа.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.