CNF API · v1

c.nf のための単一の API です。DNS のゾーンとレコード、個人のファイル、パッケージ、保存した認証情報、ドメイン照会、そしてアカウント不要の公開ユーティリティを扱います。認証を伴う操作は、呼び出しに使われた鍵の持ち主のアカウントに限定されます。

概要

バージョン 1 は、DNS 管理から申請したゾーンの DNS 操作を提供します。トークンの作成と無効化はアカウント → API キーで行います。

コンソールと同じ信頼境界です。 API はコンソールの確認済みゾーン所有権チェックを使用します。コンソールアカウントで利用できるゾーンは API キーでも利用でき、それ以外のゾーンには 403 forbidden_zone が返されます。
機械可読なエンドポイントカタログを取得するには、GET /v1?format=json をリクエストするか、/v1Accept: application/json を送信してください。

ベース URL とバージョニング

https://api.c.nf/v1

すべてのエンドポイントは /v1 配下です。互換性を破る変更には新しいメジャーバージョンのパスを使用します。後方互換性のあるフィールドとエンドポイントは v1 に追加される場合があり、変更履歴に記録されます。

認証とスコープ

アカウントデータの読み取りまたは変更を行うすべてのリクエストには Bearer トークンが必要です。トークンは cnf_ に続く 32 桁の 16 進文字で構成されます。

curl https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer cnf_a1b2c3d4e5f60718293a4b5c6d7e8f90"

トークンは一方向ハッシュとして保存され、完全な値は作成時にだけ表示されます。紛失した場合は無効化して、別のトークンを作成してください。

Authorization ヘッダーだけを使用してください。 Basic 認証とクエリ文字列内のトークンは受け付けません。URL 内のトークンは、ログ、リファラーヘッダー、ブラウザー履歴を通じて漏えいする可能性があります。

各トークンにはスコープがあります。スコープ未設定のトークンには、既定で dns:read が与えられます。書き込みスコープでは読み取りも可能です。

スコープ許可される操作
dns:read ゾーンとレコードの一覧、および個別レコードの読み取り。
dns:write DNS レコードとゾーン申請の読み取り、作成、更新、削除。
* すべてのスコープ。本当に必要な場合だけ使用してください。

不一致の場合は 403 forbidden_scope が返され、診断用に required_scopestoken_scopes の両方が含まれます。

ユーザーごとの分離

Bearer トークンは正確に 1 つの user_id に解決されます。すべてのゾーンハンドラーは、読み書きの前にそのユーザーの確認済み申請を検査します。管理者による上書き、なりすまし経路、ユーザー間の迂回手段はありません。

* を持つトークンでも、そのユーザー自身が確認したゾーンにだけ操作できます。別のアカウントのゾーンを使用しようとすると 403 forbidden_zone が返されます。

応答エンベロープ

成功時の応答

{
  "success": true,
  "data": { "zones": [] },
  "request_id": "req_abc123def456abcd"
}

エラー時の応答

{
  "success": false,
  "error": "forbidden_zone",
  "message": "zone not verified for this account (or does not exist)",
  "request_id": "req_abc123def456abcd",
  "zone": "example.com"
}

request_id はすべての応答に含まれ、クライアント側のログに安全に記録できます。

エラーコード

HTTPエラーコード意味
400 bad_request 必須フィールドがない、本文が不正、または入力が無効です。
401 unauthorized Bearer トークンがない、無効、または取り消されています。
403 forbidden_scope トークンに必要なスコープがありません。
403 forbidden_zone このアカウントでゾーンが確認されていないか、存在しません。
404 not_found 指定されたゾーン、レコード、またはユーザーが見つかりません。
405 method_not_allowed このエンドポイントは指定された HTTP メソッドに対応していません。
502 upstream_error DNS プロバイダーからエラーが返されました。

ゾーンの確認

