API для реселлеров

Перепродавайте серверы Astra VPS (🇳🇱 Нидерланды, 🇪🇪 Эстония, 🇵🇱 Польша, 🇩🇪 Германия) своим клиентам через простой REST API. Полное управление, мгновенная выдача, никаких вложений в железо.

−25%
на все серверы сразу, с первого заказа
−37%
когда у вас 20+ активных серверов (применяется автоматически)

Как это устроено

Авторизация

Все запросы — с заголовком Authorization: Bearer <ваш API-ключ>. Ключ вы получаете в боте: t.me/astravpsbot?start=reseller.

Базовый URL: https://astravps.co/api/reseller/v1

# проверка ключа — ваш баланс и текущая скидка
curl -s https://astravps.co/api/reseller/v1/balance \
  -H "Authorization: Bearer rsl_ВАШКЛЮЧ"
{ "balance_rub": 1500.0, "discount_pct": 25.0,
  "reseller": { "active_servers": 3, "current_pct": 25,
    "next": { "at_servers": 20, "discount_pct": 37 } } }

Эндпоинты

GET /catalog GET /balance POST /servers GET /servers GET /servers/{id} POST /servers/{id}/{action} DELETE /servers/{id}
GET/catalog

Локации, тарифы (с вашими ценами со скидкой), список ОС и периодов.

curl -s https://astravps.co/api/reseller/v1/catalog -H "Authorization: Bearer rsl_..."
{ "discount_pct": 25.0,
  "locations": [ {"code":"nl","name":"Нидерланды","channel":"25 Гбит/с","available":true}, ... ],
  "presets": [ {"idx":0,"cpu":1,"ram":1,"disk":10,
                "price_month_rub":{"nl":158.0,"de":158.0,"ee":158.0,"pl":158.0}}, ... ],
  "os": ["ubuntu2404","debian12", ...], "periods": ["1m","3m","6m","1y"] }
GET/balance

Баланс, текущая скидка и прогресс до следующего тира.

POST/servers

Создать сервер (списывает с баланса по вашей цене, создание асинхронное — статус смотрите в GET /servers).

ПолеТипОписание
idxint, обяз.Индекс тарифа из /catalog (0, 1, 2…)
locationstring, обяз.nl · de · ee · pl
osstringИз catalog.os (по умолчанию ubuntu2404)
periodstring1m / 3m / 6m / 1y (по умолчанию 1m)
passwordstringroot-пароль, мин. 8 символов (иначе сгенерируем)
namestringНазвание сервера (до 60 символов)
curl -s -X POST https://astravps.co/api/reseller/v1/servers \
  -H "Authorization: Bearer rsl_..." -H "Content-Type: application/json" \
  -d '{"idx":2,"location":"nl","os":"ubuntu2404","period":"1m","name":"client-01"}'

Ответ (HTTP 200). id выдаётся сразу; сервер создаётся в фоне 1–3 минуты — опрашивайте GET /servers/{id}, пока status не станет active (тогда заполнены ip и root_password). Если выдача не удалась, услуга с этим id исчезает из списка, деньги возвращаются на баланс.

{ "ok": true, "id": 2871, "status": "provisioning", "name": "client-01",
  "location": "nl", "spec": {"cpu":2,"ram":4,"disk":60,"os":"ubuntu2404"},
  "period": "1m", "expires_in_days": 30,
  "charged_rub": 675.0, "balance_rub": 4325.0,
  "hint": "poll GET /api/reseller/v1/servers/{id} until status=active (ip/root_password filled)" }

Ошибки: 400 (неверные idx/location, пароль короче 8), 402 {"error":"insufficient_balance","need_rub":…,"balance_rub":…}, 409 {"error":"no capacity in location"}.

GET/servers

Список ваших серверов (кроме удалённых). Ответ обёрнут в {"servers": [...]}; каждый элемент — объект сервера (см. ниже). id — целое число, характеристики лежат во вложенном spec.

