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 | Панель або нода не відповіли — повторіть пізніше |