Cloudflare Registrar APIでドメインを購入する手順(Claude Codeで自動化)
Cloudflareは2026年4月に Registrar API(ベータ) を公開し、ドメインの検索・空き確認・購入までをAPIで完結できるようになりました。このページは、実際にこのAPIでドメインを購入してサイトを公開したときの手順の記録です。Claude Codeなどのコーディングエージェントに渡せる形でまとめています。
前提(ここだけは手作業)
APIを呼ぶ前に、人間側で3つだけ準備が必要です。所要は合計10分ほどです。
- Cloudflareアカウントと支払い方法の登録(Billing → Payment info)。購入時はここのカードに自動課金されます
- ユーザーAPIトークンの作成(My Profile → API Tokens → カスタムトークン)。権限は次の2つ:
- アカウント → レジストラ: ドメイン → 管理
- ゾーン → DNS → 編集
- デフォルトの連絡先の登録(ダッシュボード → ドメイン → 登録 → 「デフォルトの連絡先を作成する」)。ICANNの規定でドメイン登録には実在の連絡先が必要です。CloudflareはWHOIS秘匿がデフォルトなので、外部には公開されません
詰まりどころ4つ(実際に踏んだ順)
| 症状 | 原因と回避法 |
|---|---|
| Registrar系のAPIだけ「Authentication error」 | アカウント所有トークンではRegistrar APIが使えない。プロフィール側のユーザーAPIトークンで作り直す |
| トークン作成画面で「Registrar」を検索しても0件 | 日本語UIでは権限名が「レジストラ: ドメイン」にローカライズされている。「レジ」で検索すると出る |
| 登録リクエストが「domain_name is required」 | フィールド名は name ではなく domain_name |
| 「No registrant contact provided…」 | デフォルトの連絡先が未登録。前提の3を済ませると、以後は最小リクエストで購入できる |
手順1: 空き確認と価格の取得
domain-check は最大20ドメインを一括で確認できます。返ってくる registrable と pricing を見ます。
curl -s -X POST \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/domain-check" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains":["example-a.dev","example-b.com"]}'
tier が standard なら通常価格です。プレミアム価格のドメインもあるので、購入前に必ず pricing を確認してください。
手順2: 購入
必須フィールドはドメイン名だけです。購入は返金不可なので、金額を確認してから実行してください。
curl -s -X POST \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/registrations" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain_name":"example-a.dev"}'
通常は数秒で "state": "succeeded" が同期で返ります。Cloudflareで購入したドメインはネームサーバー設定が不要で、ゾーンが即座にactiveになるのが大きな利点です(他社レジストラからの移管のようなNS浪費待ちがありません)。
手順3: DNS設定(Vercelに向ける例)
ホスティングがVercelの場合、AレコードとCNAMEを作ります。Cloudflareのプロキシ(オレンジ色の雲)は必ずOFF(proxied: false)にしてください。ONにするとSSL証明書の発行失敗やリダイレクトループの原因になります。
curl -s -X POST \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"A","name":"@","content":"76.76.21.21","ttl":1,"proxied":false}'
Aレコードの値はプロジェクトによって異なる場合があります(新しめのVercelプロジェクトは 216.198.79.1 のような割当IPのことがある)。Vercelのドメイン設定画面に表示される値をそのまま使ってください。
補足
- 実測では、購入からHTTPSでのサイト公開まで4分でした
.devドメインはHSTSプリロード対象のためHTTPS必須です。VercelやCloudflare Pagesに載せる限り自動で満たされます- 2ドメイン目以降は、デフォルトの連絡先が登録済みなので
{"domain_name": "..."}の最小リクエストだけで買えます
この手順を実際に使った検証の記録は実験台帳にあります。