Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Registrar API

最終更新 Markdown で表示Agent セットアップ

Cloudflare Registrar API を使い、ドメイン名を検索し、リアルタイムの空き状況と料金を確認し、対応ドメインをプログラムで登録します。

このガイドでは、Cloudflare API と curl を使ったベータワークフローを説明します。同じエンドポイントは公式の Cloudflare API リファレンスにあり、デフォルトで Cloudflare MCP からも使えます。追加の統合作業なしで、スクリプト、バックエンドサービス、CI パイプライン、エージェント駆動ツールから使えます。

始める前に

最初の API リクエストを送る前に、次を用意してください。

  1. Cloudflare アカウント ID。
  2. Registrar の書き込み権限を持つ API トークン。https://dash.cloudflare.com/<ACCOUNT_ID>/api-tokens で作成します。
  3. 有効なデフォルト支払い方法がある請求プロファイル。請求は https://dash.cloudflare.com/<ACCOUNT_ID>/billing/payment-info で管理します。
  4. アカウントに設定したデフォルトの登録者連絡先と、登録ページでの Domain Registration Agreement への同意: https://dash.cloudflare.com/<ACCOUNT_ID>/domains/registrations

関連するセットアップは次を参照してください。

認証をセットアップする

Cloudflare API リクエストはベアラートークン認証を使います。

ターミナルで、アカウント ID と API トークンの環境変数を定義します。

export ACCOUNT_ID="<YOUR_ACCOUNT_ID>"
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"

このガイドのすべてのリクエストは、Cloudflare API v4 のベース URL を使います。

https://api.cloudflare.com/client/v4/

ベータワークフロー

ベータワークフローの中核は 3 ステップです。

  1. 候補のドメイン名を検索する。
  2. 希望するドメインのリアルタイムの空き状況と料金を確認する。
  3. ドメインを登録する。

Search は発見に便利ですが、信頼できる情報源ではありません。登録中のエラーを減らすため、登録直前に必ず Check エンドポイントを呼び出します。

エージェント向けプロンプトの例

Cloudflare MCP またはほかのエージェント駆動ワークフローを使う場合、プロンプトは次のようにシンプルで構いません。

  • Search for domains for a coffee shop based in Evergreen, Colorado.
  • Find 5 available .com or .dev domains for an AI expense tracker.
  • Check whether example.com is available and show me the current price.
  • Check these domains and tell me which ones are registrable right now: example.com, example.dev, example.cafe
  • Register example.com on my Cloudflare account.

1. ドメインを検索する

Search エンドポイントを使い、キーワード、フレーズ、または部分的なドメイン名から候補ドメイン名を生成します。

Search の結果:

  • 高速で、発見向けです。
  • キャッシュデータに基づきます。
  • API ベータが対応する拡張子だけを含みます。
curl --request GET \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/domain-search?q=acme%20corp&limit=3" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "acmecorp.com",
        "registrable": true,
        "tier": "standard",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        }
      },
      {
        "name": "acmecorp.dev",
        "registrable": true,
        "tier": "standard",
        "pricing": {
          "currency": "USD",
          "registration_cost": "10.11",
          "renewal_cost": "10.11"
        }
      },
      {
        "name": "acmecorp.app",
        "registrable": true,
        "tier": "standard",
        "pricing": {
          "currency": "USD",
          "registration_cost": "11.00",
          "renewal_cost": "11.00"
        }
      }
    ]
  }
}

2. リアルタイムの空き状況と料金を確認する

Check エンドポイントを使い、ドメインが現在登録可能かどうかを確認し、現在の料金を取得します。

Check の結果:

  • レジストリを直接照会します。
  • 現在のレジストリ状態を反映します。
  • 登録エンドポイントを呼ぶ直前に使う必要があります。
  • registrablefalse のとき、応答に reason フィールドが含まれることがあります。

このエンドポイントは、リクエストあたり最大 20 ドメインを受け付けます。

curl --request POST \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/domain-check" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "domains": ["acmecorp.dev"]
  }'

応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "acmecorp.dev",
        "registrable": true,
        "tier": "standard",
        "pricing": {
          "currency": "USD",
          "registration_cost": "10.11",
          "renewal_cost": "10.11"
        }
      }
    ]
  }
}

API 経由でドメインを登録できない場合、応答に理由が含まれます。例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "mybrand.uk",
        "registrable": false,
        "reason": "extension_not_supported_via_api"
      }
    ]
  }
}

よくある reason の値は次のとおりです。

  • domain_unavailable
  • extension_not_supported_via_api
  • extension_not_supported
  • extension_disallows_registration

3. ドメインを登録する

Registration エンドポイントを使い、ドメイン登録ワークフローを開始します。

重要:

  • 成功した登録は、デフォルトの支払いプロファイルに課金されます。
  • 登録が正常に完了すると返金できません。
  • このエンドポイントを呼ぶ前に、必ずドメイン名と料金を確認してください。

最も単純なリクエストは domain_name だけを必要とします。

curl --request POST \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "domain_name": "acmecorp.dev"
  }'

アカウントにはデフォルトの登録者連絡先が設定されている必要があります。新しい連絡先をインラインで渡さない場合、API は自動でデフォルトの連絡先を使います。別の連絡先でドメインを登録したい場合は、リクエストにその連絡先を渡せます。

