VPS.org API

REST API-documentatie

DNS-beheer-API

Maak DNS zones aan en beheer hun records. Zones worden bediend door ns1.vps.org, ns2.vps.org en ns3.vps.org.

Eindpunten 13
Basispad /api/v1/dns-zones, /api/v1/dns-records

Overzicht

Een zone bevat de records voor één domein. Elke verandering die u maakt door middel van de API wordt direct naar de VPS.org nameservers geduwd. Om een domein uit deze zones te dienen, zet u de nameservers op uw registrar op ns1.vps.org, ns2.vps.org en ns3.vps.org.

Wijzigingen worden in één stap opgeslagen en gepubliceerd: als de nameservers een wijziging weigeren, geeft het verzoek 502 terug en wordt er niets opgeslagen. Een zone kan niet worden aangemaakt voor een domein dat een ander account al beheert, een ouder of kind van een andere accountzone, of een VPS.org gereserveerde naam.

Vereiste toestemming: dns:list (GET), dns:create (POST), dns:update (PUT, PATCH, sync), dns:delete (DELETE), dns:*

KRIJGEN /api/v1/dns-zones/

Alle DNS-zones weergeven

Geeft uw zones terug, de nieuwste eerst, 25 per pagina. Records zijn hier niet opgenomen; haal een enkele zone om ze te krijgen.

Queryparameters

Parameter Type Vereist Omschrijving
domain string Nee Alleen de zone met precies deze domeinnaam teruggeven
page integer Nee Paginanummer, te beginnen bij 1

Voorbeeldverzoek

cURL
Python
JavaScript
curl -X GET "https://admin.vps.org/api/v1/dns-zones/?domain=example.com" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
import requests

url = "https://admin.vps.org/api/v1/dns-zones/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}

response = requests.get(url, headers=headers, params={"domain": "example.com"})
for zone in response.json()["results"]:
    print(zone["uuid"], zone["domain"], zone["record_count"])
const response = await fetch('https://admin.vps.org/api/v1/dns-zones/?domain=example.com', {
  headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' }
});

const data = await response.json();
console.log(data.results);

Voorbeeldantwoord

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c",
      "domain": "example.com",
      "created_at": "2026-09-06T03:11:48.829693Z",
      "record_count": 5
    }
  ]
}

Antwoordvelden

Veld Type Omschrijving
uuid string Gebiedsidentificatie
domain string Domeinnaam, opgeslagen in kleine letters
created_at datetime Creatietijd (ISO 8601, UTC)
record_count integer Aantal records in de zone, inclusief de drie NS-records

Responsstatuscodes

200 Succes
403 Ontbrekende of ongeldige API token, of het token mist de vereiste toestemming
POST /api/v1/dns-zones/

DNS-zone aanmaken

Maakt een zone aan en publiceert deze. De zone begint met drie NS records voor ns1, ns2 en ns3.vps.org, die systeemrecords zijn en niet kunnen worden bewerkt of verwijderd.

Parameters van de aanvraagbody

Parameter Type Vereist Omschrijving
domain string Ja De domeinnaam, bijvoorbeeld.com
curl -X POST "https://admin.vps.org/api/v1/dns-zones/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'

Voorbeeldantwoord

{
  "uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c",
  "domain": "example.com",
  "created_at": "2026-09-14T21:02:11.402113Z",
  "records": [
    {
      "uuid": "1f2e3d4c-5b6a-4978-8a9b-0c1d2e3f4a5b",
      "record_type": "NS",
      "name": "@",
      "value": "ns1.vps.org",
      "ttl": 86400,
      "priority": null,
      "created_at": "2026-09-14"
    },
    ...
  ],
  "record_count": 3
}

Responsstatuscodes

201 Aangevinkt gebied
400 Ontbrekende of ongeldige domeinnaam
KRIJGEN /api/v1/dns-zones/{uuid}/

DNS Zone-details opvragen

Geeft één zone terug met al zijn records in een record-array. De respons heeft dezelfde vorm als de aanmaakrespons hierboven.

curl -X GET "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Responsstatuscodes

200 Succes
404 Niet gevonden, of het behoort tot een andere account
VERWIJDEREN /api/v1/dns-zones/{uuid}/

DNS-zone verwijderen

Verwijdert de zone van alle drie nameservers, controleert of geen van hen het nog dient, en verwijdert vervolgens de zone en de records. Als een nameserver nog steeds antwoordt voor de zone, het verzoek mislukt en de zone wordt bewaard zodat u kunt opnieuw proberen.

curl -X DELETE "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Responsstatuscodes

204 Verwijderd. Het antwoord heeft geen lichaam.
400 Een nameserver dient nog steeds de zone. De zone is niet verwijderd; het detailveld geeft de fouten weer.
404 Niet gevonden, of het behoort tot een andere account
KRIJGEN POST /api/v1/dns-zones/{uuid}/records/

Lijst of Records toevoegen in een zone

GET geeft elke record in de zone terug als een gewone array (niet gepagineerd), gesorteerd op type en naam. POST voegt een record toe aan de zone en publiceert het.

Parameters van de aanvraagbody (POST)

