Один токен, создаётся в панели
Передаётся как bearer-токен. При желании ограничьте его только чтением или одной услугой; токены не зависят от вашего пароля, а отзыв одного из них никогда не завершает вашу сессию.
JSON поверх HTTPS. Не нужен SDK, не нужен отдельный аккаунт разработчика, и нет ни одного endpoint, который существовал бы в панели, но не здесь.
Создать сервер
curl -X POST https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN" \
-d '{"plan":"reef","image":"debian-13"}'Сразу возвращает id сборки. Машина отвечает по SSH примерно через шестьдесят секунд, а адрес маршрутизируется ещё до отправки учётных данных.
20 эндпоинтов
Базовый URL https://api.vpsoffshore.com/v1. Версия зафиксирована в пути: v1 продолжит работать и после появления v2, а дата отключения будет объявлена за год до неё.
Серверы
Хранилище
Сеть
Каталог
Биллинг
Всё, что умеет панель, есть и здесь, и здесь нет ничего, чего нет в панели. Если они расходятся — это баг: сообщите нам через панель, и мы это исправим, а не задокументируем как ожидаемое поведение.
Как это работает
Об API судят по плохим сценариям, а не по хорошим. Три из четырёх пунктов ниже — о том, что происходит, когда что-то идёт не так.
Один токен, создаётся в панели
Передаётся как bearer-токен. При желании ограничьте его только чтением или одной услугой; токены не зависят от вашего пароля, а отзыв одного из них никогда не завершает вашу сессию.
JSON на входе, JSON на выходе, SDK не нужен
Обычный HTTPS без специального обёртывания, без отката к XML и без ритуала подписи запросов. Если это может curl — у вас уже есть клиент. Официальные библиотеки существуют для Go, Python и TypeScript, но ни одна из них не обязательна.
Лимиты запросов, в которые вы не упрётесь случайно
600 запросов в минуту на токен, 60 — для запросов на создание. В каждом ответе указывается остаток лимита в заголовке, а при превышении возвращается 429 с числом секунд до повтора — без молчаливого сброса.
Ошибки, объясняющие, что делать
Ответ 4xx содержит машиночитаемый код, понятное человеку сообщение и поле, вызвавшее ошибку. Мы предпочитаем длинную ошибку короткой, о которой приходится догадываться.
Две вещи, которые вы указываете один раз
Обе стоит изучить до того, как вы напишете первый запрос, а не после первого сбоя.
Аутентификация
curl https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN"
Токены создаются в панели клиента и могут быть ограничены только чтением или одним сервисом. Они не зависят от вашего пароля, и отзыв одного токена не приводит к выходу из системы где-либо ещё.
Читать про лимит запросов
X-RateLimit-Remaining: 574
X-RateLimit-Reset: 41
На каждый ответ, а не только на тот, что завершился ошибкой. Превышение лимита возвращает 429 с указанием количества секунд ожидания — никогда молчаливого сброса и никогда усечённого ответа.
Ошибка указывает на поле
{"error":"plan_unknown",
"message":"No plan named 'reff'. Did you mean 'reef'?",
"field":"plan"}
Машиночитаемый код, понятная человеку фраза и поле, в котором ошибка. Длинные сообщения об ошибках обходятся дешевле, чем короткие, о смысле которых приходится гадать.
Опрос конфигурации
curl https://api.vpsoffshore.com/v1/servers/$ID \
-H "Authorization: Bearer $TOKEN" | jq .state
Переходит из building → running. Регистрировать webhook перед созданием чего-либо не нужно, а опрос раз в секунду укладывается в лимит.
Не нужно ничего запрашивать
Не нужен аккаунт разработчика, не нужно одобрение, нет песочницы, которая ведёт себя иначе, чем продакшн.