API hostinguWszystko, co robi konfigurator, dostępne przez HTTP.

Tokeny typu bearer z zakresami wybieranymi przez Państwa, idempotencja przy każdym zapisie, paginacja kursorowa oraz punkt końcowy statusu niewymagający żadnego klucza — ponieważ moment, w którym najbardziej potrzebują Państwo go odpytać, to moment, w którym to właśnie Państwa konto może być zepsute.

punkty końcowe13

Szybki start

Bez wymaganego SDK · Bez niespodzianek wersjonowania · Bez limitu zapytań, na który Państwo trafią

Szybki start

Serwer od zera, w dwóch zapytaniach.

Klucz tworzy się w panelu klienta, wybierając jego zakres uprawnień, i jest on wyświetlany tylko raz. Na tym koncie nie ma klucza głównego ani możliwości poszerzenia uprawnień klucza po fakcie — zamiast tego należy utworzyć nowy.

1 — sprawdzenie, co można kupić

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

2 — wdróż to

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"
      }'

Uruchomienie usługi obciąża saldo konta. Zapytanie, które przekroczyłoby saldo, kończy się błędem 402 i dokładny niedobór środków, zamiast budowania połowicznej maszyny — nie ma stanu częściowego uruchomienia do posprzątania i nie przychodzi później żadna faktura.

Konwencje

Elementy takie same przy każdym wywołaniu, ustalone raz, by nie trzeba było ich szukać po raz drugi.

Adres bazowy
https://api.dediprivacy.com/v1 Wyłącznie TLS, HTTP/2, i brak niezaszyfrowanego portu, z którego mogłoby nastąpić przekierowanie. Żądanie w postaci jawnej jest odrzucane, a nie podnoszone do TLS, ponieważ podniesienie oznacza, że żądanie już raz przeszło przez sieć.
Uwierzytelnianie
Token bearer, na klucz Klucze tworzone są w panelu klienta, z wybranym przez Państwa zakresem uprawnień, pokazywane jednorazowo i przechowywane w postaci hasza. To API nie zna klucza głównego ani uwierzytelniania hasłem.
Typ treści
application/json W żądaniach i odpowiedziach. Czas jest podawany w formacie RFC 3339 w UTC, kwoty jako liczby całkowite centów, a nigdzie nie występują formaty zależne od lokalizacji.
Idempotencja
Idempotency-Key w każdym żądaniu POST Powtórzony klucz zwraca pierwotną odpowiedź zamiast dwukrotnego uruchomienia procesu. Klucze są zapamiętywane przez 24 godziny — dłużej, niż powinna trwać jakakolwiek pętla ponawiania.
Limit żądań
600 żądań na minutę Na klucz, zwracane w nagłówku X-RateLimit-Remaining. Wywołania provisioningu są limitowane osobno do 60 na godzinę; proszę dać znać, jeśli to faktycznie Państwu przeszkadza.
Paginacja
Kursor, nie numer strony Pole next_cursor w każdej odpowiedzi listy. Paginacja przesunięciowa po cichu pomija wiersze, gdy zmienia się bazowy zbiór danych, a wolimy nie dostarczać Państwu tego błędu.

Identyfikatory

Dane pochodzą z tego samego katalogu, na którym oparte są publiczne cenniki i konfigurator. Region dodany do infrastruktury pojawia się tutaj bez konieczności edycji tej strony przez kogokolwiek.

region

  • kefReykjavík
  • otpBukareszt
  • sofSofia
  • kivKiszyniów
  • zrhZurych
  • amsAmsterdam
  • ptyPanama
  • sinSingapur

rodzina

  • vpsVPS w chmurze
  • rdpWindows RDP
  • dedykowanySerwery dedykowane
  • gpuObliczenia GPU
  • chmura-prywatnaChmura prywatna
  • web-hostingHosting WWW
  • magazynMagazyn obiektowy i blokowy
  • colocationColocation
  • niestandardowyKonfiguracja niestandardowa

cykl

  • 11 miesiąc
  • 33 miesiącs, −5 %
  • 1212 miesiącs, −20 %
  • 2424 miesiącs, −35 %

Punkty końcowe

Katalog

Wszystko, co można zamówić, wraz z cenami na żywo. Uwierzytelnianie nie jest wymagane — to te same dane, na podstawie których budowane są publiczne cenniki.

GET /regions Lista regionów

Każdy region wraz z identyfikatorem, miastem, krajem i bieżącym stanem działania.

Odpowiedź

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans Lista planów

Filtrowanie po rodzinie przez ?family=vps. Ceny podane są miesięcznie, w centach, przed rabatem za okres rozliczeniowy.

Odpowiedź

