Hosting-APIAlles wat de configurator doet, via HTTP.

Bearer-tokens met scopes die u zelf kiest, idempotentie bij elke schrijfactie, cursor-paginering, en een statuseindpunt dat helemaal geen sleutel nodig heeft — want het moment waarop u dit het meest moet pollen, is precies het moment waarop uw account het probleem zou kunnen zijn.

endpoints13

Snelstart

Geen SDK vereist · Geen verrassingen met versiebeheer · Geen ratelimiet die u zult tegenkomen

Snelstart

Een server, vanaf nul, in twee aanroepen.

Maak een sleutel aan in het klantenpaneel, kies de scopes ervan, en hij wordt eenmalig getoond. Er is geen hoofdsleutel op dit account en geen manier om een sleutel achteraf te verruimen — maak in plaats daarvan een nieuwe aan.

1 — bekijk wat u kunt kopen

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

2 — implementeer het

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

Provisioning wordt in mindering gebracht op het accountsaldo. Een aanroep die dit zou overtrekken, mislukt met 402 en het exacte tekort in plaats van een halve machine te bouwen — er is geen deels geprovisioneerde staat om op te ruimen, en er komt later geen factuur.

Conventies

De onderdelen die bij elke aanroep hetzelfde zijn, één keer besloten zodat u ze nooit twee keer hoeft op te zoeken.

Basis-URL
https://api.dediprivacy.com/v1 Alleen TLS, HTTP/2, en geen onversleutelde poort om vanaf door te sturen. Een plaintext-verzoek wordt geweigerd in plaats van geüpgraded, want een upgrade betekent dat het verzoek het netwerk al één keer heeft doorkruist.
Authenticatie
Bearer-token, per sleutel Sleutels worden aangemaakt in het klantgebied met de reikwijdte die u kiest, eenmalig getoond en gehasht opgeslagen. Er is geen hoofdsleutel en geen wachtwoordgebaseerde authenticatie op deze API.
Inhoudstype
application/json Op verzoeken en antwoorden. Tijden zijn RFC 3339 in UTC, geldbedragen zijn een geheel aantal centen, en nergens komen locale-afhankelijke formaten voor.
Idempotentie
Idempotency-Key op elke POST Een herhaalde sleutel geeft het oorspronkelijke antwoord terug in plaats van tweemaal te provisioneren. Sleutels worden 24 uur onthouden, langer dan een retry-lus ooit zou moeten lopen.
Rate limit
600 verzoeken per minuut Per sleutel, teruggegeven in X-RateLimit-Remaining. Provisioning-aanroepen worden apart beperkt tot 60 per uur; laat het weten als dit u daadwerkelijk hindert.
Paginering
Cursor, geen paginanummer Een next_cursor in elk lijstantwoord. Offset-paginering slaat stilzwijgend rijen over wanneer de onderliggende set verandert, en die bug leveren wij liever niet aan u.

Identificatoren

Gelezen uit dezelfde catalogus waarop de openbare prijslijsten en de configurator zijn gebaseerd. Een regio die aan het netwerk wordt toegevoegd, verschijnt hier zonder dat iemand deze pagina bewerkt.

regio

  • kefReykjavík
  • otpBoekarest
  • sofSofia
  • kivChișinău
  • zrhZürich
  • amsAmsterdam
  • ptyPanama-Stad
  • sinSingapore

familie

  • vpsCloud-VPS
  • rdpWindows RDP
  • dedicatedDedicated Servers
  • gpuGPU-compute
  • private-cloudPrivécloud
  • webhostingWebhosting
  • opslagObject- & block-opslag
  • colocationColocation
  • aangepastAangepaste build

cyclus

  • 11 maand
  • 33 maands, −5 %
  • 1212 maands, −20 %
  • 2424 maands, −35 %

Endpoints

Catalogus

Alles wat besteld kan worden, met live prijzen. Geen authenticatie nodig — dit zijn dezelfde cijfers waarop de openbare prijslijsten zijn gebaseerd.

GET /regions Regio's weergeven

