It is based on a rest server that accepts json requests describing the scenario to be analyzed and the result will be a json with the evaluation of the best move or an error in case the hand is not properly set. The json requests and response need to be compressed using zLib.
We have two APIs available, which are (API_name): getScenario and evaluatePosition The getScenario gives you the best move to play and it uses an internal randomizator algorithm to choose the correct move in case of a mixed strategy. EvaluatePosition gives the probabilities and EVs of the best triplet (FOLD, CHECK/CALL, BET/RAISE) for each move. For BET/RAISE this API provides only the pot percentage.
When the API answers a "potPctRaiseLevel", which applies to the API "EvaluatePosition", it means the pot fraction to associate to a BET or RAISE. The "Pot" as condidered by PokerSnowie is the amount on the table considering that hero would have called. See the following example to understand how it's computed.

In this example "potPctRaiseLevel": 1 means raise by 120 (or "raise to 160"). In fact the money at the table, considering our hypotetical CALL would be 120.

In this second example "potPctRaiseLevel": 0.25 means raise by 45 (or "raise to 75"). In fact: 1 pot = 120 + 30 (snowie2 BET) + 30 (hero hypotetical CALL) = 180 0.25 pot = raise by 45 which is raise to 75
The authentication will be done using a specific token that will be generated. Moreover we require IP filtering, therfore you need to provide us the static IP addresses from where you plan to connect.
In order to see how the main instrutions to build a request, look at the below information.
GETSCENARIO API
request JSON
{
"API_name": "getScenario",
"token": value,
"clientId": 1,
"clientEmail": value,
"subTierId": "1",
"subTierDescription": "1",
"hand":
{
"ante": value, // blind value
"sb": value, // small blind value
"bb": value, // big blind value
"straddle": value, // 1 if it is a straddle hand 0 otherwise
"noSmallBlind": false|true,
"rakeFree": 1|0, // 1 for evaluate the scenario without considering the rake
"players": [
{
"id" : value,
"startingAmount" : value,
"cards" : [
{
"rank" : value, // 2..14=ace
"color": value // 1..4 (clubs, diamonds, hearts, spades)
},...
], //optional
"blindOutOfTurn": false|true // true if the player has posted a big blind out of turn
},... // only players dealt in. The 1st player has to be the dealer button.
],
"moves": [
{
"actionId": value, // must be int
"playerId" : value, // must be int
"move": value, // list of moves 0 fold 1 check/call 2 bet/raise
"amount": value // nb of chips put into the pot with the corresponding move
}
],
"headsUp": false|true,
"communityCards": [
{
"rank" : value, // 2..14=ace
"color": value // 1..4 (clubs, diamonds, hearts, spades)
},...]
}
}
request:
{
"API_name": "getScenario",
"clientEmail": "",
"clientId": "1",
"subTierDesc": "1",
"subTierId": "1",
"token": "",
"hand": {
"headsUp": false,
"ante": 2,
"sb": 2.0,
"bb": 4,
"straddle": 1,
"noSmallBlind": false,
"players": [
{
"blindOutOfTurn": false,
"cards": [
{
"color": 4,
"rank": 14
},
{
"color": 2,
"rank": 14
}
],
"id": 8,
"startingAmount": 922
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 1,
"startingAmount": 602
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 4,
"startingAmount": 790
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 5,
"startingAmount": 956
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 6,
"startingAmount": 890
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 7,
"startingAmount": 628
}
],
"moves": [
{
"actionId": 1,
"playerId": 6,
"move": 0,
"amount": 0
},
{
"actionId": 2,
"playerId": 7,
"move": 1,
"amount": 8
},
{
"actionId": 3,
"playerId": 8,
"move": 2,
"amount": 36
},
{
"actionId": 4,
"playerId": 1,
"move": 1,
"amount": 34.0
},
{
"actionId": 5,
"playerId": 4,
"move": 1,
"amount": 32
},
{
"actionId": 6,
"playerId": 5,
"move": 0,
"amount": 0
},
{
"actionId": 7,
"playerId": 7,
"move": 0,
"amount": 0
},
{
"actionId": 8,
"playerId": 1,
"move": 1,
"amount": 0.0
},
{
"actionId": 9,
"playerId": 4,
"move": 1,
"amount": 0
}
],
"communityCards": [
{
"color": 3,
"rank": 10
},
{
"color": 2,
"rank": 10
},
{
"color": 4,
"rank": 7
}
]
}
}
callback for getScenario API:
{
"evaluations": {
"amount": 0,
"move": 1
}
}
callback for evaluatePosition API:
{
"evaluations": {
"snowie": {
"betRaiseEval": 0.7718259692192078,
"betRaiseProb": 0.6521201133728027,
"checkCallEval": -0.012822868302464485,
"checkCallProb": 0.347880095243454,
"foldEval": -1,
"foldProb": 0,
"potPctRaiseLevel": 0.3499999940395355
}
}
}

