Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.55-tech.com/llms.txt

Use this file to discover all available pages before exploring further.

The MM engine places orders automatically based on bookmaker odds. The client API lets you monitor all trading activity, control your trading state (pause, resume, stop, start), and cancel orders. You do not place orders through this API — the engine does it for you.

Step 1: Check trading state

Confirm your API key works and see your engine’s current state:
curl -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/trading/status
Response:
{
  "client": "your-client",
  "clientName": "Your Client Name",
  "oddsFormat": "decimal",
  "status": "live",
  "tradingActive": true,
  "manualPaused": false,
  "manualStopped": false,
  "systemTradingBlocked": false,
  "emergencyActive": false,
  "systemStopped": false,
  "softPaused": false
}
Response fields:
FieldDescription
statusSummary state: live, manual_paused, manual_stopped, soft_paused, system_stopped, emergency
tradingActivetrue when the engine is actively posting orders
manualPausedtrue if you paused via POST /trading/pause
manualStoppedtrue if you stopped via POST /trading/stop
systemTradingBlockedtrue if the system is globally paused or stopped (not client-specific)

Step 2: View exchange orders

Paginated list of orders the engine has placed on exchanges. Query parameters:
ParameterRequiredDescription
fixtureIdNoFilter by fixture ID
exchangeNoFilter by exchange (polymarket, kalshi, etc.)
statusNoFilter by order status, comma-separated (e.g. PLACED,FILLED). Values: PENDING_PLACEMENT, PLACED, FILLED, FAILED, CANCELLED, EXPIRED
fromDateNoOrders created on or after this date (YYYY-MM-DD)
toDateNoOrders created on or before this date (YYYY-MM-DD)
pageNoPage number, 1-indexed (default: 1)
pageSizeNoItems per page, max 2000 (default: 50)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://mmapi.55-tech.com/api/v1/orders?exchange=polymarket&status=FILLED"
Response:
{
  "data": [
    {
      "orderId": 123,
      "fixtureId": "id1000000861624412",
      "outcomeId": 161,
      "playerId": 0,
      "exchange": "polymarket",
      "account": "0x1234...abcd",
      "exchangeOrderId": "0x1a2b3c...",
      "exchangeOutcomeId": "12345678",
      "orderStatus": "FILLED",
      "matchedStatus": "FULLY_MATCHED",
      "orderCents": 0.45,
      "orderStake": 100.0,
      "matchedStake": 100.0,
      "back": true,
      "side": "buy",
      "settlementStatus": "UNDECIDED",
      "settledAt": null,
      "bookmakerOutcomePrice": 1.808,
      "bookmakerOutcomeLimit": 5000.0,
      "bookmakerOutcomeActive": true,
      "createdAt": "2026-02-15T10:30:00Z",
      "matchedAt": "2026-02-15T10:30:05Z",
      "updatedAt": "2026-02-15T10:30:05Z"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 50,
  "totalPages": 1
}
Response fields (non-obvious only):
FieldDescription
playerIdPlayer ID for player-prop markets, 0 for non-player-prop
accountExchange account username used for this order
orderStatusPENDING_PLACEMENT, PLACED, FILLED, FAILED, CANCELLED, EXPIRED
matchedStatusNOT_MATCHED, PARTIALLY_MATCHED, or FULLY_MATCHED
orderCentsOrder price in cents (0.010.99 for prediction markets)
orderStakeAmount the engine intended to place
matchedStakeAmount actually filled on the exchange
backtrue = buy, false = sell
sideComputed string form: buy or sell (derived from back)
bookmakerOutcomePriceBookmaker decimal odds that triggered this order
bookmakerOutcomeLimitBookmaker’s available limit at time of order
bookmakerOutcomeActiveWhether the bookmaker side was active at order time
settlementStatusUNDECIDED, WON, LOST, VOID, HALF_WON, HALF_LOST
settledAtTimestamp when settlement was applied (null until settled)
updatedAtLast status-change timestamp
For only currently-resting orders (no pagination), use GET /orders/open with optional fixtureId and exchange filters.

Step 3: View hedge bets

When an order fills on an exchange, the engine automatically places a hedge bet on the bookmaker. Each bet is linked to its order via orderId. Query parameters:
ParameterRequiredDescription
orderIdNoFilter bets linked to a specific order
bookmakerNoFilter by bookmaker
statusNoBet status, comma-separated (placed, pending, declined)
fromDateNoBets created on or after this date (YYYY-MM-DD)
toDateNoBets created on or before this date (YYYY-MM-DD)
pageNoPage number (default: 1)
pageSizeNoItems per page, max 2000 (default: 50)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://mmapi.55-tech.com/api/v1/bets?orderId=123"
Response:
{
  "data": [
    {
      "betId": 456,
      "orderId": 123,
      "client": "your-client",
      "bookmaker": "vertex",
      "bookmakerBetId": "789",
      "placedPrice": 1.808,
      "placedStake": 100.0,
      "betStatus": "placed",
      "settlementStatus": "undecided",
      "placedAt": "2026-02-15T10:30:08Z"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 50,
  "totalPages": 1
}

Step 4: Check positions

Aggregated positions across all fixtures and exchanges. Query parameters:
ParameterRequiredDescription
fixtureIdNoFilter by fixture ID
exchangeNoFilter by exchange
statusNoComma-separated: open, matched, filled, cancelled, active (default: active)
fromDateNoFilter from this date (YYYY-MM-DD)
toDateNoFilter to this date (YYYY-MM-DD)
curl -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/positions
Response:
{
  "positions": [
    {
      "fixtureId": "id1000000861624412",
      "outcomeId": 161,
      "playerId": 0,
      "exchange": "polymarket",
      "orderCount": 3,
      "totalStake": 100.0,
      "matchedStake": 100.0,
      "openStake": 0.0,
      "avgPrice": 0.45
    }
  ],
  "count": 1
}
For a single rolled-up summary across every fixture, use GET /positions/summary.

Step 5: View profit & loss

Market-making P&L: spread captured between exchange fills and their bookmaker hedges. Query parameters:
ParameterRequiredDescription
fromDateNoFilter orders created on or after this date (YYYY-MM-DD)
toDateNoFilter orders created on or before this date (YYYY-MM-DD)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://mmapi.55-tech.com/api/v1/pnl?fromDate=2026-01-29&toDate=2026-02-01"
Response:
{
  "totalTurnover": 98350.00,
  "validTurnover": 72415.30,
  "netRealizedSpread": 1482.55,
  "nakedPnl": -220.10,
  "unhedgedStake": 1622.78,
  "unhedgedStakePct": 1.65,
  "avgHedgePriceDrift": 0.0042,
  "settledPairCount": 1420,
  "nakedSettledCount": 12,
  "fromDate": "2026-01-29",
  "toDate": "2026-02-01"
}
Response fields:
FieldDescription
totalTurnoverTotal stake hedged on the bookmaker side
validTurnoverRisk-adjusted turnover. A 100betat1.1contributeslessthan100 bet at 1.1 contributes less than 100 at 3.0
netRealizedSpreadP&L from settled exchange + bookmaker pairs (both legs terminal)
nakedPnlP&L from settled exchange fills that never got a successful hedge
unhedgedStakeDollar amount of matched exchange stake with no successful hedge
unhedgedStakePctPercentage of matched exchange stake with no successful hedge
avgHedgePriceDriftStake-weighted average hedge slippage (decimal-odds points)
settledPairCountNumber of fully-settled exchange + hedge pairs
nakedSettledCountNumber of settled exchange fills counted in nakedPnl

Step 6: List accounts

View your exchange accounts (credentials are never exposed):
curl -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/accounts
{
  "oddsFormat": "decimal",
  "accounts": [
    {
      "username": "0x1234...abcd",
      "exchange": "polymarket",
      "active": true,
      "maxOutcomeStake": 1000.0,
      "balance": 50000.0,
      "createdAt": "2026-01-15T12:00:00Z"
    }
  ],
  "count": 1
}

Step 7: Trading controls

Pause keeps existing orders on the exchange but stops new ones. Stop cancels all open orders immediately.
# Pause — keeps existing orders, stops new ones
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/trading/pause

# Resume after a pause
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/trading/resume

# Stop — cancels every open order
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/trading/stop

# Start after a stop
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/trading/start

Step 8: Cancel orders

Cancel a single order by ID, or every open order at once. Query parameters for cancel-all:
ParameterRequiredDescription
exchangeNoOnly cancel orders on a specific exchange
fixtureIdNoOnly cancel orders for a specific fixture
# Cancel everything
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/orders/cancel-all

# Cancel only Polymarket orders
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  "https://mmapi.55-tech.com/api/v1/orders/cancel-all?exchange=polymarket"

# Cancel a specific order
curl -X POST -H "X-API-Key: YOUR_API_KEY" \
  https://mmapi.55-tech.com/api/v1/orders/123/cancel

Next steps

WebSocket updates

Get real-time order fills, hedge bets, and score updates.

API reference

Explore all available endpoints.