Документация Call Trace API
Отправляйте записи звонков из своей системы, получайте немедленный ответ 202 и финальную транскрипцию и оценку через webhooks.
Создайте API-ключ
Откройте Админ > Интеграции и создайте ключ с областью analysis:write.
Отправьте URL файла
Передайте HTTPS fileUrl в POST /api/v1/analyses. API ответит 202 Accepted.
Получите результат
Подпишитесь на analysis.completed и analysis.failed, чтобы получить финальную оценку.
Проверьте secret
Сравните X-CallTrace-Secret с webhook secret, который вы сохранили при создании endpoint.
API-ключи
Создайте токен в панели администратора
Только администраторы могут создавать API-ключи интеграций. Ключи имеют ограниченные права, могут истекать, отзываться и не связаны с сессиями сотрудников.
- 01
Откройте Интеграции
Войдите как администратор и откройте Админ > Интеграции > API Keys.
- 02
Назовите ключ
Используйте имя, которое идентифицирует внешнюю систему, окружение и владельца.
- 03
Выберите области доступа
Выбирайте только те права, которые нужны системе. Большинству интеграций загрузки достаточно analysis:write и analysis:read.
- 04
Задайте срок действия
Укажите дату истечения для временного доступа или оставьте бессрочным для долгоживущих сервисных интеграций.
- 05
Скопируйте один раз
Полный токен ct_live_ показывается только один раз. После закрытия панели остаётся видимым только префикс.
ct_live_••••••••
Формат токена
ct_live_8Lk3...full-secret-valueХраните полный токен в secret manager вашей внешней системы. Call Trace хранит только хеш и после создания показывает лишь префикс.
Аутентификация
Используйте ключ интеграции с ограниченными правами
API-ключи интеграций отделены от сессий сотрудников. Передавайте ключ в заголовке Authorization и выдавайте только те области доступа, которые нужны вашей системе.
Заголовок
Authorization: Bearer ct_live_...
Content-Type: application/jsonОбласти доступа
analysis:write создаёт анализы.
analysis:read читает статус и результаты.
webhooks:write управляет настройками webhooks.
Права доступа
Что разрешает каждая область
Области доступа суммируются. Начните с минимального набора для интеграции и добавляйте новые только когда конкретный endpoint этого требует.
analysis:writeanalysis:readcalls:readstorage:writewebhooks:readwebhooks:writeРекомендуемый минимум
Для стандартного сценария создайте один токен с analysis:write и analysis:read. Webhooks настраивает администратор в UI, поэтому внешней системе обычно не нужен webhooks:write.
Срок действия токена
Истечение, бессрочный доступ и ротация
У каждого API-ключа свой срок жизни. Токен может быть бессрочным, автоматически истекать или отзываться вручную.
Бессрочный токен
expiresAt пуст. Токен активен, пока администратор его не отзовёт. Используйте только для доверенных backend-to-backend интеграций с процессом ротации.
Токен с датой истечения
expiresAt задан. После этой даты API возвращает 401 и новые запросы не принимаются. Используйте для тестов, подрядчиков или временного доступа.
Отозванный токен
revokedAt устанавливается сразу при отзыве ключа администратором. Отзыв мгновенный и необратим; создайте новый ключ.
Ротация
Создайте новый ключ, разверните его во внешней системе, убедитесь что обновился last used, затем отзовите старый ключ. Это исключает простой.
Справочник API
Создать анализ
Запрос сохраняет исходный файл и запускает фоновую обработку. Клиент не должен ждать завершения транскрипции или оценки в этом запросе.
Создать анализ
Возвращает 202 Accepted и ставит обработку в очередь.
/api/v1/analysesЗапрос
POST /api/v1/analyses
Authorization: Bearer ct_live_...
Content-Type: application/json
{
"fileUrl": "https://example.com/calls/call-123.mp3",
"agentId": "6f6af4bb-4f23-4f3f-a87e-85f2f8322dc1",
"queueId": "7a7bf5cc-5e34-4f4g-b98f-96g3g9433ed2",
"externalId": "crm-call-123",
"idempotencyKey": "crm-call-123",
"metadata": {
"customerId": "cust_42",
"source": "crm"
}
}Ответ
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"analysisId": "6f6af4bb-4f23-4f3f-a87e-85f2f8322dc1",
"status": "queued",
"externalId": "crm-call-123"
}fileUrlfileNameagentIdqueueIdlanguageexternalIdidempotencyKeymetadataТребования к URL файла
fileUrl должен использовать HTTPS. Приватные, localhost и внутренние IP-диапазоны отклоняются, включая редиректы во внутренние сети. Максимальный размер файла — 20 МБ. Файлы скачиваются с таймаутами и проверкой content-type до обработки.
Справочник API
Читать статус и результаты
Используйте этот endpoint, когда системе нужно сверить состояние или восстановиться после пропущенных webhook-доставок.
Получить анализ
Возвращает последний статус задачи и доступные поля результата.
/api/v1/analyses/{analysisId}{
"analysisId": "6f6af4bb-4f23-4f3f-a87e-85f2f8322dc1",
"status": "completed",
"externalId": "crm-call-123",
"call": {
"durationSeconds": 184,
"agentId": "agent-uuid",
"queueId": "queue-uuid"
},
"evaluation": {
"score": 82,
"summary": "The agent followed the script and resolved the main request.",
"emotion": {
"label": "neutral",
"score": 55,
"comment": "The caller stayed calm throughout the conversation."
},
"criteria": [
{ "name": "Greeting", "score": 10, "maxScore": 10 },
{ "name": "Need discovery", "score": 18, "maxScore": 20 }
]
},
"transcript": {
"language": "en",
"segments": [
{ "speaker": "agent", "text": "Good afternoon, how can I help?" }
]
},
"metadata": {
"customerId": "cust_42"
},
"error": null
}queuedЗапрос принят и ожидает обработки.
processingФайл скачивается, транскрибируется и оценивается.
completedОценка, транскрипция и сводка звонка доступны.
failedОбработка не удалась после повторов. Детали возвращаются в error.
Справочник API
Список анализов
Поиск по status, externalId, agent, queue или диапазону дат. Используйте для back-office сверки и инструментов поддержки.
Список анализов
Возвращает постраничный список анализов компании интеграции.
/api/v1/analysesGET /api/v1/analyses?status=completed&externalId=crm-call-123
Authorization: Bearer ct_live_...Webhooks
Webhook payload
Настройте webhook endpoints в Админ > Интеграции. Payloads содержат информацию, необходимую для сохранения результата оценки в вашей системе.
{
"deliveryId": "whd_01jz8n0f8ck2bk0smq7h2x1t0r",
"event": "analysis.completed",
"occurredAt": "2026-06-19T12:00:00.000Z",
"analysisId": "6f6af4bb-4f23-4f3f-a87e-85f2f8322dc1",
"externalId": "crm-call-123",
"call": {
"status": "completed",
"durationSeconds": 184,
"recordingUrl": "https://storage.example.com/audio/call-123.mp3"
},
"evaluation": {
"score": 82,
"summary": "The agent followed the script and resolved the main request.",
"emotion": {
"label": "neutral",
"score": 55,
"comment": "The caller stayed calm throughout the conversation."
},
"criteria": [
{ "name": "Greeting", "score": 10, "maxScore": 10 }
]
},
"transcript": {
"language": "en",
"segments": [
{ "speaker": "agent", "text": "Good afternoon, how can I help?" }
]
},
"metadata": {
"customerId": "cust_42"
},
"error": null
}Текст скрипта по умолчанию не включается. Используйте deliveryId для дедупликации и analysisId плюс event при сохранении переходов состояния.
Webhooks
Доставка и повторы
Call Trace сохраняет каждую попытку доставки и повторяет неудачные, чтобы результаты не терялись при таймауте или временных сбоях у клиента.
Успех
Любой ответ 2xx помечает доставку как выполненную.
Политика повторов
Первая попытка плюс 3 повтора с backoff, например 10 секунд, 1 минута и 5 минут.
История
Каждая попытка сохраняет статус, код ответа, сообщение об ошибке, метки времени и снимок payload.
Webhooks
Webhook secret
У каждого webhook endpoint есть secret. Call Trace отправляет его в каждой доставке, чтобы вы могли отклонять запросы из неизвестных источников.
Зачем проверять secret
URL webhook доступен из интернета. Сравните заголовок X-CallTrace-Secret с secret, который вы сохранили при создании endpoint. Если значения не совпадают, верните 401 и не обрабатывайте payload.
Что приходит в каждой доставке
POST /your/webhook-handler
X-CallTrace-Secret: whsec_8Lk3...your-endpoint-secret
X-CallTrace-Delivery: whd_01jz8n0f8ck2bk0smq7h2x1t0r
X-CallTrace-Event: analysis.completed
X-CallTrace-Timestamp: 2026-06-19T12:00:00.000Z
{ "event": "analysis.completed", "analysisId": "6f6af4bb-..." }
X-CallTrace-SecretSecret endpoint. Сравните это значение с CALL_TRACE_WEBHOOK_SECRET на вашем сервере.
X-CallTrace-DeliveryУникальный ID доставки. Используйте его, чтобы игнорировать повторные retry того же события.
X-CallTrace-EventТип события, например analysis.completed.
X-CallTrace-TimestampКогда Call Trace отправил запрос. Полезно для логов и поддержки.
Как проверить
Прочитайте X-CallTrace-Secret из заголовков запроса и сравните с secret, который показывается один раз в Админ > Интеграции при создании webhook. Храните secret в переменной окружения и отклоняйте несовпадения до обработки JSON.
Пример на Node.js
const secret = request.headers.get("x-calltrace-secret");
if (secret !== process.env.CALL_TRACE_WEBHOOK_SECRET) {
return new Response("Unauthorized", { status: 401 });
}
const payload = await request.json();Примеры
Создать анализ на вашем языке
Все примеры используют один и тот же стабильный endpoint и ожидают API-ключ в CALL_TRACE_API_KEY.
const response = await fetch("https://your-domain.com/api/v1/analyses", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.CALL_TRACE_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
fileUrl: "https://example.com/calls/call-123.mp3",
fileName: "call-123.mp3",
language: "auto",
externalId: "crm-call-123",
idempotencyKey: "crm-call-123"
})
});
const analysis = await response.json();
console.log(analysis.analysisId);Ошибки
Обработка ошибок
Используйте idempotency keys для безопасных повторов. Ошибки валидации возвращаются синхронно. Ошибки обработки — через status endpoint и webhooks analysis.failed.
400Невалидный JSON, отсутствует fileUrl, неподдерживаемый content type или невалидные metadata.
401Отсутствует, истёк, отозван или некорректный API-ключ.
403API-ключ не включает требуемую область доступа.
409Тот же idempotency key уже использован для другого payload.
422URL файла заблокирован, приватный, не HTTPS, слишком большой или недоступен.
500Временная ошибка сервера. Повторите с тем же idempotency key.