API хостингуУсе, що робить конфігуратор, через HTTP.

Токени доступу (bearer) з областями дій на Ваш вибір, ідемпотентність кожного запису, курсорна пагінація та ендпоінт статусу, що взагалі не вимагає ключа — адже саме тоді, коли він потрібен найбільше, проблема може бути в самому обліковому записі.

кінцеві точки13

Швидкий старт

SDK не потрібен · Без несподіванок із версіями · Без обмежень швидкості запитів, які Ви відчуєте

Швидкий старт

Сервер із нуля за два звернення.

Створіть ключ у клієнтській зоні, оберіть його права доступу — він показується лише один раз. На цьому обліковому записі немає майстер-ключа, і розширити ключ заднім числом неможливо — замість цього створіть новий.

1 — подивіться, що Ви можете придбати

curl -s https://api.dediprivacy.com/v1/plans?family=vps \
  -H "Authorization: Bearer $DP_KEY"

2 — розгорніть це

curl -s -X POST https://api.dediprivacy.com/v1/servers \
  -H "Authorization: Bearer $DP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "plan":   "vps-4",
        "region": "ams",
        "image":  "debian-13",
        "cycle":  "12"
      }'

Розгортання списує кошти з балансу облікового запису. Запит, який призвів би до перевищення, завершується помилкою з 402 і точну суму нестачі, а не побудову напівготової машини — немає частково розгорнутого стану, який довелося б прибирати, і рахунок пізніше не прийде.

Домовленості

Частини, однакові для кожного запиту, визначені один раз, щоб Вам не довелося шукати їх удруге.

Базова URL-адреса
https://api.dediprivacy.com/v1 Лише TLS, HTTP/2, і жодного незашифрованого порту для перенаправлення. Запит у відкритому тексті відхиляється, а не оновлюється до захищеного, бо оновлення означає, що запит уже одного разу пройшов через мережу.
Автентифікація
Bearer-токен на кожен ключ Ключі створюються в особистому кабінеті з обраними Вами областями доступу, показуються один раз і зберігаються у хешованому вигляді. Мастер-ключа та автентифікації за паролем у цьому API немає.
Тип вмісту
application/json У запитах та відповідях. Час подається у форматі RFC 3339 в UTC, грошові суми — цілим числом центів, і ніде немає форматів, залежних від локалі.
Ідемпотентність
Idempotency-Key на кожному POST-запиті Повторний ключ повертає початкову відповідь, а не запускає повторне надання ресурсу. Ключі запам'ятовуються на 24 години — довше, ніж будь-який цикл повторних спроб повинен тривати.
Ліміт запитів
600 запитів на хвилину На кожен ключ, повертається у X-RateLimit-Remaining. Запити на надання ресурсів обмежені окремо — 60 на годину; напишіть нам, якщо це дійсно заважає.
Пагінація
Курсор, а не номер сторінки У кожній відповіді зі списком є next_cursor. Пагінація за зсувом непомітно пропускає рядки, коли базовий набір даних змінюється, і ми не хочемо передавати Вам цю ваду.

Ідентифікатори

Дані беруться з того самого каталогу, на якому побудовані публічні прайс-листи та конфігуратор. Новий регіон з’являється тут без жодного редагування цієї сторінки.

регіон

  • kefРейк'явік
  • otpБухарест
  • sofСофія
  • kivКишинів
  • zrhЦюрих
  • amsАмстердам
  • ptyПанама (місто)
  • sinСингапур

сімейство

  • vpsХмарний VPS
  • rdpWindows RDP
  • виділенийВиділені сервери
  • gpuОбчислення на GPU
  • приватна хмараПриватна хмара
  • веб-хостингВеб-хостинг
  • сховищеОб'єктне та блокове сховище
  • colocationColocation
  • користувацькийВласна конфігурація

цикл

  • 11 місяць
  • 33 місяцьs, −5 %
  • 1212 місяцьs, −20 %
  • 2424 місяцьs, −35 %

Кінцеві точки

Каталог

Усе, що можна замовити, з актуальними цінами. Автентифікація не потрібна — це ті самі цифри, на основі яких формуються публічні прайс-листи.

GET /regions Список регіонів

Кожен регіон із його ідентифікатором, містом, країною та поточним операційним станом.

Відповідь

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans Список планів

Фільтруйте за категорією через ?family=vps. Ціни вказано на місяць у центах, без урахування знижки за цикл.

Відповідь

{
  "data": [
    { "id": "vps-4", "family": "vps", "cores": 4, "ram_gb": 8,
      "disk_gb": 160, "price_cents": 1100, "regions": ["ams","kef"] }
  ],
  "next_cursor": null
}
GET /images Список образів

Образи операційних систем, доступні для родини систем, із зазначенням ліцензійного статусу кожної.

Відповідь

{
  "data": [
    { "id": "debian-13", "name": "Debian 13", "licence": "included" },
    { "id": "win-2025", "name": "Windows Server 2025", "licence": "included" }
  ]
}

Кінцеві точки

Сервери

