VPS.org API

Documentation de l'API REST

API de gestion DNS

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.

Points d'extrémité 13
Chemin de base /api/v1/dns-zones, /api/v1/dns-records

Aperçu

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:*

OBTENIR /api/v1/dns-zones/

Lister toutes les zones 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ètres de requête

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

Exemple de requête

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

Exemple de réponse

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

Champs de réponse

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

Codes d'état de réponse

200 Succès
403 Jeton API manquant ou invalide, ou le jeton manque la permission requise
POSTE /api/v1/dns-zones/

Créer une zone DNS

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ètres du corps de la requête

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

Exemple de réponse

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

Codes d'état de réponse

201 Zone créée
400 Nom de domaine manquant ou invalide
OBTENIR /api/v1/dns-zones/{uuid}/

Obtenir les détails de la zone DNS

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"

Codes d'état de réponse

200 Succès
404 Non trouvé, ou il appartient à un autre compte
SUPPRIMER /api/v1/dns-zones/{uuid}/

Supprimer la zone DNS

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"

Codes d'état de réponse

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
OBTENIR POSTE /api/v1/dns-zones/{uuid}/records/

Lister ou ajouter des enregistrements dans une zone

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ètres du corps de la requête (POST)

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.

Exemple de requête

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

Exemple de réponse

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

Champs de réponse

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

Codes d'état de réponse

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
POSTE /api/v1/dns-zones/{uuid}/sync/

Republié une zone

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"
}
OBTENIR POSTE /api/v1/dns-records/

Lister ou créer des enregistrements dans les zones

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ètres de requête

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

Codes d'état de réponse

200 GET: succès
201 POST : enregistrement créé
400 Erreur de validation, ou zone_uuid est manquante ou pas une de vos zones
OBTENIR PUT PATCH SUPPRIMER /api/v1/dns-records/{uuid}/

Obtenir, mettre à jour ou supprimer un enregistrement

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.

Lorsque vous PATCH la priorité d'un enregistrement MX ou SRV, envoyez record_type dans la même requête. Un corps PATCH avec priorité mais sans record_type efface la priorité.
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}'

Codes d'état de réponse

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

Gestion des erreurs

Les erreurs de validation renvoient 400 avec le problème clé par nom de champ:

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

Essais des modifications du DNS

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