CNF API · v1

c.nf 而設嘅一套 API:DNS 區域同紀錄、個人檔案、套件、已儲存嘅憑證、網域查詢,同埋幾個完全唔使帳戶嘅公共工具。凡係需要驗證嘅操作,都只會作用喺發出呼叫嘅嗰條密鑰所屬嘅帳戶。

概覽

第 1 版提供你透過 DNS 管理認領之區域的 DNS 操作。請在 帳戶 → API 密鑰下建立及撤銷權杖。

信任邊界與控制台相同。 API 使用控制台的已驗證區域擁有權檢查。控制台帳戶可用的區域也可供 API 密鑰使用;其他區域均傳回 403 forbidden_zone
如需機器可讀的端點目錄,請請求 GET /v1?format=json,或將 Accept: application/json 傳送至 /v1

基礎 URL 及版本管理

https://api.c.nf/v1

所有端點均位於 /v1 之下。破壞相容性的變更會使用新的主要版本路徑。v1 可新增向後相容的欄位及端點,並會記錄於變更記錄。

身份驗證及範圍

每項讀取或更改帳戶資料的請求都必須包含 Bearer 權杖。權杖以 cnf_ 開頭,後接 32 個十六進制字元。

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

權杖會以單向雜湊形式儲存,完整值只在建立時顯示。如果遺失權杖,請撤銷並另行建立。

只使用 Authorization 標頭。 不接受基本身份驗證及查詢字串權杖。URL 中的權杖可能會透過記錄、Referrer 標頭及瀏覽器記錄外洩。

每個權杖都帶有範圍。未設定範圍的權杖預設獲得 dns:read。寫入範圍亦允許讀取。

範圍允許操作
dns:read 列出區域及記錄,並讀取個別記錄。
dns:write 讀取、建立、更新及刪除 DNS 記錄與區域認領。
* 所有範圍。只在確實需要時使用。

範圍不符時會傳回 403 forbidden_scope,並包含 required_scopestoken_scopes 以供診斷。

按用戶隔離

每個 Bearer 權杖只會對應一個 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 驗證 — 用於有爭議的認領。請在 _cnfdns-verify.<zone> 新增傳回的 TXT 值,然後呼叫 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 公開 相對某基準貨幣嘅匯率,每小時更新。
GET /v1/public/hash 公開 用 SHA-256 或其他支援嘅演算法計算字串雜湊。

帳戶

權杖屬於邊個,以及佢可以做啲乜。

方法路徑範圍用途
GET /v1/account/me 任何權杖 權杖所屬帳戶、佢嘅範圍,以及開放到嘅端點。
GET /v1/account/sessions account:read 目前登入本帳戶嘅所有瀏覽器工作階段。
POST /v1/account/sessions/revoke account:write 登出其中一個工作階段。
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 單一區域;如果仲未驗證,會一併提供驗證步驟。
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 單一檔案;如果有分享連結會一併回傳。
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 將各塊組合成一個檔案。

CDN

你分享嘅檔案嘅邊緣快取同流量。

方法路徑範圍用途
GET /v1/cdn/stats cdn:read 你分享檔案嘅快取設定同請求次數。
POST /v1/cdn/config cdn:write 設定邊緣保留檔案幾耐,或者停止分發。
POST /v1/cdn/purge cdn:write 即刻將檔案由邊緣快取移除。

短訊轉發

由手機轉發過嚟嘅訊息,同埋放行佢嘅金鑰。

方法路徑範圍用途
GET /v1/sms/messages sms:read 轉發到你帳戶嘅訊息。
GET /v1/sms/keys sms:read sms:write 裝置用緊嘅轉發金鑰。
POST /v1/sms/keys sms:write 簽發一條轉發金鑰,最多五條。
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 按註冊局紀錄更新一個網域。

套件

發佈版本,並讀取版本同下載次數。

方法路徑範圍用途
GET /v1/packages packages:read packages:write 你嘅套件,連版本數同下載總數。
GET /v1/packages/{slug} packages:read packages:write 單一套件,連所有版本同構件。
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 係畀爬蟲睇嘅索引。四者都由同本頁一樣嘅路由表生成,所以唔會描述唔存在嘅端點。

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 — 區域管理

  • 新增以 API 認領區域,包括即時及 TXT 驗證流程。
  • 新增單一區域狀態及冪等驗證端點。
  • 新增撤銷認領功能,而不會一併刪除記錄。
  • 在區域清單新增已驗證、待處理及全部篩選器。

v1.0.0 — 首次發佈

  • 新增 Bearer 權杖身份驗證及按用戶隔離區域。
  • 新增讀取及寫入範圍。
  • 新增帳戶、區域清單及記錄管理端點。
  • 新增包含請求識別碼的一致回應封裝。