Skip to content

API: Домены

Эндпоинты для работы с кастомными доменами. Авторизация: Bearer JWT, Telegram initData или API-токен.

Список доменов

http
GET /api/domains

Ответ:

json
{
  "data": [
    {
      "id": 1,
      "domain": "brand.link",
      "status": "verified",
      "cname_target": "links.tgio.app",
      "is_default": 1,
      "is_active": 1,
      "verified_at": "2026-04-10T12:00:00.000Z",
      "last_check_at": "2026-04-10T03:00:00.000Z",
      "check_error": null,
      "created_at": "2026-04-09T10:00:00.000Z",
      "updated_at": "2026-04-10T12:00:00.000Z"
    }
  ],
  "count": 1
}

Добавить домен

http
POST /api/domains
Content-Type: application/json

{
  "domain": "brand.link",
  "is_default": true
}
ПолеТипОбязательноеОписание
domainstringДомен без протокола (макс. 253 сим.)
is_defaultbooleanИспользовать как домен по умолчанию

Ответ: объект домена со статусом pending.

Ошибки:

КодПричина
400Некорректный формат домена
400Домен tgio.app, tg.io — запрещён
400Домен уже зарегистрирован
403Превышен лимит доменов для вашего тарифа

Обновить домен

http
PUT /api/domains/:id
Content-Type: application/json

{
  "is_default": true
}
ПолеТипОписание
is_defaultbooleanСделать доменом по умолчанию
is_activebooleanВключить/выключить домен

Проверить DNS

http
POST /api/domains/:id/verify

Инициирует немедленную проверку CNAME-записи. Возвращает обновлённый объект домена.

Ответ:

json
{
  "id": 1,
  "domain": "brand.link",
  "status": "verified",
  "verified_at": "2026-04-10T12:00:00.000Z",
  "last_check_at": "2026-04-10T12:00:00.000Z",
  "check_error": null
}

Статус домена

http
GET /api/domains/:id/status

Ответ:

json
{
  "id": 1,
  "domain": "brand.link",
  "status": "verified",
  "check_error": null,
  "last_check_at": "2026-04-10T03:00:00.000Z",
  "verified_at": "2026-04-10T12:00:00.000Z"
}

Удалить домен

http
DELETE /api/domains/:id

Ответ: { "ok": true }

У ссылок, привязанных к удалённому домену, domain_id обнулится. Они продолжат работать через tgio.app.

Создание ссылки с кастомным доменом

При создании ссылки передайте domain_id:

http
POST /api/links
Content-Type: application/json

{
  "url": "https://example.com",
  "domain_id": 1
}

В ответе trackingUrl будет содержать кастомный домен:

json
{
  "id": 42,
  "code": "x7k2m1",
  "trackingUrl": "https://brand.link/x7k2m1"
}

Если domain_id не передан, но у пользователя есть домен по умолчанию — он подставляется автоматически.

Telegram-аналитика для тех, кто понимает