TurtleGuard
docs · rest api

REST API

TurtleGuard API доступен по адресу https://turtleguard.cloud/api/v1. Все ответы и тела запросов — JSON. Аутентификация — Bearer JWT в заголовке Authorization.

01

Авторизация

Получите токен через email/password:

curl -X POST https://turtleguard.cloud/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"you@example.com","password":"…","captcha_token":"…"}'

В ответе: access_token, refresh_token. Используйте в дальнейших запросах:

curl https://turtleguard.cloud/api/v1/auth/me \
  -H 'Authorization: Bearer <access_token>'

Когда access_token истекает (по умолчанию ~1 час), обновите его через POST /auth/refresh с refresh_token.

02

Публичные эндпоинты

  • GET /api/v1/plans — список тарифных планов.
  • GET /api/v1/addons — каталог add-ons (DNS Proxy, CDN).
  • GET /api/v1/status — состояние систем + последние инциденты. Используется на статус-странице.
  • POST /api/v1/auth/register, /auth/login, /auth/forgot-password, /auth/reset-password — auth-операции.
  • POST /api/v1/contact — форма заявки с лендинга.
03

Юзер-эндпоинты (auth required)

Аккаунт

  • GET /auth/me — текущий пользователь + активная подписка.
  • POST /auth/2fa/setup → /auth/2fa/enable → /auth/2fa/disable — TOTP.
  • POST /auth/change-password.

Подписки и биллинг

  • GET /subscriptions — все подписки текущего юзера с hostname-доменом.
  • POST /billing/order — заказ услуги. Поле trial: true создаёт триал-подписку без списания (раз на аккаунт).
  • POST /billing/top-up — пополнение баланса через Platega.

Add-ons

  • GET /subscriptions/{subId}/addons — купленные add-ons + entitlements.
  • POST /subscriptions/{subId}/addons {key, auto_renew} — подключить. Списывает monthly_price с баланса. HTTP 402 если средств не хватает.
  • DELETE /subscriptions/{subId}/addons/{key} — отключить.

Домены

  • GET /domains — список ваших доменов с флагами WAF / CDN / DNS.
  • GET /domains/{id}/service — детали домена, подписка, entitlements, addons.
  • PATCH /domains/{id}/settings — настройки. HTTP 402 если включаете WAF/CDN без entitlement.
  • POST /domains/{id}/verify-dns — проверить, прописана ли A-запись.
  • GET /domains/{id}/dns-instructions — инструкции по подключению DNS.

DNS-менеджер

  • GET /domains/{id}/dns — зона: NS-серверы, режим, записи.
  • POST /domains/{id}/dns/records {type, name, content, ttl, priority?, proxied?}
  • PATCH /domains/{id}/dns/records/{recordId} — обновить.
  • DELETE /domains/{id}/dns/records/{recordId} — удалить.

Proxy-флаг: proxied: true работает только для A / AAAA / CNAME и требует entitlement (план Standart+ или add-on dns_proxy). Без entitlement сервер возвращает HTTP 402.

WAF / Subdomains / Origins / Redirects

  • GET/POST/DELETE /domains/{id}/rules — WAF-правила.
  • GET/POST/DELETE /domains/{id}/subdomains
  • GET/POST/DELETE /domains/{id}/origins
  • GET/POST/DELETE /domains/{id}/redirects
04

Коды ответов

  • 200 — успех с телом
  • 201 — создание
  • 204 — успех без тела (например, DELETE)
  • 400 — невалидное тело
  • 401 — не залогинен / истёкший токен
  • 402 — entitlement нужен (WAF/CDN/Proxy не в плане) или баланс не хватает
  • 403 — нет прав (роль пользователя)
  • 404 — не найдено
  • 429 — rate limit
  • 5xx — серверная ошибка
05

Rate-limits

Анонимные запросы — 60 RPS на IP. Авторизованные — 600 RPS на токен. Превышение возвращает 429 с заголовком Retry-After.

OpenAPI-схема (machine-readable) будет опубликована отдельно на /api/v1/openapi.json после стабилизации эндпоинтов.