CNF API · v1
c.nf のための単一の API です。DNS のゾーンとレコード、個人のファイル、パッケージ、保存した認証情報、ドメイン照会、そしてアカウント不要の公開ユーティリティを扱います。認証を伴う操作は、呼び出しに使われた鍵の持ち主のアカウントに限定されます。
概要
バージョン 1 は、DNS 管理から申請したゾーンの DNS 操作を提供します。トークンの作成と無効化はアカウント → API キーで行います。
403 forbidden_zone が返されます。GET /v1?format=json をリクエストするか、/v1 に Accept: 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"
トークンは一方向ハッシュとして保存され、完全な値は作成時にだけ表示されます。紛失した場合は無効化して、別のトークンを作成してください。
各トークンにはスコープがあります。スコープ未設定のトークンには、既定で dns:read が与えられます。書き込みスコープでは読み取りも可能です。
| スコープ | 許可される操作 |
|---|---|
dns:read |
ゾーンとレコードの一覧、および個別レコードの読み取り。 |
dns:write |
DNS レコードとゾーン申請の読み取り、作成、更新、削除。 |
* |
すべてのスコープ。本当に必要な場合だけ使用してください。 |
不一致の場合は 403 forbidden_scope が返され、診断用に required_scopes と token_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 でゾーンを申請すると、サーバーは次のいずれかの経路を選択します:
-
即時確認(
method: "auto") — 他のアカウントがゾーンを申請していない場合に使用します。申請は直ちに確認されます。保存したレコードが権威を持つのは、所有者がレジストラで NS 委任を返されたネームサーバーに向けた後だけです。 -
TXT による確認 — 競合する申請に使用します。返された TXT 値を
_cnfdns-verify.<zone>に追加してから、POST /v1/dns/zones/{zone}/verifyを呼び出します。 -
旧 NS 確認 — 以前の保留中申請では
verify_method: "ns"を使用する場合があります。ゾーンの現在の NS 応答と、想定されるネームサーバー集合を比較します。
in-addr.arpa と ip6.arpa にも同じモデルを適用します。ゾーンを申請して expected_ns を取得し、関連レジストリにその委任先を提出してください。確認はべき等です。確認済みの申請に対して繰り返すと、申請を変更せずに verified: true が返されます。
レコード種別と制限
対応しているレコード種別
A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, SPF.
priority は MX と SRV では必須で、他の種別では無視されます。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"}'クイックスタート
dns:writeを持つ API キーを アカウント → API キーで作成し、表示されたときにコピーします。- 端末上の保護された環境変数にトークンを保存します。
GET /v1/account/meを呼び出し、トークンとそのスコープを確認します。- ゾーンを申請します。即時、TXT、旧 NS のどの方式で確認するかは応答に示されます。
- 必要な場合は返された DNS 証明を完了し、確認エンドポイントを呼び出します。
- 申請の確認後にだけ、レコードの作成、読み取り、更新、削除を行います。
変更履歴
v1.1.0 — ゾーン管理
- 即時確認と TXT 確認を含む、API ベースのゾーン申請を追加しました。
- 単一ゾーンの状態取得と、べき等な確認エンドポイントを追加しました。
- レコードを暗黙に削除しない申請取り消しを追加しました。
- ゾーン一覧に確認済み、保留中、すべての絞り込みを追加しました。
v1.0.0 — 初回リリース
- Bearer トークン認証とユーザーごとのゾーン分離を追加しました。
- 読み取り・書き込みスコープを追加しました。
- アカウント、ゾーン一覧、レコード管理のエンドポイントを追加しました。
- リクエスト識別子を含む一貫した応答エンベロープを追加しました。