CNF API · v1
面向 c.nf 的一套 API:DNS 区域与记录、个人文件、软件包、已保存的凭据、域名查询,以及若干完全不需要账号的公共工具。任何需要认证的操作,都只作用于发起调用的那把密钥所属的账号。
概览
第 1 版提供你通过 DNS 管理认领之区域的 DNS 操作。请在 账户 → 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"
令牌会以单向哈希形式存储,完整值只在建立时显示。如果丢失令牌,请撤销并另行建立。
每个令牌都带有范围。未设置范围的令牌默认获得 dns:read。写入范围也允许读取。
| 范围 | 允许操作 |
|---|---|
dns:read |
列出区域及记录,并读取个别记录。 |
dns:write |
读取、建立、更新及删除 DNS 记录与区域认领。 |
* |
所有范围。只在确实需要时使用。 |
范围不符时会返回 403 forbidden_scope,并包含 required_scopes 及 token_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 认领区域时,服务器会选择以下其中一种流程:
-
即时验证(
method: "auto") — 在没有其他账户认领该区域时使用。认领会立即通过验证。只有拥有者在注册商处将权威 NS 委派指向返回的域名服务器后,记录才会生效。 -
TXT 验证 — 用于有争议的认领。请在
_cnfdns-verify.<zone>新增返回的 TXT 值,然后调用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 |
公开 | 相对某一基准货币的汇率,每小时刷新。 |
| 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"}'快速开始
- 建立具有
dns:write的 API 密钥;请前往账户 → API 密钥,并在密钥显示时复制。 - 将令牌存储在你设备上受保护的环境变量中。
- 调用
GET /v1/account/me,确认令牌及其范围。 - 认领区域。响应会说明验证是即时完成、使用 TXT,还是使用旧版 NS 方式。
- 如有需要,完成返回的 DNS 证明,然后调用验证端点。
- 认领通过验证后,才可建立、读取、更新或删除记录。
变更记录
v1.1.0 — 区域管理
- 新增以 API 认领区域,包括即时及 TXT 验证流程。
- 新增单个区域状态及幂等验证端点。
- 新增撤销认领功能,而不会一并删除记录。
- 在区域清单新增已验证、待处理及全部筛选器。
v1.0.0 — 首次发布
- 新增 Bearer 令牌身份验证及按用户隔离区域。
- 新增读取及写入范围。
- 新增账户、区域清单及记录管理端点。
- 新增包含请求识别码的一致响应封装。