API Reference

Полная документация по интеграции с API SnickLab для тестирования и защиты.

Доступно только для пользователей тарифа Enterprise

API Keys

Войдите в аккаунт, чтобы управлять API ключами.

Вход в аккаунт

Начало работы

SnickLab API предоставляет программный доступ ко всем функциям платформы, включая запуск DDoS-тестов, мониторинг результатов, настройку защиты и управление аккаунтом.

Базовая информация

  • API использует стандарт REST и возвращает данные в формате JSON
  • Все запросы выполняются через HTTPS
  • Базовый URL: https://api.snicklab.com/v1
  • API доступно только для пользователей тарифа Enterprise
  • Для всех запросов требуется аутентификация

Требования

Для использования API вам потребуется:

  • Активный аккаунт SnickLab с тарифом Enterprise
  • API ключ, созданный в панели управления
  • Базовые знания о REST API и HTTP-запросах
Совет: Создавайте отдельные API ключи для разных приложений и окружений (разработка, тестирование, продакшн).

Аутентификация

Все запросы к API SnickLab должны быть аутентифицированы с помощью API ключа. Ваш API ключ содержит чувствительную информацию, храните его в безопасности и не включайте в публичный код.

Передача API ключа

API ключ должен передаваться в HTTP-заголовке X-API-Key с каждым запросом:

X-API-Key: your_api_key

Пример запроса с использованием curl:

curl -X GET "https://api.snicklab.com/v1/account/status" \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json"

Управление API ключами

Вы можете создавать, просматривать и отзывать API ключи в разделе API панели управления. Для каждого ключа доступны следующие настройки:

  • Название - для удобной идентификации ключа
  • Разрешения - ограничение доступа к определенным API-методам
  • Ограничение IP - список IP-адресов, с которых разрешены запросы
  • Срок действия - автоматическое истечение срока действия ключа
Безопасность: В случае компрометации API ключа немедленно отзовите его и создайте новый.

Ограничения запросов

Для обеспечения стабильной работы API и предотвращения злоупотреблений, мы применяем ограничения на количество запросов (rate limiting).

Стандартные ограничения

Для тарифа Enterprise действуют следующие ограничения:

  • 1000 запросов в минуту для большинства методов API
  • 30 запросов в минуту для методов запуска атак
  • 5 запросов в минуту для методов настройки защиты

При превышении лимита запросы будут возвращать ошибку 429 Too Many Requests.

Заголовки ограничений

С каждым ответом API возвращаются заголовки с информацией о текущих ограничениях:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 985
X-RateLimit-Reset: 1589547834
  • X-RateLimit-Limit: максимальное количество запросов в минуту
  • X-RateLimit-Remaining: количество оставшихся запросов
  • X-RateLimit-Reset: время сброса счетчика (Unix timestamp)
Совет: Для эффективного использования API внедрите алгоритмы расширенного повтора запросов с экспоненциальной задержкой в случае получения ошибки 429.

DDoS API

DDoS API позволяет программно запускать и управлять DDoS-тестами, получать результаты и просматривать историю тестирования.

Запуск атаки

POST /ddos/attack

Запускает новую DDoS-атаку с указанными параметрами.

Параметры запроса:
{
  "target_url": "https://example.com",  // URL цели (обязательно)
  "method": "HTTP-FLOOD",               // Метод атаки (обязательно)
  "duration": 600,                      // Продолжительность в секундах (обязательно)
  "rate": 100,                          // Количество запросов в секунду (опционально)
  "headers": {                          // HTTP заголовки (опционально)
    "User-Agent": "Mozilla/5.0 ...",
    "Referer": "https://google.com"
  },
  "proxy_type": "residential",          // Тип прокси (опционально)
  "geo_regions": ["EU", "NA"],          // Географические регионы (опционально)
  "notes": "Test attack for example.com" // Примечания (опционально)
}
Пример ответа:
{
  "attack_id": "atk_1a2b3c4d5e6f",
  "status": "pending",
  "target_url": "https://example.com",
  "method": "HTTP-FLOOD",
  "duration": 600,
  "created_at": "2025-05-18T14:23:45Z",
  "estimated_start": "2025-05-18T14:24:00Z",
  "price": 25.00
}