{ "servers": [
  { "id": 2871, "name": "client-01", "status": "active",
    "ip": "13.143.232.77", "root_password": "Xk9…",
    "location": "nl",
    "spec": {"cpu": 2, "ram": 4, "disk": 60, "os": "ubuntu2404"},
    "price_month_rub": 675.0,
    "created_at": "2026-09-22T18:40:12+00:00", "expires_at": "2026-10-22T18:40:12+00:00",
    "conn_info": "IP: 13.143.232.77\nОС: …\nЛогин: root\nПароль: Xk9…" },
  ... ] }

status: provisioning (создаётся, ip/root_password ещё null) · active · suspended (не оплачен) · expired.

GET/servers/{id}

Детали одного сервера. Ответ обёрнут в {"server": {...}} — тот же объект, что в списке, плюс power_status (running / stopped, реальное состояние VM).

{ "server": { "id": 2871, "name": "client-01", "status": "active", "ip": "13.143.232.77",
              "root_password": "Xk9…", "location": "nl",
              "spec": {"cpu": 2, "ram": 4, "disk": 60, "os": "ubuntu2404"},
              "price_month_rub": 675.0, "created_at": "…", "expires_at": "…",
              "conn_info": "…", "power_status": "running" } }

Несуществующий или чужой id → 404 {"error":"not_found"}.

POST/servers/{id}/{action}

Управляющие действия. {action} — одно из:

actionЧто делает
start · stop · rebootПитание сервера
reinstallПереустановка ОС. Тело: {"os":"debian12"}. Данные стираются, новый пароль
passwordСбросить root-пароль (данные стираются, IP сохраняется)
upgradeУвеличить CPU/RAM. Тело: {"cpu":2,"ram":4}. Спишется разница за остаток срока
change-ipСменить IP на случайный из пула локации (тариф 100 ₽)
renameПереименовать сервер: тело {"name": "..."}, 2–60 символов, бесплатно
renewПродлить на 1 месяц (спишет месячную цену)
vncПолучить ссылку на веб-консоль VNC
curl -s -X POST https://astravps.co/api/reseller/v1/servers/123/reboot \
  -H "Authorization: Bearer rsl_..."
DELETE/servers/{id}

Удалить сервер. Остаток средств за неиспользованные дни возвращается на ваш баланс за вычетом 10% (комиссия за досрочную отмену). В ответе — фактически возвращённая сумма.

Важное

Скидка реселлера действует только через это API. Покупки через обычного бота или сайт идут по полной цене — не путайте личный кабинет и реселлерский API.
Скидка растёт автоматически: как только у вас станет 20 активных серверов, все новые заказы пойдут по −37%. Ничего запрашивать не нужно.

Вебхуки: изменения ваших серверов

Настройте уведомления о смене основного и дополнительных IP, срока услуги и статуса, включая блокировку и разблокировку.

Открыть настройки вебхуков →

Используйте свой API-ключ. Укажите HTTPS-адрес обработчика (порт 443) и сохраните выданный ключ подписи. Доставка выключена до настройки.

API: GET / PUT / DELETE /api/reseller/v1/webhook. PUT: {"url":"https://example.com/astra"}. Журнал последних 100 событий: GET /api/reseller/v1/webhook/events.

События: server.ip_changed, server.extra_ips_changed, server.expiry_changed, server.status_changed. Тело: id, occurred_at (UTC), type, service_id, before, after. Пароли и ключи доступа к VPS не передаются. Статус отражает биллинг, а не каждое включение или выключение гипервизора.

Подпись: X-Astra-Signature: sha256=HMAC-SHA256(secret, timestamp + "." + raw_body), timestamp из X-Astra-Timestamp. Проверяйте свежесть времени и подпись, обрабатывайте повторный id идемпотентно. Отвечайте 2xx за 10 секунд; при сбое — до 12 попыток с увеличением интервала. Порядок доставки не гарантируется. Обновление настроек меняет ключ подписи и отменяет ожидающие события.

Вопросы, увеличение лимитов, индивидуальные условия — поддержка @astravps.
© 2026 Astra VPS · На главную