добрыйхостинг

База знаний API

API: обзор, доступ, токены, ошибки и лимиты

Справочник по API Доброго Хостинга: как получить доступ, как устроены запросы и ответы, что можно и чего нельзя.

4 мин чтения · раздел «API»

API Доброго Хостинга — это тот же интерфейс, которым пользуется кабинет: JSON поверх HTTPS. Через него можно следить за серверами из своего мониторинга, перезагружать их по расписанию, управлять firewall и тегами.

Что можно и чего нельзя

Доступно по токенуНедоступно (только из кабинета)
список серверов, карточка, статус у поставщиказаказ, продление, апгрейды, любые списания
включить / выключить / перезагрузитьудаление и переустановка ОС
метрики агента, журнал событий, уведомленияпароли, данные для входа, SSH-ключи в профиле
имя, теги, цвет, заметканастройки аккаунта, 2FA, e-mail
планировщик и firewallдоступ для друга, заявки, управление токенами

Это сделано намеренно: утечка токена не должна стоить вам сервера или денег.

1. Получите доступ

  1. Настройки → API → Запросить доступ: опишите задачу (1–2 предложения). Заявка создаёт обращение в поддержку.
  2. Ответ придёт уведомлением и в обращении — обычно в течение рабочего дня.
  3. После одобрения в том же разделе появится кнопка Создать токен.

Администратор может отозвать доступ — тогда все токены перестанут работать с ответом 403 token.

2. Создайте токен

Параметры токена:

ПолеЗначение
Имячтобы отличать: «grafana», «cron-ноутбук»
Праваread — просмотр; power — питание; manage — имя/теги, планировщик, firewall. Можно несколько.
Срокбессрочно, 30, 90 или 365 дней
Разрешённые IPсписок адресов/подсетей через запятую: 203.0.113.5, 10.0.0.0/8. Пусто — с любых.

Токен имеет вид dh_3f9a1c_… и показывается один раз. До 10 активных токенов на аккаунт. Отозвать — кнопкой в списке; после отзыва запросы получают 401.

3. Делайте запросы

  • Базовый адрес: https://panel.dobry.host/api
  • Заголовок: Authorization: Bearer <токен>
  • Для POST/PATCH — тело JSON и Content-Type: application/json
  • CSRF-токен и cookie не нужны. Заголовок Origin не проверяется для bearer-запросов.
curl -s https://panel.dobry.host/api/servers \
  -H "Authorization: Bearer dh_3f9a1c_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Python:

import requests
API = "https://panel.dobry.host/api"
H = {"Authorization": "Bearer dh_3f9a1c_XXXX"}
print(requests.get(f"{API}/servers", headers=H, timeout=15).json())

JavaScript (Node 18+ / браузер):

const r = await fetch("https://panel.dobry.host/api/servers", { headers: { Authorization: "Bearer dh_3f9a1c_XXXX" } });
const data = await r.json();

4. Формат ответа

Успех — всегда {"ok": true, ...}. Ошибка — HTTP-код 4xx/5xx и тело:

{"ok": false, "error": {"code": "token_scope", "message": "Этот запрос недоступен по API-токену."}}

message — готовый текст на русском, можно показывать пользователю. code — для логики.

5. Коды ошибок

HTTPcodeКогда
401tokenтокен отозван, истёк, неверный формат или доступ к API закрыт
403token_scopeу токена нет нужного права или маршрут закрыт для API
403token_ipзапрос с адреса не из списка разрешённых
403forbidden_sharedсервер выдан вам другом без этого права
403blockedаккаунт ограничен
404not_foundсервер/объект не найден или не ваш
400validation, action, password, osпроверьте поля — текст в message
409operation_in_progressпо серверу уже идёт операция, подождите
409softwareидёт автоустановка ПО, питание/переустановка временно недоступны
409idempotency_conflictэтот idempotency_key уже использован для другого действия
429rate_limitбольше 120 запросов в минуту на токен
503catalog_unavailable, unavailableпоставщик или сервис измерений не отвечает — повторите позже
500internalошибка на нашей стороне — напишите в поддержку с временем запроса

6. Лимиты и рекомендации

  • 120 запросов в минуту на токен. Метрики и карточка сервера кэшируются у нас на 45–60 с — чаще опрашивать нет смысла.
  • Для мониторинга используйте GET /servers/sparklines — один запрос на все серверы.
  • Все времена — Unix timestamp в секундах (UTC). Деньги — рубли, число с плавающей точкой.
  • Действия принимают idempotency_key (16–64 символа): повтор с тем же ключом вернёт ту же операцию, а не выполнит её дважды. Генерируйте ключ на своей стороне (uuid4, дата-серверId).
  • Храните токен в переменных окружения или секрет-хранилище, не в коде. Для серверных скриптов ограничьте токен по IP.
  • Совместимость: поля только добавляются, существующие не переименовываются. Если что-то не находите — проверьте раздел «Справочник».

Справочник

Смотрите также