Получение статуса атаки

GET /ddos/attack/{attack_id}

Возвращает информацию о статусе и результатах конкретной атаки.

Пример ответа:
{
  "attack_id": "atk_1a2b3c4d5e6f",
  "status": "running",
  "target_url": "https://example.com",
  "method": "HTTP-FLOOD",
  "duration": 600,
  "elapsed_time": 128,
  "remaining_time": 472,
  "created_at": "2025-05-18T14:23:45Z",
  "started_at": "2025-05-18T14:24:02Z",
  "estimated_end": "2025-05-18T14:34:02Z",
  "downtime_percentage": 98.5,
  "current_requests_per_second": 102,
  "uptime_checks": [
    {
      "timestamp": "2025-05-18T14:25:00Z",
      "status": "down",
      "response_time": null,
      "http_code": null
    },
    {
      "timestamp": "2025-05-18T14:28:00Z",
      "status": "down",
      "response_time": null,
      "http_code": null
    }
  ]
}

Остановка атаки

DELETE /ddos/attack/{attack_id}

Останавливает выполняющуюся атаку. Успешно остановленная атака будет иметь статус "stopped".

Пример ответа:
{
  "attack_id": "atk_1a2b3c4d5e6f",
  "status": "stopped",
  "message": "Attack successfully stopped",
  "stopped_at": "2025-05-18T14:30:15Z",
  "duration_actual": 372,
  "refund_amount": 9.50
}

Получение списка атак

GET /ddos/attacks

Возвращает список всех атак с возможностью фильтрации и пагинации.

Параметры запроса:
  • status - фильтр по статусу (pending, running, completed, failed, stopped)
  • from_date - начальная дата в формате ISO 8601
  • to_date - конечная дата в формате ISO 8601
  • page - номер страницы (по умолчанию 1)
  • per_page - количество записей на странице (по умолчанию 20, максимум 100)
Пример ответа:
{
  "attacks": [
    {
      "attack_id": "atk_1a2b3c4d5e6f",
      "status": "completed",
      "target_url": "https://example.com",
      "method": "HTTP-FLOOD",
      "duration": 600,
      "created_at": "2025-05-18T14:23:45Z",
      "downtime_percentage": 98.5
    },
    {
      "attack_id": "atk_2b3c4d5e6f7g",
      "status": "running",
      "target_url": "https://test.com",
      "method": "TCP",
      "duration": 1800,
      "created_at": "2025-05-18T15:30:00Z",
      "downtime_percentage": 92.3
    }
  ],
  "pagination": {
    "total": 28,
    "per_page": 20,
    "current_page": 1,
    "last_page": 2
  }
}

Protection API

Protection API позволяет управлять настройками защиты от DDoS-атак, настраивать правила и получать статистику.

Добавление домена для защиты

POST /protection/domain

Добавляет новый домен для защиты от DDoS-атак.

Параметры запроса:
{
  "domain": "example.com",            // Домен для защиты (обязательно)
  "protection_level": "advanced",     // Уровень защиты: basic, standard, advanced (обязательно)
  "origin_ip": "192.168.0.1",         // IP оригинального сервера (обязательно)
  "origin_port": 443,                 // Порт оригинального сервера (по умолчанию 80 для HTTP, 443 для HTTPS)
  "https": true,                      // Использовать HTTPS (по умолчанию true)
  "use_ssl_certificate": true,        // Использовать SSL сертификат (по умолчанию true)
  "bypass_rules": {                   // Правила обхода защиты (опционально)
    "whitelisted_ips": ["1.2.3.4", "5.6.7.8"],
    "whitelisted_countries": ["US", "CA"]
  }
}
Пример ответа:
{
  "domain_id": "dom_1a2b3c4d5e6f",
  "status": "pending",
  "domain": "example.com",
  "protection_level": "advanced",
  "created_at": "2025-05-18T16:45:30Z",
  "cname_record": "example-com.protect.snicklab.com",
  "verification_required": true,
  "verification_method": "dns_txt",
  "verification_value": "snicklab-verify=1a2b3c4d5e6f"
}

