ドメインの購入と更新
domains カテゴリーの 10 個の API 操作を扱います。
| メソッド | パス | 説明 |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/domains | org のドメイン(runlot domains list) |
| POST | /v1/orgs/{orgSlug}/domains | ドメインを購入します(runlot domains buy) |
| POST | /v1/orgs/{orgSlug}/domains/check | ドメイン名を調べます(runlot domains check) |
| POST | /v1/orgs/{orgSlug}/domains/import | 所有しているドメインをインポートします(runlot domains import) |
| GET | /v1/orgs/{orgSlug}/domains/{name} | ドメイン情報と直近の変更履歴(runlot domains show) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/renew | 更新します(runlot domains renew) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/auto-renew | 自動更新の設定を変更します |
| POST | /v1/orgs/{orgSlug}/domains/{name}/lock | transfer lock のオン・オフを切り替えます(runlot domains lock|unlock) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/auth-code | transfer auth code を確認します(runlot domains auth-code) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/sync | レジストラが今この値を再度読み取ります |
GET /v1/orgs/{orgSlug}/domains
viewer 以上が必要です。
operationId listDomains
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 一覧取得 | DomainList |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core — cp-public が cp-core なしで起動しました | Error |
POST /v1/orgs/{orgSlug}/domains
admin 以上 — これは課金を伴います。 domain.purchase として監査されます(連絡先は保持されません。監査ログは削除できず、連絡先は個人情報であるためです)。
登録直後、NS は Runlot のネームサーバー(ns1~3.runlot.app)に設定されます。これは所有権確認の手順が不要であることを意味し、購入直後にアプリを接続できます。ICANN の確認メールは contact アドレスに送信されます。この点は登録前に画面で開示する必要があります(§5.5)。
同じリクエストを再送しても安全です。完了済みのドメインには 200 を返し、途中で中断した購入は中断した手順から再開します。
operationId purchaseDomain
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 既に購入済みのドメイン(冪等) | Domain |
| 201 | 購入完了 | Domain |
| 400 | — | — |
| 402 | payment_failed — 支払いが拒否されました | Error |
| 403 | — | — |
| 409 | domain_taken・domain_unavailable | Error |
| 422 | registrar_rejected — レジストラがリクエストの値(連絡先情報など)を拒否しました。登録は完了しておらず、再試行しても解決しません。入力を修正したリクエストは新しい行として送る必要があります。 | Error |
| 502 | saga_incomplete, registrar_error — 再送すると中断した箇所から続行します。エッジ(Cloudflare)は 502 のボディを独自の HTML に置き換えます。そのため、ブラウザクライアントは code を受け取りません。サーバーは、再試行しても解決しない失敗をここでは送信しません。 | Error |
| 503 | no_core・registrar_not_configured・dns_not_configured | Error |
POST /v1/orgs/{orgSlug}/domains/check
member 以上が必要です。viewer では不可です。この 1 回の呼び出しはレジストラ API にアクセスするためで、読み取りのように見えても外部へ発信するからです。
priceCents は登録初年度分をカバーし、renewalCents は更新 1 年分をカバーします。初年度割引がよくあるため、両者は別々になっています。
operationId checkDomains
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 名前ごとの利用可否 | object |
| 400 | — | — |
| 403 | — | — |
| 503 | no_core・registrar_not_configured | Error |
POST /v1/orgs/{orgSlug}/domains/import
admin 以上が必要です。domain.import として監査されます。これはレジストラを呼び出しません — ゾーンを作成するだけで、顧客が自身のレジストラで NS レコードを ns1~3.runlot.app に変更した時点から、DNS 管理はすべてこちらの管理下に入ります(§5.6)。
operationId importDomain
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 既にインポート済みのドメイン(冪等) | Domain |
| 201 | インポート完了 | Domain |
| 400 | — | — |
| 403 | — | — |
| 409 | domain_taken | Error |
| 503 | no_core・dns_not_configured | Error |
GET /v1/orgs/{orgSlug}/domains/{name}
viewer 以上が必要です。他の org の名前は 404 を返します。
operationId getDomain
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | ドメイン | DomainDetail |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/renew
admin 以上が必要です。domain.renew として監査されます。
operationId renewDomain
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 更新されたドメイン | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/auto-renew
管理者以上が必要です。レジストラ側の自動更新はオンのままです(§5.4)。ドメインは1日遅れただけで失う資産なので、先に更新してから後で請求します。UIはこれを併記する必要があります。そうしないと、顧客がここでオフにして「キャンセルした」と思い込んでしまいます。
operationId setDomainAutoRenew
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 変更されたドメイン | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/lock
管理者以上が必要です。domain.lock として監査されます。
operationId setDomainLock
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 変更されたドメイン | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/auth-code
管理者以上が必要です。domain.auth_code として監査されます。コード自体は監査ログに保存されません。コードを持つ者は誰でもドメインを取得できるため、監査エントリを削除することはできません。
退出手段は即座に開かれます(§5.5)。それを妨げうる唯一のものはICANNの60日間の登録・移管ロックであり、これは情報提供にすぎません。
operationId getDomainAuthCode
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | コード | object |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/sync
メンバー以上が必要です。有効期限・ロック・NSについてはレジストラが正となる情報源です。レジストラがアカウント内に存在しないと応答した場合、それが transferred_out であり、移管が完了したことを示す唯一の合図です。
operationId syncDomain
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 一致したドメイン | Domain |
| 403 | — | — |
| 404 | — | — |