Six4Win.WebApi

<back to all web services

GetFeed

The following routes are available for this service:
All Verbs/qry/feed
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


class RoundStatus(IntEnum):
    PENDING = 0
    IN_PROGRESS = 1
    ENDED = 2


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CountdownConfiguration:
    lockdown_step_from_end: int = 0
    assert_lockdown_step_from_end: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DrawConfiguration:
    intro_interval_in_ms: int = 0
    animation_interval_in_ms: int = 0
    outro_interval_in_ms: int = 0


class RTPStrategies(IntEnum):
    RNG = 0
    ACCUMULATOR = 1


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HappyHourConfiguration:
    is_happy_hour: bool = False
    odds_modifier: Decimal = decimal.Decimal(0)
    round_pool_bonus_pct: Decimal = decimal.Decimal(0)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RoundConfiguration:
    coefficients: Optional[RecordList[float]] = None
    is_double_triple_active: bool = False
    is_jackpot5_active: bool = False
    countdown_duration_in_seconds: int = 0
    countdown_configuration: Optional[CountdownConfiguration] = None
    draw_configuration: Optional[DrawConfiguration] = None
    results_duration_in_seconds: int = 0
    rtp_strategy: Optional[RTPStrategies] = None
    happy_hour_configuration: Optional[HappyHourConfiguration] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BettingApp:
    name: Optional[str] = None
    version: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Ref:
    id: Optional[str] = None
    val: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RefEx(Ref):
    data: Optional[RecordDictionary[str, str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Origin:
    application: Optional[BettingApp] = None
    ip: Optional[str] = None
    organization: Optional[RefEx] = None
    region: Optional[Ref] = None
    location_group: Optional[Ref] = None
    location: Optional[RefEx] = None
    device: Optional[RefEx] = None
    clerk: Optional[Ref] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class JackPot5Winner:
    bet_id: Optional[str] = None
    nr_of_combinations: int = 0
    winnings_amount: Decimal = decimal.Decimal(0)
    origin: Optional[Origin] = None
    bettor: Optional[Ref] = None
    payload: Optional[Dict[str, str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Jackpot5Info:
    is_hit: bool = False
    amount_accumulated: Decimal = decimal.Decimal(0)
    amount_awarded: Decimal = decimal.Decimal(0)
    nr_of_winners: int = 0
    jack_pot5_winners: Optional[List[JackPot5Winner]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SuperWinWinner:
    is_drawn: bool = False
    drawn_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
    round_id: Optional[str] = None
    bet_id: Optional[str] = None
    slip_id: Optional[str] = None
    origin: Optional[Origin] = None
    bettor: Optional[Ref] = None
    code: Optional[str] = None
    amount: Decimal = decimal.Decimal(0)
    location_address_or_bettor_info: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SuperWinInfo:
    is_active: bool = False
    winner: Optional[SuperWinWinner] = None
    available_amount: Decimal = decimal.Decimal(0)
    all_prizes_awarded: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WinnerByCode:
    round_id: Optional[str] = None
    drawn_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
    slip_id: Optional[str] = None
    bet_id: Optional[str] = None
    code: Optional[str] = None
    amount: Decimal = decimal.Decimal(0)
    origin: Optional[Origin] = None
    bettor: Optional[Ref] = None
    location_address_or_bettor_info: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GlobalCodePotInfo:
    is_active: bool = False
    is_drawn: bool = False
    winner: Optional[WinnerByCode] = None
    inert_code: Optional[str] = None
    accumulation: Decimal = decimal.Decimal(0)


class Stages(IntEnum):
    NONE = 0
    COUNTDOWN = 1
    PROCESSING = 2
    DRAW = 3
    RESULTS = 4


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RoundProgress:
    stage: Optional[Stages] = None
    step: int = 0
    steps: int = 0
    utc_timestamp: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Round:
    id: Optional[str] = None
    created_at: datetime.datetime = datetime.datetime(1, 1, 1)
    updated_at: datetime.datetime = datetime.datetime(1, 1, 1)
    should_start_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
    started_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
    status: Optional[RoundStatus] = None
    configuration: Optional[RoundConfiguration] = None
    sequence: Optional[str] = None
    jackpot5_info: Optional[Jackpot5Info] = None
    super_win_info: Optional[SuperWinInfo] = None
    global_code_pot_info: Optional[GlobalCodePotInfo] = None
    progress: Optional[RoundProgress] = None
    is_locked: bool = False
    is_calculated: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Feed:
    id: Optional[str] = None
    round: Optional[Round] = None
    last_jackpot5_info: Optional[Jackpot5Info] = None
    super_win_info: Optional[SuperWinInfo] = None
    global_code_pot_info: Optional[GlobalCodePotInfo] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GetFeed:
    pass


T = TypeVar('T')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RecordList(Generic[T], List[T]):
    pass


TKey = TypeVar('TKey')
TVal = TypeVar('TVal')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RecordDictionary(Generic[TKey, TVal], Dict[TKey,TVal]):
    pass

Python GetFeed DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /qry/feed HTTP/1.1 
Host: s4w2.api.bettor.cc 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	id: String,
	round: 
	{
		id: String,
		createdAt: 0001-01-01,
		updatedAt: 0001-01-01,
		shouldStartAtUtc: 0001-01-01,
		startedAtUtc: 0001-01-01,
		status: 0,
		configuration: 
		{
			coefficients: 
			[
				0
			],
			isDoubleTripleActive: False,
			isJackpot5Active: False,
			countdownDurationInSeconds: 0,
			countdownConfiguration: 
			{
				lockdownStepFromEnd: 0,
				assertLockdownStepFromEnd: 0
			},
			drawConfiguration: 
			{
				introIntervalInMs: 0,
				animationIntervalInMs: 0,
				outroIntervalInMs: 0
			},
			resultsDurationInSeconds: 0,
			rtpStrategy: 0,
			happyHourConfiguration: 
			{
				isHappyHour: False,
				oddsModifier: 0,
				roundPoolBonusPct: 0
			}
		},
		sequence: String,
		jackpot5Info: 
		{
			isHit: False,
			amountAccumulated: 0,
			amountAwarded: 0,
			nrOfWinners: 0,
			jackPot5Winners: 
			[
				{
					betId: String,
					nrOfCombinations: 0,
					winningsAmount: 0,
					origin: 
					{
						application: 
						{
							name: String,
							version: String
						},
						ip: String,
						organization: 
						{
							data: 
							{
								String: String
							},
							id: String,
							val: String
						},
						region: 
						{
							id: String,
							val: String
						},
						locationGroup: 
						{
							id: String,
							val: String
						},
						location: 
						{
							data: 
							{
								String: String
							},
							id: String,
							val: String
						},
						device: 
						{
							data: 
							{
								String: String
							},
							id: String,
							val: String
						},
						clerk: 
						{
							id: String,
							val: String
						}
					},
					bettor: 
					{
						id: String,
						val: String
					},
					payload: 
					{
						String: String
					}
				}
			]
		},
		superWinInfo: 
		{
			isActive: False,
			winner: 
			{
				isDrawn: False,
				drawnAtUtc: 0001-01-01,
				roundId: String,
				betId: String,
				slipId: String,
				origin: 
				{
					application: 
					{
						name: String,
						version: String
					},
					ip: String,
					organization: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					region: 
					{
						id: String,
						val: String
					},
					locationGroup: 
					{
						id: String,
						val: String
					},
					location: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					device: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					clerk: 
					{
						id: String,
						val: String
					}
				},
				bettor: 
				{
					id: String,
					val: String
				},
				code: String,
				amount: 0,
				locationAddressOrBettorInfo: String
			},
			availableAmount: 0,
			allPrizesAwarded: False
		},
		globalCodePotInfo: 
		{
			isActive: False,
			isDrawn: True,
			winner: 
			{
				roundId: String,
				drawnAtUtc: 0001-01-01,
				slipId: String,
				betId: String,
				code: String,
				amount: 0,
				origin: 
				{
					application: 
					{
						name: String,
						version: String
					},
					ip: String,
					organization: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					region: 
					{
						id: String,
						val: String
					},
					locationGroup: 
					{
						id: String,
						val: String
					},
					location: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					device: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					clerk: 
					{
						id: String,
						val: String
					}
				},
				bettor: 
				{
					id: String,
					val: String
				},
				locationAddressOrBettorInfo: String
			},
			inertCode: String,
			accumulation: 0
		},
		progress: 
		{
			stage: 0,
			step: 0,
			steps: 0,
			utcTimestamp: 0001-01-01
		},
		isLocked: False,
		isCalculated: False
	},
	lastJackpot5Info: 
	{
		isHit: False,
		amountAccumulated: 0,
		amountAwarded: 0,
		nrOfWinners: 0,
		jackPot5Winners: 
		[
			{
				betId: String,
				nrOfCombinations: 0,
				winningsAmount: 0,
				origin: 
				{
					application: 
					{
						name: String,
						version: String
					},
					ip: String,
					organization: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					region: 
					{
						id: String,
						val: String
					},
					locationGroup: 
					{
						id: String,
						val: String
					},
					location: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					device: 
					{
						data: 
						{
							String: String
						},
						id: String,
						val: String
					},
					clerk: 
					{
						id: String,
						val: String
					}
				},
				bettor: 
				{
					id: String,
					val: String
				},
				payload: 
				{
					String: String
				}
			}
		]
	},
	superWinInfo: 
	{
		isActive: False,
		winner: 
		{
			isDrawn: False,
			drawnAtUtc: 0001-01-01,
			roundId: String,
			betId: String,
			slipId: String,
			origin: 
			{
				application: 
				{
					name: String,
					version: String
				},
				ip: String,
				organization: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				region: 
				{
					id: String,
					val: String
				},
				locationGroup: 
				{
					id: String,
					val: String
				},
				location: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				device: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				clerk: 
				{
					id: String,
					val: String
				}
			},
			bettor: 
			{
				id: String,
				val: String
			},
			code: String,
			amount: 0,
			locationAddressOrBettorInfo: String
		},
		availableAmount: 0,
		allPrizesAwarded: False
	},
	globalCodePotInfo: 
	{
		isActive: False,
		isDrawn: True,
		winner: 
		{
			roundId: String,
			drawnAtUtc: 0001-01-01,
			slipId: String,
			betId: String,
			code: String,
			amount: 0,
			origin: 
			{
				application: 
				{
					name: String,
					version: String
				},
				ip: String,
				organization: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				region: 
				{
					id: String,
					val: String
				},
				locationGroup: 
				{
					id: String,
					val: String
				},
				location: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				device: 
				{
					data: 
					{
						String: String
					},
					id: String,
					val: String
				},
				clerk: 
				{
					id: String,
					val: String
				}
			},
			bettor: 
			{
				id: String,
				val: String
			},
			locationAddressOrBettorInfo: String
		},
		inertCode: String,
		accumulation: 0
	}
}