POST /v1/dns/zones でゾーンを申請すると、サーバーは次のいずれかの経路を選択します:

  1. 即時確認(method: "auto" — 他のアカウントがゾーンを申請していない場合に使用します。申請は直ちに確認されます。保存したレコードが権威を持つのは、所有者がレジストラで NS 委任を返されたネームサーバーに向けた後だけです。
  2. TXT による確認 — 競合する申請に使用します。返された TXT 値を _cnfdns-verify.<zone> に追加してから、POST /v1/dns/zones/{zone}/verify を呼び出します。
  3. 旧 NS 確認 — 以前の保留中申請では verify_method: "ns" を使用する場合があります。ゾーンの現在の NS 応答と、想定されるネームサーバー集合を比較します。
即時確認が安全な理由。 c.nf に保存されたレコードは、ドメイン所有者がレジストラで権威 NS 委任を変更するまで機能しません。最初に申請しただけでは、そのレコードを配信できません。
逆引きゾーン in-addr.arpaip6.arpa にも同じモデルを適用します。ゾーンを申請して expected_ns を取得し、関連レジストリにその委任先を提出してください。

確認はべき等です。確認済みの申請に対して繰り返すと、申請を変更せずに verified: true が返されます。

レコード種別と制限

対応しているレコード種別

A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, SPF.

priorityMXSRV では必須で、他の種別では無視されます。ttl は 60〜2,592,000 秒にしてください。

エンドポイント

公開ユーティリティ

アカウント不要の小さく確実なエンドポイント。時刻、アドレス、国、為替レート、ハッシュ。

メソッドパススコープ目的
GET /v1/public/time 公開 現在の UTC 時刻を ISO 8601、RFC 2822、Unix 形式で返します。
GET /v1/public/timestamp 公開 現在の Unix タイムスタンプを秒とミリ秒で返します。
GET /v1/public/ip 公開 このリクエストの送信元アドレス。
GET /v1/public/geo 公開 エッジで判定したリクエストの送信元の国。
GET /v1/public/fx 公開 基準通貨に対する為替レート。1 時間ごとに更新されます。
GET /v1/public/hash 公開 文字列を SHA-256 などの対応アルゴリズムでハッシュ化します。

アカウント

そのトークンが誰のもので、何ができるか。

メソッドパススコープ目的
GET /v1/account/me 任意のトークン トークンのアカウント、スコープ、利用できるエンドポイント。
GET /v1/account/sessions account:read このアカウントにログイン中のすべてのブラウザーセッション。
POST /v1/account/sessions/revoke account:write セッションを 1 つ終了します。
POST /v1/account/sessions/revoke-all account:write すべてのセッションを終了します。
POST /v1/account/profile account:write 表示名を変更します。

DNS

ドメインを申請し、管理権を証明して、レコードを管理します。

メソッドパススコープ目的
GET /v1/dns/zones dns:read このアカウントが申請したすべてのゾーン。
POST /v1/dns/zones dns:write ゾーンを申請します。競合がなければ即時、あれば TXT による確認が必要です。
GET /v1/dns/zones/{zone} dns:read 1 つのゾーン。保留中であれば確認手順も返します。
POST /v1/dns/zones/{zone}/verify dns:write 確認用の問い合わせを実行し、一致すればゾーンを確認済みにします。
DELETE /v1/dns/zones/{zone} dns:write 申請を取り下げます。レコード自体はそのまま残ります。
GET /v1/dns/zones/{zone}/records dns:read 確認済みゾーンのすべてのレコード。
POST /v1/dns/zones/{zone}/records dns:write 確認済みゾーンにレコードを追加します。
GET /v1/dns/zones/{zone}/records/{id} dns:read 単一のレコード。
PATCH /v1/dns/zones/{zone}/records/{id} dns:write レコードの一部を変更します。省略した項目は値を保ちます。
DELETE /v1/dns/zones/{zone}/records/{id} dns:write レコードを削除します。

認証情報

認証情報ツールの背後にある非公開の保管庫。

メソッドパススコープ目的
GET /v1/cred cred:read cred:write 保存済みの認証情報。プラットフォームで絞り込めます。
POST /v1/cred cred:write 認証情報を保存します。

ファイル

個人用ストレージ。一覧、アップロード、編集、共有、削除。

メソッドパススコープ目的
GET /v1/files files:read files:write 保存済みのファイル。新しい順。
GET /v1/files/{id} files:read files:write 1 つのファイル。共有リンクがあれば含みます。
GET /v1/files/download files:read files:write ファイルをダウンロードします。
POST /v1/files/upload files:write ファイルをアップロードします。
POST /v1/files/update files:write 共有設定を含め、ファイルの情報を編集します。
POST /v1/files/rename files:write ダウンロード時のファイル名を変更します。
POST /v1/files/delete files:write ファイルと中身を削除します。
POST /v1/files/upload-chunk files:write 大きなアップロードの一部を送ります。
POST /v1/files/upload-finalize files:write 分割した部分を 1 つのファイルに組み立てます。

CDN

共有ファイルのエッジキャッシュとトラフィック。

メソッドパススコープ目的
GET /v1/cdn/stats cdn:read 共有ファイルのキャッシュ設定とリクエスト数。
POST /v1/cdn/config cdn:write エッジでの保持時間を設定、または配信を停止します。
POST /v1/cdn/purge cdn:write ファイルをエッジキャッシュから今すぐ削除します。

SMS 転送

端末から転送されたメッセージと、それを許可する鍵。

メソッドパススコープ目的
GET /v1/sms/messages sms:read アカウントに転送されたメッセージ。
GET /v1/sms/keys sms:read sms:write 端末が使う転送キー。
POST /v1/sms/keys sms:write 転送キーを発行します。最大 5 個。
DELETE /v1/sms/keys sms:write 転送キーを失効させます。

静的サイト

zip をアップロードしてサイトを配信します。

メソッドパススコープ目的
GET /v1/sites sites:read sites:write 静的サイトの一覧。最近公開したものが先頭です。
POST /v1/sites/deploy sites:write zip をサイトとして公開します。
POST /v1/sites/delete sites:write サイトとそのファイルを削除します。

デプロイ

公開したフォーム・Webhook・短縮リンクのエンドポイント。

メソッドパススコープ目的
GET /v1/deployments deploy:read deploy:write デプロイの一覧と、それぞれの利用回数。
POST /v1/deployments/toggle deploy:write デプロイを有効または無効にします。
POST /v1/deployments/delete deploy:write デプロイを削除します。

ドメイン

ドメイン一覧とその登録情報。

メソッドパススコープ目的
GET /v1/domains domain:read domain:write ドメインの一覧。期限が近いものが先頭です。
POST /v1/domains/whois-sync domain:write レジストリの記録から 1 件を更新します。

パッケージ

リリースを公開し、バージョンとダウンロード数を取得します。

メソッドパススコープ目的
GET /v1/packages packages:read packages:write あなたのパッケージ。バージョン数とダウンロード総数付き。
GET /v1/packages/{slug} packages:read packages:write 1 つのパッケージ。すべてのバージョンと成果物を含みます。
POST /v1/packages/publish packages:write バージョンを公開します。新規ならパッケージも作成します。
POST /v1/packages/update packages:write パッケージの情報を編集します。
POST /v1/packages/delete packages:write パッケージとすべてのバージョン・成果物を削除します。

WHOIS

ドメインの登録情報。キャッシュされ、ドメインツールと共有されます。

メソッドパススコープ目的
GET /v1/whois whois:read ドメインの登録情報。

AI エージェント向け

エージェントには /v1/ai を渡してください。プロンプトにそのまま貼れる要約です。/v1/ai?format=json は同じエンドポイントをツール定義として返します。/v1/openapi.json は完全な OpenAPI 3.1 契約、/llms.txt はクローラー向けの案内です。4 つともこのページと同じルーティング表から生成されるため、存在しないエンドポイントを説明することはありません。

curl https://api.c.nf/v1/ai
curl https://api.c.nf/v1/ai?format=json
curl https://api.c.nf/v1/openapi.json

リクエストフィールド

ゾーン申請を作成

フィールド要否注記
zone string 必須 ゾーン頂点。サーバーで小文字に変換されます。逆引きゾーンにも対応します。

DNS レコードを作成

フィールド要否注記
type string 必須 A、AAAA、CNAME、MX、TXT、NS、SRV、CAA、PTR、SPF のいずれか。
host string 任意 サブドメインのみ。ゾーン頂点には空文字列または @ を使用します。
value string 必須 IP アドレス、転送先名、テキスト値などのレコード内容。
ttl integer 任意 60〜2,592,000 秒。既定値は 3,600 です。
priority integer 任意 MX と SRV では必須で、他の種別では無視されます。

DNS レコードを更新

フィールド要否注記
host string 任意 置換後のサブドメイン。
value string 任意 現在のレコードと統合した後に空にはできません。
ttl integer 任意 60〜2,592,000 秒。
priority integer 任意 MX と SRV にだけ使用します。
PATCH ではレコード種別を変更できません。種別を変更するにはレコードを削除して別のものを作成してください。

ゾーンを一覧表示

curl -H "Authorization: Bearer $CNF_TOKEN" \
  https://api.c.nf/v1/dns/zones

ゾーンを申請

curl -X POST https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone":"example.com"}'

ゾーンを確認

curl -X POST https://api.c.nf/v1/dns/zones/example.com/verify \
  -H "Authorization: Bearer $CNF_TOKEN"

レコードを作成

curl -X POST https://api.c.nf/v1/dns/zones/example.com/records \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"A","host":"api","value":"192.0.2.10"}'

クイックスタート

  1. dns:write を持つ API キーを アカウント → API キーで作成し、表示されたときにコピーします。
  2. 端末上の保護された環境変数にトークンを保存します。
  3. GET /v1/account/me を呼び出し、トークンとそのスコープを確認します。
  4. ゾーンを申請します。即時、TXT、旧 NS のどの方式で確認するかは応答に示されます。
  5. 必要な場合は返された DNS 証明を完了し、確認エンドポイントを呼び出します。
  6. 申請の確認後にだけ、レコードの作成、読み取り、更新、削除を行います。

変更履歴

v1.1.0 — ゾーン管理

  • 即時確認と TXT 確認を含む、API ベースのゾーン申請を追加しました。
  • 単一ゾーンの状態取得と、べき等な確認エンドポイントを追加しました。
  • レコードを暗黙に削除しない申請取り消しを追加しました。
  • ゾーン一覧に確認済み、保留中、すべての絞り込みを追加しました。

v1.0.0 — 初回リリース

  • Bearer トークン認証とユーザーごとのゾーン分離を追加しました。
  • 読み取り・書き込みスコープを追加しました。
  • アカウント、ゾーン一覧、レコード管理のエンドポイントを追加しました。
  • リクエスト識別子を含む一貫した応答エンベロープを追加しました。