Skip to main content

REST API Endpoints

Complete reference for all REST API endpoints.

Markets

Get Current Market

Returns the active trading market.

GET /markets/current

Response:

{
  "success": true,
  "data": {
    "id": "market_1234567",
    "marketId": "1234567",
    "pythFeed": "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
    "settlementMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tStart": 1704067200,
    "tEnd": 1704068100,
    "startPrice": "68543210000",
    "startPriceConf": "12345000",
    "startPriceExpo": -8,
    "endPrice": null,
    "outcome": null,
    "totalYesShares": "150000000000",
    "totalNoShares": "120000000000",
    "totalCollateral": "270000000000",
    "totalVolume": "500000000000",
    "state": "TRADING",
    "bestBid": 5800,
    "bestAsk": 6000,
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T00:05:00Z"
  }
}

Get Market by ID

GET /markets/:marketId

Parameters:

NameTypeDescription
marketIdstringMarket epoch ID

Response: Same as current market.

List Markets

GET /markets

Query Parameters:

NameTypeDefaultDescription
statestring-Filter by state
pythFeedstring-Filter by oracle
fromnumber-Start timestamp
tonumber-End timestamp
limitnumber20Items per page
cursorstring-Pagination cursor

Example:

GET /markets?state=RESOLVED&limit=10

Response:

{
  "success": true,
  "data": [
    {
      "id": "market_1234566",
      "marketId": "1234566",
      "state": "RESOLVED",
      "outcome": "UP",
      ...
    },
    ...
  ],
  "pagination": {
    "hasMore": true,
    "nextCursor": "eyJpZCI6MTIzNDU2NX0"
  }
}

Get Market Statistics

GET /markets/:marketId/stats

Response:

{
  "success": true,
  "data": {
    "marketId": "1234567",
    "totalTrades": 342,
    "totalVolume": "500000000000",
    "uniqueTraders": 87,
    "avgTradeSize": "1461988304",
    "priceHistory": [
      { "timestamp": 1704067200, "midPrice": 5500 },
      { "timestamp": 1704067260, "midPrice": 5600 },
      ...
    ]
  }
}

Order Book

Get Order Book

GET /orderbook/:marketId

Query Parameters:

NameTypeDefaultDescription
depthnumber10Number of price levels

Response:

{
  "success": true,
  "data": {
    "marketId": "1234567",
    "bestBid": 5800,
    "bestAsk": 6000,
    "spread": 200,
    "bids": [
      { "price": 5800, "quantity": "10000000000", "orders": 3 },
      { "price": 5700, "quantity": "25000000000", "orders": 5 },
      ...
    ],
    "asks": [
      { "price": 6000, "quantity": "5000000000", "orders": 2 },
      { "price": 6100, "quantity": "12000000000", "orders": 3 },
      ...
    ],
    "timestamp": 1704067500
  }
}

Get Order Book Orders

GET /orderbook/:marketId/orders

Query Parameters:

NameTypeDescription
sidestringbid or ask
ownerstringFilter by owner address

Response:

{
  "success": true,
  "data": {
    "orders": [
      {
        "orderId": "123456789",
        "owner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
        "side": "BuyYes",
        "priceBps": 5800,
        "quantity": "5000000000",
        "originalQuantity": "10000000000",
        "timestamp": 1704067300,
        "isActive": true
      },
      ...
    ]
  }
}

Positions

Get Position

GET /positions/:marketId/:owner

Parameters:

NameTypeDescription
marketIdstringMarket epoch ID
ownerstringWallet address

Response:

{
  "success": true,
  "data": {
    "market": "1234567",
    "owner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
    "yesShares": "100000000000",
    "noShares": "50000000000",
    "lockedYesShares": "20000000000",
    "lockedNoShares": "0",
    "collateralDeposited": "90000000000",
    "collateralLocked": "12000000000",
    "settled": false,
    "payout": "0",
    "totalBought": "150000000000",
    "totalSold": "0",
    "totalFeesPaid": "450000000",
    "totalRebatesEarned": "50000000",
    "orderCount": 2,
    "createdAt": "2024-01-01T00:02:00Z",
    "updatedAt": "2024-01-01T00:05:00Z"
  }
}

