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

# 24. Публичный API

> Запуск звонка программно, когда поводом служит событие в CRM, а не список.

# Звонок из вашей системы: публичный API

<Info>
  **Цель модуля:** запустить звонок программно, когда поводом служит событие в CRM, а не список.
</Info>

<Frame caption="/apikeys — ключ создаётся один раз и секрет показывается только при создании. Рядом — памятка по эндпоинтам, заголовкам и лимиту.">
  <img src="https://mintcdn.com/hubtalk/cKl-cjuDGhk4sToG/images/tutorial/tut-50-api-keys.webp?fit=max&auto=format&n=cKl-cjuDGhk4sToG&q=85&s=51c52e0a3ce65e8d513934bd98a7ed6b" alt="Раздел «API-ключи» с ключом и памяткой по эндпоинтам /v1" width="1280" height="429" data-path="images/tutorial/tut-50-api-keys.webp" />
</Frame>

Публичный API — это когда звонок инициирует ваша система: клиент оставил заявку на сайте, в CRM сменился статус, приехал заказ. Ключевые эндпоинты:

| Метод и путь              | Зачем                                                 |
| ------------------------- | ----------------------------------------------------- |
| `POST /v1/calls/phone`    | исходящий телефонный звонок: агент, номер, переменные |
| `POST /v1/calls/web`      | web-звонок: токен для браузера или SDK на сайте       |
| `GET /v1/calls`           | список звонков с фильтрами и курсором                 |
| `GET /v1/calls/{id}`      | объект звонка: статус, транскрипт, аналитика, запись  |
| `POST /v1/calls/{id}/end` | завершить активный звонок                             |

Ключ передаётся в `Authorization: Bearer …`, у каждого ключа свой лимит запросов в минуту (превышение — `429`). Заголовок `Idempotency-Key` защищает от дублей при ретраях: повтор с тем же ключом не создаст второй звонок — обязательная практика, если запрос отправляет очередь с автоповтором.

Переменные звонка передаются в теле запроса — это те же `{{var}}`, что вы используете в узлах. Итоги приходят вебхуками из [модуля 16](/ru/v4/tutorial/recording-webhooks), отдельно опрашивать статус не нужно.

<Info>
  **Звонок с сайта: виджет из примера**

  Для web-звонка есть SDK и страница-пример к нему — это уже не «голая» проводка, а демо-сайт с плавающим виджетом: лаунчер в углу, панель с состоянием агента и таймером, сворачивание, которое звонок не прерывает. Обе темы берутся по системной настройке, внешних сетевых зависимостей нет.

  Важная граница: **сам SDK не несёт ни одного пикселя вёрстки** — стили живут в примере отдельным файлом, и интегратор копирует их к себе, а не получает пакетом. Токены оформления объявлены на классе виджета, а не глобально, поэтому подключение файла не перекрашивает страницу интегратора.

  Пакет опубликован в npm под именем `@hubtalk-ai/web-sdk`.
</Info>

<Tip>
  **Показать агента, ничего не интегрируя**

  Если задача не «встроить в продукт», а «дать человеку поговорить с агентом сегодня», API не нужен вовсе: у опубликованного агента есть кнопка **Share**, которая выдаёт [демо-ссылку](/ru/v4/platform/demo-links) со сроком жизни и потолком звонков. Получатель открывает её в браузере и говорит — без учётной записи и без ключа. Это третий вид предъявляемого секрета, поэтому обращайтесь с самой ссылкой как с учётными данными.
</Tip>

<Warning>
  **Грабли: секрет виден один раз**

  После закрытия окна создания секрет не показывается больше нигде — только префикс. Потеряли — отзывайте ключ и создавайте новый. И не кладите ключ в фронтенд: для браузера есть web-звонок с одноразовым токеном.
</Warning>
