Admin Dashboard & Reporting Endpoints¶
Аудитория: разработчики, разработчики админских панелей Последнее обновление: 2025-11-17 Краткое содержание: Детальная документация Admin Dashboard endpoints — статистика платформы, метрики доходов, отчёты роста пользователей. Полное руководство по интеграции для админских аналитических панелей.
Обзор Endpoints¶
| Метод | Endpoint | Описание | Auth Required | Permission |
|---|---|---|---|---|
| GET | /api/admin/dashboard/stats |
Статистика платформы | ✅ Admin | dashboard:read |
| GET | /api/admin/dashboard/revenue |
Метрики доходов | ✅ Admin | dashboard:read |
| GET | /api/admin/reports/users |
Отчёт роста пользователей | ✅ Admin | reports:read |
| GET | /api/admin/reports/investments |
Отчёт инвестиций | ✅ Admin | reports:read |
GET /api/admin/dashboard/stats¶
Получить комплексную статистику платформы.
Запрос¶
Query параметры:
| Параметр | Тип | Обязательно | Описание | По умолчанию |
|---|---|---|---|---|
period |
string | ❌ Нет | Временной период: 24h, 7d, 30d, 90d, 1y, all |
30d |
Ответ¶
Успех (200 OK):
{
"success": true,
"data": {
"users": {
"total": 523,
"active": 480,
"new": 45,
"growth": 9.4
},
"investments": {
"total": 1250,
"active": 1100,
"pending": 15,
"totalValue": "8500000.00"
},
"revenue": {
"managementFees": "21250.00",
"platformRevenue": "21250.00",
"projectedAnnual": "255000.00"
},
"protocols": {
"pendle": {
"tvl": "2550000.00",
"allocation": 30
},
"curve": {
"tvl": "3400000.00",
"allocation": 40
},
"convex": {
"tvl": "2550000.00",
"allocation": 30
}
},
"performance": {
"averageAPY": 10.2,
"platformUptime": 99.95,
"avgTransactionTime": 125
}
},
"timestamp": "2025-10-03T12:34:56Z"
}
Поля ответа:
| Поле | Тип | Описание |
|---|---|---|
data.users.total |
number | Общее количество пользователей |
data.users.active |
number | Активных пользователей (с балансом > 0) |
data.users.new |
number | Новых пользователей за период |
data.users.growth |
number | Процент роста пользовательской базы |
data.investments.total |
number | Общее количество инвестиций |
data.investments.active |
number | Активных инвестиций |
data.investments.totalValue |
string | Общая стоимость всех инвестиций (SafeDecimal) |
data.revenue.managementFees |
string | Комиссии за управление (SafeDecimal) |
data.revenue.platformRevenue |
string | Общий доход платформы (SafeDecimal) |
data.revenue.projectedAnnual |
string | Прогнозируемый годовой доход (SafeDecimal) |
data.protocols[].tvl |
string | Total Value Locked в протоколе (SafeDecimal) |
data.protocols[].allocation |
number | Процент распределения капитала |
data.performance.averageAPY |
number | Средняя APY по всем стратегиям |
data.performance.platformUptime |
number | Uptime платформы в процентах |
data.performance.avgTransactionTime |
number | Среднее время обработки транзакции (миллисекунды) |
Пример cURL¶
ADMIN_TOKEN="eyJhbGciOiJIUzI1NiIs..."
curl -X GET "https://app.saga.surf/api/admin/dashboard/stats?period=30d" \
-H "Authorization: Bearer $ADMIN_TOKEN"
Пример TypeScript¶
const getPlatformStats = async (period: string = '30d') => {
const token = localStorage.getItem('saga_admin_token');
const response = await fetch(`/api/admin/dashboard/stats?period=${period}`, {
headers: {
'Authorization': `Bearer ${token}`
}
});
const { data } = await response.json();
console.log('Total Users:', data.users.total);
console.log('Active Investments:', data.investments.active);
console.log('Platform Revenue:', data.revenue.platformRevenue);
console.log('Average APY:', data.performance.averageAPY);
return data;
};
// Использование
const stats = await getPlatformStats('30d');
GET /api/admin/dashboard/revenue¶
Получить детальные метрики доходов.
Запрос¶
Query параметры:
| Параметр | Тип | Обязательно | Описание | По умолчанию |
|---|---|---|---|---|
period |
string | ❌ Нет | Временной период | 30d |
breakdown |
boolean | ❌ Нет | Включить детализацию по дням | false |
Ответ¶
Успех (200 OK):
{
"success": true,
"data": {
"summary": {
"totalRevenue": "21250.00",
"managementFees": "21250.00",
"performanceFees": "0.00",
"projectedAnnual": "255000.00",
"revenueGrowth": 12.5
},
"breakdown": [
{
"date": "2025-10-03",
"revenue": "708.33",
"managementFees": "708.33",
"userCount": 480
}
],
"byStrategy": [
{
"strategyId": "balanced-10",
"revenue": "12750.00",
"percentage": 60
},
{
"strategyId": "conservative-5",
"revenue": "6375.00",
"percentage": 30
},
{
"strategyId": "aggressive-20",
"revenue": "2125.00",
"percentage": 10
}
]
},
"timestamp": "2025-10-03T12:34:56Z"
}
Поля ответа:
| Поле | Тип | Описание |
|---|---|---|
data.summary.totalRevenue |
string | Общий доход за период (SafeDecimal) |
data.summary.managementFees |
string | Комиссии за управление (SafeDecimal) |
data.summary.performanceFees |
string | Комиссии за производительность (SafeDecimal) |
data.summary.projectedAnnual |
string | Прогнозируемый годовой доход (SafeDecimal) |
data.summary.revenueGrowth |
number | Процент роста доходов |
data.breakdown[] |
array | Детализация по дням (если breakdown=true) |
data.breakdown[].date |
string | Дата (ISO 8601) |
data.breakdown[].revenue |
string | Доход за день (SafeDecimal) |
data.breakdown[].userCount |
number | Количество активных пользователей в этот день |
data.byStrategy[] |
array | Доход по стратегиям |
data.byStrategy[].strategyId |
string | Идентификатор стратегии |
data.byStrategy[].revenue |
string | Доход от стратегии (SafeDecimal) |
data.byStrategy[].percentage |
number | Процент от общего дохода |
Пример cURL¶
ADMIN_TOKEN="eyJhbGciOiJIUzI1NiIs..."
curl -X GET "https://app.saga.surf/api/admin/dashboard/revenue?period=30d&breakdown=true" \
-H "Authorization: Bearer $ADMIN_TOKEN"
Пример TypeScript¶
const getRevenueMetrics = async (period: string = '30d', breakdown: boolean = false) => {
const token = localStorage.getItem('saga_admin_token');
const response = await fetch(
`/api/admin/dashboard/revenue?period=${period}&breakdown=${breakdown}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
const { data } = await response.json();
console.log('Total Revenue:', data.summary.totalRevenue);
console.log('Projected Annual:', data.summary.projectedAnnual);
console.log('Revenue Growth:', data.summary.revenueGrowth, '%');
// Вывести доход по стратегиям
data.byStrategy.forEach(strategy => {
console.log(`${strategy.strategyId}: ${strategy.revenue} (${strategy.percentage}%)`);
});
return data;
};
// Использование
const revenue = await getRevenueMetrics('30d', true);
GET /api/admin/reports/users¶
Сгенерировать отчёт роста пользователей.
Запрос¶
GET /api/admin/reports/users?startDate=2025-09-01&endDate=2025-10-03&interval=daily
Authorization: Bearer <admin_jwt_token>
Query параметры:
| Параметр | Тип | Обязательно | Описание | По умолчанию |
|---|---|---|---|---|
startDate |
string | ❌ Нет | Дата начала отчёта (ISO 8601) | 30 дней назад |
endDate |
string | ❌ Нет | Дата окончания отчёта (ISO 8601) | Сегодня |
interval |
string | ❌ Нет | Интервал данных: hourly, daily, weekly, monthly |
daily |
Ответ¶
Успех (200 OK):
{
"success": true,
"data": {
"period": {
"startDate": "2025-09-01T00:00:00Z",
"endDate": "2025-10-03T23:59:59Z",
"interval": "daily"
},
"summary": {
"totalUsers": 523,
"newUsers": 145,
"activeUsers": 480,
"retentionRate": 91.8,
"averageInvestmentPerUser": "16284.80"
},
"dataPoints": [
{
"date": "2025-09-01",
"totalUsers": 378,
"newUsers": 5,
"activeUsers": 350,
"churnRate": 2.1
},
{
"date": "2025-10-03",
"totalUsers": 523,
"newUsers": 8,
"activeUsers": 480,
"churnRate": 1.5
}
]
},
"timestamp": "2025-10-03T12:34:56Z"
}
Поля ответа:
| Поле | Тип | Описание |
|---|---|---|
data.period |
object | Временной период отчёта |
data.summary.totalUsers |
number | Общее количество пользователей на конец периода |
data.summary.newUsers |
number | Новых пользователей за период |
data.summary.activeUsers |
number | Активных пользователей (с балансом > 0) |
data.summary.retentionRate |
number | Процент удержания пользователей |
data.summary.averageInvestmentPerUser |
string | Средняя инвестиция на пользователя (SafeDecimal) |
data.dataPoints[] |
array | Данные по интервалам |
data.dataPoints[].date |
string | Дата точки данных (ISO 8601) |
data.dataPoints[].totalUsers |
number | Общее количество пользователей на эту дату |
data.dataPoints[].newUsers |
number | Новых пользователей в этот интервал |
data.dataPoints[].activeUsers |
number | Активных пользователей на эту дату |
data.dataPoints[].churnRate |
number | Процент оттока пользователей |
Пример cURL¶
ADMIN_TOKEN="eyJhbGciOiJIUzI1NiIs..."
curl -X GET "https://app.saga.surf/api/admin/reports/users?startDate=2025-09-01&endDate=2025-10-03&interval=daily" \
-H "Authorization: Bearer $ADMIN_TOKEN"
Пример TypeScript¶
const getUserGrowthReport = async (
startDate: string,
endDate: string,
interval: 'hourly' | 'daily' | 'weekly' | 'monthly' = 'daily'
) => {
const token = localStorage.getItem('saga_admin_token');
const response = await fetch(
`/api/admin/reports/users?startDate=${startDate}&endDate=${endDate}&interval=${interval}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
const { data } = await response.json();
console.log('Total Users:', data.summary.totalUsers);
console.log('New Users:', data.summary.newUsers);
console.log('Retention Rate:', data.summary.retentionRate, '%');
console.log('Avg Investment per User:', data.summary.averageInvestmentPerUser);
// Построить график данных
data.dataPoints.forEach(point => {
console.log(`${point.date}: ${point.totalUsers} users (${point.newUsers} new, ${point.churnRate}% churn)`);
});
return data;
};
// Использование
const report = await getUserGrowthReport('2025-09-01', '2025-10-03', 'daily');
GET /api/admin/reports/investments¶
Сгенерировать отчёт активности инвестиций.
Запрос¶
GET /api/admin/reports/investments?startDate=2025-09-01&endDate=2025-10-03
Authorization: Bearer <admin_jwt_token>
Query параметры:
| Параметр | Тип | Обязательно | Описание | По умолчанию |
|---|---|---|---|---|
startDate |
string | ❌ Нет | Дата начала отчёта (ISO 8601) | 30 дней назад |
endDate |
string | ❌ Нет | Дата окончания отчёта (ISO 8601) | Сегодня |
Ответ¶
Успех (200 OK):
{
"success": true,
"data": {
"summary": {
"totalInvestments": 1250,
"totalValue": "8500000.00",
"averageInvestment": "6800.00",
"topStrategy": "balanced-10"
},
"byStrategy": [
{
"strategyId": "balanced-10",
"count": 750,
"tvl": "5100000.00",
"averageAPY": 10.2
},
{
"strategyId": "conservative-5",
"count": 375,
"tvl": "2550000.00",
"averageAPY": 5.1
},
{
"strategyId": "aggressive-20",
"count": 125,
"tvl": "850000.00",
"averageAPY": 20.5
}
],
"trends": {
"weekOverWeek": 8.5,
"monthOverMonth": 12.3
}
},
"timestamp": "2025-10-03T12:34:56Z"
}
Поля ответа:
| Поле | Тип | Описание |
|---|---|---|
data.summary.totalInvestments |
number | Общее количество инвестиций |
data.summary.totalValue |
string | Общая стоимость всех инвестиций (SafeDecimal) |
data.summary.averageInvestment |
string | Средняя сумма инвестиции (SafeDecimal) |
data.summary.topStrategy |
string | ID наиболее популярной стратегии |
data.byStrategy[] |
array | Статистика по стратегиям |
data.byStrategy[].strategyId |
string | Идентификатор стратегии |
data.byStrategy[].count |
number | Количество инвестиций в стратегию |
data.byStrategy[].tvl |
string | Total Value Locked в стратегии (SafeDecimal) |
data.byStrategy[].averageAPY |
number | Средняя APY стратегии |
data.trends.weekOverWeek |
number | Процент роста неделя к неделе |
data.trends.monthOverMonth |
number | Процент роста месяц к месяцу |
Пример cURL¶
ADMIN_TOKEN="eyJhbGciOiJIUzI1NiIs..."
curl -X GET "https://app.saga.surf/api/admin/reports/investments?startDate=2025-09-01&endDate=2025-10-03" \
-H "Authorization: Bearer $ADMIN_TOKEN"
Пример TypeScript¶
const getInvestmentReport = async (startDate: string, endDate: string) => {
const token = localStorage.getItem('saga_admin_token');
const response = await fetch(
`/api/admin/reports/investments?startDate=${startDate}&endDate=${endDate}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
const { data } = await response.json();
console.log('Total Investments:', data.summary.totalInvestments);
console.log('Total Value:', data.summary.totalValue);
console.log('Average Investment:', data.summary.averageInvestment);
console.log('Top Strategy:', data.summary.topStrategy);
// Вывести статистику по стратегиям
data.byStrategy.forEach(strategy => {
console.log(`${strategy.strategyId}: ${strategy.count} investments, TVL: ${strategy.tvl}, APY: ${strategy.averageAPY}%`);
});
console.log('Week over Week Growth:', data.trends.weekOverWeek, '%');
console.log('Month over Month Growth:', data.trends.monthOverMonth, '%');
return data;
};
// Использование
const report = await getInvestmentReport('2025-09-01', '2025-10-03');
Связанная документация¶
Другие Admin Endpoints:
- Admin Auth - Админская аутентификация
- Admin Users - Управление пользователями
Архитектура:
📋 Метаданные¶
Версия: 2.6.268
Обновлено: 2025-10-21
Статус: Published