VPS.org API

@ action

API ɗin Gudanar da DNS

Create DNS zones and manage their records. Zones are served by ns1.vps.org, ns2.vps.org and ns3.vps.org.

Ƙarshen maki 13
Hanyar Tushe /api/v1/dns-zones, /api/v1/dns-records

Bayani

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

SAMU /api/v1/dns-zones/

Jerin Duk Yankunan DNS

Returns your zones, newest first, 25 per page. Records are not included here; fetch a single zone to get them.

Sigogin Tambaya

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

Buƙatar Misali

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

Misalin Amsar

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

Wuraren Amsawa

@ 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

Lambobin Matsayin Amsawa

200 Success
403 An rasa ko kuma an karya tabbacin API, ko kuma tabbacin bai da izinin da ake bukata
QSql /api/v1/dns-zones/

@ action

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.

Sigogin Jiki na Neman

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

Misalin Amsar

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

Lambobin Matsayin Amsawa

201 An ƙãga halittar yankin
400 An rasa ko kuma sunan domen bai dace ba
SAMU /api/v1/dns-zones/{uuid}/

@ action

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"

Lambobin Matsayin Amsawa

200 Success
404 An kasa gano shi, ko kuma yana da alaƙa da wani asusu na daban
Goge /api/v1/dns-zones/{uuid}/

@ action

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"

Lambobin Matsayin Amsawa

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

List or Add Records in a Zone

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.

Sigogin Jiki na Neman (POST)

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.

Buƙatar Misali

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

Misalin Amsar

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

Wuraren Amsawa

@ 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

Lambobin Matsayin Amsawa

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

Republish a Zone

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"
}
SAMU QSql /api/v1/dns-records/

List or Create Records Across Zones

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.

Sigogin Tambaya

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

Lambobin Matsayin Amsawa

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
SAMU PUT PATCH Goge /api/v1/dns-records/{uuid}/

Get, Update or Delete a Record

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.

Idan ka PATCH fifikon wani MX ko SRV rikodi, aika record_type cikin wata tambaya mai kama da wannan. Wani jikin PATCH da fifiko amma ba tare da record_type ba zai share fifikon.
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}'

Lambobin Matsayin Amsawa

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

QDialogButtonBox

Validation errors return 400 with the problem keyed by field name:

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

@ action

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