Skip to main content

What is MM?

The Market Making (MM) engine is a high-frequency trading system that:
  1. Receives live odds from bookmakers via OddsPapi v5 WebSocket
  2. Posts orders on prediction market exchanges at calculated prices
  3. Detects fills in real-time via exchange WebSockets
  4. Automatically hedges filled positions on bookmakers
  5. Tracks positions, exposure, and PnL through the full settlement lifecycle
The client API gives you read access to all trading activity, positions, and analytics for your client.

How market making works

Bookmaker odds (OddsPapi)

Strategy engine (calculate exchange price)

Place/replace orders on exchanges

Exchange fill detected (WebSocket)

Automatic hedge bet on bookmaker

Position & PnL tracking

Order pricing

The engine converts bookmaker odds to exchange probability prices and posts orders accordingly. Price ticks and order sizing are configured per-tournament.

Hedging

When an exchange order fills, the engine automatically hedges by placing a corresponding bet on the assigned bookmaker. The process handles concurrent fills safely and reposts filled amounts back on the exchange to maintain market presence.

Base URL

https://mmapi.55-tech.com
All client endpoints are prefixed with /api/v1/.

Key concepts

Clients

Clients are trading entities configured with specific exchange accounts and bookmaker hedging targets.
  • Simple format: "vertex" — client name IS the bookmaker
  • Compound format: "demo:vertex" — client=demo, hedges on vertex

Exchanges

Target platforms where orders are placed:
ExchangeAuth methodOrder type
PolymarketEthereum wallet signingCLOB limit orders
Polymarket USJWT + gRPCgRPC order submission
KalshiRSA-PSS signingREST limit orders
Novig.usOAuth 2.0REST orders
SX.betAPI key + EIP712Signed orders
BetfairSSL certificateExchange API
ProphetXJWTREST orders
MatchbookSession tokenREST orders
SmarketsSession tokenREST orders
4castersToken authSocket.IO
Predict.funJWT + EIP712Signed orders

Order lifecycle

PENDING_PLACEMENT → PLACED → PARTIAL / FILLED / FAILED / CANCELLED / EXPIRED

Match status

NOT_MATCHED → PARTIALLY_MATCHED → FULLY_MATCHED

Settlement status

UNDECIDED → WON / LOST / VOID / HALF_WON / HALF_LOST

Tradeable outcomes

Default outcome IDs: 111, 112, 121, 122, 131, 132, 141, 142, 151, 152, 161, 162, 171, 172 These cover 1x2 markets, over/under, handicap, correct score, and both sides.

Endpoints at a glance

Client API (X-API-Key auth)

CategoryEndpointsDescription
IdentityGET /api/v1/meGet your client info
OrdersGET /api/v1/ordersView exchange orders (paginated, filterable)
OrdersGET /api/v1/orders/{id}Get specific order
OrdersGET /api/v1/orders/openList open orders for a fixture
OrdersGET /api/v1/orders/summaryOrder statistics
BetsGET /api/v1/betsView hedge bets (paginated)
BetsGET /api/v1/bets/{id}Get specific bet
BetsGET /api/v1/bets/summaryBet statistics
FixturesGET /api/v1/fixturesList fixtures with scores
FixturesGET /api/v1/fixtures/{id}Get specific fixture
PositionsGET /api/v1/positionsAggregated positions
PositionsGET /api/v1/positions/summaryPosition summary
AccountsGET /api/v1/accountsList exchange accounts (no credentials)

WebSocket

EndpointDescription
WS /ws/subscribeReal-time order, bet, account, score, and emergency updates

Rate limits

  • REST API: 100 requests/minute per client
  • WebSocket: 5 concurrent connections per API key

Next steps