Получение информации о защите домена

GET /protection/domain/{domain_id}

Возвращает информацию о защите конкретного домена и статистику блокировок.

Пример ответа:
{
  "domain_id": "dom_1a2b3c4d5e6f",
  "status": "active",
  "domain": "example.com",
  "protection_level": "advanced",
  "created_at": "2025-05-18T16:45:30Z",
  "activated_at": "2025-05-18T17:15:22Z",
  "cname_record": "example-com.protect.snicklab.com",
  "stats": {
    "total_requests": 1250432,
    "blocked_requests": 25689,
    "blocked_percentage": 2.05,
    "bandwidth_used": "42.8 GB",
    "last_attack_detected": "2025-05-19T08:12:45Z",
    "attack_types": {
      "http_flood": 18452,
      "bot_traffic": 5124,
      "other": 2113
    },
    "top_attack_countries": [
      {"country": "CN", "requests": 12504},
      {"country": "RU", "requests": 8642},
      {"country": "IN", "requests": 2541}
    ]
  }
}

Настройка правил защиты

PUT /protection/domain/{domain_id}/rules

Обновляет правила защиты для конкретного домена.

Параметры запроса:
{
  "waf_enabled": true,               // Включить WAF (Web Application Firewall)
  "bot_protection_level": "medium",  // Уровень защиты от ботов: low, medium, high
  "rate_limiting": {                 // Ограничение запросов
    "requests_per_second": 100,
    "burst": 200
  },
  "ip_rules": {                      // Правила для IP-адресов
    "blacklist": ["1.2.3.4", "5.6.7.0/24"],
    "whitelist": ["9.8.7.6"]
  },
  "country_rules": {                 // Правила для стран
    "blacklist": ["NK", "IR"],
    "whitelist": ["US", "CA", "EU"]
  },
  "custom_rules": [                  // Пользовательские правила
    {
      "name": "Block specific user agent",
      "conditions": [
        {
          "field": "user_agent",
          "operator": "contains",
          "value": "BadBot"
        }
      ],
      "action": "block"
    }
  ]
}
Пример ответа:
{
  "domain_id": "dom_1a2b3c4d5e6f",
  "message": "Protection rules updated successfully",
  "updated_at": "2025-05-19T10:25:15Z",
  "active_rules": 7,
  "deployment_status": "in_progress",
  "estimated_deployment_time": "2025-05-19T10:27:15Z"
}

Account API

Account API позволяет управлять настройками аккаунта, просматривать баланс и историю операций.

Получение информации об аккаунте

GET /account

Возвращает информацию о текущем аккаунте.

Пример ответа:
{
  "account_id": "acc_1a2b3c4d5e6f",
  "email": "[email protected]",
  "username": "exampleuser",
  "created_at": "2024-11-12T09:45:30Z",
  "plan": "enterprise",
  "plan_expires_at": "2025-11-12T09:45:30Z",
  "balance": 354.25,
  "api_rate_limit": 1000,
  "api_calls_today": 258,
  "attack_limit": {
    "concurrent": 20,
    "daily": 100,
    "remaining_daily": 85
  }
}

Проверка баланса

GET /account/balance

Возвращает текущий баланс аккаунта и историю последних транзакций.

Пример ответа:
{
  "balance": 354.25,
  "currency": "USD",
  "last_update": "2025-05-19T12:30:45Z",
  "recent_transactions": [
    {
      "id": "tx_1a2b3c4d5e6f",
      "type": "deposit",
      "amount": 100.00,
      "description": "Bitcoin payment",
      "created_at": "2025-05-15T10:24:30Z"
    },
    {
      "id": "tx_2b3c4d5e6f7g",
      "type": "charge",
      "amount": -25.00,
      "description": "DDoS attack atk_3c4d5e6f7g8h",
      "created_at": "2025-05-18T14:24:02Z"
    }
  ]
}