List User Positions

GET /positions/:owner

Query Parameters:

NameTypeDefaultDescription
statestring-Filter by market state
settledboolean-Filter by settlement
limitnumber20Items per page

Response:

{
  "success": true,
  "data": [
    {
      "market": "1234567",
      "marketState": "TRADING",
      "yesShares": "100000000000",
      "noShares": "50000000000",
      ...
    },
    ...
  ],
  "pagination": {
    "hasMore": false
  }
}

Get Position Summary

GET /positions/:owner/summary

Response:

{
  "success": true,
  "data": {
    "owner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
    "totalPositions": 15,
    "activePositions": 2,
    "settledPositions": 13,
    "totalPayout": "1250000000000",
    "totalDeposited": "1000000000000",
    "netProfit": "250000000000",
    "winRate": 0.692,
    "avgPositionSize": "83333333333"
  }
}

Trades

List Market Trades

GET /trades/:marketId

Query Parameters:

NameTypeDefaultDescription
fromnumber-Start timestamp
tonumber-End timestamp
sidestring-Filter by side
limitnumber50Items per page

Response:

{
  "success": true,
  "data": [
    {
      "id": "trade_abc123",
      "marketId": "1234567",
      "takerOrderId": "123456789",
      "makerOrderId": "123456788",
      "taker": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
      "maker": "8yLYtg3CW87d97TXJSDpbD5jBkheTqA83TZRuJosgBsV",
      "side": "BuyYes",
      "priceBps": 5800,
      "quantity": "5000000000",
      "takerFee": "17400000",
      "makerRebate": "5800000",
      "timestamp": 1704067500,
      "signature": "5wHu..."
    },
    ...
  ]
}

List User Trades

GET /trades/user/:owner

Query Parameters:

NameTypeDescription
marketIdstringFilter by market
rolestringtaker or maker
limitnumberItems per page

Oracle

Get Oracle Price

GET /oracle/:pythFeed

Response:

{
  "success": true,
  "data": {
    "feed": "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
    "price": "68543210000",
    "confidence": "12345000",
    "exponent": -8,
    "publishTime": 1704067500,
    "priceFormatted": "68543.21",
    "confidenceFormatted": "12.345"
  }
}

Get Oracle History

GET /oracle/:pythFeed/history

Query Parameters:

NameTypeDefaultDescription
fromnumber-Start timestamp
tonumber-End timestamp
intervalstring1m1m, 5m, 15m, 1h

Response:

{
  "success": true,
  "data": {
    "feed": "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
    "candles": [
      {
        "timestamp": 1704067200,
        "open": "68500000000",
        "high": "68600000000",
        "low": "68400000000",
        "close": "68550000000"
      },
      ...
    ]
  }
}

Protocol

Get Protocol Config

GET /protocol/config

Response:

{
  "success": true,
  "data": {
    "programId": "SeesawProgramId...",
    "authority": "AuthorityPubkey...",
    "treasury": "TreasuryPubkey...",
    "defaultSettlementMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "takerFeeBps": 30,
    "makerRebateBps": 10,
    "crankRewardLamports": "1000000",
    "tickSizeBps": 100,
    "marketsCreated": 12567,
    "totalVolume": "15000000000000000"
  }
}

Get Protocol Stats

GET /protocol/stats

Query Parameters:

NameTypeDefaultDescription
periodstring24h1h, 24h, 7d, 30d

Response:

{
  "success": true,
  "data": {
    "period": "24h",
    "marketsCreated": 96,
    "marketsResolved": 96,
    "totalVolume": "50000000000000",
    "totalTrades": 15423,
    "uniqueTraders": 892,
    "avgMarketVolume": "520833333333",
    "upOutcomes": 52,
    "downOutcomes": 44
  }
}

Health

Health Check

GET /health

Response:

{
  "success": true,
  "data": {
    "status": "healthy",
    "version": "1.0.0",
    "indexerLag": 2,
    "lastBlockIndexed": 250000000,
    "uptime": 86400
  }
}

Next Steps