Skip to main content

Архитектура

Bedolaga предоставляет единый FastAPI-сервер на порту 8080 с тремя областями API:
ОбластьПрефиксАвторизацияНазначение
Web API/X-API-KeyПрограммное администрирование бота
Cabinet API/cabinet/*JWT BearerЛичный кабинет пользователя
Cabinet Admin API/cabinet/admin/*JWT Bearer (admin)Управление через веб-кабинет

Авторизация

Web API — API Key

Все эндпоинты Web API требуют ключ в заголовке:
curl -H "X-API-Key: YOUR_TOKEN" https://your-domain.com/users
Ключ создаётся через админ-панель бота или через API: POST /tokens.

Cabinet API — JWT

Cabinet использует JWT-токены (HS256):
curl -H "Authorization: Bearer ACCESS_TOKEN" https://your-domain.com/cabinet/subscription
Получение токена:
  • Telegram WebApp: POST /cabinet/auth/telegram — передать initData
  • Telegram Widget: POST /cabinet/auth/telegram/widget — данные виджета
  • Email: POST /cabinet/auth/email/login — email + пароль
Обновление: POST /cabinet/auth/refresh с refresh-токеном.

Cabinet Admin API

Те же JWT-токены, но пользователь должен быть в списке администраторов (ADMIN_IDS или ADMIN_EMAILS).

Статистика API

528

Эндпоинтов

780

Pydantic-схем

73

Групп (тегов)

По областям

ОбластьЭндпоинтовГрупп
Web API~30032
Cabinet User~11216
Cabinet Admin~24025

Быстрый старт

Health Check

curl https://your-domain.com/health

Получить список пользователей

curl -H "X-API-Key: YOUR_TOKEN" \
  "https://your-domain.com/users?page=1&per_page=20"

Создать подписку

curl -X POST -H "X-API-Key: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"user_id": 123, "period_days": 30, "traffic_limit_gb": 100}' \
  https://your-domain.com/subscriptions

WebSocket

Два WebSocket-эндпоинта для real-time обновлений:
ПутьАвторизацияНазначение
/ws?token=API_KEYAPI KeyДашборд админ-панели
/cabinet/ws?token=JWTJWTУведомления Cabinet

Документация на сервере

При включённом IS_DOCS_ENABLED=true доступны:
  • Swagger UI: https://your-domain.com/docs
  • ReDoc: https://your-domain.com/redoc
  • OpenAPI JSON: https://your-domain.com/openapi.json
В продакшене рекомендуется отключить документацию: IS_DOCS_ENABLED=false