Create DNS zones and manage their records. Zones are served by ns1.vps.org, ns2.vps.org and ns3.vps.org.
A zone holds the records for one domain. Every change you make through the API is pushed to the VPS.org nameservers right away. To serve a domain from these zones, set its nameservers at your register to ns1.vps.org, ns2.vps.org and ns3.vps.org.
An adana sauye-sauye kuma an wallafa su cikin mataki guda: idan masu karɓan suna sun ƙi wani canji, to, za'a mayar da 502 kuma badana komai ba. Ba za'a iya ƙirƙirar wani yanki ga wani shafuka wanda wani asusu ke kula da shi ba, ko kuma wani mahaifi ko ɗan wani asusu na wani yanki, ko kuma wani suna da aka riƙe da VPS.org.
Required permission:
dns:list (GET), dns:create (POST), dns:update (PUT, PATCH, sync), dns:delete (DELETE), dns:*
Returns your zones, newest first, 25 per page. Records are not included here; fetch a single zone to get them.
| Parameters | Nau'i | Ana buƙata | @ action |
|---|---|---|---|
domain |
string | QDialogButtonBox | Return only the zone with exactly this domain name |
page |
integer | QDialogButtonBox | Page number, starting at 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
}
]
}
| @ action | Nau'i | @ action |
|---|---|---|
uuid |
string | Zone identifier |
domain |
string | Sunan Doman, an adana shi cikin haruffa ƙan |
created_at |
datetime | Lokacin ƙirƙira (ISO 8601, UTC) |
record_count |
integer | Adadin rikodin cikin yanki, ciki har da rikodin NS uku |
| 200 | Success |
| 403 | An rasa ko kuma an karya tabbacin API, ko kuma tabbacin bai da izinin da ake bukata |
Creates a zone and publishes it. The zone starts with three NS records for ns1, ns2 and ns3.vps.org, which are system records and cannot be edited or deleted.
| Parameters | Nau'i | Ana buƙata | @ action |
|---|---|---|---|
domain |
string | Ee | Sunan shafuka, misali example.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 | An ƙãga halittar yankin |
| 400 | An rasa ko kuma sunan domen bai dace ba |
Returns one zone with all of its records in a records array. The response has the same shape as the create response above.
curl -X GET "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
| 200 | Success |
| 404 | An kasa gano shi, ko kuma yana da alaƙa da wani asusu na daban |
Removes the zone from all three nameservers, checks that none of them still serves it, and then deletes the zone and its records. If a nameserver still answers for the zone, the request fails and the zone is kept so you can retry.
curl -X DELETE "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
| 204 | Deleted. The response has no body. |
| 400 | An yi amfani da wani mai ba da sunan mai amfani da yankin. Ba a share yankin ba; fannin bayani na nuna jerin kurakurai. |
| 404 | An kasa gano shi, ko kuma yana da alaƙa da wani asusu na daban |
GET na mayar da duk wani rijista a cikin yanki kamar yadda wani almara (ba paged), da aka raba da irin da sunan. POST na ƙara da wani rajista zuwa yanki kuma ya wallafa shi.
| Parameters | Nau'i | Ana buƙata | @ action |
|---|---|---|---|
record_type |
string | Ee | A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA |
name |
string | Ee | @ for the domain itself, or a label such as www. Names are stored in small letters. |
value |
string | Ee | Data na rijista, misali, adireshin IP ko sunan mai masaukin. Sunayen mai masaukin ba su bukaci wata dama ta ƙarshe ba kuma kimar TXT ba ta bukaci kalmomin magana ba; ana ƙara su biyu a lokacin da aka wallafa rijistar. |
ttl |
integer | Ee | Lokacin da za'a rãyu cikin sakan |
priority |
integer | MX and SRV only | An bukata don MX da SRV da kuma a yi watsi da su ga duk wani nau'i na daban. Domin SRV, sanya nauyin, port da manufa cikin kimar. |
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"
}
| @ action | Nau'i | @ action |
|---|---|---|
uuid |
string | Mai gane rajista, ana amfani da shi ta /api/v1/dns-records/ endpoints |
priority |
integer | null | Tsarin farko ga MX da SRV rikodi, in ba haka ba babu |
created_at |
date | Creation date only (YYYY-MM-DD), without a time |
| 200 | GET: lissafin yankin |
| 201 | POST: record created |
| 400 | %s: Kuskure na tabbatarwa, misali, nau'in rijista da ba a sani ba, ttl da aka rasa, ko rajista na MX ko SRV da ba a ba shi fifiko ba |
| 404 | An kasa gano shi, ko kuma yana da alaƙa da wani asusu na daban |
Pushes the zone and all of its records to the nameservers again. Record changes are published automatically, but publishing is best effort and a failure does not fail the original request, so use this when a change does not show up in DNS lookups. No request body is needed.
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 returns the records of all your zones, 25 per page, ordered by domain, type and name. POST creates a record like the zone records endpoint, but takes the zone in the body as zone_uuid.
| Parameters | Nau'i | Ana buƙata | @ action |
|---|---|---|---|
zone |
string | QDialogButtonBox | Ajiye kawai a cikin yanki da wannan uuid |
record_type |
string | QDialogButtonBox | Only records of this type, for example MX (case insensitive) |
page |
integer | QDialogButtonBox | Page number, starting at 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: success |
| 201 | POST: record created |
| 400 | Kuskure na tabbatarwa, ko kuma zone_uuid yana da matsala ko kuma ba daya daga cikin yankunanku ba |
GET na mayar da wani rijista. PUT na maye shi kuma yana bukatar record_type, sunan, daraja da ttl. PATCH na canza kawai fannoni da ka aiko. DELETE na cire rijista kuma yana mayar da 204 ba tare da jiki ba. An wallafa sauye-sauyen a hankali. NS rikodin da aka halitta da yankin su ne rikodin tsarin: sabuntawa ko share su na mayar da 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 ko PATCH: rikodin |
| 204 | Deleted. The response has no body. |
| 400 | Validation error |
| 403 | An riga an yi rijista da shi a cikin tsarin, ko kuma alamun shafi bai da izinin da ake bukata |
| 404 | An kasa gano shi, ko kuma yana da alaƙa da wani asusu na daban |
Validation errors return 400 with the problem keyed by field name:
{
"priority": ["MX records require a priority value"]
}
Query the VPS.org nameservers directly to confirm a change is live before your registrar delegation or resolver caches catch up:
dig @ns1.vps.org example.com A
dig @ns2.vps.org example.com MX
dig @ns3.vps.org www.example.com