## DNS 服务商 (`dns-providers`)

仅管理员。保存 DNS 服务商账号(阿里云、Cloudflare 等);保存前在线校验凭据,凭据只回末 4 位提示。

鉴权: 仅管理员 · 文档: https://www-demo.kuxitong.com/zh/docs/api/dns-providers

### GET `/api/v2/dns-providers`

列出DNS 服务商 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `sort` | string |  | 排序字段,逗号分隔,前缀 `-` 表示降序,如 `-created_at,id`。 |
| `type` | string |  | 只列该服务商类型(如 aliyun)。 |

```sh
curl "https://panel.example.com/api/v2/dns-providers" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/dns-providers`

创建DNS 服务商 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `auth_id` | string |  | 凭据 ID(阿里云 AccessKey ID、DNSPod Token ID 或腾讯云 SecretId、Cloudflare 邮箱;Cloudflare API Token 时为空)。 |
| `auth_key` | string |  | 凭据(AccessKey Secret / Token / SecretKey / API Key);创建必填,修改时不给或为空 = 沿用原值。库内加密保存。 |
| `expected_updated_at` | string |  | 乐观锁(修改时用):调用方读到的该资源 updated_at。与库里当前值不等则回 409 stale_version、不保存;不带则不检查;创建时忽略。 |
| `gateway` | string |  | 自建 API 网关地址(只有 dnsdun 用)。 |
| `name` | string | 有 | 名称 |
| `remark` | string |  | 备注 |
| `ttl` | integer |  | 本账号下记录的默认 TTL(秒)。 |
| `type` | string | 有 | 服务商类型:aliyun、cloudflare、dnspod_cn、dnspod_com;dns_la、dnsdotcom、dnsdun。 |

```sh
curl -X POST "https://panel.example.com/api/v2/dns-providers" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"auth_id":"LTAI-example","auth_key":"${DNS_AUTH_KEY}","name":"main-aliyun","ttl":120,"type":"aliyun"}'
```

### GET `/api/v2/dns-providers/{id}`

获取DNS 服务商 · 鉴权: 仅管理员

```sh
curl "https://panel.example.com/api/v2/dns-providers/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/dns-providers/{id}`

修改DNS 服务商 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `auth_id` | string |  | 凭据 ID(阿里云 AccessKey ID、DNSPod Token ID 或腾讯云 SecretId、Cloudflare 邮箱;Cloudflare API Token 时为空)。 |
| `auth_key` | string |  | 凭据(AccessKey Secret / Token / SecretKey / API Key);创建必填,修改时不给或为空 = 沿用原值。库内加密保存。 |
| `expected_updated_at` | string |  | 乐观锁(修改时用):调用方读到的该资源 updated_at。与库里当前值不等则回 409 stale_version、不保存;不带则不检查;创建时忽略。 |
| `gateway` | string |  | 自建 API 网关地址(只有 dnsdun 用)。 |
| `name` | string | 有 | 名称 |
| `remark` | string |  | 备注 |
| `ttl` | integer |  | 本账号下记录的默认 TTL(秒)。 |
| `type` | string | 有 | 服务商类型:aliyun、cloudflare、dnspod_cn、dnspod_com;dns_la、dnsdotcom、dnsdun。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/dns-providers/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"auth_id":"LTAI-example","auth_key":"${DNS_AUTH_KEY}","name":"main-aliyun","ttl":120,"type":"aliyun"}'
```

### DELETE `/api/v2/dns-providers/{id}`

删除DNS 服务商 · 鉴权: 仅管理员

```sh
curl -X DELETE "https://panel.example.com/api/v2/dns-providers/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/dns-providers/{id}/lines`

拉取DNS 服务商线路 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `domain` | string | 有 | 根域,如 example.com。 |

```sh
curl "https://panel.example.com/api/v2/dns-providers/{id}/lines" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

DNS 服务商对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `auth_id` | string |  | 凭据 ID(阿里云 AccessKey ID、DNSPod Token ID 或腾讯云 SecretId、Cloudflare 邮箱;Cloudflare API Token 时为空)。 |
| `auth_key` | string |  | 凭据(AccessKey Secret / Token / SecretKey / API Key);创建必填,修改时不给或为空 = 沿用原值。库内加密保存。 |
| `auth_key_hint` | string |  | 凭据末 4 位(前面以 * 补齐),不回原文。 |
| `created_at` | string |  | 创建时间 (只读) |
| `default_line` | string |  | 该服务商默认线路的 id。 |
| `expected_updated_at` | string |  | 乐观锁(修改时用):调用方读到的该资源 updated_at。与库里当前值不等则回 409 stale_version、不保存;不带则不检查;创建时忽略。 |
| `gateway` | string |  | 自建 API 网关地址(只有 dnsdun 用)。 |
| `id` | integer |  | 记录 ID (只读) |
| `items` | DnsLine[] |  | 本页条目 |
| `lines` | DnsLine[] |  | 最近一次拉取的线路树缓存(GET /dns-providers/{id}/lines 刷新);未拉取为空数组。 |
| `name` | string |  | 名称 |
| `remark` | string |  | 备注 |
| `ttl` | integer |  | 本账号下记录的默认 TTL(秒)。 |
| `type` | string |  | 服务商类型:aliyun、cloudflare、dnspod_cn、dnspod_com;dns_la、dnsdotcom、dnsdun。 |
| `updated_at` | string |  | 更新时间 (只读) |