{
  "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 Lista obrazów

Obrazy systemów operacyjnych dostępne dla danej rodziny, wraz ze stanem licencyjnym każdego z nich.

Odpowiedź

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

Punkty końcowe

Serwery

Można tworzyć, sprawdzać i zarządzać maszynami. Aprowizacja pobiera środki z salda konta; żądanie, które przekroczyłoby saldo, kończy się błędem 402 z dokładną informacją o brakującej kwocie, zamiast pozostawić coś w połowie zbudowane.

POST /servers Wdróż serwer

Odpowiedź natychmiastowa ze statusem "provisioning". Proszę odpytywać zasób lub skorzystać z webhooka.

Żądanie

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

Odpowiedź

{
  "id": "srv_8Kq2",
  "status": "provisioning",
  "region": "ams",
  "ipv4": null,
  "charged_cents": 10560,
  "renews_at": "2027-07-28T00:00:00Z"
}
GET /servers Lista serwerów

Wszystko na koncie, od najnowszych.

Odpowiedź

{
  "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} Pobierz dane serwera

Pełne informacje, w tym specyfikacja, adresy i termin kolejnego odnowienia.

Odpowiedź

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions Wykonaj akcję na serwerze

Jeden punkt końcowy, pole action: reboot, shutdown, start, rebuild, resize, rdns.

Żądanie

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

Odpowiedź

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} Anuluj serwer

Działa do końca opłaconego już okresu. Proszę dodać ?immediate=true, aby usunąć zasób od razu i zaprzestać płatności od dziś.

Odpowiedź

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

Punkty końcowe

Rozliczenia

Jedno saldo finansuje wszystko. Nie istnieje obiekt faktury, bo nie ma czego ścigać — usługa pobiera środki z salda w dniu odnowienia.

GET /balance Pobierz saldo

Bieżące saldo, kwota zarezerwowana na odnowienia i czas, na jaki jej starczy przy obecnym tempie wydatków.

Odpowiedź

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups Otwórz doładowanie

Zwraca adres płatności dla wybranego aktywa. Ewentualny bonus jest naliczany w momencie potwierdzenia płatności.

Żądanie

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

Odpowiedź

{
  "id": "top_5Wc1",
  "asset": "XMR",
  "address": "4A...",
  "amount": "3.417",
  "bonus_cents": 30000,
  "expires_at": "2026-07-28T18:00:00Z"
}
GET /ledger Lista wpisów w rejestrze

Każde uznanie i obciążenie, wraz z usługą, której dotyczy. To całość informacji, jakie przechowujemy o Państwa płatnościach.

Odpowiedź

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

Punkty końcowe

Status

Publiczny i niewymagający uwierzytelnienia, dzięki czemu może być odpytywany przez coś, co nie posiada klucza użytkownika — i nadal odpowiada, nawet jeśli to konto użytkownika uległo awarii.

GET /status Bieżący stan

Te same dane co na stronie statusu, obliczone na podstawie tego samego rejestru zdarzeń.

Odpowiedź

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents Lista incydentów

Sam rejestr, z możliwością filtrowania po regionie i dacie.

Odpowiedź

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

Błędy

Każda awaria niesie ze sobą stały kod oraz komunikat napisany z myślą o człowieku. Kod ma się zgadzać; komunikat wolno poprawiać.

400 invalid_request Treści nie udało się przetworzyć albo pole ma niewłaściwy typ. Komunikat wskazuje nazwę pola.
401 niezautoryzowane Brak klucza, klucz o nieprawidłowym formacie lub klucz, który został unieważniony.
403 scope_missing Klucz jest ważny, ale nie został utworzony z zakresem uprawnień wymaganym przez to wywołanie. Zakres wybiera się przy tworzeniu klucza i nie można go później rozszerzyć.
402 insufficient_funds Saldo tego nie pokryje. Odpowiedź zawiera required_cents i balance_cents, dzięki czemu można działać bez drugiego zapytania.
404 not_found Brak takiego zasobu na tym koncie. Odpowiedź celowo identyczna z odpowiedzią dotyczącą zasobu na cudzym koncie.
409 konflikt Zasób jest zajęty — zwykle oznacza to działanie już trwające na tym serwerze.
422 niedostępne Poprawne, lecz obecnie niemożliwe: plan jest niedostępny w danym regionie albo obraz nie jest oferowany dla tej rodziny.
429 rate_limited Nagłówek Retry-After jest ustawiony i podaje wartość rzeczywistą, a nie stałą.
5xx server_error Po naszej stronie. Bezpiecznie ponowić z tym samym Idempotency-Key — dokładnie do tego on służy.

A 404 dla zasobu na cudzym koncie jest identyczna co do bajtu z odpowiedzią dla zasobu, który nigdy nie istniał. To celowe: odpowiedzi, które da się rozróżnić, zamieniają API w wyrocznię pozwalającą enumerować cudzą infrastrukturę.