VPS.org API

REST API Documentation

DNS-Verwaltungs-API

Erstellen Sie DNS-Zonen und verwalten Sie ihre Datensätze. Zonen werden von ns1.vps.org, ns2.vps.org und ns3.vps.org bedient.

Endpunkte 13
Basispfad /api/v1/dns-zones, /api/v1/dns-records

Überblick

Eine Zone enthält die Datensätze für eine Domain. Jede Änderung, die Sie über die API vornehmen, wird sofort auf die VPS.org-Namensserver geschoben. Um eine Domain aus diesen Zonen zu bedienen, stellen Sie ihre Nameserver auf Ihrem Registrar ns1.vps.org, ns2.vps.org und ns3.vps.org.

Änderungen werden in einem Schritt gespeichert und veröffentlicht: Wenn die Nameserver eine Änderung ablehnen, wird 502 zurückgeliefert und nichts gespeichert. Eine Zone kann nicht für eine Domäne erstellt werden, die ein anderes Konto bereits verwaltet, ein Elternteil oder ein Kind der Zone eines anderen Kontos oder ein VPS.org reservierter Name.

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

ERHALTEN /api/v1/dns-zones/

Alle DNS-Zonen auflisten

Gibt Ihre Zonen zurück, die neuesten ersten 25 pro Seite. Aufzeichnungen sind hier nicht enthalten; holen Sie eine einzelne Zone, um sie zu erhalten.

Abfrageparameter

Parameter Typ Erforderlich Description
domain string No Nur die Zone mit genau diesem Domainnamen zurückgeben
page integer No Seitennummer, beginnend bei 1

Beispielanfrage

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);

Beispielantwort

{
  "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
    }
  ]
}

Antwortfelder

Feld Typ Description
uuid string Gebietskennung
domain string Domainname, in Kleinbuchstaben gespeichert
created_at datetime Erstellungszeit (ISO 8601, UTC)
record_count integer Anzahl der Aufzeichnungen in der Zone, einschließlich der drei NS-Datensätze

Antwortstatuscodes

200 Erfolg
403 Fehlendes oder ungültiges API-Token oder dem Token fehlt die erforderliche Berechtigung
POST /api/v1/dns-zones/

DNS-Zone erstellen

Erstellt eine Zone und veröffentlicht sie. Die Zone beginnt mit drei NS-Datensätzen für ns1, ns2 und ns3.vps.org, die System-Datensätze sind und nicht bearbeitet oder gelöscht werden können.

Anfragekörperparameter

Parameter Typ Erforderlich Description
domain string Ja Der Domainname, zum Beispiel.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"}'

Beispielantwort

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

Antwortstatuscodes

201 Zone erstellt
400 Fehlender oder ungültiger Domainname
ERHALTEN /api/v1/dns-zones/{uuid}/

DNS-Zonendetails abrufen

Gibt eine Zone mit allen Datensätzen in einem Datensatz-Array zurück. Die Antwort hat die gleiche Form wie die oben genannte Antwort erzeugen.

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

Antwortstatuscodes

200 Erfolg
404 Nicht gefunden, oder es gehört zu einem anderen Konto
LÖSCHEN /api/v1/dns-zones/{uuid}/

DNS-Zone löschen

Entfernt die Zone von allen drei Nameservern, überprüft, ob keiner von ihnen noch dient, und löscht dann die Zone und ihre Datensätze. Wenn ein Nameserver immer noch auf die Zone antwortet, scheitert die Anfrage und die Zone wird so aufbewahrt, dass Sie erneut versuchen können.

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

Antwortstatuscodes

204 Die Antwort hat keine Leiche.
400 Ein Nameserver dient weiterhin der Zone. Die Zone wurde nicht gelöscht; das Detailfeld listet die Fehler auf.
404 Nicht gefunden, oder es gehört zu einem anderen Konto
ERHALTEN POST /api/v1/dns-zones/{uuid}/records/

Aufzeichnungen in einer Zone auflisten oder hinzufügen

GET gibt jeden Datensatz in der Zone als ein einfaches Array (nicht paginiert) zurück, sortiert nach Typ und Name. POST fügt einen Datensatz in die Zone hinzu und veröffentlicht ihn.

Anfragekörperparameter (POST)

