/v1/verifications/{id}/cancelОстанавливает активную сессию. Повторная отмена уже отменённой проверки идемпотентна.
Создайте сессию по эталонному фото, отправьте человеку защищённую ссылку и получите результат через API или подписанный webhook.
https://api.sumio.cc
Sumio выполняет техническое сравнение лица и проверку признаков присутствия. Это не проверка документа и не самостоятельная полная KYC-программа. Неопределённые результаты переходят в manual_review.
Интеграция состоит из трёх действий. Пользовательский camera flow, задания и переход с компьютера по QR полностью обслуживаются Sumio.
Передайте эталонное фото и, при необходимости, URL webhook.
API возвращает verification_url только при создании. Сама ссылка работает на протяжении всего camera flow до завершения или истечения срока.
Читайте статус по UUID или обработайте HMAC-подписанное событие.
curl --fail-with-body https://api.sumio.cc/v1/verifications \
-H "Authorization: Bearer $SUMIO_API_KEY" \
-F "reference_image=@./person.jpg" \
-F 'metadata={"customer_id":"customer-4821"}'
Merchant endpoints требуют API-ключ. Передавайте его как Bearer token; заголовок X-API-Key также поддерживается. Никогда не помещайте ключ в браузерный код, URL, логи или репозиторий.
Authorization: Bearer sumio_sk_…
Храните API-ключ и webhook signing secret в secret manager. Для ротации согласуйте короткий период перекрытия старого и нового ключа.
/v1/verifications
API key
Фото принимается файлом через multipart или строкой Base64 через JSON. Поддерживаются JPEG, PNG и WebP; минимальный размер — 320×320 пикселей. Фактический лимит тела задаётся конфигурацией сервера.
REFERENCE_BASE64="$(base64 -w0 ./person.jpg)"
curl --fail-with-body https://api.sumio.cc/v1/verifications \
-H "Authorization: Bearer $SUMIO_API_KEY" \
-H "Content-Type: application/json" \
--data "$(jq -n \
--arg image "$REFERENCE_BASE64" \
--arg hook "https://merchant.example/kyc/events" \
'{
reference_image_base64: $image,
webhook_url: $hook,
metadata: {customer_id: "customer-4821"}
}')"
curl --fail-with-body https://api.sumio.cc/v1/verifications \
-H "Authorization: Bearer $SUMIO_API_KEY" \
-F "reference_image=@./person.jpg" \
-F "webhook_url=https://merchant.example/kyc/events" \
-F 'metadata={"customer_id":"customer-4821"}'
| Поле | Тип | Описание |
|---|---|---|
reference_image | file | Обязательно для multipart. |
reference_image_base64 | string | Обязательно для JSON. Допускается plain Base64 или data URL. |
webhook_url | HTTPS URL | Опциональный публичный callback на порту 443. |
metadata | object | Ваши несекретные идентификаторы. Для multipart — JSON-строка. |
{
"id": "2b67f8ec-9ba7-4eef-ad17-414533b53083",
"status": "pending",
"verification_url": "https://id.sumio.cc/verify/REDACTED_TOKEN",
"created_at": "2026-09-21T12:00:00Z",
"updated_at": "2026-09-21T12:00:00Z",
"expires_at": "2026-09-21T12:15:00Z",
"webhook_configured": true,
"metadata": {"customer_id": "customer-4821"},
"result": null
}
При последующих GET-запросах verification_url будет null. Это сделано намеренно: открытый bearer-токен не хранится в базе.
/v1/verifications/{id}API keyИспользуйте UUID из ответа создания. Для обычной интеграции предпочтителен webhook, а GET — для отображения состояния и сверки.
curl --fail-with-body \
"https://api.sumio.cc/v1/verifications/$VERIFICATION_ID" \
-H "Authorization: Bearer $SUMIO_API_KEY"
Если polling необходим, начинайте с интервала 2 секунды и увеличьте его до 5–15 секунд. Остановитесь после terminal status или expires_at.
/v1/verifications/{id}/cancelОстанавливает активную сессию. Повторная отмена уже отменённой проверки идемпотентна.
/v1/verifications/{id}Отзывает публичную ссылку и очищает reference/evidence, metadata, result и ожидающие webhook payloads. Повторный DELETE возвращает 204.
# Отмена
curl --fail-with-body -X POST \
"https://api.sumio.cc/v1/verifications/$VERIFICATION_ID/cancel" \
-H "Authorization: Bearer $SUMIO_API_KEY"
# Безвозвратное удаление данных
curl --fail-with-body -X DELETE \
"https://api.sumio.cc/v1/verifications/$VERIFICATION_ID" \
-H "Authorization: Bearer $SUMIO_API_KEY"
В текущем deployment автоматические verified и rejected выключены. Даже сильный модельный accept/reject переводится в manual_review. Это не обещание production KYC; автоматические решения требуют отдельного release gate и калибровки.
pendingСсылка создана, camera flow ещё не начат.
in_progressСогласие принято, пользователь проходит задания.
processingEvidence проверяется biometric engine.
verifiedВсе независимо утверждённые критерии пройдены.
rejectedПолучено сильное объяснимое основание для отказа.
manual_reviewНедостаточная уверенность, конфликт сигналов или fail-closed policy.
cancelledПроверка отменена через merchant API.
expiredСрок действия ссылки истёк.
Webhook доставляется как минимум один раз. Отвечайте любым 2xx быстро, выполняйте тяжёлую работу асинхронно и дедуплицируйте по X-Sumio-Event-Id. Redirect не выполняется.
X-Sumio-Event-IdУникальный id доставки и ключ идемпотентностиX-Sumio-EventНапример, verification.manual_reviewX-Sumio-TimestampUnix timestamp подписиX-Sumio-Signaturev1= + hex HMAC-SHA256signed_input = timestamp + "." + exact_raw_bodyimport hashlib
import hmac
import time
def verify_sumio(raw_body: bytes, timestamp: str,
signature: str, secret: str) -> bool:
try:
sent_at = int(timestamp)
except ValueError:
return False
if abs(int(time.time()) - sent_at) > 300:
return False
expected = "v1=" + hmac.new(
secret.encode(),
timestamp.encode("ascii") + b"." + raw_body,
hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected, signature)
Проверяйте timestamp и подпись по исходным байтам до парсинга. Повторная сериализация JSON изменит подпись. Фото и biometric evidence в webhook не отправляются.
{
"detail": {
"code": "invalid_state",
"message": "Operation is not available while status is verified"
}
}
| HTTP | Значение | Действие |
|---|---|---|
401 | Ключ отсутствует или неверен | Не повторять без исправления credential. |
404 | UUID/сессия не найдены | Проверьте окружение и identifier. |
409 | Недопустимое состояние или конфликт | Прочитайте свежий статус перед повтором. |
410 | Публичная ссылка истекла | Создайте новую проверку. |
413 | Слишком большой запрос/файл | Уменьшите изображение без сильной потери качества. |
415/422 | Формат или данные не прошли проверку | Исправьте Content-Type, JSON или изображение. |
429 | Rate limit | Учитывайте Retry-After и добавьте jitter. |
5xx | Временная ошибка | Повторяйте только безопасные/idempotent операции. |
Импортируйте готовые merchant API запросы, задайте переменные api_key и reference_image_base64, затем выполните Create → Status.
Файл не содержит реальных ключей, фотографий или URL webhook. Postman environment с секретами не экспортируйте.
На panel.sumio.cc оператор может просматривать существующие проверки и их evidence, контролировать webhook-доставку и управлять API-ключами. Новые проверки создаются только через merchant API.
Статус, reference image, captured evidence и reason codes.
История попыток, HTTP-ответы и ручной безопасный retry.
Создание отдельных ключей и немедленный отзыв доступа.
В production защитите её Cloudflare Access, VPN или другим корпоративным SSO. Не используйте общий API-ключ и не оставляйте панель открытой на публичном компьютере.
Если ответ logout потерян, Panel повторно проверяет сессию. При неоднозначном сетевом сбое защищённый экран сохраняется с предупреждением — интерфейс не сообщает об успешном выходе, пока завершение сессии не подтверждено.
Sumio не превращает один similarity score в окончательное решение. В текущем pilot автоматические подтверждение и отказ отключены: модельные итоги становятся manual_review. Автоматические решения можно включать только после калибровки FAR/FRR и APCER/BPCER на репрезентативных данных и независимого тестирования presentation attacks.
Короткоживущий, подписанный, без UUID внутри. Хранится только SHA-256 hash.
Reference и evidence шифруются; engine получает временные файлы в PrivateTmp.
Низкое качество, конфликт моделей и policy gate приводят к manual_review.
Timestamped HMAC, SSRF-валидация, retry outbox и at-least-once semantics.
Сервис не заменяет DPIA, lawful basis, privacy notice, retention policy, manual appeal и требования вашей юрисдикции.
Публичные session/evidence маршруты имеют независимый edge-бюджет: 3 запроса/с на реальный IP, burst 8 и не более 8 одновременных запросов. При 429 сериализуйте загрузки и повторяйте с ограниченным exponential backoff и jitter. Точный /verify/ без opaque token перенаправляется на нейтральную главную страницу.
manual_review./verify/.