OREStats API v1
Платные эндпоинты под /api/v1/*. Все требуют Authorization: Bearer ore_…. Подписаться: /pricing.
Подписка через API
- POST /api/v1/subscribe с
{ ownerPubkey }— сервер возвращает уникальный nonce + сумму ORE. - Отправьте сумму priceOre в ORE из шага 1 на адрес казначейства (возвращён в том же ответе), прикрепив nonce инструкцией SPL Memo.
- PUT /api/v1/subscribe с
{ nonce, txSig, ownerPubkey }— сервер проверяет on-chain, активирует подписку и возвращает ваш API-ключ. - Используйте заголовок
Authorization: Bearer ore_…во всех вызовах /api/v1/*.
Детали оплаты
A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZForeoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp/api/v1/pricingпубличныйназначение: Текущая цена (в ORE) за месяц доступа. Цена растёт по мере подключения новых подписчиков — ответ также сообщает следующий порог и цену за ним.
{
"activeSubs": 17,
"oreNow": 0.1,
"nextThreshold": 100,
"oreAtNextThreshold": 0.2,
"treasury": "...",
"oreMint": "..."
}/api/v1/subscribeпубличныйназначение: Шаг 1 подписки. Возвращает одноразовую SPL-инструкцию перевода (memo + сумма), которую нужно подписать кошельком владельца и опубликовать в Solana.
ownerPubkey— base58 Solana pubkey, который будет владеть API-ключом
{ "ownerPubkey": "..." }{
"nonce": "ore-pay-...",
"priceOre": 0.1,
"instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
"expiresAt": "..."
}/api/v1/subscribeпубличныйназначение: Шаг 2 подписки. После подтверждения SPL-перевода отправьте подпись транзакции, чтобы выпустить API-ключ. Открытый ключ показывается ОДИН раз.
nonce— значение, возвращённое из POST /subscribetxSig— подтверждённая подпись SPL-перевода, несущая memo из шага 1ownerPubkey— должен совпадать с кошельком оплаты (и переданным в POST)
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }{
"apiKey": "ore_xxx (shown ONCE)",
"subscriberId": "sub_...",
"paidUntil": "..."
}/api/v1/liveплатный (Bearer)назначение: Снимок текущего раунда — что на каждой клетке прямо сейчас, сколько секунд осталось и итог прошлого раунда. Дёшев; безопасно опрашивать раз в 1–2 с.
снимок текущего раунда (deployed, count, secondsLeft, prevRound)
/api/v1/streamплатный (Bearer)назначение: SSE-поток /live. Присылает свежий снимок всякий раз, когда меняется on-chain аккаунт board или round. Переподключайтесь когда угодно — следующее событие всегда содержит последнее состояние.
server-sent events; присылает снимок при каждом изменении on-chain аккаунта board / round
/api/v1/statsплатный (Bearer)назначение: Агрегированная статистика по сетке: хи-квадрат по накопленным попаданиям, число попаданий и размещённый SOL по клеткам, всего размещённый SOL, эффективная доля казино.
агрегаты (хи-квадрат, perGrid, totalDeployedSol, effectiveHouseEdge)
/api/v1/rounds?limit=100платный (Bearer)назначение: Последние N проиндексированных раундов, начиная с новых. Используйте для пакетной выгрузки; для алертов о новых раундах с низкой задержкой — /events/stream.
limit— число возвращаемых раундов; по умолчанию 100, максимум 10000
последние N проиндексированных раундов (id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings)
/api/v1/rounds/{id}платный (Bearer)назначение: Деталь одного раунда с id prev/next для курсорного обхода истории.
id— id раунда (сегмент пути)
один раунд + id prev/next
/api/v1/grid/{n}?limit=200платный (Bearer)назначение: Статистика по клетке плюс последний ряд попаданий/промахов (1 = попадание, 0 = промах) для построения графиков.
n— индекс клетки 0..24 (сегмент пути)limit— длина ряда; по умолчанию 200
статистика по клетке + ряд последних попаданий/промахов (1 ≤ n ≤ 25)
/api/v1/events?since=N&limit=M&kind=Xплатный (Bearer)назначение: Опрашиваемый журнал событий. Включает drought-broken, big-round, переходы тарифов, вехи, изменения подписок. Получайте события новее курсора `since`.
since— id-курсор; возвращаются только события с id > sincelimit— максимум событий за вызов; по умолчанию 100kind— опциональный фильтр: drought_broken | big_round | tier | milestone | subscription
{
"count": 12,
"lastId": 47,
"events": [
{ "id": 47, "ts": "...", "kind": "drought_broken", "grid": 8, "drought": 91, "roundId": 247101 },
{ "id": 48, "ts": "...", "kind": "big_round", "roundId": 247155, "deployedSol": 8.94, "thresholdSol": 8.15, "multiplier": 1.10, "winningSquare": 12, "totalMiners": 209 },
...
]
}/api/v1/events/stream?since=N&kind=Xплатный (Bearer)назначение: SSE-поток того же журнала, что и /events. При подключении воспроизводит последние 50 событий (или события с курсора), затем шлёт каждое новое событие вживую.
since— опциональный курсор реплея; если опущен, воспроизводит последние 50kind— опциональный фильтр (тот же набор, что у /events)
server-sent events; replays last 50 (or events since cursor) on connect, then pushes each new event as it fires (drought / streak / big round / tier / milestone / subscription).
/api/v1/dump?from=X&to=Y&limit=10000платный (Bearer)назначение: Массовая выгрузка истории — постраничный обход всех проиндексированных раундов через курсоры `from` / `nextFrom`. Используйте для первичного наполнения своей БД, затем переключайтесь на /events/stream для инкрементальных обновлений.
from— начальный id раунда (включительно)to— опциональный конечный id раунда (включительно)limit— размер страницы; по умолчанию 5000, максимум 10000
{
"count": 5000,
"from": 228237,
"to": 233236,
"hasMore": true,
"nextFrom": 233237,
"rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}/api/v1/reissueпубличныйназначение: Шаг 1 ротации API-ключа. Возвращает сообщение, которое нужно подписать кошельком — владельцем активной подписки.
ownerPubkey— кошелёк, изначально оформивший подписку
{ "ownerPubkey": "..." }{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }/api/v1/reissueпубличныйназначение: Шаг 2 ротации. Отправьте подпись кошелька; старый ключ немедленно отзывается, возвращается новый (также показан ОДИН раз).
nonce— значение, возвращённое из POST /reissueownerPubkey— тот же кошелёк, что и в POSTsignatureBase64— base64-кодированная ed25519 подпись строки сообщения
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }Strategy Lab
Создавайте, бэктестируйте и форвард-тестируйте параметризованные стратегии. Эндпоинты create / backtest / analytics используют одну форму DSL — справочник значений см. в конце раздела.
/api/v1/lab/strategiesплатный (Bearer)назначение: Создать стратегию. После активации OREStats автоматически фиксирует прогноз бумажной торговли для каждого нового раунда и выводит статистику форвард-теста.
name— отображаемое имя, непустая строкаdsl— полный Strategy DSL — base_strategy, params, опционально filters[]. См. справочник значений ниже.
{
"name": "my cold-5",
"dsl": {
"base_strategy": "cold",
"params": {
"bet_size_lamports": 200000,
"num_squares": 5,
"sizing_mode": "flat",
"max_bet_per_square_lamports": 5000000,
"tx_fee_lamports": 10000
},
"filters": [
{ "metric": "current_drought_min", "op": ">=", "value": 30 }
]
}
}{
"strategy": {
"id": "...", "owner": "...", "name": "...",
"dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
"createdAt": "...", "updatedAt": "...", "active": true
}
}/api/v1/lab/strategiesплатный (Bearer)назначение: Список ваших стратегий с live-статистикой форвард-теста (число расчётных раундов, число побед, ROI по реальным исходам раундов).
{
"count": 3,
"strategies": [
{
"id": "...", "name": "...", "dsl": { ... }, "active": true,
"stats": { "roundsSettled": 412, "roundsWon": 88, "netProfitSol": 0.123, "roiPercent": 4.7 }
},
...
]
}/api/v1/lab/strategies/{id}платный (Bearer)назначение: Получить одну вашу стратегию с числом её прогнозов.
id— id стратегии (сегмент пути)
{ "strategy": { ... }, "predictionCount": 412 }/api/v1/lab/strategies/{id}платный (Bearer)назначение: Переименовать стратегию или переключить её флаг активности. Неактивные стратегии перестают предсказывать новые раунды, но их история сохраняется.
name— новое отображаемое имя (опционально)active— true — возобновить прогнозы, false — приостановить (опционально)
{ "name": "renamed", "active": false }{ "strategy": { ... } }/api/v1/lab/strategies/{id}платный (Bearer)назначение: Жёстко удалить вашу стратегию. Все связанные прогнозы удаляются; запись в рейтинге (если есть) исчезает.
id— id стратегии (сегмент пути)
{ "ok": true }/api/v1/lab/strategies/{id}/forwardплатный (Bearer)назначение: Статистика форвард-теста для одной стратегии: чистый SOL, ROI, win rate, кривая equity, max drawdown, максимальная серия поражений, ожидающие нерассчитанные раунды.
id— id стратегии (сегмент пути)
{
"strategyId": "...",
"roundsObserved": 432,
"roundsBet": 412, "roundsWon": 88,
"squaresBet": 2060, "squaresWon": 92,
"netProfitSol": 0.12, "totalStakeSol": 2.6,
"roiPercent": 4.7, "winRate": 0.21, "perSquareWinRate": 0.045,
"maxDrawdownSol": 0.08, "maxStreak": 12,
"equityCurve": [{ "round": 247001, "balanceLamports": 0 }, ...],
"pendingCount": 1
}/api/v1/lab/backtestплатный (Bearer)назначение: Прогнать DSL по проиндексированной истории раундов. Возвращает полный BacktestResult: PnL по раундам, вклад по клеткам, кривая equity и причина раннего выхода.
dsl— Strategy DSL (та же форма, что у create)fromRoundId— опциональная нижняя граница окна реплея (включительно)toRoundId— опциональная верхняя граница (включительно)
{
"dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
"fromRoundId": 200000,
"toRoundId": 247000
}{
"result": {
"totalRounds": 47000, "roundsBet": 9200, "roundsWon": 1800,
"squaresBet": 46000, "squaresWonOn": 1900,
"netProfitLamports": ..., "netProfitSol": ...,
"totalStakeLamports": ..., "totalStakeSol": ...,
"totalRecoveryLamports": ..., "totalRecoverySol": ...,
"roiPercent": ..., "winRate": ..., "perSquareWinRate": ...,
"maxStreak": ..., "capHits": ..., "totalCapLossSol": ...,
"minWalletSol": ..., "maxDrawdownSol": ...,
"rangeMin": 200000, "rangeMax": 247000,
"exitedEarly": null,
"exitRoundId": 0,
"equityCurve": [{ "round": ..., "balanceLamports": ... }, ...],
"perSquare": [{ "square": 0, "betCount": ..., "winCount": ..., "netLamports": ... }, ...],
"perRoundPnlLamports": [...],
"streakRunLengths": [...]
}
}/api/v1/lab/analyticsплатный (Bearer)назначение: Тяжёлый блок аналитики — доверительные интервалы методом Монте-Карло плюс четыре вложенных бэктеста по параметрическим свипам. Ожидайте 3–6 с на первом вызове, доли секунды при тёплом кеше. Ключ кеша — DSL.
dsl— Strategy DSL (та же форма, что у backtest)
{ "dsl": { ... } }{ "analytics": { ... } }/api/v1/lab/leaderboardпубличныйназначение: Публичный список топ-стратегий. Открыт только ROI / размер выборки; DSL скрыт, пока подписчик не откроет endpoint детали.
{
"generatedAt": "...",
"minRoundsToQualify": 1000,
"count": 14,
"entries": [
{ "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
...
]
}/api/v1/lab/leaderboard/{id}платный (Bearer)назначение: Полный DSL одной записи рейтинга, плюс сводка её форвард-теста и кривая equity. Закрыто для подписчиков — публика видит только верхнеуровневый ROI.
id— id стратегии (сегмент пути)
{
"strategy": {
"id": "...", "name": "...", "ownerShort": "abcd...wxyz",
"dsl": { ... },
"createdAt": "..."
},
"forwardTest": {
"roundsSettled": ...,
"netProfitSol": ...,
"equityCurve": [{ "round": ..., "balanceLamports": ... }, ...]
}
}Strategy DSL — допустимые значения
base_strategy — cold, spread, drought, custom_squares, hot, top_hit_rate, bottom_hit_rate, recent_winners, anti_spread, min_miners, corners, edges, center_block, diagonal_main, diagonal_anti, row, column, checkerboard, all_25
params.sizing_mode — flat, martingale, reverse_martingale, fibonacci, dalembert, kelly
filters[].metric — rounds_since_last_big, consecutive_losses, current_drought_min, current_drought_max, total_deployed_pctile, total_miners, rounds_since_big_round, chi_square_p_recent
filters[].op — < , <= , > , >= , ==
params.* числовые диапазоны (сервер обрезает значения вне диапазона): bet_size_lamports required, (0, 1e8] num_squares 1..25 drought_threshold 1..1000 custom_squares int[] in 0..24 hit_rate_lookback 50..20000 row_index, column_index 0..4 martingale_multiplier 1..10 loss_streak_threshold 1..100 dalembert_step_lamports 1..1e6 kelly_fraction 0.0001..1 kelly_bankroll_lamports >= 1 max_bet_per_square_lamports 1..1e8 tx_fee_lamports 0..1e7 stop_loss_streak 1..1000 cooldown_after_loss_rounds 0..500 take_profit_lamports >= 0 session_stop_loss_lamports >= 0 квоты: max 100 strategies per account
Лимиты и честное использование
- На API-ключ: 5 запросов/сек (burst 60). 429 с
Retry-Afterпри превышении. - API-ключ в заголовке — открытый одноразовый: сохраните его — у нас хранится только хеш.
- Шеринг ключей детектируется (одновременные IP) и может привести к отзыву.
- Эндпоинты панели (
/api/live*) требуют браузерной сессии + совпадения Origin — для программного использования не предназначены.