API Documentation
Публичные endpoint'ы CHM Finance. Все ответы в JSON. Rate-limit: 300 запросов / 15 минут на IP.
Базовый URL
https://chmup.top/api
Все запросы должны использовать HTTPS. HTTP запросы получают 301-редирект.
Авторизация
Публичные endpoints (/api/public/*, /api/health*) не требуют токена.
Приватные endpoints ожидают JWT в заголовке:
Authorization: Bearer <access_token>
Access-токен получается через /api/auth/login и живёт 15 минут. Обновляется через /api/auth/refresh.
Health checks
GET /api/health
Liveness probe. Возвращает 200 пока процесс жив.
{
"status": "ok",
"timestamp": "2026-04-20T10:00:00.000Z",
"version": "3.0.0"
}
GET /api/health/deep
Readiness probe. Проверяет БД, воркеры. Возвращает 503 при деградации.
{
"status": "ok",
"version": "3.0.0",
"uptimeSeconds": 86400,
"memoryMb": 128,
"subsystems": {
"database": { "ok": true, "userCount": 42 },
"scanner": { "ok": true },
"partialTp": { "ok": true },
"slVerifier": { "ok": true }
}
}
Публичный Leaderboard
GET /api/public/leaderboard
Топ трейдеров по закрытым сделкам. Только opted-in пользователи (users.public_profile=1).
Query-параметры:
- • period — 7d | 30d | 90d | 1y | all (default: 30d)
- • sort — pnl | roi | winrate | sharpe (default: pnl)
- • limit — 1..200 (default: 50)
Пример:
curl https://chmup.top/api/public/leaderboard?period=30d&sort=pnl&limit=10
Ответ:
{
"period": "30d",
"sort": "pnl",
"traders": [{
"rank": 1,
"displayName": "Trader#A1B2",
"referralCode": "A1B2C3D4",
"closedTrades": 47,
"wins": 34,
"losses": 13,
"winRate": 0.7234,
"totalPnl": 3180.50,
"roi": 12.45,
"sharpe": null
}]
}
Примечания: winrate / sharpe сортировки требуют минимум 10 закрытых сделок.
Публичный профиль
GET /api/public/u/:code
Публичная статистика трейдера по его referral-коду. Возвращает 404 для приватных профилей.
Путь-параметры:
- • code — referral-код (4–12 символов, A-Z0-9), case-insensitiverequired
Пример:
curl https://chmup.top/api/public/u/A1B2C3D4
Ответ:
{
"displayName": "Алексей К.",
"referralCode": "A1B2C3D4",
"joinedAt": "2025-11-01T12:00:00.000Z",
"stats": {
"closedTrades": 47,
"wins": 34,
"losses": 13,
"winRate": 0.7234,
"totalPnl": 3180.50,
"meanPnlPct": 2.1
},
"byStrategy": [
{ "strategy": "smc", "trades": 30, "pnl": 2500, "winRate": 0.8 }
],
"recent": [
{ "symbol": "BTC/USDT", "side": "long", "strategy": "smc", "pnlPct": 3.4, "closedAt": "..." }
]
}
Ошибки
Все ошибки следуют единому формату:
{
"error": "Validation failed",
"code": "VALIDATION_ERROR",
"issues": [{ "path": "email", "message": "Invalid email" }]
}
| HTTP | Код | Значение |
|---|---|---|
| 400 | VALIDATION_ERROR | Неверные параметры запроса |
| 401 | UNAUTHORIZED | Отсутствует / невалидный токен |
| 403 | FORBIDDEN | Нет доступа к ресурсу |
| 404 | NOT_FOUND | Ресурс не найден |
| 429 | RATE_LIMITED | Превышен лимит запросов |
| 500 | INTERNAL_ERROR | Внутренняя ошибка сервера |
Rate limits
Глобально: 300 запросов / 15 мин на IP на всё /api/*.
При превышении — 429 с заголовками RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
Для high-volume интеграций — напишите в support@chmup.top.