Создание платежа

POST /account/payment

Создает новый счет на оплату для пополнения баланса.

Параметры запроса:
{
  "amount": 100.00,                 // Сумма пополнения в USD (обязательно)
  "crypto_currency": "BTC",         // Криптовалюта для оплаты (обязательно)
  "callback_url": "https://example.com/payment/callback" // URL для уведомлений (опционально)
}
Пример ответа:
{
  "payment_id": "pay_1a2b3c4d5e6f",
  "status": "pending",
  "amount": 100.00,
  "crypto_currency": "BTC",
  "crypto_amount": 0.00153846,
  "payment_address": "3FZbgi29cpjq2GjdwV8eyHuJJnkLtktZc5",
  "expires_at": "2025-05-19T13:45:30Z",
  "payment_url": "https://nowpayments.io/payment/1a2b3c4d5e6f",
  "qr_code_url": "https://nowpayments.io/qr/1a2b3c4d5e6f.png"
}

Webhooks

Webhooks позволяют получать уведомления о событиях в реальном времени. Вместо постоянного опроса API на предмет изменений, вы можете настроить URL, на который будут отправляться уведомления при наступлении определенных событий.

Настройка webhooks

POST /webhooks

Создает новый webhook для получения уведомлений.

Параметры запроса:
{
  "url": "https://example.com/webhooks/snicklab",  // URL для отправки уведомлений
  "events": ["attack.started", "attack.completed", "attack.failed", "payment.confirmed"],  // События для уведомлений
  "description": "Production webhook for attack notifications",  // Описание (опционально)
  "active": true  // Активен ли webhook (по умолчанию true)
}
Пример ответа:
{
  "webhook_id": "wh_1a2b3c4d5e6f",
  "url": "https://example.com/webhooks/snicklab",
  "events": ["attack.started", "attack.completed", "attack.failed", "payment.confirmed"],
  "description": "Production webhook for attack notifications",
  "active": true,
  "created_at": "2025-05-19T14:30:00Z",
  "secret": "whsec_1a2b3c4d5e6f7g8h9i0j"  // Секретный ключ для проверки подписи
}

Проверка подписи webhook

Все webhook-уведомления содержат подпись в заголовке X-SnickLab-Signature, которую необходимо проверять для подтверждения подлинности запроса.

Пример кода для проверки подписи (PHP):
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SNICKLAB_SIGNATURE'];
$secret = 'whsec_1a2b3c4d5e6f7g8h9i0j';  // Секретный ключ из ответа при создании webhook

$expected_signature = hash_hmac('sha256', $payload, $secret);

if (hash_equals($expected_signature, $signature)) {
    // Подпись верна, обрабатываем webhook
    $data = json_decode($payload, true);

    // Обработка события в зависимости от типа
    switch ($data['event']) {
        case 'attack.started':
            // Обработка начала атаки
            break;
        case 'attack.completed':
            // Обработка завершения атаки
            break;
        // ...
    }

    http_response_code(200);
    echo json_encode(['status' => 'success']);
} else {
    // Подпись неверна
    http_response_code(400);
    echo json_encode(['status' => 'error', 'message' => 'Invalid signature']);
}

Коды ошибок

При взаимодействии с API могут возникать различные ошибки. Каждая ошибка имеет уникальный код и сообщение.

HTTP Code Error Code Description
400 invalid_request Некорректные параметры запроса
401 unauthorized Неверный API ключ или отсутствует аутентификация
403 forbidden Недостаточно прав для выполнения операции
404 not_found Запрашиваемый ресурс не найден
409 conflict Конфликт с текущим состоянием ресурса
422 validation_error Ошибка валидации данных
429 rate_limit_exceeded Превышен лимит запросов
500 server_error Внутренняя ошибка сервера
503 service_unavailable Сервис временно недоступен

Готовы интегрировать SnickLab API?

Получите тариф Enterprise и начните использовать полный функционал API для автоматизации тестирования и защиты.