現在のデフォルト動作:

  • auto_renew のデフォルトは false です。
  • privacy_mode のデフォルトは、TLD が対応する場合は redaction、そうでなければ off です。
  • アカウントのデフォルト支払い方法が自動で課金されます。

1 件の登録でデフォルトの登録者連絡先を上書きするには、インラインで 1 件渡します。

curl --request POST \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "domain_name": "acmecorp.dev",
    "contacts": {
      "registrant": {
        "email": "[email protected]",
        "phone": "+1.5555555555",
        "postal_info": {
          "name": "Ada Lovelace",
          "organization": "Example Inc",
          "address": {
            "street": "123 Main St",
            "city": "Austin",
            "state": "TX",
            "postal_code": "78701",
            "country_code": "US"
          }
        }
      }
    }
  }'

成功した応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domain_name": "acmecorp.dev",
    "state": "succeeded",
    "completed": true,
    "created_at": "2025-10-27T10:00:00Z",
    "updated_at": "2025-10-27T10:00:03Z",
    "context": {
      "registration": {
        "domain_name": "acmecorp.dev",
        "status": "active",
        "created_at": "2025-10-27T10:00:00Z",
        "expires_at": "2026-10-27T10:00:00Z",
        "auto_renew": false,
        "privacy_mode": "redaction",
        "locked": true
      }
    },
    "links": {
      "self": "/accounts/abc/registrar/registrations/acmecorp.dev/registration-status",
      "resource": "/accounts/abc/registrar/registrations/acmecorp.dev"
    }
  }
}

登録応答を処理する

デフォルトでは、登録エンドポイントは応答するまで最大 10 秒待ちます。

次のいずれかを受け取れます。

  • 待機ウィンドウ内に登録が完了した場合は 201 Created
  • 登録がまだ進行中の場合は 202 Accepted

即時の非同期動作を強制するには、Prefer: respond-async を送ります。

非同期リクエストの例:

curl --request POST \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --header "Prefer: respond-async" \
  --data '{
    "domain_name": "acmecorp.dev"
  }'

202 Accepted 応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domain_name": "acmecorp.dev",
    "state": "in_progress",
    "completed": false,
    "created_at": "2025-10-27T10:00:00Z",
    "updated_at": "2025-10-27T10:00:10Z",
    "links": {
      "self": "/accounts/abc/registrar/registrations/acmecorp.dev/registration-status",
      "resource": "/accounts/abc/registrar/registrations/acmecorp.dev"
    }
  }
}

登録ステータスをポーリングする

登録がまだ進行中の場合、ワークフローが終端状態になるまでステータスエンドポイントをポーリングします。

curl --request GET \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations/acmecorp.dev/registration-status" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domain_name": "acmecorp.dev",
    "state": "succeeded",
    "completed": true,
    "created_at": "2025-10-27T10:00:00Z",
    "updated_at": "2025-10-27T10:00:03Z",
    "context": {
      "registration": {
        "domain_name": "acmecorp.dev",
        "status": "active",
        "created_at": "2025-10-27T10:00:00Z",
        "expires_at": "2026-10-27T10:00:00Z",
        "auto_renew": false,
        "privacy_mode": "redaction",
        "locked": true
      }
    },
    "links": {
      "self": "/accounts/abc/registrar/registrations/acmecorp.dev/registration-status",
      "resource": "/accounts/abc/registrar/registrations/acmecorp.dev"
    }
  }
}

可能なワークフロー状態は次のとおりです。

  • in_progress
  • succeeded
  • failed
  • action_required
  • blocked

ワークフローが action_required を返す場合、ポーリングを止め、必要なユーザー操作を提示します。

ワークフローが failed を返す場合、再試行する前に error.codeerror.message を確認します。

登録リソースを取得する

登録が完了したら、登録リソースを直接取得します。

curl --request GET \
  --url "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations/acmecorp.dev" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

応答の例:

{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "domain_name": "acmecorp.dev",
    "status": "active",
    "created_at": "2025-10-27T10:00:00Z",
    "expires_at": "2026-10-27T10:00:00Z",
    "auto_renew": false,
    "privacy_mode": "redaction",
    "locked": true
  }
}

ベータの制限

これは Registrar API の最初のベータリリースです。

現在の制限は次のとおりです。

  • API ベータで使えるのは、Cloudflare Registrar が対応する拡張子の一部だけです。
  • Search の結果は、API 対応の拡張子だけに限定されます。
  • ダッシュボードで対応している一部の拡張子は、プログラムによる登録ではまだ使えません。
  • 対応する場合、プレミアムドメインは登録前に明示的な料金確認が必要になります。
  • 更新は API ではまだ使えません。
  • 移管は API ではまだ使えません。
  • 連絡先の更新は API ではまだ使えません。

ダッシュボードでは Cloudflare が対応しているが API ではまだ対応していないドメインを Check すると、応答は extension_not_supported_via_api を返します。

これらの中核的な Registrar 機能は、今後の API バージョンで追加されます。

対応拡張子の一覧ができた時点で、ここにリンクを追加します。

次のステップ

Registrar API ベータ、特に自動化、エージェント、マルチテナントプラットフォームのワークフロー向けに構築している場合は、フィードバックをお寄せください。

役に立ちましたか?