Hosting-APIAlles, was der Konfigurator tut, über HTTP.

Bearer-Token mit von Ihnen gewählten Scopes, Idempotenz bei jedem Schreibvorgang, Cursor-Paginierung und ein Status-Endpunkt, der überhaupt keinen Schlüssel benötigt — denn genau dann, wenn Sie ihn am dringendsten abfragen müssen, könnte Ihr Konto das Problem sein.

Endpunkte13

Schnellstart

Kein SDK erforderlich · Keine Versionierungsüberraschungen · Kein Rate-Limit, das Sie erreichen

Schnellstart

Ein Server, aus dem Nichts, mit zwei Aufrufen.

Erstellen Sie einen Schlüssel im Kundenbereich, wählen Sie seine Berechtigungen, und er wird einmal angezeigt. Es gibt keinen Hauptschlüssel auf diesem Konto und keine Möglichkeit, einen Schlüssel nachträglich zu erweitern — erstellen Sie stattdessen einen neuen.

1 — sehen, was Sie kaufen können

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

2 — bereitstellen

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

Die Bereitstellung greift auf das Kontoguthaben zu. Ein Aufruf, der es überziehen würde, schlägt fehl mit 402 und der genaue Fehlbetrag, statt eine halbe Maschine zu bauen — es gibt keinen halb bereitgestellten Zustand aufzuräumen, und keine Rechnung folgt später.

Konventionen

Die Teile, die bei jedem Aufruf gleich sind, einmal festgelegt, damit Sie sie nie zweimal nachschlagen müssen.

Basis-URL
https://api.dediprivacy.com/v1 Nur TLS, HTTP/2, und kein unverschlüsselter Port, von dem umgeleitet werden könnte. Eine Klartextanfrage wird abgelehnt statt umgestellt, denn eine Umstellung bedeutet, dass die Anfrage das Netz bereits einmal durchquert hat.
Authentifizierung
Bearer-Token, pro Schlüssel Schlüssel werden im Kundenbereich mit den von Ihnen gewählten Berechtigungen erzeugt, einmalig angezeigt und gehasht gespeichert. Es gibt keinen Hauptschlüssel und keine passwortbasierte Authentifizierung für diese API.
Inhaltstyp
application/json Für Anfragen und Antworten. Zeiten sind RFC 3339 in UTC, Geldbeträge sind eine ganzzahlige Anzahl von Cent, und es gibt nirgends gebietsschema-abhängige Formate.
Idempotenz
Idempotency-Key bei jedem POST Ein wiederholter Schlüssel liefert die ursprüngliche Antwort zurück, statt doppelt bereitzustellen. Schlüssel werden 24 Stunden lang gemerkt, länger als jede Wiederholungsschleife laufen sollte.
Ratenlimit
600 Anfragen pro Minute Pro Schlüssel, zurückgegeben in X-RateLimit-Remaining. Provisioning-Aufrufe sind separat auf 60 pro Stunde begrenzt; fragen Sie nach, falls Ihnen das wirklich im Weg steht.
Paginierung
Cursor, keine Seitenzahl Ein next_cursor in jeder Listenantwort. Offset-Paginierung überspringt Zeilen stillschweigend, wenn sich die zugrunde liegende Menge ändert, und diesen Fehler wollen wir Ihnen nicht zumuten.

Kennungen

Gelesen aus demselben Katalog, aus dem die öffentlichen Preislisten und der Konfigurator gebaut sind. Eine dem Bestand hinzugefügte Region erscheint hier, ohne dass jemand diese Seite bearbeitet.

Region

  • kefReykjavík
  • otpBukarest
  • sofSofia
  • kivChișinău
  • zrhZürich
  • amsAmsterdam
  • ptyPanama-Stadt
  • sinSingapur

Familie

  • vpsCloud-VPS
  • rdpWindows RDP
  • dediziertDedizierte Server
  • gpuGPU-Compute
  • private-cloudPrivate Cloud
  • web-hostingWebhosting
  • SpeicherObject- & Block-Storage
  • ColocationColocation
  • individuellIndividueller Build

Zyklus

  • 11 Monat
  • 33 Monats, −5 %
  • 1212 Monats, −20 %
  • 2424 Monats, −35 %

Endpunkte

Katalog

Alles, was bestellbar ist, mit Live-Preisen. Keine Authentifizierung nötig — dies sind dieselben Zahlen, aus denen die öffentlichen Preislisten gebaut sind.

GET /regions Regionen auflisten

Jede Region mit ihrer Kennung, Stadt, ihrem Land und aktuellem Betriebsstatus.

Antwort

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans Pläne auflisten

Nach Familie filtern mit ?family=vps. Preise sind pro Monat in Cent, vor jedem Laufzeitrabatt.

