CNF API · v1
Один API для c.nf: зоны и записи 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 — Используется для оспариваемой заявки. Добавьте возвращённое значение 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 |
Общедоступный | Курсы валют к базовой валюте, обновляются каждый час. |
| 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 |
Убрать файл из кеша границы сейчас. |
Пересылка SMS
Сообщения с телефона и ключи, которые их пропускают.
| Метод | Путь | Область доступа | Назначение |
|---|---|---|---|
| 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 |
Удалить сайт вместе с файлами. |
Развёртывания
Ваши развёрнутые формы, вебхуки и короткие ссылки.
| Метод | Путь | Область доступа | Назначение |
|---|---|---|---|
| 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 |
Регистрационные сведения о домене. |
Для ИИ-агентов
Направьте агента на /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"}'Быстрый старт
- Создайте ключ API с областью
dns:writeна странице Учётная запись → Ключи API и скопируйте его при показе. - Сохраните токен в защищённой переменной среды на своём компьютере.
- Вызовите
GET /v1/account/me, чтобы проверить токен и его области доступа. - Заявите права на зону. В ответе будет указано, требуется ли мгновенное подтверждение, подтверждение TXT или устаревшее подтверждение NS.
- Если требуется DNS-доказательство, выполните возвращённые инструкции, затем вызовите эндпоинт подтверждения.
- Создавайте, читайте, обновляйте и удаляйте записи только после подтверждения заявки.
Журнал изменений
v1.1.0 — управление зонами
- Добавлены заявки на зоны через API, включая мгновенное подтверждение и подтверждение TXT.
- Добавлены эндпоинты статуса одной зоны и идемпотентного подтверждения.
- Добавлен отзыв заявки без неявного удаления записей.
- В список зон добавлены фильтры подтверждённых, ожидающих и всех заявок.
v1.0.0 — первый выпуск
- Добавлена аутентификация по Bearer-токену и изоляция зон по пользователям.
- Добавлены области доступа для чтения и записи.
- Добавлены эндпоинты учётной записи, списка зон и управления записями.
- Добавлена единообразная оболочка ответа с идентификатором запроса.