API Документация

REST API Noema

Публичная документация REST API сайта Noema. Базовый URL: /api. Все ответы в формате JSON. Для защищённых эндпоинтов передайте JWT-токен через query-параметр token  или заголовок Authorization: Bearer <token>.

20
Эндпоинтов
4
Групп
GETPOSTPUTPATCHDELETEкликните на эндпоинт чтобы раскрыть детали

Получить ссылку для входа через Discord

Возвращает OAuth-ссылку для авторизации через Discord. Поддерживает параметр return_to — путь, на который вернётся пользователь после входа.

GET/api/auth/login

Параметры

return_toquerystring

Относительный путь для редиректа после авторизации (например, /users)

Ответ

{ "url": "https://discord.com/api/oauth2/authorize?..." }

OAuth-коллбек Discord

Обрабатывает ответ Discord после авторизации: создаёт или обновляет профиль, выдаёт JWT и перенаправляет на фронтенд.

GET/api/auth/callback

Параметры

coderequiredquerystring

Временный код от Discord

staterequiredquerystring

Base64-объект с return_to, origin и nonce; nonce сверяется с httpOnly cookie

Ответ

Redirect → /auth/callback?return_to=<path>. Токен в URL не передаётся: backend кладёт одноразовый handoff-токен в httpOnly cookie.

Обмен handoff-cookie на access-токен

Вызывается фронтендом один раз на /auth/callback. Читает одноразовую httpOnly cookie, выданную коллбеком, и возвращает JWT. Cookie гасится при первом обмене, поэтому повторный вызов вернёт 401.

POST/api/auth/session

Ответ

{ access_token: string, token_type: "bearer" }

Информация о текущем пользователе

Возвращает полный профиль авторизованного пользователя.

GET/api/auth/me
Требует авторизации. Передайте query-параметр token=<JWT> или заголовок Authorization: Bearer <JWT>.

Параметры

Authorizationrequiredheaderstring

Bearer <JWT>

Ответ

User { id, discord_id, username, global_name, avatar, email, is_admin, is_on_server, ... }

Выход

GET/api/auth/logout

Ответ

{ "message": "Logged out successfully" }

Список пользователей

Публичный список участников с поиском по нику. Включает статус в Discord, роли и текущую игровую активность.

GET/api/users/

Параметры

qquerystring

Поиск по username

limitqueryinteger

Количество (1–200, default: 50)

Ответ

UserPublic[] { discord_id, username, global_name, avatar, roles[], status, playing, game }

Мой профиль

GET/api/users/me
Требует авторизации. Передайте query-параметр token=<JWT> или заголовок Authorization: Bearer <JWT>.

Ответ

User (полная схема)

Обновить свой профиль

Обновляет публичные поля профиля. Доступно только участникам сервера.

PUT/api/users/me
Требует авторизации. Передайте query-параметр token=<JWT> или заголовок Authorization: Bearer <JWT>.

Параметры

bioJSON bodystring

Описание профиля

minecraft_nickJSON bodystring

Ник в Minecraft (для стенда)

short_statusJSON bodystring

Короткий статус на стенде

stand_textureJSON bodystring|null

URL фоновой текстуры стенда

stand_texture_scaleJSON bodynumber|null

Масштаб текстуры

stand_texture_rotateJSON bodynumber|null

Угол поворота текстуры

stand_texture_scroll_xJSON bodynumber|null

Горизонтальный сдвиг текстуры

stand_texture_scroll_yJSON bodynumber|null

Вертикальный сдвиг текстуры

Ответ

User

Очистить стенд

Сбрасывает minecraft_nick, short_status и все параметры текстуры стенда.

DELETE/api/users/me/stand
Требует авторизации. Передайте query-параметр token=<JWT> или заголовок Authorization: Bearer <JWT>.

Ответ

User

Подробный профиль пользователя

Расширенный публичный профиль: базовая информация, дата вступления, пригласитель, список приглашённых пользователей, игровая активность за неделю, голосовой канал.

