# 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":"[T1159-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"},"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.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"},"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* `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,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* `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":"References the original bet, if an alternative price was offered for it, due to the exceeded liability","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],"type":"integer","description":"* `1` - Success\n* `2` - FormatError\n* `3` - PrecisionMismatch\n* `4` - UnsupportedCurrency","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":"[T1159-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"},"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.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":"[T1159-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* `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,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* `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."}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.odds88.io/odds88-client-api/odds88-api-endpoints/bets-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