Antwort

{
  "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 Images auflisten

Betriebssystem-Images für eine ganze Familie verfügbar, jeweils mit der Lizenzlage.

Antwort

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

Endpunkte

Server

Erstellen, prüfen und steuern Sie Maschinen. Die Bereitstellung greift auf das Kontoguthaben zu; eine Anfrage, die es überziehen würde, scheitert mit 402 und dem exakten Fehlbetrag, statt etwas halb fertig zu bauen.

POST /servers Einen Server bereitstellen

Antwortet sofort mit Status „provisioning“. Fragen Sie die Ressource ab oder nutzen Sie einen Webhook.

Anfrage

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

Antwort

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

Alles zum Konto, Neuestes zuerst.

Antwort

{
  "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} Einen Server abrufen

Vollständige Details einschließlich Spezifikation, Adressen und nächster Verlängerung.

Antwort

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions Auf einem Server handeln

Ein Endpunkt, ein Aktionsfeld: reboot, shutdown, start, rebuild, resize, rdns.

Anfrage

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

Antwort

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} Einen Server kündigen

Läuft bis zum Ende der bereits bezahlten Laufzeit. Übergeben Sie ?immediate=true, um sie sofort zu löschen und ab heute nicht mehr zu zahlen.

Antwort

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

Endpunkte

Abrechnung

Ein Guthaben finanziert alles. Es gibt kein Rechnungsobjekt, weil nichts nachzuverfolgen ist — ein Dienst bezieht am Verlängerungsdatum aus dem Guthaben.

GET /balance Den Kontostand abrufen

Aktuelles Guthaben, was für Verlängerungen gebunden ist, und wie lange das beim aktuellen Verbrauch reicht.

Antwort

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups Eine Aufladung starten

Liefert eine Zahlungsadresse für die gewählte Kryptowährung. Ein Bonus wird in dem Moment angewendet, in dem die Zahlung bestätigt wird.

Anfrage

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

Antwort

{
  "id": "top_5Wc1",
  "asset": "XMR",
  "address": "4A...",
  "amount": "3.417",
  "bonus_cents": 30000,
  "expires_at": "2026-07-28T18:00:00Z"
}
GET /ledger Buchungseinträge auflisten

Jede Gutschrift und Abbuchung, mit dem zugehörigen Dienst. Das ist alles, was wir über Ihre Zahlungen speichern.

Antwort

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

Endpunkte

Status

Öffentlich und ohne Authentifizierung, sodass es von etwas abgefragt werden kann, das Ihren Schlüssel nicht besitzt — und sodass es auch antwortet, wenn gerade Ihr Konto das Problem ist.

GET /status Aktueller Status

Dieselben Zahlen wie auf der Statusseite, berechnet aus demselben Vorfallsprotokoll.

Antwort

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents Vorfälle auflisten

Der Datensatz selbst, filterbar nach Region und Datum.

Antwort

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

Fehler

Jeder Ausfall trägt eine stabile Code und eine Nachricht, die für einen Menschen geschrieben ist. Gleichen Sie den Code ab; die Nachricht darf besser werden.

400 invalid_request Der Body ließ sich nicht parsen, oder ein Feld hat den falschen Typ. Die Meldung nennt das Feld.
401 nicht authentifiziert Kein Schlüssel, ein fehlerhafter Schlüssel oder ein widerrufener Schlüssel.
403 scope_missing Der Schlüssel ist gültig, wurde aber nicht mit dem für diesen Aufruf nötigen Scope erstellt. Scopes werden pro Schlüssel festgelegt und können nachträglich nicht erweitert werden.
402 insufficient_funds Das Guthaben würde nicht reichen. Die Antwort enthält required_cents und balance_cents, sodass Sie ohne einen zweiten Aufruf handeln können.
404 not_found Keine solche Ressource in diesem Konto. Bewusst identisch mit der Antwort für eine Ressource im Konto einer anderen Person.
409 Konflikt Die Ressource ist ausgelastet — meist läuft bereits eine Aktion auf diesem Server.
422 nicht verfügbar Gültig, aber derzeit nicht möglich: Der Tarif ist in dieser Region nicht verfügbar, oder das Image wird für diese Familie nicht angeboten.
429 rate_limited Retry-After ist gesetzt, und zwar präzise, nicht als Konstante.
5xx server_error Unserer. Sicher mit demselben Idempotency-Key erneut zu versuchen — genau dafür ist er da.

A 404 für eine Ressource auf dem Konto einer anderen Person ist Byte für Byte identisch mit der für eine Ressource, die nie existiert hat. Das ist Absicht: Unterscheidbare Antworten machen aus einer API ein Orakel, mit dem sich die Infrastruktur anderer Personen kartieren lässt.