> For the complete documentation index, see [llms.txt](https://docs.odds88.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.odds88.io/odds88-client-api/odds88-api-endpoints/bets-api.md).

# Bets API

Bets API endpoints are used as a part of risk management service.

The most important endpoints are below.

## Bet Placement Endpoint

Can be used to send bets to Odds88.

The bet will be validated according to related event(s), market(s), selection(s) statuses, odds and liabilities.

The response will contain a recommendation whether to accept or reject the bet.

{% hint style="warning" %}
The endpoint should be called after the funds has been reserved on the player's account.

If the response it "accepted", the bet will be saved in Odds88 system.
{% endhint %}

{% hint style="warning" %}
This endpoint has a LTD (Live Time Delay) implemented for events which are Live. The bets will only be accepted after a predetermined period, depending on the event’s level and network latency.
{% endhint %}

{% hint style="info" %}
`playerId` must be consistent for the same player regardless of the currency that is used.
{% endhint %}

## PUT /api/players/{playerId}/Bets/V2

> Places bet from specific player (multi-currency).

```json
{"openapi":"3.0.4","info":{"title":"[T728-STAGE] Odds88 API","version":"v1"},"tags":[{"name":"Bets"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"http","description":"JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2":{"type":"object","properties":{"id":{"type":"string","description":"Unique request id (in the client's system);","nullable":true},"player":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.PlayerViewModel"}],"description":"Identification of the end user. Contains information about Ip, language and device from which bet was placed.","nullable":true},"priceChange":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.PriceChange"}],"description":"Price change auto acceptance. (None - 0, Any - 1, Higher - 2)\n\n* `0` - None\n* `1` - Any\n* `2` - Higher"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel"},"description":"List of bet items","nullable":true},"alternativeOddsId":{"type":"string","description":"ID of alternative odds offer in case if liability was exceeded","nullable":true},"alternativePrice":{"type":"number","description":"Alternative odds offer value","format":"double","nullable":true},"customPayoutMultiplier":{"type":"number","description":"Custom payout multiplier","format":"double","nullable":true},"betType":{"type":"integer","description":"Bet Type. (Standard - 0, Pickem - 1)","format":"int32"},"freeBetType":{"type":"integer","description":"Free Bet Type. (NotFree = 0, BasicFreeBet = 1)","format":"int32"},"riskManagementOverride":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.RiskManagementOverrideViewModel"}],"description":"Optional risk-management override. When set, links this bet to a previously placed bet\n(via OriginalBetId) and disables specific validations (ValidationOverrides: 1 = limits,\n2 = price). Cannot be combined with AlternativeOddsId.","nullable":true},"amount":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountRequestViewModel"}],"description":"Bet amount model","nullable":true}},"additionalProperties":false,"description":"Represents bet request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.PlayerViewModel":{"type":"object","properties":{"deviceId":{"type":"string","description":"End user's device id","nullable":true},"languageId":{"type":"string","description":"ISO 639-1 language code","nullable":true},"ip":{"type":"string","description":"End user's IP","nullable":true},"segmentId":{"type":"integer","description":"End user's limit Id","format":"int32"}},"additionalProperties":false,"description":"Represents player data."},"Marlin.SportsbetApi.Host.Models.BetPlacement.PriceChange":{"enum":[0,1,2],"type":"integer","description":"Types of price change acceptance.\n\n* `0` - None\n* `1` - Any\n* `2` - Higher","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel":{"type":"object","properties":{"eventId":{"type":"integer","description":"Event id on which the bet is placed.","format":"int64"},"marketId":{"type":"integer","description":"Market id on which the bet is placed. Should be `-1` for BetBuilder bet.","format":"int64"},"selectionId":{"type":"integer","description":"Selection id on which the bet is placed. Should be `-1` for exotics/BetBuilder bet.","format":"int64"},"racingSelection":{"type":"string","description":"Racing exotics selection.","nullable":true},"price":{"type":"number","description":"Price on which the bet is placed. Should be `null` for tote exotics and SP bet.","format":"double","nullable":true},"betBuilderBetItems":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel"},"nullable":true}},"additionalProperties":false,"description":"Represents item inside the bet in the request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel":{"required":["marketId","selectionId"],"type":"object","properties":{"marketId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Market id of the bet item.","format":"int64"},"selectionId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Selection id of the bet item.","format":"int64"}},"additionalProperties":false,"description":"Represents bet item of BetBuilder."},"Marlin.SportsbetApi.Host.Models.BetPlacement.RiskManagementOverrideViewModel":{"type":"object","properties":{"originalBetId":{"type":"string","description":"The originally placed bet's id that this attempt is referencing.","nullable":true},"validationOverrides":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Validation steps to skip. 1 = limits (disable liability check), 2 = price (accept stale prices).","nullable":true}},"additionalProperties":false,"description":"Risk management override payload — sent alongside a re-attempted bet whose original\nplacement was rejected."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountRequestViewModel":{"required":["precision","value"],"type":"object","properties":{"currency":{"type":"string","description":"Currency ticker symbol","nullable":true},"value":{"type":"integer","description":"Amount in local currency","format":"int64"},"precision":{"type":"integer","description":"Precision value for the provided currency","format":"int32"}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.ResponseViewModel`1[[Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2, Marlin.SportsbetApi.Host, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]":{"type":"object","properties":{"payload":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2"}],"nullable":true},"responseCode":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.ResponseCode"}],"description":"* `1` - Success\n* `2` - FormatError\n* `3` - PrecisionMismatch\n* `4` - UnsupportedCurrency\n* `5` - UnsupportedFeature"},"errorMessage":{"type":"string","nullable":true}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2":{"type":"object","properties":{"requestId":{"type":"string","description":"External request id which was sent by client","nullable":true},"resultType":{"type":"integer","description":"Acceptance status. (Pending - 1 , Accepted - 2, Rejected -3)","format":"int32"},"createdAt":{"type":"string","description":"Date and time of request creation in UTC","format":"date-time"},"cancellationStatus":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.CancellationStatusViewModel"}],"description":"Detailed info about cancellation progress","nullable":true},"betProcessor":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.BetProcessorType"}],"description":"* `1` - Internal\n* `2` - Betradar\n* `3` - Oddin\n* `4` - OddinMixedMulties"},"rejectInfo":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.RejectInfoViewModelV2"}],"description":"Information about rejection cause and rejected item","nullable":true},"acceptedBet":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetResponseResponseViewModelV2"}],"description":"Accepted bet","nullable":true}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.BetPlacement.CancellationStatusViewModel":{"type":"object","properties":{"status":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.CancellationStatusType"}],"description":"Cancellation status\n\n* `1` - Accepted\n* `2` - Rejected"},"message":{"type":"string","description":"Cancellation rejection reason description","nullable":true}},"additionalProperties":false},"TradeArt.BetPlacement.Contracts.Enums.CancellationStatusType":{"enum":[1,2],"type":"integer","description":"* `1` - Accepted\n* `2` - Rejected","format":"int32"},"TradeArt.BetPlacement.Contracts.Enums.BetProcessorType":{"enum":[1,2,3,4],"type":"integer","description":"* `1` - Internal\n* `2` - Betradar\n* `3` - Oddin\n* `4` - OddinMixedMulties","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.RejectInfoViewModelV2":{"type":"object","properties":{"reason":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.RejectReason"}],"description":"Information about rejection cause\n\n* `0` - None: Checks passed\n* `1` - PriceChanged: Price Changed\n* `2` - PriceChangedLow: Price Changed Low\n* `3` - PriceChangedHigh: Price Changed High\n* `4` - MissingMandatoryFields: Missing Mandatory Fields\n* `5` - InvalidDataFormat: Invalid Data Format\n* `6` - EventsOrMarketsCannotBeCombined: Events Or Markets Cannot Be Combined\n* `7` - SelectionsFromSameMarket: Selections From Same Market\n* `8` - MultipleSelectionsInEvent: Multiple Selections In Event\n* `9` - DuplicateTeamIds: Duplicate Team Ids\n* `10` - EventNotFound: Event Not Found\n* `11` - EventNotActive: Event Not Active\n* `12` - MarketNotFound: Market Not Found\n* `13` - MarketNotActive: Market Not Active\n* `14` - SelectionNotFound: Selection Not Found\n* `15` - SelectionNotActive: Selection Not Active\n* `16` - AdminConsoleError: Admin Console Error\n* `17` - EventLimitExceeded: Event Limit Exceeded\n* `18` - MarketLimitExceeded: Market Limit Exceeded\n* `19` - BetLimitExceeded: Bet Limit Exceeded\n* `20` - PayoutLimitExceeded: Payout Limit Exceeded\n* `21` - EventVarLimitExceeded: Event CCF Limit Exceeded\n* `22` - MarketVarLimitExceeded: Market CCF Limit Exceeded\n* `23` - BetVarLimitExceeded: Bet CCF Limit Exceeded\n* `24` - PayoutVarLimitExceeded: Payout CCF Limit Exceeded\n* `25` - TooHighOdds: Total price was too large\n* `26` - SportRestricted: Sport restricted for placing bets\n* `27` - EventMarkedStale: Event has not received any updates from source for too long and bets cannot be accepted for it\n* `28` - ResponseTimeoutExceeded: Bet placement response timed out\n* `29` - ExoticSelectionInvalidFormat: Exotics selection has invalid format\n* `39` - ExoticTypeNotMatchWithMarket: Exotics selection type does not match with market type\n* `40` - ExoticsMultibetNotSupported: Exotics multibet is not supported\n* `50` - SelectionLimitExceeded: Prematch selection Limit Exceeded\n* `51` - SelectionVarLimitExceeded: Prematch selection CCF Limit Exceeded\n* `52` - MarketIsNotFixedExotics: Requested market is not Fixed Exotics market\n* `53` - FixedExoticsPriceNotFoundBySelection: The fixed exotics price was not found by selection\n* `54` - FixedExoticsSelectionContainsMultipleCombinations: Multiple combinations are not supported for fixed exotics\n* `55` - PlayerBetLimitExceeded: Liability is over player bet liability limit\n* `56` - StartingPriceMarketLive: Starting price market went live\n* `57` - StartingPriceMultibetNotSupported: Starting price multibet is not supported\n* `58` - StartingPriceMarketMatch: Starting price market bets should not contain price\n* `59` - NullBetPriceIsNotSupportedForThisMarket: Null bet price is not supported for this market\n* `60` - CombinationContainsScratchedCompetitorNumber: Racing selection contains scratched competitor\n* `61` - BetBuilderNotSupported: Bet Builder is not supported\n* `62` - AlternativeOddsExpired: Alternative odds is expired or not available\n* `63` - AlternativeOddsPriceInvalid: Alternative odds price is invalid\n* `64` - AlternativeOddsBetItemsInvalid: Alternative odds bet item(s) are invalid\n* `65` - AlternativeOddsBetAmountInvalid: Alternative odds bet amount is invalid\n* `66` - PlayerMultiBetLimitExceeded: Liability is over player multi bet liability limit\n* `67` - SegmentNotFound: Segment not found\n* `68` - LiveBetNotSupportedForPickem: Live betting not supported for Pickem bets\n* `69` - MarketIsContiguous: Market can't be mixed with other Pickem markets in this bet\n* `70` - SegmentIsDisabled: Segment is disabled\n* `71` - BetBuilderDuplicatedMarkets: Bet Builder bet item contained duplicated markets\n* `72` - StakeTooLow: Stake is too low\n* `73` - BetPlacementIsDisabled: Bet placement was manually disabled\n* `74` - NotAllLegsAreEachWay: Bet contains each-way leg along with standard leg(s)\n* `75` - PartnerMismatch: Bet segment does not belong to the configured partner\n* `76` - OverridesNotSupportedForThisContent: Validation overrides are not supported for this content\n* `77` - CannotMixAlternativeOddsAndRiskManagementOverride: Alternative odds offer and risk management override cannot be used together\n* `100` - UnexpectedError: Something went wrong"},"betItem":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel"}],"description":"Rejected bet item","nullable":true},"message":{"type":"string","description":"Detailed information about rejection cause","nullable":true},"alternativeOdds":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.AlternativeOddsResultModel"}],"description":"Contains alternative offer in case if liability was exceeded","nullable":true},"maxBet":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountResponseViewModel"}],"description":"Maximum allowed bet amount","nullable":true}},"additionalProperties":false},"TradeArt.BetPlacement.Contracts.Enums.RejectReason":{"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,39,40,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,100],"type":"integer","description":"* `0` - None: Checks passed\n* `1` - PriceChanged: Price Changed\n* `2` - PriceChangedLow: Price Changed Low\n* `3` - PriceChangedHigh: Price Changed High\n* `4` - MissingMandatoryFields: Missing Mandatory Fields\n* `5` - InvalidDataFormat: Invalid Data Format\n* `6` - EventsOrMarketsCannotBeCombined: Events Or Markets Cannot Be Combined\n* `7` - SelectionsFromSameMarket: Selections From Same Market\n* `8` - MultipleSelectionsInEvent: Multiple Selections In Event\n* `9` - DuplicateTeamIds: Duplicate Team Ids\n* `10` - EventNotFound: Event Not Found\n* `11` - EventNotActive: Event Not Active\n* `12` - MarketNotFound: Market Not Found\n* `13` - MarketNotActive: Market Not Active\n* `14` - SelectionNotFound: Selection Not Found\n* `15` - SelectionNotActive: Selection Not Active\n* `16` - AdminConsoleError: Admin Console Error\n* `17` - EventLimitExceeded: Event Limit Exceeded\n* `18` - MarketLimitExceeded: Market Limit Exceeded\n* `19` - BetLimitExceeded: Bet Limit Exceeded\n* `20` - PayoutLimitExceeded: Payout Limit Exceeded\n* `21` - EventVarLimitExceeded: Event CCF Limit Exceeded\n* `22` - MarketVarLimitExceeded: Market CCF Limit Exceeded\n* `23` - BetVarLimitExceeded: Bet CCF Limit Exceeded\n* `24` - PayoutVarLimitExceeded: Payout CCF Limit Exceeded\n* `25` - TooHighOdds: Total price was too large\n* `26` - SportRestricted: Sport restricted for placing bets\n* `27` - EventMarkedStale: Event has not received any updates from source for too long and bets cannot be accepted for it\n* `28` - ResponseTimeoutExceeded: Bet placement response timed out\n* `29` - ExoticSelectionInvalidFormat: Exotics selection has invalid format\n* `39` - ExoticTypeNotMatchWithMarket: Exotics selection type does not match with market type\n* `40` - ExoticsMultibetNotSupported: Exotics multibet is not supported\n* `50` - SelectionLimitExceeded: Prematch selection Limit Exceeded\n* `51` - SelectionVarLimitExceeded: Prematch selection CCF Limit Exceeded\n* `52` - MarketIsNotFixedExotics: Requested market is not Fixed Exotics market\n* `53` - FixedExoticsPriceNotFoundBySelection: The fixed exotics price was not found by selection\n* `54` - FixedExoticsSelectionContainsMultipleCombinations: Multiple combinations are not supported for fixed exotics\n* `55` - PlayerBetLimitExceeded: Liability is over player bet liability limit\n* `56` - StartingPriceMarketLive: Starting price market went live\n* `57` - StartingPriceMultibetNotSupported: Starting price multibet is not supported\n* `58` - StartingPriceMarketMatch: Starting price market bets should not contain price\n* `59` - NullBetPriceIsNotSupportedForThisMarket: Null bet price is not supported for this market\n* `60` - CombinationContainsScratchedCompetitorNumber: Racing selection contains scratched competitor\n* `61` - BetBuilderNotSupported: Bet Builder is not supported\n* `62` - AlternativeOddsExpired: Alternative odds is expired or not available\n* `63` - AlternativeOddsPriceInvalid: Alternative odds price is invalid\n* `64` - AlternativeOddsBetItemsInvalid: Alternative odds bet item(s) are invalid\n* `65` - AlternativeOddsBetAmountInvalid: Alternative odds bet amount is invalid\n* `66` - PlayerMultiBetLimitExceeded: Liability is over player multi bet liability limit\n* `67` - SegmentNotFound: Segment not found\n* `68` - LiveBetNotSupportedForPickem: Live betting not supported for Pickem bets\n* `69` - MarketIsContiguous: Market can't be mixed with other Pickem markets in this bet\n* `70` - SegmentIsDisabled: Segment is disabled\n* `71` - BetBuilderDuplicatedMarkets: Bet Builder bet item contained duplicated markets\n* `72` - StakeTooLow: Stake is too low\n* `73` - BetPlacementIsDisabled: Bet placement was manually disabled\n* `74` - NotAllLegsAreEachWay: Bet contains each-way leg along with standard leg(s)\n* `75` - PartnerMismatch: Bet segment does not belong to the configured partner\n* `76` - OverridesNotSupportedForThisContent: Validation overrides are not supported for this content\n* `77` - CannotMixAlternativeOddsAndRiskManagementOverride: Alternative odds offer and risk management override cannot be used together\n* `100` - UnexpectedError: Something went wrong","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.AlternativeOddsResultModel":{"type":"object","properties":{"id":{"type":"string","description":"Alternative odds offer identifier","nullable":true},"alternativePrice":{"type":"number","description":"Alternative odds offer value","format":"double"},"createdAt":{"type":"string","description":"Timestamp the offer was created","format":"date-time"},"expiredAt":{"type":"string","description":"Timestamp the offer gets expired","format":"date-time"}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountResponseViewModel":{"required":["precision","value"],"type":"object","properties":{"currency":{"type":"string","description":"Currency ticker symbol","nullable":true},"value":{"type":"integer","description":"Amount in local currency","format":"int64"},"precision":{"type":"integer","description":"Precision value for the provided currency","format":"int32"},"exchangeRate":{"type":"number","format":"double"}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetResponseResponseViewModelV2":{"type":"object","properties":{"id":{"type":"string","description":"Auto generated identifier of accepted bet","nullable":true},"player":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.PlayerViewModel"}],"description":"Identification of the end user. Contains information about Ip, language and device from which bet was placed.","nullable":true},"kind":{"type":"integer","description":"Bet kind. (Single - 0, Multiple - 1)","format":"int32"},"priceChange":{"type":"integer","description":"Price change auto acceptance. (None - 0, Any - 1, Higher - 2)","format":"int32"},"alternativePrice":{"type":"number","description":"Alternative price offered in special cases when liability was exceeded","format":"double","nullable":true},"originalBetId":{"type":"string","description":"Reference to a previously placed bet. Set when the bet uses alternative odds\nor carries a risk-management override.","nullable":true},"validationOverrides":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Validation overrides applied to this bet. (1 - Limits, 2 - Price)","nullable":true},"customPayoutMultiplier":{"type":"number","description":"Custom payout multiplier","format":"double","nullable":true},"betType":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.BetType"}],"description":"Bet Type. (Standard - 0, Pickem - 1)\n\n* `0` - Standard\n* `1` - Pickem"},"freeBetType":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.FreeBetType"}],"description":"Free Bet Type. (NotFree = 0, BasicFreeBet = 1)\n\n* `0` - NotFree\n* `1` - BasicFreeBet"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemResponseViewModel"},"description":"List of bet items","nullable":true},"amount":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountResponseViewModel"}],"description":"Bet amount with local currency information","nullable":true}},"additionalProperties":false},"TradeArt.BetPlacement.Contracts.Enums.BetType":{"enum":[0,1],"type":"integer","description":"* `0` - Standard\n* `1` - Pickem","format":"int32"},"TradeArt.BetPlacement.Contracts.Enums.FreeBetType":{"enum":[0,1],"type":"integer","description":"* `0` - NotFree\n* `1` - BasicFreeBet","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemResponseViewModel":{"type":"object","properties":{"eventId":{"type":"integer","description":"Event id on which the bet is placed.","format":"int64"},"marketId":{"type":"integer","description":"Market id on which the bet is placed. Should be `-1` for BetBuilder bet.","format":"int64"},"selectionId":{"type":"integer","description":"Selection id on which the bet is placed. Should be `-1` for exotics/BetBuilder bet.","format":"int64"},"racingSelection":{"type":"string","description":"Racing exotics selection.","nullable":true},"price":{"type":"number","description":"Price on which the bet is placed. Should be `null` for tote exotics and SP bet.","format":"double","nullable":true},"alternativePrice":{"type":"number","description":"Alternative price of a bet selection.","format":"double","nullable":true},"betBuilderBetItems":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel"},"description":"Bet builder items.","nullable":true}},"additionalProperties":false,"description":"Represents item inside the bet in the response"},"Marlin.SportsbetApi.Host.Models.ResponseCode":{"enum":[1,2,3,4,5],"type":"integer","description":"* `1` - Success\n* `2` - FormatError\n* `3` - PrecisionMismatch\n* `4` - UnsupportedCurrency\n* `5` - UnsupportedFeature","format":"int32"},"Microsoft.AspNetCore.Mvc.ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/api/players/{playerId}/Bets/V2":{"put":{"tags":["Bets"],"summary":"Places bet from specific player (multi-currency).","operationId":"Place bet V2","parameters":[{"name":"playerId","in":"path","description":"Id of player which places a bet.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Bet request data.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}}}},"responses":{"200":{"description":"Returns results of bet placement request.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.ResponseViewModel`1[[Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2, Marlin.SportsbetApi.Host, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}},"application/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.ResponseViewModel`1[[Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2, Marlin.SportsbetApi.Host, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}},"text/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.ResponseViewModel`1[[Marlin.SportsbetApi.Host.Models.BetPlacement.BetResultViewModelV2, Marlin.SportsbetApi.Host, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}}}},"400":{"description":"Request arguments are not valid.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Unexpected error occurred."}}}}}}
```

## Max Bet Endpoint

Can be used to get the max possible value for a particular bet for a particular player.

The bet will be validated according to related event(s), market(s), selection(s) statuses, odds and liabilities.

{% hint style="info" %}
The bet will not be saved in Odds88 system, so this endpoint can be called before locking funds on the player's account.
{% endhint %}

## POST /api/players/{playerId}/Bets/V2/max

> Gets max possible bet size for the specific player (multi-currency).

```json
{"openapi":"3.0.4","info":{"title":"[T728-STAGE] Odds88 API","version":"v1"},"tags":[{"name":"Bets"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"http","description":"JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2":{"type":"object","properties":{"id":{"type":"string","description":"Unique request id (in the client's system);","nullable":true},"player":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.PlayerViewModel"}],"description":"Identification of the end user. Contains information about Ip, language and device from which bet was placed.","nullable":true},"priceChange":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.PriceChange"}],"description":"Price change auto acceptance. (None - 0, Any - 1, Higher - 2)\n\n* `0` - None\n* `1` - Any\n* `2` - Higher"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel"},"description":"List of bet items","nullable":true},"alternativeOddsId":{"type":"string","description":"ID of alternative odds offer in case if liability was exceeded","nullable":true},"alternativePrice":{"type":"number","description":"Alternative odds offer value","format":"double","nullable":true},"customPayoutMultiplier":{"type":"number","description":"Custom payout multiplier","format":"double","nullable":true},"betType":{"type":"integer","description":"Bet Type. (Standard - 0, Pickem - 1)","format":"int32"},"freeBetType":{"type":"integer","description":"Free Bet Type. (NotFree = 0, BasicFreeBet = 1)","format":"int32"},"riskManagementOverride":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.RiskManagementOverrideViewModel"}],"description":"Optional risk-management override. When set, links this bet to a previously placed bet\n(via OriginalBetId) and disables specific validations (ValidationOverrides: 1 = limits,\n2 = price). Cannot be combined with AlternativeOddsId.","nullable":true},"amount":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountRequestViewModel"}],"description":"Bet amount model","nullable":true}},"additionalProperties":false,"description":"Represents bet request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.PlayerViewModel":{"type":"object","properties":{"deviceId":{"type":"string","description":"End user's device id","nullable":true},"languageId":{"type":"string","description":"ISO 639-1 language code","nullable":true},"ip":{"type":"string","description":"End user's IP","nullable":true},"segmentId":{"type":"integer","description":"End user's limit Id","format":"int32"}},"additionalProperties":false,"description":"Represents player data."},"Marlin.SportsbetApi.Host.Models.BetPlacement.PriceChange":{"enum":[0,1,2],"type":"integer","description":"Types of price change acceptance.\n\n* `0` - None\n* `1` - Any\n* `2` - Higher","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel":{"type":"object","properties":{"eventId":{"type":"integer","description":"Event id on which the bet is placed.","format":"int64"},"marketId":{"type":"integer","description":"Market id on which the bet is placed. Should be `-1` for BetBuilder bet.","format":"int64"},"selectionId":{"type":"integer","description":"Selection id on which the bet is placed. Should be `-1` for exotics/BetBuilder bet.","format":"int64"},"racingSelection":{"type":"string","description":"Racing exotics selection.","nullable":true},"price":{"type":"number","description":"Price on which the bet is placed. Should be `null` for tote exotics and SP bet.","format":"double","nullable":true},"betBuilderBetItems":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel"},"nullable":true}},"additionalProperties":false,"description":"Represents item inside the bet in the request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel":{"required":["marketId","selectionId"],"type":"object","properties":{"marketId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Market id of the bet item.","format":"int64"},"selectionId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Selection id of the bet item.","format":"int64"}},"additionalProperties":false,"description":"Represents bet item of BetBuilder."},"Marlin.SportsbetApi.Host.Models.BetPlacement.RiskManagementOverrideViewModel":{"type":"object","properties":{"originalBetId":{"type":"string","description":"The originally placed bet's id that this attempt is referencing.","nullable":true},"validationOverrides":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Validation steps to skip. 1 = limits (disable liability check), 2 = price (accept stale prices).","nullable":true}},"additionalProperties":false,"description":"Risk management override payload — sent alongside a re-attempted bet whose original\nplacement was rejected."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetAmountRequestViewModel":{"required":["precision","value"],"type":"object","properties":{"currency":{"type":"string","description":"Currency ticker symbol","nullable":true},"value":{"type":"integer","description":"Amount in local currency","format":"int64"},"precision":{"type":"integer","description":"Precision value for the provided currency","format":"int32"}},"additionalProperties":false},"Marlin.SportsbetApi.Host.Models.BetPlacement.MaxBetResultViewModelV2":{"type":"object","properties":{"rejectReason":{"type":"integer","description":"Information about rejection cause. (None - 0, UnknownError - 1, PriceChanged - 2, LimitExceeded - 3 , SelectionNotFound - 4 etc.)","format":"int32"},"amount":{"type":"integer","description":"Max bet amount in local currency","format":"int64"}},"additionalProperties":false},"Microsoft.AspNetCore.Mvc.ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/api/players/{playerId}/Bets/V2/max":{"post":{"tags":["Bets"],"summary":"Gets max possible bet size for the specific player (multi-currency).","operationId":"Get max bet amount V2","parameters":[{"name":"playerId","in":"path","description":"Id of player which places a bet.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Bet request data.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetRequestViewModelV2"}],"description":"Represents bet request."}}}},"responses":{"200":{"description":"Returns results of max bet calculation.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.MaxBetResultViewModelV2"}},"application/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.MaxBetResultViewModelV2"}},"text/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.MaxBetResultViewModelV2"}}}},"400":{"description":"Request arguments are not valid.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Unexpected error occurred."}}}}}}
```

## Bet Builder Price Endpoint

Allows to get bet builder odds for the provided combination.

The endpoint will respond with potential odds or rejection information.

## POST /api/players/{playerId}/Bets/bet-builder-price

> Gets bet builder price.

```json
{"openapi":"3.0.4","info":{"title":"[T728-STAGE] Odds88 API","version":"v1"},"tags":[{"name":"Bets"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"http","description":"JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceRequestViewModel":{"required":["bets","eventId","requestId","segmentId"],"type":"object","properties":{"requestId":{"minLength":1,"type":"string","description":"Id of the requests."},"segmentId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Segment of the price requesting player.","format":"int32"},"eventId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Event id price is requested for.","format":"int64"},"bets":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel"},"description":"Bet items price is requested for."}},"additionalProperties":false,"description":"Represents BetBuilder price request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel":{"required":["marketId","selectionId"],"type":"object","properties":{"marketId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Market id of the bet item.","format":"int64"},"selectionId":{"maximum":9223372036854776000,"minimum":1,"type":"integer","description":"Selection id of the bet item.","format":"int64"}},"additionalProperties":false,"description":"Represents bet item of BetBuilder."},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceResultViewModel":{"type":"object","properties":{"requestId":{"type":"string","description":"Id of the price request.","nullable":true},"price":{"type":"number","description":"Suggested price for the BetBuilder request.","format":"double","nullable":true},"timeStamp":{"type":"string","description":"Time stamp of the request.","format":"date-time"},"rejectInfo":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.RejectInfoViewModel"}],"description":"Request rejection information.\nPresented only when the request is rejected.","nullable":true}},"additionalProperties":false,"description":"Represents response to a BetBuilder price request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.RejectInfoViewModel":{"type":"object","properties":{"reason":{"allOf":[{"$ref":"#/components/schemas/TradeArt.BetPlacement.Contracts.Enums.RejectReason"}],"description":"Information about rejection cause\n\n* `0` - None: Checks passed\n* `1` - PriceChanged: Price Changed\n* `2` - PriceChangedLow: Price Changed Low\n* `3` - PriceChangedHigh: Price Changed High\n* `4` - MissingMandatoryFields: Missing Mandatory Fields\n* `5` - InvalidDataFormat: Invalid Data Format\n* `6` - EventsOrMarketsCannotBeCombined: Events Or Markets Cannot Be Combined\n* `7` - SelectionsFromSameMarket: Selections From Same Market\n* `8` - MultipleSelectionsInEvent: Multiple Selections In Event\n* `9` - DuplicateTeamIds: Duplicate Team Ids\n* `10` - EventNotFound: Event Not Found\n* `11` - EventNotActive: Event Not Active\n* `12` - MarketNotFound: Market Not Found\n* `13` - MarketNotActive: Market Not Active\n* `14` - SelectionNotFound: Selection Not Found\n* `15` - SelectionNotActive: Selection Not Active\n* `16` - AdminConsoleError: Admin Console Error\n* `17` - EventLimitExceeded: Event Limit Exceeded\n* `18` - MarketLimitExceeded: Market Limit Exceeded\n* `19` - BetLimitExceeded: Bet Limit Exceeded\n* `20` - PayoutLimitExceeded: Payout Limit Exceeded\n* `21` - EventVarLimitExceeded: Event CCF Limit Exceeded\n* `22` - MarketVarLimitExceeded: Market CCF Limit Exceeded\n* `23` - BetVarLimitExceeded: Bet CCF Limit Exceeded\n* `24` - PayoutVarLimitExceeded: Payout CCF Limit Exceeded\n* `25` - TooHighOdds: Total price was too large\n* `26` - SportRestricted: Sport restricted for placing bets\n* `27` - EventMarkedStale: Event has not received any updates from source for too long and bets cannot be accepted for it\n* `28` - ResponseTimeoutExceeded: Bet placement response timed out\n* `29` - ExoticSelectionInvalidFormat: Exotics selection has invalid format\n* `39` - ExoticTypeNotMatchWithMarket: Exotics selection type does not match with market type\n* `40` - ExoticsMultibetNotSupported: Exotics multibet is not supported\n* `50` - SelectionLimitExceeded: Prematch selection Limit Exceeded\n* `51` - SelectionVarLimitExceeded: Prematch selection CCF Limit Exceeded\n* `52` - MarketIsNotFixedExotics: Requested market is not Fixed Exotics market\n* `53` - FixedExoticsPriceNotFoundBySelection: The fixed exotics price was not found by selection\n* `54` - FixedExoticsSelectionContainsMultipleCombinations: Multiple combinations are not supported for fixed exotics\n* `55` - PlayerBetLimitExceeded: Liability is over player bet liability limit\n* `56` - StartingPriceMarketLive: Starting price market went live\n* `57` - StartingPriceMultibetNotSupported: Starting price multibet is not supported\n* `58` - StartingPriceMarketMatch: Starting price market bets should not contain price\n* `59` - NullBetPriceIsNotSupportedForThisMarket: Null bet price is not supported for this market\n* `60` - CombinationContainsScratchedCompetitorNumber: Racing selection contains scratched competitor\n* `61` - BetBuilderNotSupported: Bet Builder is not supported\n* `62` - AlternativeOddsExpired: Alternative odds is expired or not available\n* `63` - AlternativeOddsPriceInvalid: Alternative odds price is invalid\n* `64` - AlternativeOddsBetItemsInvalid: Alternative odds bet item(s) are invalid\n* `65` - AlternativeOddsBetAmountInvalid: Alternative odds bet amount is invalid\n* `66` - PlayerMultiBetLimitExceeded: Liability is over player multi bet liability limit\n* `67` - SegmentNotFound: Segment not found\n* `68` - LiveBetNotSupportedForPickem: Live betting not supported for Pickem bets\n* `69` - MarketIsContiguous: Market can't be mixed with other Pickem markets in this bet\n* `70` - SegmentIsDisabled: Segment is disabled\n* `71` - BetBuilderDuplicatedMarkets: Bet Builder bet item contained duplicated markets\n* `72` - StakeTooLow: Stake is too low\n* `73` - BetPlacementIsDisabled: Bet placement was manually disabled\n* `74` - NotAllLegsAreEachWay: Bet contains each-way leg along with standard leg(s)\n* `75` - PartnerMismatch: Bet segment does not belong to the configured partner\n* `76` - OverridesNotSupportedForThisContent: Validation overrides are not supported for this content\n* `77` - CannotMixAlternativeOddsAndRiskManagementOverride: Alternative odds offer and risk management override cannot be used together\n* `100` - UnexpectedError: Something went wrong"},"betItem":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel"}],"description":"Rejected bet item","nullable":true},"message":{"type":"string","description":"Detailed information about rejection cause","nullable":true},"alternativeOdds":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.AlternativeOddsResultModel"}],"description":"Contains alternative offer in case if liability was exceeded","nullable":true},"maxBet":{"type":"number","description":"Maximum allowed bet amount","format":"double","nullable":true}},"additionalProperties":false},"TradeArt.BetPlacement.Contracts.Enums.RejectReason":{"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,39,40,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,100],"type":"integer","description":"* `0` - None: Checks passed\n* `1` - PriceChanged: Price Changed\n* `2` - PriceChangedLow: Price Changed Low\n* `3` - PriceChangedHigh: Price Changed High\n* `4` - MissingMandatoryFields: Missing Mandatory Fields\n* `5` - InvalidDataFormat: Invalid Data Format\n* `6` - EventsOrMarketsCannotBeCombined: Events Or Markets Cannot Be Combined\n* `7` - SelectionsFromSameMarket: Selections From Same Market\n* `8` - MultipleSelectionsInEvent: Multiple Selections In Event\n* `9` - DuplicateTeamIds: Duplicate Team Ids\n* `10` - EventNotFound: Event Not Found\n* `11` - EventNotActive: Event Not Active\n* `12` - MarketNotFound: Market Not Found\n* `13` - MarketNotActive: Market Not Active\n* `14` - SelectionNotFound: Selection Not Found\n* `15` - SelectionNotActive: Selection Not Active\n* `16` - AdminConsoleError: Admin Console Error\n* `17` - EventLimitExceeded: Event Limit Exceeded\n* `18` - MarketLimitExceeded: Market Limit Exceeded\n* `19` - BetLimitExceeded: Bet Limit Exceeded\n* `20` - PayoutLimitExceeded: Payout Limit Exceeded\n* `21` - EventVarLimitExceeded: Event CCF Limit Exceeded\n* `22` - MarketVarLimitExceeded: Market CCF Limit Exceeded\n* `23` - BetVarLimitExceeded: Bet CCF Limit Exceeded\n* `24` - PayoutVarLimitExceeded: Payout CCF Limit Exceeded\n* `25` - TooHighOdds: Total price was too large\n* `26` - SportRestricted: Sport restricted for placing bets\n* `27` - EventMarkedStale: Event has not received any updates from source for too long and bets cannot be accepted for it\n* `28` - ResponseTimeoutExceeded: Bet placement response timed out\n* `29` - ExoticSelectionInvalidFormat: Exotics selection has invalid format\n* `39` - ExoticTypeNotMatchWithMarket: Exotics selection type does not match with market type\n* `40` - ExoticsMultibetNotSupported: Exotics multibet is not supported\n* `50` - SelectionLimitExceeded: Prematch selection Limit Exceeded\n* `51` - SelectionVarLimitExceeded: Prematch selection CCF Limit Exceeded\n* `52` - MarketIsNotFixedExotics: Requested market is not Fixed Exotics market\n* `53` - FixedExoticsPriceNotFoundBySelection: The fixed exotics price was not found by selection\n* `54` - FixedExoticsSelectionContainsMultipleCombinations: Multiple combinations are not supported for fixed exotics\n* `55` - PlayerBetLimitExceeded: Liability is over player bet liability limit\n* `56` - StartingPriceMarketLive: Starting price market went live\n* `57` - StartingPriceMultibetNotSupported: Starting price multibet is not supported\n* `58` - StartingPriceMarketMatch: Starting price market bets should not contain price\n* `59` - NullBetPriceIsNotSupportedForThisMarket: Null bet price is not supported for this market\n* `60` - CombinationContainsScratchedCompetitorNumber: Racing selection contains scratched competitor\n* `61` - BetBuilderNotSupported: Bet Builder is not supported\n* `62` - AlternativeOddsExpired: Alternative odds is expired or not available\n* `63` - AlternativeOddsPriceInvalid: Alternative odds price is invalid\n* `64` - AlternativeOddsBetItemsInvalid: Alternative odds bet item(s) are invalid\n* `65` - AlternativeOddsBetAmountInvalid: Alternative odds bet amount is invalid\n* `66` - PlayerMultiBetLimitExceeded: Liability is over player multi bet liability limit\n* `67` - SegmentNotFound: Segment not found\n* `68` - LiveBetNotSupportedForPickem: Live betting not supported for Pickem bets\n* `69` - MarketIsContiguous: Market can't be mixed with other Pickem markets in this bet\n* `70` - SegmentIsDisabled: Segment is disabled\n* `71` - BetBuilderDuplicatedMarkets: Bet Builder bet item contained duplicated markets\n* `72` - StakeTooLow: Stake is too low\n* `73` - BetPlacementIsDisabled: Bet placement was manually disabled\n* `74` - NotAllLegsAreEachWay: Bet contains each-way leg along with standard leg(s)\n* `75` - PartnerMismatch: Bet segment does not belong to the configured partner\n* `76` - OverridesNotSupportedForThisContent: Validation overrides are not supported for this content\n* `77` - CannotMixAlternativeOddsAndRiskManagementOverride: Alternative odds offer and risk management override cannot be used together\n* `100` - UnexpectedError: Something went wrong","format":"int32"},"Marlin.SportsbetApi.Host.Models.BetPlacement.BetItemRequestViewModel":{"type":"object","properties":{"eventId":{"type":"integer","description":"Event id on which the bet is placed.","format":"int64"},"marketId":{"type":"integer","description":"Market id on which the bet is placed. Should be `-1` for BetBuilder bet.","format":"int64"},"selectionId":{"type":"integer","description":"Selection id on which the bet is placed. Should be `-1` for exotics/BetBuilder bet.","format":"int64"},"racingSelection":{"type":"string","description":"Racing exotics selection.","nullable":true},"price":{"type":"number","description":"Price on which the bet is placed. Should be `null` for tote exotics and SP bet.","format":"double","nullable":true},"betBuilderBetItems":{"type":"array","items":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderBetItemViewModel"},"nullable":true}},"additionalProperties":false,"description":"Represents item inside the bet in the request."},"Marlin.SportsbetApi.Host.Models.BetPlacement.AlternativeOddsResultModel":{"type":"object","properties":{"id":{"type":"string","description":"Alternative odds offer identifier","nullable":true},"alternativePrice":{"type":"number","description":"Alternative odds offer value","format":"double"},"createdAt":{"type":"string","description":"Timestamp the offer was created","format":"date-time"},"expiredAt":{"type":"string","description":"Timestamp the offer gets expired","format":"date-time"}},"additionalProperties":false},"Microsoft.AspNetCore.Mvc.ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/api/players/{playerId}/Bets/bet-builder-price":{"post":{"tags":["Bets"],"summary":"Gets bet builder price.","operationId":"Get betbuilder price","parameters":[{"name":"playerId","in":"path","description":"Id of player which placed a bet.","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Bet price request.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceRequestViewModel"}],"description":"Represents BetBuilder price request."}},"text/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceRequestViewModel"}],"description":"Represents BetBuilder price request."}},"application/*+json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceRequestViewModel"}],"description":"Represents BetBuilder price request."}}}},"responses":{"200":{"description":"Returns price for potential betbuilder bet.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceResultViewModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceResultViewModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/Marlin.SportsbetApi.Host.Models.BetPlacement.BetBuilderPriceResultViewModel"}}}},"400":{"description":"Request arguments are not valid.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Unexpected error occurred."}}}}}}
```