request:
{
"API_name": "getScenario",
"clientEmail": "",
"clientId": "1",
"subTierDesc": "1",
"subTierId": "1",
"token": "",
"hand": {
"noSmallBlind": false,
"ante": 20.0,
"rakeFree": 1,
"sb": 20.0,
"bb": 40.0,
"headsUp": false,
"straddle": 0,
"communityCards": [
{
"color": 2,
"rank": 13
},
{
"color": 2,
"rank": 7
},
{
"color": 3,
"rank": 7
},
{
"color": 1,
"rank": 10
},
{
"color": 3,
"rank": 14
}
],
"moves": [
{
"actionId": 1,
"amount": 0.0,
"move": 0,
"playerId": 4
},
{
"actionId": 2,
"amount": 0.0,
"move": 0,
"playerId": 5
},
{
"actionId": 3,
"amount": 80.0,
"move": 2,
"playerId": 1
},
{
"actionId": 4,
"amount": 60.0,
"move": 1,
"playerId": 2
},
{
"actionId": 5,
"amount": 0.0,
"move": 0,
"playerId": 3
},
{
"actionId": 6,
"amount": 0.0,
"move": 1,
"playerId": 2
},
{
"actionId": 7,
"amount": 0.0,
"move": 1,
"playerId": 1
},
{
"actionId": 8,
"amount": 100.0,
"move": 2,
"playerId": 2
},
{
"actionId": 9,
"amount": 100.0,
"move": 1,
"playerId": 1
}
],
"players": [
{
"blindOutOfTurn": false,
"cards": null,
"id": 1,
"startingAmount": 19526.0
},
{
"blindOutOfTurn": false,
"cards": [
{
"color": 2,
"rank": 12
},
{
"color": 2,
"rank": 8
}
],
"id": 2,
"startingAmount": 18993.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 3,
"startingAmount": 9807.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 4,
"startingAmount": 20642.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 5,
"startingAmount": 4287.0
}
]
}
}
callback for getScenario API:
{
"evaluations": {
"amount": 125,
"move": 2
}
}
callback for evaluatePosition API:
{
"evaluations": {
"snowie": {
"betRaiseEval": 0.3950706124305725,
"betRaiseProb" : 1,
"checkCallEval": 0.3313206136226654,
"checkCallProb": 0,
"foldEval": 0,
"foldProb": 0,
"potPctRaiseLevel": 0.25
}
}
}

request:
{
"API_name": "getScenario",
"clientEmail": "",
"clientId": "1",
"subTierDesc": "1",
"subTierId": "1",
"token": "",
"hand": {
"ante": 2.5,
"bb": 10.0,
"rakeFree": 1,
"sb": 5.0,
"straddle": 1,
"headsUp": false,
"noSmallBlind": false,
"communityCards": [
{
"color": 2,
"rank": 3
},
{
"color": 3,
"rank": 6
},
{
"color": 2,
"rank": 12
},
{
"color": 3,
"rank": 12
}
],
"moves": [
{
"actionId": 1,
"amount": 0.0,
"move": 0,
"playerId": 4
},
{
"actionId": 2,
"amount": 0.0,
"move": 0,
"playerId": 5
},
{
"actionId": 3,
"amount": 0.0,
"move": 0,
"playerId": 6
},
{
"actionId": 4,
"amount": 56.0,
"move": 2,
"playerId": 7
},
{
"actionId": 5,
"amount": 56.0,
"move": 1,
"playerId": 8
},
{
"actionId": 6,
"amount": 0.0,
"move": 0,
"playerId": 1
},
{
"actionId": 7,
"amount": 0.0,
"move": 0,
"playerId": 2
},
{
"actionId": 8,
"amount": 0.0,
"move": 0,
"playerId": 3
},
{
"actionId": 9,
"amount": 0.0,
"move": 1,
"playerId": 7
},
{
"actionId": 10,
"amount": 0.0,
"move": 1,
"playerId": 8
},
{
"actionId": 11,
"amount": 0.0,
"move": 1,
"playerId": 7
},
{
"actionId": 12,
"amount": 110.0,
"move": 2,
"playerId": 8
}
],
"players": [
{
"blindOutOfTurn": false,
"cards": null,
"id": 8,
"startingAmount": 2196.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 1,
"startingAmount": 2119.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 2,
"startingAmount": 2025.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 3,
"startingAmount": 2291.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 4,
"startingAmount": 864.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 5,
"startingAmount": 11836.0
},
{
"blindOutOfTurn": false,
"cards": null,
"id": 6,
"startingAmount": 1100.0
},
{
"blindOutOfTurn": false,
"cards": [
{
"color": 2,
"rank": 10
},
{
"color": 1,
"rank": 14
}
],
"id": 7,
"startingAmount": 4828.0
}
]
}
}
callback for getScenario API:
{
"evaluations": {
"amount": 0,
"move": 0
}
}
callback for evaluatePosition API:
{
"evaluations": {
"snowie": {
"betRaiseEval": -1.8364663124084473,
"betRaiseProb": 0,
"checkCallEval": -0.6367931365966797,
"checkCallProb": 0,
"foldEval": 0,
"foldProb": 1,
"potPctRaiseLevel": 0.28985506296157837
}
}
}
