🔮 Scry.bet
Developer API · v1

Build on Scry.bet

A simple REST API for live 5-minute prediction markets on 300+ assets. Read live odds, place trades, and stream events over WebSocket. Free for personal projects — get an API key below.

Authentication

Pass your key in the X-API-Key header (or as Authorization: Bearer YOUR_KEY). Public market endpoints do not require auth — only trading and account endpoints do.

Loading…

Endpoints

GET/api/v1/market/currentPublic

Active round details, including LMSR state and live odds.

Example request
curl https://scry.bet/api/v1/market/current
Example response
{
  "round": {
    "id": "ckxxx...",
    "asset": "BTCUSDT",
    "assetName": "Bitcoin",
    "strikePrice": 67234.12,
    "endsAt": "2026-04-30T18:05:00.000Z",
    "qYes": 1234.5,
    "qNo": 982.1,
    "odds": { "yes": 0.57, "no": 0.43 }
  }
}
GET/api/v1/market/historyPublic

Last 20 settled rounds with resolution and closing price.

Example request
curl https://scry.bet/api/v1/market/history
Example response
{
  "rounds": [
    {
      "id": "ckxxx...",
      "asset": "BTCUSDT",
      "strikePrice": 67100.00,
      "closingPrice": 67234.12,
      "resolution": "YES",
      "settledAt": "2026-04-30T18:00:00.000Z"
    }
  ],
  "count": 20
}
GET/api/v1/market/assetsPublic

Top moving assets from the live scanner with 5-min change.

Example request
curl https://scry.bet/api/v1/market/assets
Example response
{
  "assets": [
    {
      "symbol": "BTCUSDT",
      "displaySymbol": "BTC",
      "name": "Bitcoin",
      "price": 67234.12,
      "change5m": 0.42,
      "change1h": 1.18,
      "direction": "up"
    }
  ],
  "count": 20
}
GET/api/v1/market/oddsPublic

Just the live YES/NO prices for the active round.

Example request
curl https://scry.bet/api/v1/market/odds
Example response
{
  "odds": {
    "roundId": "ckxxx...",
    "yes": 0.57,
    "no": 0.43,
    "impliedYesPercent": 57,
    "impliedNoPercent": 43,
    "endsAt": "2026-04-30T18:05:00.000Z"
  }
}
POST/api/v1/trade/buyAuth required

Place a market-buy on the active round. Costs balance + 2% fee.

Request body
{ "side": "YES" | "NO", "amount": 10.0 }
Example request
curl -X POST https://scry.bet/api/v1/trade/buy \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"side":"YES","amount":10}'
Example response
{
  "roundId": "ckxxx...",
  "side": "YES",
  "action": "buy",
  "shares": 17.42,
  "netCost": 10.20,
  "priceYes": 0.591,
  "priceNo": 0.409,
  "balance": 989.80
}
GET/api/v1/accountAuth required

Your balance, lifetime stats, and any open position on the active round.

Example request
curl https://scry.bet/api/v1/account \
  -H "X-API-Key: YOUR_KEY"
Example response
{
  "account": {
    "userId": "ckxxx...",
    "username": "alice",
    "balance": 989.80,
    "stats": {
      "totalBets": 42,
      "totalWins": 23,
      "totalLosses": 19,
      "winRate": 0.547,
      "currentStreak": 3,
      "bestStreak": 7
    },
    "positions": [
      {
        "roundId": "ckxxx...",
        "yesShares": 17.42,
        "noShares": 0,
        "totalCost": 10.0,
        "currentValue": 10.30,
        "unrealizedPnl": 0.30
      }
    ]
  }
}

WebSocket (real-time)

Connect to wss://scry.bet via socket.io for live odds, bet, and round events. Join the market room to receive broadcasts.

import { io } from 'socket.io-client';

const socket = io('wss://scry.bet');
socket.emit('joinMarket');

socket.on('oddsUpdate', ({ priceYes, priceNo }) => { /* ... */ });
socket.on('betPlaced', ({ user, side, usd, ts }) => { /* ... */ });
socket.on('roundSettled', ({ resolution, closingPrice }) => { /* ... */ });

Errors

All errors return { "error": "..." } with a non-2xx status. Common: 401 missing/invalid key, 402 insufficient balance, 404 no active round, 409 round not active, 429 rate-limited.