Elke regio met zijn identificatiecode, stad, land en huidige operationele status.

Reactie

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans Abonnementen weergeven

Filter op familie met ?family=vps. Prijzen zijn per maand in centen, vóór eventuele cycluskorting.

Reactie

{
  "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 weergeven

Besturingssysteemimages beschikbaar per familie, met de licentiepositie van elk.

Reactie

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

Endpoints

Servers

Machines aanmaken, inspecteren en beheren. Provisioning put uit het accountsaldo; een verzoek dat dat saldo zou overschrijden, mislukt met 402 en het exacte tekort, in plaats van iets half af te bouwen.

POST /servers Een server uitrollen

Geeft direct status "provisioning" terug. Poll de resource of gebruik een webhook.

Verzoek

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

Reactie

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

Alles op het account, nieuwste eerst.

Reactie

{
  "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} Een server ophalen

Volledige details, inclusief specificatie, adressen en de eerstvolgende verlenging.

Reactie

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions Actie op een server

Eén endpoint, een actieveld: reboot, shutdown, start, rebuild, resize, rdns.

Verzoek

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

Reactie

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} Een server annuleren

Loopt door tot het einde van de reeds betaalde termijn. Geef ?immediate=true door om het nu te verwijderen en vandaag nog te stoppen met betalen.

Reactie

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

Endpoints

Facturering

Eén saldo financiert alles. Er is geen factuurobject omdat er niets na te jagen valt — een dienst put uit het saldo op de verlengingsdatum.

GET /balance Haal het saldo op

Huidig saldo, wat is vastgelegd voor verlengingen, en hoe lang dat meegaat bij het huidige verbruik.

Reactie

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups Open een opwaardering

Levert een betaaladres voor het gekozen asset. Een eventuele bonus wordt toegepast op het moment dat de betaling bevestigd wordt.

Verzoek

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

Reactie

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

Elke bijschrijving en afschrijving, met de dienst waarop deze betrekking heeft. Dit is alles wat wij over uw betalingen bewaren.

Reactie

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

Endpoints

Status

Openbaar en zonder authenticatie, zodat het kan worden bevraagd door iets dat uw sleutel niet bezit — en zodat het nog antwoord geeft als juist uw account het probleem is.

GET /status Huidige status

Dezelfde cijfers als de statuspagina, berekend uit hetzelfde incidentregister.

Reactie

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents Incidenten weergeven

Het register zelf, filterbaar op regio en datum.

Reactie

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

Fouten

Elke storing draagt een stabiele code en een boodschap geschreven voor een persoon. Matchen op de code; de boodschap mag verbeteren.

400 invalid_request De body kon niet worden verwerkt, of een veld heeft het verkeerde type. Het bericht noemt het veld.
401 niet-geauthenticeerd Geen sleutel, een misvormde sleutel, of een sleutel die is ingetrokken.
403 scope_missing De sleutel is geldig, maar is niet aangemaakt met de scope die deze aanroep vereist. Scopes worden per sleutel gekozen en kunnen achteraf niet worden verruimd.
402 insufficient_funds Het saldo zou dit niet dekken. Het antwoord bevat required_cents en balance_cents, zodat u kunt handelen zonder een tweede aanroep.
404 not_found Deze resource bestaat niet op dit account. Bewust identiek aan het antwoord voor een resource op het account van iemand anders.
409 conflict De resource is bezet — meestal een actie die al op die server draait.
422 niet beschikbaar Geldig, maar op dit moment niet mogelijk: het plan is niet op voorraad in die regio, of de image wordt niet aangeboden voor die familie.
429 rate_limited Retry-After wordt ingesteld en is accuraat in plaats van een vaste waarde.
5xx server_error Aan onze kant. Veilig om opnieuw te proberen met dezelfde Idempotency-Key — daar is deze precies voor bedoeld.

A 404 voor een resource op andermans account is byte voor byte hetzelfde als een voor een resource die nooit heeft bestaan. Dat is opzettelijk: onderscheidbare antwoorden maken van een API een orakel voor het inventariseren van andermans infrastructuur.