ScanOps Docs

POST /api/scan

Пассивный скан безопасности сайта: разбор публичных данных, DNS и TLS. Сайт не нагружается и не «ломается». Бюджет скана — до 20 секунд.

Запрос

{
  "domain": "example.ru",   // домен или URL
  "lang": "ru"              // необязательно: "ru" | "en"; иначе Accept-Language, затем ru
}
curl -s -X POST https://scanops.ru/api/scan \
  -H 'Content-Type: application/json' \
  -d '{"domain": "example.ru", "lang": "ru"}'

Ответ

{
  "target": "example.ru",
  "score": 42,                 // 0–100, сумма весов находок
  "level": "medium",           // safe | medium | high | critical
  "verdict": "Средний риск",
  "summary": "…",
  "counts": { "serious": 2, "medium": 3, "safe": 10, "total": 15 },
  "findings": [
    {
      "id": "headers.csp-missing",   // стабильный check_id, не переименовывается
      "severity": "high",            // critical | high | medium | safe | info
      "category": "headers",         // headers | tls | dns | domain | access | control-panel | admin | cms | forms | privacy | email | network | reputation | recon
      "title": "…",
      "what": "…",                   // что произошло
      "why": "…",                    // почему это важно
      "fix": "…",                    // что делать
      "code": "…"                    // необязательно: пример/доказательство
    }
  ],
  "safe_browsing": { "checked": true, "flagged": false }  // необязательно; фишинг-вердикт Google Safe Browsing
}

Важно про публичный скан

  • Скрытие подробностей. Полные what/why/fix отдаются только по четырём самым серьёзным находкам; остальные приходят обрезанными (id: "locked"). Полный отчёт — на платном тарифе или разовой покупкой в кабинете.
  • Кэш. Результат может прийти из кэша давностью до недели. Скрытие подробностей выполняется всегда, и на кэше, и на свежем прогоне.
  • Фишинг (safe_browsing). Считается только «вживую» и добавляется поверх отчёта: checked — удалось ли проверить, flagged — помечен ли адрес. Поля нет, если проверка недоступна.

Ошибки

  • 400 — домен не разобрался или отклонён SSRF-гардом: {"error": "…"}.
  • 429 — превышен лимит по IP (по умолчанию 3 скана в час), заголовок Retry-After.