OREStats

OREStats API v1

Endpoints de pago bajo /api/v1/*. Todos requieren Authorization: Bearer ore_…. Suscríbete en /pricing.

Suscribirse vía API

  1. POST /api/v1/subscribe con { ownerPubkey } — el servidor devuelve un nonce único + cantidad de ORE.
  2. Envía la cantidad priceOre de ORE del paso 1 a la dirección de tesorería (devuelta en la misma respuesta), adjuntando el nonce como una instrucción SPL Memo.
  3. PUT /api/v1/subscribe con { nonce, txSig, ownerPubkey } — el servidor verifica en cadena, activa la suscripción y devuelve tu clave API.
  4. Usa Authorization: Bearer ore_… como cabecera en todas las llamadas a /api/v1/*.

Detalles del pago

Cartera de tesorería: A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZF
ORE mint: oreoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp
Red: Solana mainnet-beta
GET/api/v1/pricingpúblico

propósito: Precio actual (en ORE) para un mes de acceso. El precio escala a medida que se suman suscriptores — la respuesta también te dice el siguiente umbral y el precio más allá.

respuesta:
{
  "activeSubs": 17,
  "oreNow": 0.1,
  "nextThreshold": 100,
  "oreAtNextThreshold": 0.2,
  "treasury": "...",
  "oreMint": "..."
}
POST/api/v1/subscribepúblico

propósito: Paso 1 de la suscripción. Devuelve una instrucción única de transferencia SPL (memo + cantidad) que debes firmar con la cartera propietaria y difundir en Solana.

parámetros:
  • ownerPubkeyPubkey de Solana en base58 que será propietaria de la clave API
cuerpo de la solicitud:
{ "ownerPubkey": "..." }
respuesta:
{
  "nonce": "ore-pay-...",
  "priceOre": 0.1,
  "instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
  "expiresAt": "..."
}
PUT/api/v1/subscribepúblico

propósito: Paso 2 de la suscripción. Tras confirmar la transferencia SPL, envía la firma de la tx para emitir tu clave API. La clave en texto plano se muestra UNA SOLA VEZ.

parámetros:
  • noncevalor devuelto por POST /subscribe
  • txSigfirma de transferencia SPL confirmada que lleva el memo del paso 1
  • ownerPubkeydebe coincidir con la cartera que pagó (y que se pasó en POST)
cuerpo de la solicitud:
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }
respuesta:
{
  "apiKey": "ore_xxx (shown ONCE)",
  "subscriberId": "sub_...",
  "paidUntil": "..."
}
GET/api/v1/livepago (Bearer)

propósito: Snapshot de la ronda actual — qué contiene cada casilla en este momento, segundos restantes y resultado de la ronda anterior. Barato; se puede sondear cada 1-2 s sin problema.

respuesta:
snapshot de la ronda actual (deployed, count, secondsLeft, prevRound)
GET/api/v1/streampago (Bearer)

propósito: Feed SSE de /live. Envía un nuevo snapshot cada vez que cambia la cuenta de board o round en cadena. Reconecta cuando quieras — el siguiente evento siempre es el estado más reciente.

respuesta:
server-sent events; envía un snapshot en cada cambio de la cuenta de board / round en cadena
GET/api/v1/statspago (Bearer)

propósito: Estadísticas agregadas de la cuadrícula: chi-cuadrado sobre aciertos acumulados, conteo de aciertos & SOL desplegado por casilla, total de SOL desplegado de toda la historia, margen efectivo de la casa.

respuesta:
agregado (chi-cuadrado, perGrid, totalDeployedSol, effectiveHouseEdge)
GET/api/v1/rounds?limit=100pago (Bearer)

propósito: Últimas N rondas indexadas, las más nuevas primero. Úsalo para ingesta por lotes; para alertas de baja latencia de nuevas rondas usa /events/stream.

parámetros:
  • limitnúmero de rondas a devolver; por defecto 100, máximo 10000
respuesta:
últimas N rondas indexadas (id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings)
GET/api/v1/rounds/{id}pago (Bearer)

propósito: Detalle de una sola ronda con ids prev/next para recorrer el historial con cursor.

parámetros:
  • idid de la ronda (segmento de la ruta)
respuesta:
ronda única + ids prev/next
GET/api/v1/grid/{n}?limit=200pago (Bearer)

propósito: Estadísticas por casilla más la serie reciente de aciertos/fallos (1 = acierto, 0 = fallo) para renderizar gráficos.

parámetros:
  • níndice de la casilla 0..24 (segmento de la ruta)
  • limitlongitud de la serie; por defecto 200
respuesta:
estadística por casilla + serie reciente de aciertos/fallos (1 ≤ n ≤ 25)
GET/api/v1/events?since=N&limit=M&kind=Xpago (Bearer)

propósito: Registro de eventos sondeable. Incluye drought-broken, big-round, tier-crossing, milestones, cambios de suscripción. Recupera eventos más nuevos que el cursor `since`.

parámetros:
  • sincecursor de id; solo se devuelven eventos con id > since
  • limitmáximo de eventos por llamada; por defecto 100
  • kindfiltro opcional: drought_broken | big_round | tier | milestone | subscription
respuesta:
{
  "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 },
    ...
  ]
}
GET/api/v1/events/stream?since=N&kind=Xpago (Bearer)

propósito: Feed SSE del mismo registro que /events. Reproduce los últimos 50 eventos (o eventos desde el cursor) al conectar, y luego envía cada nuevo evento en vivo.

parámetros:
  • sincecursor opcional de replay; si se omite, reproduce los últimos 50
  • kindfiltro opcional (mismo conjunto que /events)
respuesta:
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).
GET/api/v1/dump?from=X&to=Y&limit=10000pago (Bearer)

propósito: Exportación histórica masiva — paginación por todas las rondas indexadas mediante los cursores `from` / `nextFrom`. Úsalo para arrancar tu propia base de datos, luego cambia a /events/stream para actualizaciones incrementales.

parámetros:
  • fromid de ronda inicial (inclusive)
  • toid de ronda final opcional (inclusive)
  • limittamaño de página; por defecto 5000, máximo 10000
respuesta:
{
  "count": 5000,
  "from": 228237,
  "to": 233236,
  "hasMore": true,
  "nextFrom": 233237,
  "rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}
POST/api/v1/reissuepúblico

propósito: Paso 1 de la rotación de clave API. Devuelve un mensaje que debes firmar con la cartera dueña de la suscripción activa.

parámetros:
  • ownerPubkeycartera que se suscribió originalmente
cuerpo de la solicitud:
{ "ownerPubkey": "..." }
respuesta:
{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }
PUT/api/v1/reissuepúblico

propósito: Paso 2 de la rotación. Envía la firma de la cartera; la clave antigua se revoca inmediatamente y se devuelve una nueva (también mostrada UNA SOLA VEZ).

parámetros:
  • noncevalor devuelto por POST /reissue
  • ownerPubkeymisma cartera que en POST
  • signatureBase64firma ed25519 del mensaje codificada en base64
cuerpo de la solicitud:
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }
respuesta:
{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }

Strategy Lab

Construye, haz backtest y forward-test de estrategias parametrizadas. Los endpoints create / backtest / analytics comparten una misma forma de DSL — consulta la referencia de valores al final de esta sección.

POST/api/v1/lab/strategiespago (Bearer)

propósito: Crea una estrategia. Una vez activa, OREStats registra automáticamente una predicción de paper-trading para cada nueva ronda y expone estadísticas de forward-test.

parámetros:
  • nameetiqueta de visualización, cadena no vacía
  • dslStrategy DSL completo — base_strategy, params, filters[] opcionales. Ver referencia de valores abajo.
cuerpo de la solicitud:
{
  "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 }
    ]
  }
}
respuesta:
{
  "strategy": {
    "id": "...", "owner": "...", "name": "...",
    "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
    "createdAt": "...", "updatedAt": "...", "active": true
  }
}
GET/api/v1/lab/strategiespago (Bearer)

propósito: Lista tus estrategias propias con estadísticas en vivo de forward-test (rondas liquidadas, número de victorias, ROI sobre resultados reales de rondas).

respuesta:
{
  "count": 3,
  "strategies": [
    {
      "id": "...", "name": "...", "dsl": { ... }, "active": true,
      "stats": { "roundsSettled": 412, "roundsWon": 88, "netProfitSol": 0.123, "roiPercent": 4.7 }
    },
    ...
  ]
}
GET/api/v1/lab/strategies/{id}pago (Bearer)

propósito: Obtén una sola estrategia tuya, con su número de predicciones.

parámetros:
  • idid de la estrategia (segmento de la ruta)
respuesta:
{ "strategy": { ... }, "predictionCount": 412 }
PATCH/api/v1/lab/strategies/{id}pago (Bearer)

propósito: Renombra una estrategia o alterna su flag de actividad. Las estrategias inactivas dejan de predecir nuevas rondas pero conservan su historial.

parámetros:
  • namenuevo nombre de visualización (opcional)
  • activetrue para reanudar predicciones, false para pausarlas (opcional)
cuerpo de la solicitud:
{ "name": "renamed", "active": false }
respuesta:
{ "strategy": { ... } }
DELETE/api/v1/lab/strategies/{id}pago (Bearer)

propósito: Elimina por completo una estrategia tuya. Todas las predicciones vinculadas se borran; la entrada de la clasificación (si la hubiera) desaparece.

parámetros:
  • idid de la estrategia (segmento de la ruta)
respuesta:
{ "ok": true }
GET/api/v1/lab/strategies/{id}/forwardpago (Bearer)

propósito: Estadísticas de forward-test para una estrategia: SOL neto, ROI, tasa de victoria, curva de equity, drawdown máximo, mayor racha de pérdidas, rondas pendientes sin liquidar.

parámetros:
  • idid de la estrategia (segmento de la ruta)
respuesta:
{
  "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
}
POST/api/v1/lab/backtestpago (Bearer)

propósito: Reproduce un DSL contra las rondas históricas indexadas. Devuelve el BacktestResult completo, incluyendo PnL por ronda, contribución por casilla, curva de equity y motivo de salida temprana.

parámetros:
  • dslStrategy DSL (misma forma que en create)
  • fromRoundIdlímite inferior inclusivo opcional de la ventana de replay
  • toRoundIdlímite superior inclusivo opcional
cuerpo de la solicitud:
{
  "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
  "fromRoundId": 200000,
  "toRoundId": 247000
}
respuesta:
{
  "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":    [...]
  }
}
POST/api/v1/lab/analyticspago (Bearer)

propósito: Paquete de analítica pesado — intervalos de confianza Monte Carlo más cuatro backtests anidados sobre barridos de parámetros. Espera 3-6 s en la primera llamada, sub-segundo con caché caliente. La clave de caché es el DSL.

parámetros:
  • dslStrategy DSL (misma forma que en backtest)
cuerpo de la solicitud:
{ "dsl": { ... } }
respuesta:
{ "analytics": { ... } }
GET/api/v1/lab/leaderboardpúblico

propósito: Lista pública de mejores estrategias. Solo se expone ROI / tamaño muestral; el DSL queda oculto hasta que un suscriptor consulta el endpoint de detalle.

respuesta:
{
  "generatedAt": "...",
  "minRoundsToQualify": 1000,
  "count": 14,
  "entries": [
    { "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
    ...
  ]
}
GET/api/v1/lab/leaderboard/{id}pago (Bearer)

propósito: DSL completo de una entrada de la clasificación, más su resumen de forward-test y curva de equity. Restringido a suscriptores — los usuarios públicos solo ven el ROI principal.

parámetros:
  • idid de la estrategia (segmento de la ruta)
respuesta:
{
  "strategy": {
    "id": "...", "name": "...", "ownerShort": "abcd...wxyz",
    "dsl": { ... },
    "createdAt": "..."
  },
  "forwardTest": {
    "roundsSettled": ...,
    "netProfitSol": ...,
    "equityCurve": [{ "round": ..., "balanceLamports": ... }, ...]
  }
}

Strategy DSL — valores aceptados

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 < , <= , > , >= , ==

rangos numéricos de params.* (el servidor recorta valores fuera de rango):
  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

cuotas:
  max 100 strategies per account

Límites y uso justo

  • Por clave API: 5 req/s (ráfaga 60). 429 con Retry-After en caso de exceso.
  • La clave API en la cabecera es texto plano de un solo uso: guárdala — solo se conserva el hash.
  • Compartir claves es detectable (IPs concurrentes) y puede provocar revocación.
  • Los endpoints del panel (/api/live*) requieren sesión de navegador + coincidencia de Origin — no son para uso programático.