API для разработчиков
API сервиса DooCall позволяет сторонним системам (CRM, BI, собственные приложения) получать звонки, записи разговоров и список сотрудников компании, а также принимать события о новых звонках через webhooks.
Обзор
Все запросы отправляются методом POST на единый адрес вашего аккаунта:
https://<account>.doocall.uz/api/v1Тело запроса — JSON (заголовок Content-Type: application/json). Выполняемое действие передаётся в поле action, параметры авторизации — в каждом запросе.
Аутентификация
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| user_name | string | да | E-mail пользователя кабинета DooCall. |
| api_key | string | да | Ключ API компании. Находится в кабинете: Настройки → Интеграция → Параметры API. При смене ключа старый перестаёт действовать. |
| action | string | да | Имя действия, например calls.list. |
POST https://mycompany.doocall.uz/api/v1
Content-Type: application/json
{
"user_name": "admin@mycompany.uz",
"api_key": "1f3c9a4b8d2e4f6a9c1b3d5e7f9a0b2c",
"action": "calls.list",
"limit": 20
}Формат ответов и ошибки
Успешный ответ всегда содержит "success": true. Ошибка:
{
"success": false,
"message": "invalid api_key",
"error_code": "INVALID_API_KEY"
}| HTTP | error_code | Причина |
|---|---|---|
| 400 | MISSING_FIELD | Не хватает поля или неизвестный action |
| 401 | INVALID_API_KEY | Неверный api_key / user_name, либо чужой домен аккаунта |
| 429 | THROTTLED | Превышен лимит запросов |
calls.list — список звонков
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| from_date | int | ISO-8601 | нет | Начало периода (unix-время в секундах или ISO-строка). |
| to_date | int | ISO-8601 | нет | Конец периода. |
| phone | string | нет | Фильтр по номеру клиента (подстрока). |
| call_type | string | нет | inbound или outbound. |
| offset | int | нет | Смещение (по умолчанию 0). |
| limit | int | нет | Кол-во записей, максимум 200 (по умолчанию 50). |
// Ответ
{
"success": true,
"total": 1342,
"offset": 0,
"limit": 20,
"calls": [
{
"server_id": "srv_9f1c2b3a4d5e6f708192a3b4c5d6e7f8",
"call_id": "1724495961-998901234567",
"call_type": "inbound",
"call_status": "answered",
"from": "+998901234567",
"to": "+998712005050",
"counterparty_number": "+998901234567",
"counterparty_name": "Aziz Karimov",
"operator": "operator1",
"operator_number": "+998712005050",
"duration": 214,
"start_time": "2026-09-01T12:39:21+00:00",
"received_at": "2026-09-01T12:43:02+00:00",
"record_url": "https://mycompany.doocall.uz/api/public/rec/9f1c…?sig=…"
}
]
}calls.get — один звонок
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| server_id | string | нет | Серверный идентификатор (srv_…). |
| call_id | string | нет | Либо клиентский идентификатор звонка. |
Нужен один из двух параметров. Ответ — объект call в том же формате, что и в calls.list.
users.list — сотрудники
{
"success": true,
"users": [
{ "user_name": "operator1", "full_name": "Alisher N.", "is_active": true,
"phones": ["+998712005050"] }
]
}account.info — аккаунт
{
"success": true,
"account": { "name": "My Company", "slug": "mycompany",
"status": "active", "operators": 12 }
}Записи разговоров
Поле record_url — постоянная подписанная ссылка. Её можно сохранять в CRM: при открытии она отдаёт 302-редирект на свежий URL аудиофайла. Ссылка действует, пока запись хранится согласно сроку хранения аудио вашего тарифа.
Webhooks (события)
Укажите URL приёмника в кабинете (Настройки → Интеграция → Webhook). При каждом новом звонке DooCall отправит POST-запрос:
POST <your URL>
Content-Type: application/json
X-Doocall-Signature: hmac_sha256(secret, raw_body) // hex
{
"event": "call.received",
"call_id": "1724495961-998901234567",
"server_id": "srv_9f1c2b3a4d5e6f708192a3b4c5d6e7f8",
"call_type": "inbound",
"call_status": "answered",
"from": "+998901234567",
"to": "+998712005050",
"counterparty_number": "+998901234567",
"counterparty_name": "Aziz Karimov",
"duration": 214,
"start_time": "2026-09-01T12:39:21+00:00",
"received_at": "2026-09-01T12:43:02+00:00"
}Секрет подписи выдаётся один раз при первом сохранении URL. Проверяйте заголовок X-Doocall-Signature — это HMAC-SHA256 от «сырого» тела запроса. Ожидается ответ 2xx; при ошибке доставка повторяется до 3 раз с нарастающей задержкой.
Ограничения
- До 120 запросов в минуту на аккаунт (HTTP 429 при превышении).
- limit в calls.list — не более 200.
- Запросы принимаются только на домене вашего аккаунта (<аккаунт>.doocall.uz).