Аутентификация

Все запросы к API требуют аутентификации. Передавайте ваш API-ключ одним из способов:

Заголовок X-API-Key

curl -H "X-API-Key: fns_ваш_ключ" \
  https://freens.ru/api/v1/domains

Bearer-токен

curl -H "Authorization: Bearer fns_ваш_ключ" \
  https://freens.ru/api/v1/domains

API-ключ можно создать на странице API-ключи. Ключ показывается только один раз при создании — сохраните его.

Формат ответов

Все ответы возвращаются в формате JSON. При ошибке возвращается объект с полем error:

{"error": "Domain not found"}

Домены

GET /api/v1/domains Список ваших доменов
curl -H "X-API-Key: fns_..." https://freens.ru/api/v1/domains
Пример ответа
{
  "domains": [
    {
      "id": 1,
      "user_id": 1,
      "name": "example.com",
      "is_active": true,
      "serial": 3,
      "created_at": "2026-01-15T12:00:00Z",
      "updated_at": "2026-01-15T14:30:00Z"
    }
  ]
}
POST /api/v1/domains Добавить домен
curl -X POST -H "X-API-Key: fns_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "example.com"}' \
  https://freens.ru/api/v1/domains
Пример ответа (201)
{
  "domain": {
    "id": 2,
    "user_id": 1,
    "name": "example.com",
    "is_active": true,
    "serial": 1,
    "created_at": "2026-02-18T12:00:00Z",
    "updated_at": "2026-02-18T12:00:00Z"
  }
}
GET /api/v1/domains/{id} Домен и его записи
curl -H "X-API-Key: fns_..." https://freens.ru/api/v1/domains/1
DELETE /api/v1/domains/{id} Удалить домен
curl -X DELETE -H "X-API-Key: fns_..." \
  https://freens.ru/api/v1/domains/1

DNS-записи

Поддерживаемые типы: A, AAAA, CNAME, MX, TXT, NS, SRV

GET /api/v1/domains/{id}/records Список записей
curl -H "X-API-Key: fns_..." \
  https://freens.ru/api/v1/domains/1/records
Пример ответа
{
  "records": [
    {
      "id": 1,
      "domain_id": 1,
      "name": "@",
      "type": "A",
      "content": "93.184.216.34",
      "ttl": 3600,
      "created_at": "2026-01-15T12:00:00Z",
      "updated_at": "2026-01-15T12:00:00Z"
    },
    {
      "id": 2,
      "domain_id": 1,
      "name": "@",
      "type": "MX",
      "content": "mail.example.com",
      "ttl": 3600,
      "priority": 10,
      "created_at": "2026-01-15T12:05:00Z",
      "updated_at": "2026-01-15T12:05:00Z"
    }
  ]
}
POST /api/v1/domains/{id}/records Создать запись
curl -X POST -H "X-API-Key: fns_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "@", "type": "A", "content": "93.184.216.34", "ttl": 3600}' \
  https://freens.ru/api/v1/domains/1/records
Поля запроса
ПолеТипОбязательноеОписание
namestringнетИмя записи. По умолчанию @ (корень домена)
typestringдаA, AAAA, CNAME, MX, TXT, NS, SRV
contentstringдаЗначение записи (IP, домен и т.д.)
ttlnumberнетTTL в секундах, 60–86400. По умолчанию 3600
prioritynumberнетПриоритет (для MX и SRV)
PUT /api/v1/domains/{id}/records/{recordId} Обновить запись
curl -X PUT -H "X-API-Key: fns_..." \
  -H "Content-Type: application/json" \
  -d '{"content": "1.2.3.4"}' \
  https://freens.ru/api/v1/domains/1/records/1

Можно передать только изменяемые поля — остальные сохранятся.

DELETE /api/v1/domains/{id}/records/{recordId} Удалить запись
curl -X DELETE -H "X-API-Key: fns_..." \
  https://freens.ru/api/v1/domains/1/records/1

Dynamic DNS (DDNS)

FreeNS поддерживает DynDNS-совместимый протокол. Работает с большинством DDNS-клиентов (ddclient, Fritz!Box, роутеры и т.д.).

GET /nic/update?hostname=...&myip=... Обновить IP

Аутентификация через HTTP Basic Auth. Логин — префикс DDNS-токена, пароль — полный токен.

curl -u "префикс_токена:полный_токен" \
  "https://freens.ru/nic/update?hostname=sub.example.com&myip=1.2.3.4"
Коды ответов
ОтветОписание
good 1.2.3.4IP успешно обновлён
nochg 1.2.3.4IP не изменился
nohostЗапись не найдена
badauthНеверная аутентификация
notfqdnНекорректное имя хоста
badipНекорректный IP-адрес

Настройка ddclient

protocol=dyndns2
server=https://freens.ru
login=префикс_токена
password='полный_токен'
sub.example.com

Коды ошибок HTTP

КодОписание
200Успешный запрос
201Ресурс создан
400Некорректный запрос (невалидные данные)
401Аутентификация не пройдена
403Доступ запрещён (лимит исчерпан)
404Ресурс не найден
409Конфликт (домен уже существует)
500Внутренняя ошибка сервера