GET/api/users/public/{discord_id}/details

Параметры

discord_idrequiredpathstring

Discord snowflake ID (строка)

Ответ

{ user, joined_at, referral_code, invited_by, invited_users[], weekly_games[], voice_channel }

Стенд игроков

Список участников сервера с Minecraft-никами. Включает days_on_server и параметры кастомной текстуры стенда.

GET/api/users/stand

Параметры

limitqueryinteger

Лимит (default: 100)

Ответ

StandUser[] { discord_id, username, avatar, minecraft_nick, short_status, stand_texture, days_on_server }

Информация о Discord-сервере

Последний снапшот сервера: иконка, количество участников, онлайн-участники с их ролями и статусами. Кешируется на 30 секунд.

GET/api/analytics/server-info

Ответ

{ guild_id, name, icon_url, member_count, online_count, in_game_count, online_members[], in_game_members[], last_updated }

Сводка для главной страницы

Возвращает общее количество вступивших и время последнего обновления данных.

GET/api/analytics/summary

Ответ

{ total_joined: number, last_updated: ISO datetime | null }

Игровая активность за неделю

Агрегирует игровые сессии за 7 дней: список игр с игроками, суммарным временем и превью-изображением.

GET/api/analytics/weekly-games

Ответ

{ window: "week", last_updated, items: [{ game, preview_url, total_minutes, players[] }] }

Живой снапшот каналов сервера

Каналы Discord, сгруппированные по категориям. Голосовые каналы содержат список присутствующих участников.

GET/api/analytics/channels-live

Параметры

include_hiddenqueryboolean

Включить скрытые каналы (default: false)

Ответ

{ categories[], uncategorized[], stats: { total, text, voice }, last_updated }

Последнее вступление на сервер

Информация о последнем вступившем участнике: аватар, статус, текущая игра.

GET/api/analytics/latest-join

Параметры

usernamequerystring

Поиск по имени пользователя

Ответ

{ invitee_discord_id, inviter_discord_id, joined_at, username, display_name, avatar_url, status, game }

Статистика реферальной ссылки

Публичная статистика конкретного реферального кода.

GET/api/analytics/referral/{code}

Параметры

coderequiredpathstring

Реферальный код

Ответ

{ code, username, clicks, joins, conversion_rate, browser_breakdown, os_breakdown, device_breakdown, invited_users[] }

Иконки игр

Маппинг названий игр на иконки, используемые в галерее.

GET/api/analytics/game-icons-json

Ответ

{ [game_name]: { name, icon, type } }

Трекинг посещения страницы

Записывает аналитическое посещение: устройство, браузер, ОС, реферальный код. Вызывается автоматически при переходе на страницы сайта.

POST/api/analytics/track

Параметры

pagerequiredJSON bodystring

Путь страницы (напр. /users)

referral_codeJSON bodystring|null

Реферальный код

screen_resolutionJSON bodystring

1920x1080

languageJSON bodystring

Язык браузера

timezoneJSON bodystring

Часовой пояс

Ответ

{ "status": "tracked", "analytics_id": 42 }

Отправить баг-репорт или предложение

Принимает multipart/form-data. Лимит: 10 репортов в час. К репорту можно прикрепить скриншоты и видео.

POST/api/reports
Требует авторизации. Передайте query-параметр token=<JWT> или заголовок Authorization: Bearer <JWT>.

Параметры

report_typerequiredform-datastring

"bug" | "suggestion" | "other"

priorityform-datastring

"low" | "medium" | "high" | "critical" (default: medium)

titlerequiredform-datastring

Заголовок

descriptionrequiredform-datastring

Подробное описание

page_urlform-datastring

URL страницы с проблемой

filesform-dataFile[]

До 5 файлов: .png/.jpg/.jpeg/.gif/.webp/.mp4/.webm, макс. 10 МБ каждый

Ответ

BugReport { id, report_type, title, description, status, priority, attachments[], created_at }

Документация актуальна для публичной части API. Некоторые служебные эндпоинты не включены в этот список.