Sumio API v1
Production API · HTTPS

Проверка личности,
понятная разработчикам.

Создайте сессию по эталонному фото, отправьте человеку защищённую ссылку и получите результат через API или подписанный webhook.

Base URL https://api.sumio.cc

Важно о назначении сервиса

Sumio выполняет техническое сравнение лица и проверку признаков присутствия. Это не проверка документа и не самостоятельная полная KYC-программа. Неопределённые результаты переходят в manual_review.

01 · Быстрый старт

От фотографии до результата

Интеграция состоит из трёх действий. Пользовательский camera flow, задания и переход с компьютера по QR полностью обслуживаются Sumio.

  1. 1
    Создайте проверку

    Передайте эталонное фото и, при необходимости, URL webhook.

  2. 2
    Сохраните и передайте ссылку

    API возвращает verification_url только при создании. Сама ссылка работает на протяжении всего camera flow до завершения или истечения срока.

  3. 3
    Получите итог

    Читайте статус по 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"}'
02 · Авторизация

Ключ остаётся на вашем сервере

Merchant endpoints требуют API-ключ. Передавайте его как Bearer token; заголовок X-API-Key также поддерживается. Никогда не помещайте ключ в браузерный код, URL, логи или репозиторий.

HEADER Authorization: Bearer sumio_sk_…

Секреты

Храните API-ключ и webhook signing secret в secret manager. Для ротации согласуйте короткий период перекрытия старого и нового ключа.

03 · Создание

Создать проверку

POST /v1/verifications API key

Фото принимается файлом через multipart или строкой Base64 через JSON. Поддерживаются JPEG, PNG и WebP; минимальный размер — 320×320 пикселей. Фактический лимит тела задаётся конфигурацией сервера.

curl · application/json
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"}
    }')"

Поля запроса

ПолеТипОписание
reference_imagefileОбязательно для multipart.
reference_image_base64stringОбязательно для JSON. Допускается plain Base64 или data URL.
webhook_urlHTTPS URLОпциональный публичный callback на порту 443.
metadataobjectВаши несекретные идентификаторы. Для multipart — JSON-строка.

Ответ 201 Created

application/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-токен не хранится в базе.

04 · Статус

Получить результат

GET/v1/verifications/{id}API key

Используйте UUID из ответа создания. Для обычной интеграции предпочтителен webhook, а GET — для отображения состояния и сверки.

curl
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.

05 · Жизненный цикл

Отмена и безвозвратное удаление

POST/v1/verifications/{id}/cancel

Останавливает активную сессию. Повторная отмена уже отменённой проверки идемпотентна.

DELETE/v1/verifications/{id}

Отзывает публичную ссылку и очищает reference/evidence, metadata, result и ожидающие webhook payloads. Повторный DELETE возвращает 204.

curl
# Отмена
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"
06 · Состояния

Предсказуемая state machine

pendingin_progressprocessingterminal
i

Текущий pilot работает fail-closed

В текущем deployment автоматические verified и rejected выключены. Даже сильный модельный accept/reject переводится в manual_review. Это не обещание production KYC; автоматические решения требуют отдельного release gate и калибровки.

pending

Ссылка создана, camera flow ещё не начат.

in_progress

Согласие принято, пользователь проходит задания.

processing

Evidence проверяется biometric engine.

verified

Все независимо утверждённые критерии пройдены.

rejected

Получено сильное объяснимое основание для отказа.

manual_review

Недостаточная уверенность, конфликт сигналов или fail-closed policy.

cancelled

Проверка отменена через merchant API.

expired

Срок действия ссылки истёк.

07 · Webhooks

Подписанные события с повторной доставкой

Webhook доставляется как минимум один раз. Отвечайте любым 2xx быстро, выполняйте тяжёлую работу асинхронно и дедуплицируйте по X-Sumio-Event-Id. Redirect не выполняется.

X-Sumio-Event-IdУникальный id доставки и ключ идемпотентности
X-Sumio-EventНапример, verification.manual_review
X-Sumio-TimestampUnix timestamp подписи
X-Sumio-Signaturev1= + hex HMAC-SHA256
signed_input = timestamp + "." + exact_raw_body
Проверка подписи · Python
import 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)

