API и интеграция с CRM

Полный цикл без ручной работы: ваша система сама выпускает код на съёмку, узнаёт о снятом материале и программно проверяет подлинность файла. Подходит для CRM, систем учёта заявок, 1С и no-code-платформ.

Доступ Сценарий Коды на съёмку Проверка файла Вебхуки Рецепты для CRM Ошибки

Доступ: один ключ на всё

API-ключ создаётся в личном кабинете, раздел «Интеграции и API» — самостоятельно, без обращения в поддержку. Ключ показывается один раз в момент создания; если потеряли — отзовите его там же и создайте новый.

Ключ передаётся в заголовке X-Api-Key в каждом запросе. Один и тот же ключ работает для всех операций ниже.

БазаЧто там
https://api.trustvisor.ruКоды на съёмку, статусы, вебхуки — всё под /v1/business/…
https://portal.trustvisor.ruПроверка файлов — /v1/verify

Типовой сценарий (страховая, СТО, логистика — любой)

1. В CRM создаётся заявка → CRM вызывает наш API и получает код на съёмку, привязанный к номеру заявки.
2. Код уходит исполнителю (СМС, мессенджер — как вы обычно общаетесь).
3. Исполнитель вводит код в приложении TrustVisor и снимает.
4. В момент съёмки мы шлём вебхук на ваш адрес (или CRM опрашивает статус кода) → заявка двигается по воронке сама.
5. Полученный файл CRM отправляет на проверку — вердикт о подлинности возвращается за секунды и сам записывается в журнал панели.

Коды на съёмку

Выпустить код

POST https://api.trustvisor.ru/v1/business/case-codes

curl -X POST https://api.trustvisor.ru/v1/business/case-codes \
  -H "X-Api-Key: ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{"case_id": "ОСАГО-4712", "max_videos": 2, "max_photos": 10}'

Поля запроса (обязателен только case_id — ваш номер заявки/сделки, до 64 символов):

ПолеОписание
case_idНомер вашей заявки — по нему код виден в панели и в вебхуках
max_videos, max_photosЛимиты съёмки; не передали — без лимита
quality, ratioТребования к съёмке (качество, соотношение сторон)
gps_modeТребование геометки
require_onlinetrue — съёмка только при живой связи с сервером
max_duration_secondsМаксимальная длительность видео

Ответ: {"key": "TV-XXXX-XXXX", "case_id": "…", "expires_at": "…", …}. Код живёт 24 часа до первого ввода в приложение; дальше срок отсчитывается от активации.

Узнать статус

GET https://api.trustvisor.ru/v1/business/case-codes/TV-XXXX-XXXX — один код, или без ключа в пути — все коды разом.

{
  "key": "TV-XXXX-XXXX",
  "case_id": "ОСАГО-4712",
  "state": "in_use",      // unused | in_use | expired
  "captured": true,        // съёмка состоялась
  "received": false,       // вы отметили файл полученным
  "videos_used": 1, "max_videos": 2, 
}

Отметить, что файл дошёл до вас: POST /v1/business/case-codes/TV-XXXX-XXXX/mark-received.

Проверка файла

POST https://portal.trustvisor.ru/v1/verifymultipart/form-data, файл в поле package.

curl -X POST https://portal.trustvisor.ru/v1/verify \
  -H "X-Api-Key: ваш_ключ" \
  -F "package=@REC_20260622_0702.trustvisor"

Код 200 и JSON — если проверка вообще состоялась (в том числе если файл оказался поддельным — это тоже успешный результат проверки, не ошибка запроса). Каждая проверка автоматически попадает в журнал «Проверки» вашей панели.

TRUSTED_CAPTURE — файл подлинный, устройство аппаратно подтверждено. Наивысший уровень доверия.
UNVERIFIED_DEVICE — подпись и содержимое верны, но устройство не прошло аппаратную проверку (эмулятор или очень старый телефон). Файл не изменён, но происхождение с конкретной камеры не доказано.
TAMPERED — файл повреждён, изменён после съёмки или подпись не сходится. Доверять нельзя.

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

Вебхуки: события в вашу систему

Вместо опроса статусов мы сами отправим POST-запрос на ваш адрес. Вебхук создаётся в панели («Интеграции и API») или по API:

curl -X POST https://api.trustvisor.ru/v1/business/webhooks \
  -H "X-Api-Key: ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://ваш-сервер/trustvisor-hook", "events": ["captured", "verified"]}'

Ответ содержит secret — ключ подписи, показывается один раз.

СобытиеКогда приходитТело (JSON)
capturedПервая завершённая съёмка по кейс-коду{"event":"captured","at":"…","key":"TV-…","case_id":"…"}
verifiedПроверка пакета записана в журнал (из панели или по API){"event":"verified","at":"…","verdict":"TAMPERED","file_name":"…","source":"api"}
testКнопка «Тест» в панели{"event":"test","at":"…"}

Подпись и повторы

Каждый запрос несёт заголовки X-TrustVisor-Event, X-TrustVisor-Delivery (номер доставки) и X-TrustVisor-Signature: sha256=<hex> — HMAC-SHA256 сырого тела запроса вашим секретом. Проверка на Python:

import hashlib, hmac
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers["X-TrustVisor-Signature"])

Ответьте любым кодом 2xx за 6 секунд. Не успели/упали — повторим до 6 раз с нарастающими интервалами (1 мин → 5 мин → 30 мин → 2 ч → 6 ч). Обрабатывайте события идемпотентно: при повторе X-TrustVisor-Delivery тот же.

Ограничения: до 5 вебхуков на компанию; адрес — только внешний https/http (локальные и внутренние адреса не принимаются).

Рецепты для CRM

Битрикс24

Без разработки: роботы Битрикс24 умеют слать исходящие вебхуки, но не умеют добавлять свой заголовок X-Api-Key — поэтому прямой вызов нашего API из робота не собрать. Рабочие пути:

amoCRM

Salesbot / digital pipeline умеют шаг «отправить вебхук» — тоже без своих заголовков, поэтому схема та же: связка через no-code-платформу или свой мини-обработчик, который держит ключ и ходит в наш API.

Из 1С наш API вызывается штатно, без посредников:

Соединение = Новый HTTPСоединение("api.trustvisor.ru",,,,, Новый ЗащищённоеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/business/case-codes");
Запрос.Заголовки.Вставить("X-Api-Key", Ключ);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки("{""case_id"": ""ЗАКАЗ-1042""}");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Albato, ApiX-Drive, n8n, Make

Любая платформа связок с шагом «HTTP-запрос с заголовками» подключается за вечер: шаг 1 — триггер вашей CRM, шаг 2 — POST к нам с X-Api-Key, шаг 3 — записать key из ответа в поле сделки. Входящие вебхуки от нас эти платформы принимают штатным триггером «Webhook».

Свой сайт или внутренняя система

Просто HTTP: выпуск кода — один POST, проверка файла — один POST, события — вебхук. Примеры на curl и JavaScript выше подходят без изменений.

Ошибки

КодЗначение
401Не передан X-Api-Key, либо ключ неверный/отозван
400Запрос не удалось разобрать; для вебхуков — недопустимый адрес или превышен лимит 5 вебхуков
402/403Операция недоступна на вашем тарифе (коды на съёмку — тариф «Клиент»/Business)
404Код или вебхук не найден (или принадлежит другой компании)
413Файл слишком большой
422Файл отклонён как подозрительный до полной проверки
429Превышен лимит запросов (выпуск кодов — 30/мин, проверка — 20/мин)

Нужна помощь с интеграцией — напишите на info@trustvisor.ru, поможем собрать связку под вашу систему.