API — список endpoints

Все endpoints под префиксом /api/v1/. Авторизация — Bearer-токен (см. обзор).

/me — информация о ключе

GET /api/v1/me

Звонки

Список CDR

GET /api/v1/calls?from=2026-04-01&to=2026-05-01&disposition=ANSWERED&src=&dst=&limit=100&offset=0

Scope: cdr.read

Параметры: from, to (дата), disposition (ANSWERED/NO ANSWER/BUSY/FAILED/VOICEMAIL), src, dst, limit (≤1000), offset.

{
  "total": 245, "limit": 100, "offset": 0,
  "rows": [
    {
      "calldate": "2026-05-01 22:05:18+03",
      "src": "+79991234567", "dst": "771",
      "disposition": "ANSWERED",
      "duration": 67, "billsec": 60,
      "linkedid": "1777662300.103",
      "uniqueid": "...", "channel": "PJSIP/...",
      "lastapp": "Dial", "lastdata": "..."
    }
  ]
}

Детали звонка

GET /api/v1/calls/{linkedid}

Возвращает все ноги звонка (legs), UTM-атрибуцию (если был коллтрекинг) и теги/комментарий.

Только попытки

GET /api/v1/calls/{linkedid}/legs

Запись разговора

GET /api/v1/calls/{linkedid}/recording

Отдаёт аудиофайл (opus / ogg / mp3 / wav). 404 если записи нет.

Поставить теги/коммент

POST /api/v1/calls/{linkedid}/tags
Content-Type: application/json

{ "tags": "VIP, лид", "comment": "Перезвонить завтра" }

Scope: cdr.write

Транскрипт

GET /api/v1/calls/{linkedid}/transcript

Scope: transcripts.read

Заказать обратный звонок

POST /api/v1/calls/originate
{ "user_id": 12, "phone": "+79991234567", "aon": "Заказ с CRM" }

Scope: calls.originate. ATC сначала позвонит оператору user_id, при ответе соединит с клиентом.

Сотрудники

GET /api/v1/users
GET /api/v1/users/{id}

Scope: users.read

Телефонная книга

Поиск

GET /api/v1/phonebook?type=0&name=Иван&phone=79991234567&limit=100

Scope: phonebook.read. type: 0=Контакт, 1=Компания, 2=Чёрный список.

Поиск по номеру

GET /api/v1/phonebook/by-number?n=+79991234567

Возвращает контакт совпадающий по последним 10 цифрам. Удобно для CRM-всплывашек при входящем звонке.

Карточка

GET /api/v1/phonebook/{id}

Создать

POST /api/v1/phonebook
{
  "type": 0,
  "name": "Иван Петров",
  "shortcode": "1234",
  "tags": "VIP",
  "phones": [{"type":"mobile","number":"+79991234567"}],
  "emails": [{"email":"ivan@example.com"}],
  "manager_id": 12,
  "notes": "Клиент с 2024"
}

Обновить / удалить

PATCH  /api/v1/phonebook/{id}
DELETE /api/v1/phonebook/{id}

Scope для записи: phonebook.write. DELETE — soft (помечает is_deleted=true).

Коллтрекинг

GET /api/v1/calltracker/sources
GET /api/v1/calltracker/visits?from=&to=&limit=100
GET /api/v1/calltracker/calls?from=&to=&limit=100
GET /api/v1/calltracker/callbacks

Scope: calltracker.read. Поля содержат UTM, GeoIP, source_id, привязку к CDR (linkedid).

Чат с сайта

GET /api/v1/chat-widget/sessions
GET /api/v1/chat-widget/sessions/{id}

Scope: chat.read. Второй endpoint возвращает все сообщения сессии.

FMC SIM-карты

GET /api/v1/fmc

Scope: fmc.read

Webhooks (управление подписками)

GET    /api/v1/webhooks
POST   /api/v1/webhooks    {"url":"...", "events":["call.end"]}
DELETE /api/v1/webhooks/{id}

Scope: webhooks.read / webhooks.write. См. отдельную статью.