Створюйте, перевіряйте та керуйте машинами. Розгортання списує кошти з балансу облікового запису; запит, що призвів би до овердрафту, завершується помилкою 402 з точною сумою нестачі, а не частковим створенням чогось.

POST /servers Розгорнути сервер

Одразу повертає статус «provisioning». Опитуйте ресурс або скористайтеся вебхуком.

Запит

{
  "plan": "vps-4",
  "region": "ams",
  "image": "debian-13",
  "cycle": "12",
  "label": "edge-01",
  "ssh_keys": ["ssh-ed25519 AAAA..."]
}

Відповідь

{
  "id": "srv_8Kq2",
  "status": "provisioning",
  "region": "ams",
  "ipv4": null,
  "charged_cents": 10560,
  "renews_at": "2027-07-28T00:00:00Z"
}
GET /servers Список серверів

Усе на обліковому записі, від найновішого.

Відповідь

{
  "data": [
    { "id": "srv_8Kq2", "label": "edge-01", "status": "active",
      "region": "ams", "ipv4": "203.0.113.10",
      "ipv6": "2001:db8:1234:5678::2" }
  ],
  "next_cursor": null
}
GET /servers/{id} Отримати сервер

Повні деталі, включно зі специфікацією, адресами та датою наступного продовження.

Відповідь

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions Дія над сервером

Одна кінцева точка, поле дії: перезавантаження, вимкнення, запуск, перебудова, зміна розміру, rdns.

Запит

{
  "action": "rebuild",
  "image": "ubuntu-26-04"
}

Відповідь

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} Скасувати сервер

Триває до кінця вже оплаченого періоду. Передайте ?immediate=true, щоб знищити його негайно й припинити оплату вже сьогодні.

Відповідь

{
  "id": "srv_8Kq2",
  "status": "cancelled",
  "ends_at": "2027-07-28T00:00:00Z"
}

Кінцеві точки

Платежі

Один баланс фінансує все. Об'єкта рахунку не існує, бо ганятися немає за чим — послуга списує кошти з балансу в дату свого поновлення.

GET /balance Отримати баланс

Поточний баланс, кошти, зарезервовані на продовження, і на скільки їх вистачить за нинішніх витрат.

Відповідь

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups Відкрити поповнення

Повертає платіжну адресу для обраного активу. Будь-який бонус застосовується в момент підтвердження платежу.

Запит

{
  "amount_cents": 100000,
  "asset": "XMR"
}

Відповідь

{
  "id": "top_5Wc1",
  "asset": "XMR",
  "address": "4A...",
  "amount": "3.417",
  "bonus_cents": 30000,
  "expires_at": "2026-07-28T18:00:00Z"
}
GET /ledger Список записів реєстру

Кожне зарахування та списання із зазначенням послуги, до якої воно стосується. Це весь обсяг даних про Ваші платежі, які ми зберігаємо.

Відповідь

{
  "data": [
    { "at": "2026-07-28T16:04:00Z", "cents": -1100,
      "kind": "renewal", "ref": "srv_8Kq2" }
  ]
}

Кінцеві точки

Статус

Публічний і без автентифікації, тож його можна опитувати чимось, що не має Вашого ключа, — і він відповідатиме, навіть якщо саме Ваш обліковий запис несправний.

GET /status Поточний стан

Ті самі показники, що й на сторінці стану, обчислені з того самого журналу інцидентів.

Відповідь

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents Перелік інцидентів

Сам реєстр, з фільтрацією за регіоном і датою.

Відповідь

{
  "data": [
    { "id": "inc_71", "region": "otp", "severity": "partial",
      "started_at": "2026-06-07T02:14:00Z",
      "unreachable_seconds": 1080 }
  ]
}

Помилки

Кожен збій супроводжується стабільним код і повідомлення, написане для людини. Код має збігатися; повідомлення можна покращувати.

400 invalid_request Тіло запиту не вдалося розібрати, або поле має неправильний тип. Повідомлення називає це поле.
401 без автентифікації Відсутній ключ, ключ некоректного формату або відкликаний ключ.
403 scope_missing Ключ дійсний, але не був створений з областю доступу, потрібною для цього запиту. Область доступу обирається окремо для кожного ключа та не може бути розширена заднім числом.
402 insufficient_funds Балансу для цього не вистачить. У відповіді є required_cents і balance_cents, тож Ви можете діяти без повторного запиту.
404 not_found Такого ресурсу на цьому обліковому записі немає. Навмисно ідентична відповідь видається для ресурсу на чужому обліковому записі.
409 конфлікт Ресурс зайнятий — зазвичай на цьому сервері вже виконується інша дія.
422 недоступно Коректно, але наразі неможливо: тарифний план тимчасово відсутній у цьому регіоні, або образ не пропонується для цієї серії.
429 rate_limited Заголовок Retry-After встановлюється і є точним, а не сталим значенням.
5xx server_error Наша. Безпечно повторити запит із тим самим Idempotency-Key — саме для цього він і потрібен.

A 404 для ресурсу на чужому обліковому записі — побайтово ідентична відповіді для ресурсу, якого ніколи не існувало. Це зроблено навмисно: різні відповіді перетворюють API на оракул для перебору чужої інфраструктури.