Сначала подпись, затем JSON

Проверяйте timestamp и подпись по исходным байтам до парсинга. Повторная сериализация JSON изменит подпись. Фото и biometric evidence в webhook не отправляются.

08 · Ошибки

Стабильный формат ошибок

Пример ответа
{
  "detail": {
    "code": "invalid_state",
    "message": "Operation is not available while status is verified"
  }
}
HTTPЗначениеДействие
401Ключ отсутствует или неверенНе повторять без исправления credential.
404UUID/сессия не найденыПроверьте окружение и identifier.
409Недопустимое состояние или конфликтПрочитайте свежий статус перед повтором.
410Публичная ссылка истеклаСоздайте новую проверку.
413Слишком большой запрос/файлУменьшите изображение без сильной потери качества.
415/422Формат или данные не прошли проверкуИсправьте Content-Type, JSON или изображение.
429Rate limitУчитывайте Retry-After и добавьте jitter.
5xxВременная ошибкаПовторяйте только безопасные/idempotent операции.
09 · Postman

Готовая коллекция

Импортируйте готовые merchant API запросы, задайте переменные api_key и reference_image_base64, затем выполните Create → Status.

Скачать JSON

Файл не содержит реальных ключей, фотографий или URL webhook. Postman environment с секретами не экспортируйте.

10 · Панель

Операторский интерфейс

На panel.sumio.cc оператор может просматривать существующие проверки и их evidence, контролировать webhook-доставку и управлять API-ключами. Новые проверки создаются только через merchant API.

01

Проверки и фото

Статус, reference image, captured evidence и reason codes.

02

Webhook delivery

История попыток, HTTP-ответы и ручной безопасный retry.

03

API-ключи

Создание отдельных ключей и немедленный отзыв доступа.

!

Панель — административная поверхность

В production защитите её Cloudflare Access, VPN или другим корпоративным SSO. Не используйте общий API-ключ и не оставляйте панель открытой на публичном компьютере.

Выход подтверждается сервером

Если ответ logout потерян, Panel повторно проверяет сессию. При неоднозначном сетевом сбое защищённый экран сохраняется с предупреждением — интерфейс не сообщает об успешном выходе, пока завершение сессии не подтверждено.

11 · Безопасность

Fail-closed — часть API-контракта

Sumio не превращает один similarity score в окончательное решение. В текущем pilot автоматические подтверждение и отказ отключены: модельные итоги становятся manual_review. Автоматические решения можно включать только после калибровки FAR/FRR и APCER/BPCER на репрезентативных данных и независимого тестирования presentation attacks.

Bearer URL

Короткоживущий, подписанный, без UUID внутри. Хранится только SHA-256 hash.

At rest

Reference и evidence шифруются; engine получает временные файлы в PrivateTmp.

Uncertainty

Низкое качество, конфликт моделей и policy gate приводят к manual_review.

Webhooks

Timestamped HMAC, SSRF-валидация, retry outbox и at-least-once semantics.

Сервис не заменяет DPIA, lawful basis, privacy notice, retention policy, manual appeal и требования вашей юрисдикции.

i

Отдельный лимит camera flow

Публичные session/evidence маршруты имеют независимый edge-бюджет: 3 запроса/с на реальный IP, burst 8 и не более 8 одновременных запросов. При 429 сериализуйте загрузки и повторяйте с ограниченным exponential backoff и jitter. Точный /verify/ без opaque token перенаправляется на нейтральную главную страницу.

12 · Changelog

История публичного контракта

v1.0

Первый публичный контракт

  • Создание через multipart или JSON/Base64.
  • Signed opaque verification URL и token-centric camera flow.
  • Status, cancel, privacy delete и signed webhook delivery.
  • Fail-closed biometric policy с manual_review.
  • Отдельный 429/connection budget для public session/evidence и нейтральный redirect для tokenless /verify/.
  • Fail-safe Panel logout и безопасное provision/deploy восстановление без неявной ротации заполненных секретов.
Sumio

Identity infrastructure with uncertainty handled honestly.

© 2026 Sumio

Скопировано