CHM.

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-параметры:

  • period7d | 30d | 90d | 1y | all (default: 30d)
  • sortpnl | 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КодЗначение
400VALIDATION_ERRORНеверные параметры запроса
401UNAUTHORIZEDОтсутствует / невалидный токен
403FORBIDDENНет доступа к ресурсу
404NOT_FOUNDРесурс не найден
429RATE_LIMITEDПревышен лимит запросов
500INTERNAL_ERRORВнутренняя ошибка сервера

Rate limits

Глобально: 300 запросов / 15 мин на IP на всё /api/*.

При превышении — 429 с заголовками RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.

Для high-volume интеграций — напишите в support@chmup.top.

Вопросы? support@chmup.top · Версия API: v3