Документация 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_id | Id подтверждённого сайта (обязательно) |
preset | small_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 секунд.