Parameter Type Vereist Omschrijving
record_type string Ja A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA
name string Ja @ voor het domein zelf, of een label zoals www. Namen worden opgeslagen in kleine letters.
value string Ja De recordgegevens, bijvoorbeeld een IP-adres of een hostnaam. Hostnamen hebben geen aansluitende stip nodig en TXT-waarden hebben geen citaten nodig; beide worden toegevoegd wanneer de record wordt gepubliceerd.
ttl integer Ja Tijd om in seconden te leven
priority integer Alleen MX en SRV Vereist voor MX en SRV records en genegeerd voor elk ander type. Voor SRV, zet gewicht, poort en doel in waarde.

Voorbeeldverzoek

cURL
Python
curl -X POST "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/records/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"record_type": "MX", "name": "@", "value": "mail.example.com", "ttl": 3600, "priority": 10}'
import requests

zone_uuid = "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c"
url = f"https://admin.vps.org/api/v1/dns-zones/{zone_uuid}/records/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
data = {"record_type": "A", "name": "www", "value": "203.0.113.10", "ttl": 3600}

response = requests.post(url, headers=headers, json=data)
print(response.status_code, response.json())

Voorbeeldantwoord

{
  "uuid": "9d430082-5562-42b4-a0b2-12a6f6c862f9",
  "record_type": "MX",
  "name": "@",
  "value": "mail.example.com",
  "ttl": 3600,
  "priority": 10,
  "created_at": "2026-09-14"
}

Antwoordvelden

Veld Type Omschrijving
uuid string Record-identificatiecode, gebruikt door de /api/v1/dns-records/eindpunten
priority integer | null Prioriteit voor MX- en SRV-records, anders nul
created_at date Aanmaakdatum alleen (J-MM-DD), zonder tijd

Responsstatuscodes

200 De records van de zone
201 POST: record aangemaakt
400 Validatiefout, bijvoorbeeld een onbekend recordtype, een ontbrekende ttl of een MX- of SRV-record zonder prioriteit
404 Niet gevonden, of het behoort tot een andere account
POST /api/v1/dns-zones/{uuid}/sync/

Een zone republiken

Drukt de zone en al haar records weer op de nameservers. Record wijzigingen worden automatisch gepubliceerd, maar publiceren is de beste moeite en een fout niet teniet doen aan de oorspronkelijke aanvraag, dus gebruik dit wanneer een wijziging niet verschijnt in DNS opzoekingen. Er is geen aanvraag body nodig.

curl -X POST "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/sync/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
{
  "detail": "Zone example.com synced to PowerDNS"
}
KRIJGEN POST /api/v1/dns-records/

Lijst of maak records over de hele zone

GET geeft de records van al uw zones terug, 25 per pagina, geordend per domein, type en naam. POST maakt een record zoals het zone record eindpunt, maar neemt de zone in het lichaam als zone_uuid.

Queryparameters

Parameter Type Vereist Omschrijving
zone string Nee Alleen records van de zone met deze uuid
record_type string Nee Alleen records van dit type, bijvoorbeeld MX (letterlijk ongevoelig)
page integer Nee Paginanummer, te beginnen bij 1
curl -X GET "https://admin.vps.org/api/v1/dns-records/?zone=c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c&record_type=A" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

curl -X POST "https://admin.vps.org/api/v1/dns-records/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone_uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c", "record_type": "TXT", "name": "@", "value": "v=spf1 mx -all", "ttl": 3600}'
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "uuid": "4b8e2c10-7d3f-4a5b-9e6c-1a2b3c4d5e6f",
      "record_type": "A",
      "name": "www",
      "value": "203.0.113.10",
      "ttl": 3600,
      "priority": null,
      "created_at": "2026-09-14"
    }
  ]
}

Responsstatuscodes

200 GET: succes
201 POST: record aangemaakt
400 Validatiefout, of zone_uuid ontbreekt of niet een van uw zones
KRIJGEN PUT PATCH VERWIJDEREN /api/v1/dns-records/{uuid}/

Een record ophalen, bijwerken of verwijderen

GET geeft één record terug. PUT vervangt het en heeft record_type, naam, waarde en ttl nodig. PATCH verandert alleen de velden die u verstuurt. DELETE verwijdert het record en geeft 204 terug zonder body. Wijzigingen worden direct gepubliceerd. De NS records die met de zone zijn systeemrecords: updaten of verwijderen geeft 403.

Wanneer u de prioriteit van een MX- of SRV-record PATCH, verstuurt record_type in hetzelfde verzoek. Een PATCH-corpus met prioriteit maar zonder record_type ontruimt de prioriteit.
curl -X PATCH "https://admin.vps.org/api/v1/dns-records/4b8e2c10-7d3f-4a5b-9e6c-1a2b3c4d5e6f/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ttl": 300}'

Responsstatuscodes

200 GET, PUT of PATCH: het record
204 Verwijderd. Het antwoord heeft geen lichaam.
400 Validatiefout
403 De record is een systeemrecord, of het token mist de vereiste toestemming
404 Niet gevonden, of het behoort tot een andere account

Fout bij omgaan

Validatiefouten geven 400 terug met het probleem dat wordt gesleuteld door veldnaam:

{
  "priority": ["MX records require a priority value"]
}

DNS-wijzigingen testen

Zoek de VPS.org nameservers direct op om te bevestigen dat een wijziging live is voordat uw registrar delegatie of resolver caches inhalen:

dig @ns1.vps.org example.com A
dig @ns2.vps.org example.com MX
dig @ns3.vps.org www.example.com