API для реселлеров
Перепродавайте серверы Astra VPS (🇳🇱 Нидерланды, 🇪🇪 Эстония, 🇵🇱 Польша, 🇩🇪 Германия) своим клиентам через простой REST API. Полное управление, мгновенная выдача, никаких вложений в железо.
Как это устроено
- Предоплатный баланс. Пополняете баланс в боте @astravpsbot — с него списываются заказы по вашей цене (со скидкой). Средства баланса не выводятся.
- Вы зарабатываете на наценке. Покупаете у нас со скидкой 25–37%, продаёте своим клиентам по своей цене — разница ваша. Расчёты со своими клиентами вы ведёте сами.
- Всё через API. Создание, переустановка, апгрейд, смена IP, VNC-консоль, продление, отмена — программно. Отдельной веб-панели для реселлера нет (на очереди).
- Возврат при отмене: при досрочном удалении сервера остаток за неиспользованные дни возвращается на баланс за вычетом 10% (комиссия за досрочную отмену).
Авторизация
Все запросы — с заголовком 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 } } }
Эндпоинты
Локации, тарифы (с вашими ценами со скидкой), список ОС и периодов.
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 /servers).
| Поле | Тип | Описание |
|---|---|---|
idx | int, обяз. | Индекс тарифа из /catalog (0, 1, 2…) |
location | string, обяз. | nl · de · ee · pl |
os | string | Из catalog.os (по умолчанию ubuntu2404) |
period | string | 1m / 3m / 6m / 1y (по умолчанию 1m) |
password | string | root-пароль, мин. 8 символов (иначе сгенерируем) |
name | string | Название сервера (до 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"}.
Список ваших серверов (кроме удалённых). Ответ обёрнут в {"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.
Детали одного сервера. Ответ обёрнут в {"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"}.
Управляющие действия. {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_..."
Удалить сервер. Остаток средств за неиспользованные дни возвращается на ваш баланс за вычетом 10% (комиссия за досрочную отмену). В ответе — фактически возвращённая сумма.
Важное
Вебхуки: изменения ваших серверов
Настройте уведомления о смене основного и дополнительных 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 попыток с увеличением интервала. Порядок доставки не гарантируется. Обновление настроек меняет ключ подписи и отменяет ожидающие события.
© 2026 Astra VPS · На главную