Skip to main content

Bifrost Public API — Betting Service (Swagger)

Source: https://preprod-bifrost-betting-api.bifrost.bet/swagger-ui/index.html Fetched: 2026-02-16 OpenAPI: 3.0.1

Base URL: https://preprod-bifrost-betting-api.bifrost.bet Auth: API Key via Authorization header (ApiToken scheme)

Raw OpenAPI specs saved alongside this file:

  • betting-api-v1.json — Betting endpoints
  • recovery-api-v1.json — Data recovery endpoints

1. Betting API v1 (bet-controller)

POST /api/v1/bets/place — Place a bet

Request: PlaceBetRequest

FieldTypeRequiredNotes
sportIdstringno
marketIdstringyesPattern: \d+\.\d+(_\d+)? (Betfair-style)
runnerIdint64yesSelection/runner ID
priceIndexint32no
sizenumberyesMin 0.01 — the exchange stake
memberSizenumberyesMin 0.01 — the member's stake
oddsnumberyesMin 0.01
lineint32noFor handicap/line markets
sideenumyesBACK or LAY
memberCodestringyesIdentifies the member/operator
currencystringno
ipAddressstringyesClient IP
requestIdstringnoIdempotency key

Response: PlaceBetResponse

FieldTypeNotes
idint64Bet ID
requestIdstringEcho of request ID
memberCodestring
statusenumSee statuses below
sideenumBACK / LAY
sizenumberMatched size
oddsnumberMatched odds
lineint32
versionint64Bet version for optimistic locking

POST /api/v1/bets/cancel — Cancel a bet

Request: CancelBetRequest

FieldTypeRequiredNotes
marketIdstringyesPattern: \d+\.\d+(_\d+)?
betIdint64yes

Response: CancelBetResponse

FieldType
idint64
statusenum
versionint64

POST /api/v1/bets/outcomes — Get bet outcomes

Request: BetOutcomeRequest

FieldTypeNotes
marketIdsstring[]Filter by market IDs
pageSizeint32Pagination
pageNumberint32Pagination

Response: BetOutcomeResponse

FieldType
contentobject[]
totalPagesint32

POST /api/v1/bets/multibet/requestprice — Request multibet prices

Request: MultiBetPriceRequest

FieldTypeRequiredNotes
requestIdstringno
multibetLegsLeg[]yesMin 2, max 20 legs

Response: MultiBetPriceResponse

FieldType
requestIdstring
legsLeg[]
successboolean

POST /api/v1/bets/multibet/place — Place multibets

Request: MultiBetPlaceRequest

FieldTypeRequiredNotes
stakenumberyes
currencystringno
memberCodestringyes
accountstringyes
ipstringyesClient IP
stakeFactornumberyes
multiBetLegsLeg[]yesMin 2, max 20
positionTakenumberno
fixedPendingUntildatetimeno
turnoverRebatePercentagenumberno
requestIdstringyes
placedDateint64noEpoch timestamp

Response: MultiBetPlaceResponse

Mirrors request fields plus:

  • multiBetPrice (number)
  • requestedTime (datetime)
  • placedTime (datetime)

2. Shared Schemas

Bet Statuses (enum)

FAILED | PLACED | PENDING | VOIDED | CANCEL_PENDING | CANCELLED |
PARTIALLY_MATCHED | UNMATCHED | LAPSED | MULTIBET_PRICE_REQUESTED | MULTIBET_PRICE_FILLED

Bet Side (enum)

BACK | LAY

Leg (multibet leg)

FieldTypeRequiredNotes
marketIdstringyesPattern: \d+\.\d+(_\d+)?
eventIdstringyes
selectionIdstringyes
sideenumyesBACK / LAY

3. Recovery API v1 (data-recovery-controller)

All recovery endpoints are async — they return a requestId and results are delivered via callback/websocket.

Common Response: RecoveryDataApiResponse

FieldType
requestIdstring
errorstring

POST /api/v1/recovery/bets

Recover bets by marketIds (string[]), betIds (int64[]), or betRequestIds (string[]).

POST /api/v1/recovery/bet_outcomes

Recover bet outcomes. Same filters as /recovery/bets.

POST /api/v1/recovery/markets

FieldTypeNotes
eventIdsstring[] (unique)
marketIdsstring[] (unique)
includeMarketBookbooleanInclude price/depth data
includeMarketCataloguebooleanInclude market metadata
includeMarketResultbooleanInclude settlement results

POST /api/v1/recovery/events

FieldTypeNotes
sportIdstring
categoryIdsstring[] (unique)
eventIdsstring[] (unique)
fromStartTimeint64Epoch ms

POST /api/v1/recovery/categories

FieldType
sportIdstring
categoryIdsstring[] (unique)

POST /api/v1/recovery/multibets

FieldType
marketIdsstring[] (unique)
betIdsint64[] (unique)
betRequestIdsstring[] (unique)
eventIdstring

POST /api/v1/recovery/multibet_outcomes

Same filters as /recovery/multibets.


4. Key Observations for Hannibal Integration

  • Market IDs use Betfair format (\d+\.\d+(_\d+)?) — e.g., 1.253279756. This is the same format Hannibal already uses internally.
  • Supports both BACK and LAY — unlike Pinnacle (back-only), Bifrost is a full exchange.
  • memberCode identifies us (the operator) — this is our account identifier with Bifrost.
  • size vs memberSizesize = exchange stake, memberSize = what the member commits. This distinction may relate to position-taking or margin.
  • Bet cancellation is supported — by marketId + betId.
  • Multibet/accumulator support — 2-20 legs, with a two-step flow: request price then place.
  • Recovery API is async — returns requestId, actual data delivered separately (likely via WebSocket or callback).
  • version field on responses enables optimistic concurrency control.
  • priceIndex on PlaceBet — may relate to depth ladder position (which price level to take).
  • line field — int32, used for handicap/totals markets.