VPS.org API

REST APIドキュメント

DNS管理API

DNS ゾーンを作成し、レコードを管理します。ゾーンは ns1.vps.org、ns2.vps.org、ns3.vps.org で提供されます。

エンドポイント 13
ベースパス /api/v1/dns-zones, /api/v1/dns-records

概要

ゾーンは1つのドメインのレコードを保持します。APIを通して行う変更はすべて直ちに VPS.org 名前サーバにプッシュされます。これらのゾーンからドメインを提供するには、レジスタントで名前サーバを ns1.vps.org、ns2.vps.org、ns3.vps.org に設定してください。

変更は一つのステップで保存され、公開されます。名前サーバが変更を拒否すると、要求は 502 を返し、何も保存されません。他のアカウントが管理しているドメイン、他のアカウントのゾーンの親または子、VPS.org 予約名のためのゾーンは作成できません。

必要な権限: dns:list (GET), dns:create (POST), dns:update (PUT, PATCH, sync), dns:delete (DELETE), dns:*

得る /api/v1/dns-zones/

すべてのDNSゾーンを一覧表示する

ゾーンを返します。最近のものを先に、ページ当たり 25 個。レコードはここに含まれません。一つのゾーンを取得してください。

クエリパラメータ

パラメータ タイプ 必須 説明
domain string いや このドメイン名を持つゾーンのみ返します
page integer いや ページ番号、1 から始まる

リクエスト例

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

回答例

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

応答フィールド

フィールド タイプ 説明
uuid string ゾーン識別子
domain string ドメイン名、小文字で保存
created_at datetime 作成時刻 (ISO 8601, UTC)
record_count integer ゾーン内のレコード数

応答ステータスコード

200 成功
403 API トークンが無効か欠けています。または、トークンには必要な権限がありません。
ポスト /api/v1/dns-zones/

DNS ゾーンを作成

ゾーンを作成し、公開します。ゾーンは ns1, ns2, ns3.vps.org の 3 つの NS レコードから始まります。これらはシステムレコードで、編集も削除もできません。

リクエストボディパラメータ

パラメータ タイプ 必須 説明
domain string はい ドメイン名,例えば 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 ゾーン作成
400 欠けているか無効なドメイン名
得る /api/v1/dns-zones/{uuid}/

DNS ゾーンの詳細を取得

ゾーンを返します。 ゾーンのレコードはレコード配列に含まれます。 返信は上記の create の返信と同じ形です。

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

応答ステータスコード

200 成功
404 見つかりませんでした。あるいは、他のアカウントに属しています。
消去 /api/v1/dns-zones/{uuid}/

DNS ゾーンを削除

3 つの名前サーバからゾーンを削除し、それらの中でまだサービスされているものがないか確認し、ゾーンとそのレコードを削除します。名前サーバがゾーンに応答していれば、要求は失敗し、ゾーンは再試行のために保持されます。

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

応答ステータスコード

204 削除しました。返信の内容はありません。
400 名前サーバがゾーンに依然としてサービスしています。ゾーンは削除されませんでした。詳細フィールドにはエラーが表示されています。
404 見つかりませんでした。あるいは、他のアカウントに属しています。
得る ポスト /api/v1/dns-zones/{uuid}/records/

ゾーンのレコードをリストまたは追加

GETはゾーン内のすべてのレコードを タイプと名前によりソートされた 単純な配列 (ページ化されていない) として返します。POSTはゾーンにレコードを追加し、公開します。

リクエストボディパラメータ (POST)

パラメータ タイプ 必須 説明
record_type string はい A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA
name string はい @ はドメイン自体のための文字または www のようなラベルのための文字です。名前は小文字で保存されます。
value string はい IP アドレスやホスト名などのレコードデータ。ホスト名には後ろのドットが必要なく、TXT 値には引用符が必要ありません。両方ともレコードを公開するときに追加されます。
ttl integer はい 生きる時間(秒)
priority integer MX と SRV のみ MX と SRV レコードに必要で、他のタイプは無視します。SRV の場合は、重み、ポート、ターゲットを値に入力してください。

リクエスト例

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

回答例

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

応答フィールド

フィールド タイプ 説明
uuid string /api/v1/dns-records/ エンドポイントで使用するレコード識別子
priority integer | null MX と SRV レコードの優先度、それ以外は null
created_at date 作成日のみ (Y-MM-DD)、時間はありません

応答ステータスコード

200 GET: ゾーンのレコード
201 POST: レコードを作成
400 検証エラー、例えば未知のレコードタイプ、ttl が欠けている、優先度のない MX または SRV レコード
404 見つかりませんでした。あるいは、他のアカウントに属しています。
ポスト /api/v1/dns-zones/{uuid}/sync/

ゾーンを再公開

ゾーンとそのすべてのレコードを名前サーバに再プッシュします。レコードの変更は自動的に公開されますが、公開は最善の努力であり、失敗は元の要求に失敗しません。変更が DNS 検索に表示されない場合にこのオプションを使用してください。要求のボディは必要ありません。

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"
}
得る ポスト /api/v1/dns-records/

ゾーン間でレコードをリストまたは作成

GETはすべてのゾーンのレコードをドメイン、タイプ、名前順にページごとに25件返します。POSTはゾーンレコードのエンドポイントと同様にレコードを作成しますが、ゾーンはリクエストボディにzone_uuidとして指定します。

クエリパラメータ

パラメータ タイプ 必須 説明
zone string いや この uid を持つゾーンのレコードのみ
record_type string いや このタイプのレコードのみ、例えば MX (大文字と小文字を区別しない)
page integer いや ページ番号、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: 成功
201 POST: レコードを作成
400 検証エラー、または zone_uuid が欠けているか、あなたのゾーンの一つではありません
得る PUT PATCH 消去 /api/v1/dns-records/{uuid}/

レコードを取得、更新、または削除

GETは1つのレコードを返します。PUTはそれを置き換え、record_type、name、value、ttlを必要とします。PATCHは送信したフィールドのみを変更します。DELETEはレコードを削除し、ボディなしで204を返します。変更は直ちに公開されます。ゾーンで作成されたNSレコードはシステムレコードです。更新または削除すると403を返します。

MXレコードの優先度を PATCH するときは、同じ要求で record_type を送信します。
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, PATCH: レコード
204 削除しました。返信の内容はありません。
400 検証エラー
403 レコードはシステムレコードか、トークンには必要な権限がありません
404 見つかりませんでした。あるいは、他のアカウントに属しています。

エラーハンドリング

検証エラーは 400 を返します。問題はフィールド名でキー付けされています。

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

DNS 変更をテスト

変更がライブになったことを確認するために、レジスタのデレゲーションまたは解析キャッシュが追いつく前に、VPS.org 名前サーバを直接クエリーします。

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