Документация API

API позволяет запускать тесты из CI/CD или своих систем и забирать отчёты в JSON. Доступ по API входит в тарифы «Магазин» и «Студия»; ключи создаются в разделе «API и интеграции».

Авторизация

Каждый запрос передаёт ключ в заголовке Authorization: Bearer nk_live_…. Ключ действует от имени аккаунта с правами сотрудника. Лимит — 300 запросов в минуту на ключ; ответ 429 содержит Retry-After.

Базовый адрес: https://loadsure.ru/api/v1. Все ответы — JSON в UTF-8, имена полей в snake_case (site_id, queued_at). Ошибки имеют вид {"error": {"code": "…", "message": "…", "fields": {…}}}.

Сайты

GET /sites — сайты аккаунта и статус подтверждения. Добавление и подтверждение сайта делается в интерфейсе: это одноразовая процедура.

{"sites": [{"id": "…", "domain": "shop.example.ru", "url": "https://shop.example.ru", "verified": true, "verified_at": "2026-10-01T10:00:00Z"}]}

Запуск теста

POST /tests

ПолеОписание
site_idId подтверждённого сайта (обязательно)
presetsmall_peak (по умолчанию), campaign, sale, find_limit
urlsНеобязательный список адресов страниц сайта — открываются в равных долях. Без него сценарий строится автоматически, как по кнопке (доли по типам страниц, пул карточек товаров)
with_assetsДогружать ли статику главной страницы при авто-сценарии (по умолчанию true)

Ответ 201 с объектом теста. Один аккаунт может выполнять один тест одновременно; лимиты тарифа и правила безопасности те же, что в интерфейсе.

Статус и остановка

GET /tests/{id} — статус (queued, running, finished, stopped, autostopped, aborted, failed) и сводка после завершения (summary: requests, failures, p95_ms, peak_users…). POST /tests/{id}/stop — остановить. GET /tests?site_id=… — история.

Отчёт

GET /tests/{id}/report — вердикт, светофор (green / yellow / red), уверенный уровень нагрузки: в людях на сайте одновременно (confident_people_online) и визитах в час (confident_visits_per_hour), в запросах в секунду к серверу вместе со статикой (confident_requests_per_second) и открытиях страниц в секунду среди них (confident_pages_per_second; максимум за тест — peak_requests_per_second), а также в виртуальных посетителях теста (confident_users; виртуальный посетитель открывает страницу каждые 1–3 с и примерно соответствует десятку реальных), рассказ (story), рекомендации, факты, статистика по страницам (urls) и посекундные окна (windows).

Примеры

curl

curl -X POST https://loadsure.ru/api/v1/tests \
  -H "Authorization: Bearer $NAGRUZKA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id": "SITE_ID", "preset": "campaign"}'

curl https://loadsure.ru/api/v1/tests/TEST_ID -H "Authorization: Bearer $NAGRUZKA_KEY"
curl https://loadsure.ru/api/v1/tests/TEST_ID/report -H "Authorization: Bearer $NAGRUZKA_KEY"

Python

import os, time, requests

BASE = "https://loadsure.ru/api/v1"
H = {"Authorization": f"Bearer {os.environ['NAGRUZKA_KEY']}"}

test = requests.post(f"{BASE}/tests", json={"site_id": "SITE_ID", "preset": "campaign"}, headers=H).json()
while test["status"] in ("queued", "running"):
    time.sleep(15)
    test = requests.get(f"{BASE}/tests/{test['id']}", headers=H).json()

report = requests.get(f"{BASE}/tests/{test['id']}/report", headers=H).json()
print(report["light"], report["verdict"])
if report["light"] == "red":
    raise SystemExit("Сайт не готов к нагрузке")

Node.js

const BASE = "https://loadsure.ru/api/v1";
const headers = { Authorization: "Bearer " + process.env.NAGRUZKA_KEY, "Content-Type": "application/json" };

let test = await (await fetch(BASE + "/tests", { method: "POST", headers, body: JSON.stringify({ site_id: "SITE_ID", preset: "sale" }) })).json();
while (["queued", "running"].includes(test.status)) {
  await new Promise(r => setTimeout(r, 15000));
  test = await (await fetch(BASE + "/tests/" + test.id, { headers })).json();
}
const report = await (await fetch(BASE + "/tests/" + test.id + "/report", { headers })).json();
console.log(report.light, report.verdict);

Вебхуки

Уведомление о завершении теста по вебхуку планируется; пока опрашивайте статус раз в 10–15 секунд.