Parameter Typ Erforderlich Description
record_type string Ja A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA
name string Ja @ für die Domain selbst, oder ein Label wie www.Namen werden in Kleinbuchstaben gespeichert.
value string Ja Die Datensatzdaten, z.B. eine IP-Adresse oder ein Hostname. Hostnames benötigen keinen trailing dot und TXT-Werte brauchen keine Anführungszeichen; beide werden bei der Veröffentlichung des Datensatzes hinzugefügt.
ttl integer Ja Zeit in Sekunden zu leben
priority integer Nur MX und SRV Erforderlich für MX und SRV zeichnet und ignoriert für jeden anderen Typ. Für SRV, Gewicht, Port und Ziel in Wert setzen.

Beispielanfrage

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())

Beispielantwort

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

Antwortfelder

Feld Typ Description
uuid string Datensatzkennung, die von den /api/v1/dns-Datensätzen/ Endpunkten verwendet wird
priority integer | null Priorität für MX- und SRV-Datensätze, sonst null
created_at date Erstellungsdatum (J-MM-TT), ohne Zeit

Antwortstatuscodes

200 GET: Die Aufzeichnungen der Zone
201 POST: Datensatz erstellt
400 Validierungsfehler, z.B. ein unbekannter Datensatztyp, ein fehlender ttl oder ein MX- oder SRV-Datensatz ohne Priorität
404 Nicht gefunden, oder es gehört zu einem anderen Konto
POST /api/v1/dns-zones/{uuid}/sync/

Eine Zone wiederherstellen

Drückt die Zone und alle ihre Datensätze wieder auf die Nameserver. Record Änderungen werden automatisch veröffentlicht, aber die Veröffentlichung ist beste Anstrengung und ein Fehler nicht die ursprüngliche Anforderung fehlschlägt, so verwenden Sie dies, wenn eine Änderung nicht in DNS-Suchen angezeigt. Keine Anforderung Körper erforderlich ist.

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"
}
ERHALTEN POST /api/v1/dns-records/

Verzeichnis oder Erstellen von Aufzeichnungen über Zonen hinweg

GET liefert die Datensätze aller Zonen, 25 pro Seite, geordnet nach Domäne, Typ und Name. POST erstellt einen Datensatz wie den Zonen-Datensatz Endpunkt, nimmt aber die Zone im Körper als zone_uuid.

Abfrageparameter

Parameter Typ Erforderlich Description
zone string No Nur Aufzeichnungen der Zone mit dieser Uuid
record_type string No Nur Datensätze dieses Typs, z.B. MX (Fallunempfindlich)
page integer No Seitennummer, beginnend bei 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"
    }
  ]
}

Antwortstatuscodes

200 GET: Erfolg
201 POST: Datensatz erstellt
400 Validierungsfehler oder zone_uuid fehlt oder nicht eine Ihrer Zonen
ERHALTEN PUT PATCH LÖSCHEN /api/v1/dns-records/{uuid}/

Einen Datensatz abrufen, aktualisieren oder löschen

GET gibt einen Datensatz zurück. PUT ersetzt ihn und benötigt Record_type, Name, Wert und ttl. PATCH ändert nur die Felder, die Sie senden. DELETE entfernt den Datensatz und gibt 204 ohne Körper zurück. Änderungen werden sofort veröffentlicht. Die mit der Zone erstellten NS-Datensätze sind Systemaufzeichnungen: Aktualisierung oder Löschen liefert 403 zurück.

Wenn Sie PATCH die Priorität eines MX- oder SRV-Datensatzes verwenden, senden Sie Record_type in der gleichen Anfrage. Ein PATCH-Körper mit Priorität, aber ohne Record_type löscht die Priorität.
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}'

Antwortstatuscodes

200 GET, PUT oder PATCH: der Datensatz
204 Die Antwort hat keine Leiche.
400 Validierungsfehler
403 Der Datensatz ist ein System-Record, oder das Token fehlt die erforderliche Berechtigung
404 Nicht gefunden, oder es gehört zu einem anderen Konto

Fehlerbehebung

Validierungsfehler liefern 400 mit dem Problem, das nach Feldnamen markiert ist:

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

DNS-Änderungen testen

Abfragen der VPS.org Nameserver direkt, um eine Änderung zu bestätigen ist live, bevor Ihre Registrar Delegation oder Resolver Caches aufholen:

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