API / Справочник методов / Аренда и продление
Аренда и продление
Список услуг, аренда, продление и смена тарифа.
Адрес:
https://sourhost.net/api/v1·Авторизация: Authorization: Bearer sh_live_…GET
/projects/:id/services— Список услуг проектаPOST/projects/:id/services— Арендовать игровой серверPOST/projects/:id/services/:serviceId/extend— Продлить услугуPOST/projects/:id/services/extend-all— Продлить все серверы проектаGET/projects/:id/services/:serviceId/plan-options— Варианты смены тарифаPOST/projects/:id/services/:serviceId/plan— Сменить тарифPOST/projects/:id/services/fastdl— Арендовать FastDLPOST/projects/:id/services/dedicated-ip— Арендовать выделенный IPDELETE/projects/:id/services/:serviceId— Удалить услугуGET
/projects/:id/servicesСписок услуг проекта
Серверы, FastDL, выделенные IP: статус, адрес, цена, следующая оплата.
Право:
servers:readПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
Пример запроса
curl "https://sourhost.net/api/v1/projects/12/services" \
-H "Authorization: Bearer $SOURHOST_TOKEN"Ответ
HTTP
HTTP/2 200 OK
{
"items": [
{
"id": "34",
"type": "game_server",
"name": "Retake #1",
"game": "Counter-Strike 2",
"tariff": "CS2 · 16 слотов",
"location": "Германия · Франкфурт",
"status": "active",
"powerState": "running",
"address": "203.0.113.10:27015",
"price": 300,
"billingMonths": 1,
"nextPayment": "2026-12-01"
}
]
}POST
/projects/:id/servicesАрендовать игровой сервер
Параметры берутся из GET /catalog. Сначала отправьте с preview: true, чтобы узнать цену.
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
gameIdобязательный | body · string | Игра из каталога |
modeобязательный | body · string | tariff, slots или builder |
locationId / nodeIdобязательный | body · string | Локация и нода из каталога |
tariffCode / slots / cores, ramMb, ssdGb | body · string / number | План для выбранного mode |
months | body · number | 1, 3, 6 или 12; по умолчанию — текущий срок |
preview | body · boolean | true — только посчитать цену, ничего не списывать |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"gameId":"cs2","mode":"tariff","locationId":"de","nodeId":"de-n3","tariffCode":"cs2-16","months":1,"preview":true}'Ответ
HTTP
HTTP/2 200 OK
{
"total": 300,
"server": 300,
"fastdl": 0,
"months": 1,
"monthly": 300,
"name": "CS2 · 16 слотов"
}Ошибки метода
| 409 | node_full | На ноде нет места |
| 409 | ip_sold_out | Нет свободных выделенных IP |
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
POST
/projects/:id/services/:serviceId/extendПродлить услугу
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
serviceIdобязательный | path · string | Номер услуги (из GET /projects/:id/services) |
months | body · number | 1, 3, 6 или 12; по умолчанию — текущий срок |
preview | body · boolean | true — только посчитать цену, ничего не списывать |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services/34/extend" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"months":3,"preview":true}'Ответ
HTTP
HTTP/2 200 OK
{
"total": 855,
"monthly": 285,
"base": 300
}Ошибки метода
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
POST
/projects/:id/services/extend-allПродлить все серверы проекта
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
months | body · number | 1, 3, 6 или 12; по умолчанию — текущий срок |
preview | body · boolean | true — только посчитать цену, ничего не списывать |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services/extend-all" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"preview":true}'Ответ
HTTP
HTTP/2 200 OK
{
"items": [
{
"id": "34",
"total": 300,
"monthly": 300,
"base": 300
}
]
}Ошибки метода
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
GET
/projects/:id/services/:serviceId/plan-optionsВарианты смены тарифа
Право:
servers:readПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
serviceIdобязательный | path · string | Номер услуги (из GET /projects/:id/services) |
Пример запроса
curl "https://sourhost.net/api/v1/projects/12/services/34/plan-options" \
-H "Authorization: Bearer $SOURHOST_TOKEN"Ответ
204 Пустой ответ
POST
/projects/:id/services/:serviceId/planСменить тариф
Разница за оставшийся срок списывается или возвращается сразу. Сервер должен быть остановлен.
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
serviceIdобязательный | path · string | Номер услуги (из GET /projects/:id/services) |
modeобязательный | body · string | tariff, slots или builder |
tariffCode / slots / cores, ramMb, ssdGb | body · string / number | Новый план |
preview | body · boolean | true — только посчитать цену, ничего не списывать |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services/34/plan" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"mode":"tariff","tariffCode":"cs2-24","preview":true}'Ответ
HTTP
HTTP/2 200 OK
{
"tariff": "CS2 · 24 слота",
"price": 420,
"chargeOrCredit": 96,
"daysLeft": 24,
"nextPaymentAt": "2026-12-01"
}Ошибки метода
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
POST
/projects/:id/services/fastdlАрендовать FastDL
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services/fastdl" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"planCode":"fastdl-10","name":"Карты турнира"}'Ответ
204 Пустой ответ
Ошибки метода
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
POST
/projects/:id/services/dedicated-ipАрендовать выделенный IP
Право:
billing:spendСписывает деньги · нужен Idempotency-KeyПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
Пример запроса
curl -X POST "https://sourhost.net/api/v1/projects/12/services/dedicated-ip" \
-H "Authorization: Bearer $SOURHOST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: extend-34-2026-11" \
-d '{"nodeId":"de-n3","months":1}'Ответ
204 Пустой ответ
Ошибки метода
| 400 | idempotency_key_required | Нет заголовка Idempotency-Key |
| 402 | insufficient_balance | Не хватает денег на балансе |
| 403 | token_spend_limit | Превысит лимит трат токена |
| 409 | idempotency_in_progress | Запрос с этим ключом ещё выполняется |
DELETE
/projects/:id/services/:serviceIdУдалить услугу
Сервер и его файлы удаляются без возврата.
Право:
servers:deleteПараметры
idобязательный | path · string | Номер проекта (из GET /projects) или тикета |
serviceIdобязательный | path · string | Номер услуги (из GET /projects/:id/services) |
Пример запроса
curl -X DELETE "https://sourhost.net/api/v1/projects/12/services/34" \
-H "Authorization: Bearer $SOURHOST_TOKEN"Ответ
204 Пустой ответ
Общие ошибки
Любой метод может ответить так. Подробнее об ошибках
| 400 | bad_request | Неверное тело или параметры |
| 401 | token_invalid | Токен неверный, отозван или просрочен |
| 403 | token_scope_missing | У токена нет нужного права |
| 403 | token_project_forbidden | Проект или услуга вне ограничений токена |
| 404 | not_found | Нет такого проекта, услуги или объекта |
| 429 | token_rate_limited | Слишком много запросов, см. Retry-After |
| 503 | upstream_unavailable | Панель или нода не ответили — повторите позже |