Créez des zones DNS et gérez leurs enregistrements. Les zones sont desservies par ns1.vps.org, ns2.vps.org et ns3.vps.org.
Chaque changement que vous effectuez à travers l'API est immédiatement poussé vers les serveurs de noms VPS.org. Pour servir un domaine de ces zones, définissez ses serveurs de noms à votre registrar à ns1.vps.org, ns2.vps.org et ns3.vps.org.
Les modifications sont enregistrées et publiées en une seule étape : si les serveurs de noms refusent une modification, la requête retourne 502 et rien n'est sauvegardé. Une zone ne peut pas être créée pour un domaine qu'un autre compte gère déjà, un parent ou un enfant d'une autre zone de compte, ou un nom réservé VPS.org.
Autorisation requise:
dns:list (GET), dns:create (POST), dns:update (PUT, PATCH, sync), dns:delete (DELETE), dns:*
Retourne vos zones, la plus récente en premier, 25 par page. Les enregistrements ne sont pas inclus ici; chercher une zone unique pour les obtenir.
| Paramètre | Taper | Requis | Désignation des marchandises |
|---|---|---|---|
domain |
string | Numéro | Return seulement la zone avec exactement ce nom de domaine |
page |
integer | Numéro | Page numéro, à partir de 1 |
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);
{
"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
}
]
}
| Champ | Taper | Désignation des marchandises |
|---|---|---|
uuid |
string | Identification de zone |
domain |
string | Nom de domaine, stocké en minuscules |
created_at |
datetime | Heure de création (ISO 8601, UTC) |
record_count |
integer | Nombre de dossiers dans la zone, y compris les trois dossiers NS |
| 200 | Succès |
| 403 | Jeton API manquant ou invalide, ou le jeton manque la permission requise |
Crée une zone et la publie. La zone commence par trois enregistrements NS pour ns1, ns2 et ns3.vps.org, qui sont des enregistrements système et ne peuvent pas être modifiés ou supprimés.
| Paramètre | Taper | Requis | Désignation des marchandises |
|---|---|---|---|
domain |
string | Oui | Le nom de domaine, par exemple exemple.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"}'
{
"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
}
| 201 | Zone créée |
| 400 | Nom de domaine manquant ou invalide |
Renvoie une zone avec tous ses enregistrements dans un tableau d'enregistrements. La réponse a la même forme que la réponse de création ci-dessus.
curl -X GET "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
| 200 | Succès |
| 404 | Non trouvé, ou il appartient à un autre compte |
Supprime la zone des trois serveurs de noms, vérifie qu'aucun d'entre eux ne la dessert encore, puis supprime la zone et ses enregistrements. Si un serveur de noms répond encore à la zone, la requête échoue et la zone est conservée afin que vous puissiez réessayer.
curl -X DELETE "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
| 204 | Supprimé. La réponse n'a pas de corps. |
| 400 | Un serveur de noms sert toujours la zone. La zone n'a pas été supprimée; le champ de détail énumère les erreurs. |
| 404 | Non trouvé, ou il appartient à un autre compte |
GET retourne chaque enregistrement dans la zone sous forme de tableau simple (non paginé), trié par type et nom. POST ajoute un enregistrement à la zone et le publie.
| Paramètre | Taper | Requis | Désignation des marchandises |
|---|---|---|---|
record_type |
string | Oui | A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA |
name |
string | Oui | @ pour le domaine lui-même, ou une étiquette comme www. Les noms sont stockés dans les minuscules. |
value |
string | Oui | Les données d'enregistrement, par exemple une adresse IP ou un nom d'hôte. Les noms d'hôte n'ont pas besoin d'un point de suivi et les valeurs TXT n'ont pas besoin de guillemets; les deux sont ajoutés lorsque l'enregistrement est publié. |
ttl |
integer | Oui | Temps de vivre en secondes |
priority |
integer | MX et SRV uniquement | Requis pour les enregistrements MX et SRV et ignoré pour tous les autres types. Pour SRV, mettre le poids, le port et la cible en valeur. |
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())
{
"uuid": "9d430082-5562-42b4-a0b2-12a6f6c862f9",
"record_type": "MX",
"name": "@",
"value": "mail.example.com",
"ttl": 3600,
"priority": 10,
"created_at": "2026-09-14"
}
| Champ | Taper | Désignation des marchandises |
|---|---|---|
uuid |
string | Identificateur d'enregistrement, utilisé par les /api/v1/dns-registres/points de fin |
priority |
integer | null | Priorité pour les enregistrements MX et SRV, sinon nul |
created_at |
date | Date de création seulement (A-MM-JJ), sans temps |
| 200 | Les dossiers de la zone |
| 201 | POST : enregistrement créé |
| 400 | Erreur de validation, par exemple un type d'enregistrement inconnu, un ttl manquant, ou un enregistrement MX ou SRV sans priorité |
| 404 | Non trouvé, ou il appartient à un autre compte |
Repoussez la zone et tous ses enregistrements vers les serveurs de noms. Les modifications d'enregistrement sont publiées automatiquement, mais la publication est le meilleur effort et un échec ne échoue pas la requête originale, alors utilisez-le quand un changement ne se présente pas dans les requêtes DNS. Aucun corps de requête n'est nécessaire.
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"
}
GET retourne les enregistrements de toutes vos zones, 25 par page, classés par domaine, type et nom. POST crée un enregistrement comme le point de référence des enregistrements de zone, mais prend la zone dans le corps comme zone_uuid.
| Paramètre | Taper | Requis | Désignation des marchandises |
|---|---|---|---|
zone |
string | Numéro | Seulement les enregistrements de la zone avec cette uuid |
record_type |
string | Numéro | Seuls les enregistrements de ce type, par exemple MX (insensible aux cas) |
page |
integer | Numéro | Page numéro, à partir de 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"
}
]
}
| 200 | GET: succès |
| 201 | POST : enregistrement créé |
| 400 | Erreur de validation, ou zone_uuid est manquante ou pas une de vos zones |
GET retourne un enregistrement. PUT le remplace et nécessite record_type, name, value et ttl. PACH ne modifie que les champs que vous envoyez. DELETE supprime l'enregistrement et renvoie 204 sans corps. Les modifications sont publiées immédiatement. Les enregistrements NS créés avec la zone sont des enregistrements système : mise à jour ou suppression les renvoie 403.
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}'
| 200 | GET, PUT ou PATCH: le disque |
| 204 | Supprimé. La réponse n'a pas de corps. |
| 400 | Erreur de validation |
| 403 | Le document est un enregistrement système, ou le jeton manque la permission requise |
| 404 | Non trouvé, ou il appartient à un autre compte |
Les erreurs de validation renvoient 400 avec le problème clé par nom de champ:
{
"priority": ["MX records require a priority value"]
}
Interrogez directement les serveurs de noms VPS.org pour confirmer qu'un changement est en direct avant que votre délégation de registraire ou de résolveur caches rattraper:
dig @ns1.vps.org example.com A
dig @ns2.vps.org example.com MX
dig @ns3.vps.org www.example.com