Developers - PokerSnowie API

How to use our API

General Information

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.

APIs available

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.

How the pot fraction is computed

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.

https://cmsprod.pokersnowie.com/uploads/potpct1_bcee708b1f.png

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.

https://cmsprod.pokersnowie.com/uploads/potpct2_c4cf791e11.png

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

Authentication

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.

How to build a request

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)
			},...]
	}
}

Example 1

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
        }
    }
}

https://cmsprod.pokersnowie.com/uploads/scenario1_7d163e01fd.png
Example 2

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
        }
    }
}

https://cmsprod.pokersnowie.com/uploads/scenario2_08665059f6.png
Example 3


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
        }
    }
}

https://cmsprod.pokersnowie.com/uploads/scenario3_9ca6e69842.png

We do have a few examples how to build the Api requests