API / Довідник методів / Оренда й продовження

Оренда й продовження

Список послуг, оренда, продовження й зміна тарифу.

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 · stringtariff, slots або builder
locationId / nodeIdобовʼязковийbody · stringЛокація й нода з каталогу
tariffCode / slots / cores, ramMb, ssdGbbody · string / numberПлан для вибраного mode
monthsbody · number1, 3, 6 або 12; за замовчуванням — поточний термін
previewbody · booleantrue — лише порахувати ціну, нічого не списувати
Приклад запиту
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 слотов"
}
Помилки методу
409node_fullНа ноді немає місця
409ip_sold_outНемає вільних виділених IP
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_in_progressЗапит із цим ключем ще виконується
POST/projects/:id/services/:serviceId/extend

Продовжити послугу

Право: billing:spendСписує гроші · потрібен Idempotency-Key
Параметри
idобовʼязковийpath · stringНомер проєкту (з GET /projects) або тікета
serviceIdобовʼязковийpath · stringНомер послуги (з GET /projects/:id/services)
monthsbody · number1, 3, 6 або 12; за замовчуванням — поточний термін
previewbody · booleantrue — лише порахувати ціну, нічого не списувати
Приклад запиту
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
}
Помилки методу
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_in_progressЗапит із цим ключем ще виконується
POST/projects/:id/services/extend-all

Продовжити всі сервери проєкту

Право: billing:spendСписує гроші · потрібен Idempotency-Key
Параметри
idобовʼязковийpath · stringНомер проєкту (з GET /projects) або тікета
monthsbody · number1, 3, 6 або 12; за замовчуванням — поточний термін
previewbody · booleantrue — лише порахувати ціну, нічого не списувати
Приклад запиту
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
    }
  ]
}
Помилки методу
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_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 · stringtariff, slots або builder
tariffCode / slots / cores, ramMb, ssdGbbody · string / numberНовий план
previewbody · booleantrue — лише порахувати ціну, нічого не списувати
Приклад запиту
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"
}
Помилки методу
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_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 Порожня відповідь
Помилки методу
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_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 Порожня відповідь
Помилки методу
400idempotency_key_requiredНемає заголовка Idempotency-Key
402insufficient_balanceНе вистачає грошей на балансі
403token_spend_limitПеревищить ліміт витрат токена
409idempotency_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 Порожня відповідь

Загальні помилки

Будь-який метод може відповісти так. Докладніше про помилки

400bad_requestНевірне тіло чи параметри
401token_invalidТокен невірний, відкликаний або прострочений
403token_scope_missingУ токена немає потрібного права
403token_project_forbiddenПроєкт чи послуга поза обмеженнями токена
404not_foundНемає такого проєкту, послуги чи об’єкта
429token_rate_limitedЗабагато запитів, див. Retry-After
503upstream_unavailableПанель або нода не відповіли — повторіть пізніше