Strategy Profiles
Shifts the strategy based on a profile. Strategy profiles define how the API shapes player behavior, allowing you to select different play styles such as tight, loose, aggressive, or passive.
The default profile is GTO. Any request that does not specify a profile will automatically use the GTO baseline. Each strategy profile is defined by how its expected win loss, VPIP, and PFR, and every profile is tied to a specific game format.
Profiles affect only preflop behavior, and only in situations where there is at most one raise.
Profile names
You can find all profiles and statistics in the section Profiles list at the bottom of this document. Profile names are only a representation of their statistical characteristics, and the characteristics are also explained in the section Profiles list. The name notation is a combination of the following characteristics:
- Tight: Plays few hands and selects starting hands carefully.
- Loose: Plays many hands with wider ranges.
- Aggressive: Frequently bets and raises to apply pressure.
- Passive: Tends to call rather than bet or raise.
Understanding the game formats
Game format notation 3-50: the first number references the number of blinds in the game.
The second number shows a percentage relation between the ante and the big blind.
Please note that each game format has its own strategy profile list; some profiles might not be available for all game formats.
-
Example:
2-100means 2 blinds, 100%bb ante (ante is equal to the big blind).3-50means 3 blinds, 50%bb ante (ante is half of the big blind).2-0means 2 blinds, 0%bb ante (ante is zero).
-
Game formats by game type:
- MTT games are supported and have a specific format for it:
2-15. - All other formats are supported for standard holdem games.
- MTT games are supported and have a specific format for it:
Validation
- The field
request.strategy_profile.target_profile_namemust contain a valid profile name. - The profile must match an existing config by game format and the requested game must match the game format.
- The game must be in preflop street with at most one raise so far.
Building the request
The request keeps the same request.hand structure. To select a strategy profile, include request.strategy_profile.target_profile_name using one of the names from the Profile List section. See the example below:
{
"request_id": "example-01",
"hand": {(...)},
"strategy_profile": {
"target_profile_name": "tight2-aggressive8"
}
}Analyzing the response
When the profile is applied, the strategy will contain the actions with the biased results.
Also, inside the response.solution_information.strategy_profile_config you can find all the information from the profile processing.
It will show all matching information with the Profile List section by matched_profile_name (game format, expected win loss, VPIP and PFR).
It also shows the GTO VPIP and PFR for reference, and each action probability from the strategy before and after the profile adjustment.
{
"request": {},
"strategy": {<result biased actions based on profile>},
"solution_information": {
(...),
"strategy_profile_config": {
"expected_win_loss": -25.930000305175781,
"game_format": "3-50",
"matched_profile_name": "loose8-aggressive12",
"profile_pfr": 44,
"profile_vpip": 44,
"reference_gto_pfr": 16,
"reference_gto_vpip": 23,
"strategy_after_adjust": "fold:0.000000|call:0.000000|allin9900:0.000000|raise2100:0.976671|raise3000:0.023328|raise3100:0.000000|raise4600:0.000000|raise6500:0.000000|raise6400:0.000000|",
"strategy_before_adjust": "fold:0.000004|call:0.375964|allin9900:0.000000|raise2100:0.609474|raise3000:0.014557|raise3100:0.000000|raise4600:0.000000|raise6500:0.000000|raise6400:0.000000|"
},
}Strategy-profile response when no profile is applied
If no profile is applied in the request the response will contain:
{
"request": {},
"strategy": {<default results>},
"solution_information": {
(...),
"strategy_profile_config": {
"game_format": "no_profile_applied",
"matched_profile_name": "no_profile_applied",
"strategy_after_adjust": "no_profile_applied",
"strategy_before_adjust": "no_profile_applied"
},
}
}Standard Holdem Game Example:
Notice that the game is in preflop street with exactly one raise so far.
The game is a 3-blind game, since straddle_seat has a valid seat value.
Since the big blind is 200 and the ante is 100, the game format is 3-50.
If you check the profiles list, you will see that the profile loose8-aggressive12 is available for the game format 3-50.
By checking the table you will see that this profile has an expected_win_loss of -25.93 relative to GTO, a 44 VPIP and a 44 PFR.
{
"request_id": "1",
"hand": {
"gameuuid": "hand-example-067",
"game_type": "nlhe",
"game_mode_code": "normal",
"players": [
{ "seat_no": 0, "stack": 10000},
{ "seat_no": 1, "stack": 10000},
{ "seat_no": 2, "stack": 10000},
{ "seat_no": 3, "stack": 10000},
{ "seat_no": 4, "stack": 10000},
{ "seat_no": 5, "stack": 10000},
{ "seat_no": 6, "stack": 10000, "hole_cards": "AhAd"},
{ "seat_no": 7, "stack": 10000}
],
"actions": {
"entries": [
{ "action": "fold" },
{ "action": "fold" },
{ "action": "raise", "amount": 1000 }
]
},
"big_blind": 200,
"ante": 100,
"dealer_seat": 7,
"sb_seat": 0,
"bb_seat": 1,
"straddle_seat": 2,
"post_seats": []
},
"strategy_profile": {
"target_profile_name": "loose8-aggressive12"
}
}Profiles List
Each profile is defined by its expected win loss, VPIP and PFR deltas relative to the GTO profile.
- Expected win loss: is a numerical estimate of how much EV (expected value) this profile loses or wins compared to GTO. The magnitude correlates with how exploitable the profile is. Note that GTO will have an expected win loss of close to 0.
- VPIP: is the percentage of preflop hands that the player plays.
- PFR: is the percentage of preflop hands that the player raises.
Standard Holdem Game Formats
Game format: 2-0
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| standard | 2-0 | loose7-aggressive8 | -40.29 | 63 | 63 |
| standard | 2-0 | loose6-passive2 | -12.69 | 61 | 2 |
| standard | 2-0 | loose6-passive4 | -15.63 | 61 | 0 |
| standard | 2-0 | loose5-aggressive5 | -17.13 | 49 | 31 |
| standard | 2-0 | loose4-aggressive7 | -26.91 | 42 | 42 |
| standard | 2-0 | loose4-aggressive6 | -22.33 | 42 | 41 |
| standard | 2-0 | loose3-aggressive2 | -5.23 | 32 | 23 |
| standard | 2-0 | loose2-passive2 | -2.72 | 31 | 2 |
| standard | 2-0 | loose2-passive4 | -7.56 | 31 | 0 |
| standard | 2-0 | loose1-aggressive4 | -15.58 | 30 | 30 |
| standard | 2-0 | loose1-aggressive3 | -11.93 | 30 | 29 |
| standard | 2-0 | loose0-aggressive3 | -17.64 | 29 | 29 |
| standard | 2-0 | gto | -0.37 | 18 | 13 |
| standard | 2-0 | tight0-aggressive1 | -9.03 | 17 | 17 |
| standard | 2-0 | tight0-aggressive0 | -5.15 | 17 | 16 |
| standard | 2-0 | tight1-passive3 | -0.42 | 13 | 1 |
| standard | 2-0 | tight2-passive4 | -6.39 | 12 | 0 |
| standard | 2-0 | tight3-passive1 | -1.49 | 7 | 5 |
| standard | 2-0 | tight4-passive0 | -8.80 | 6 | 6 |
Game format: 2-50
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| standard | 2-50 | loose9-passive3 | -11.45 | 63 | 3 |
| standard | 2-50 | loose9-passive5 | -19.45 | 63 | 1 |
| standard | 2-50 | loose9-passive6 | -25.63 | 63 | 0 |
| standard | 2-50 | loose8-aggressive1 | -12.28 | 57 | 16 |
| standard | 2-50 | loose7-aggressive10 | -20.76 | 53 | 49 |
| standard | 2-50 | loose6-aggressive12 | -24.94 | 52 | 52 |
| standard | 2-50 | loose6-aggressive11 | -22.94 | 52 | 51 |
| standard | 2-50 | loose5-passive3 | -2.32 | 44 | 3 |
| standard | 2-50 | loose5-passive5 | -12.41 | 44 | 1 |
| standard | 2-50 | loose5-passive6 | -17.94 | 44 | 0 |
| standard | 2-50 | loose4-aggressive0 | -2.20 | 40 | 15 |
| standard | 2-50 | loose3-aggressive7 | -11.40 | 39 | 35 |
| standard | 2-50 | loose2-aggressive9 | -19.32 | 38 | 38 |
| standard | 2-50 | loose2-aggressive8 | -16.56 | 38 | 37 |
| standard | 2-50 | loose1-passive3 | -0.49 | 31 | 3 |
| standard | 2-50 | loose1-passive5 | -17.48 | 31 | 1 |
| standard | 2-50 | loose1-passive6 | -29.36 | 31 | 0 |
| standard | 2-50 | loose0-aggressive6 | -19.92 | 30 | 30 |
| standard | 2-50 | loose0-aggressive5 | -14.18 | 30 | 29 |
| standard | 2-50 | loose0-aggressive4 | -7.60 | 30 | 28 |
| standard | 2-50 | gto | -0.19 | 29 | 13 |
| standard | 2-50 | tight0-aggressive3 | -29.84 | 24 | 24 |
| standard | 2-50 | tight0-aggressive2 | -7.71 | 24 | 23 |
| standard | 2-50 | tight1-passive0 | -7.06 | 18 | 10 |
| standard | 2-50 | tight2-aggressive1 | -32.74 | 16 | 16 |
| standard | 2-50 | tight2-passive4 | -29.73 | 16 | 2 |
| standard | 2-50 | tight3-aggressive0 | -18.05 | 15 | 15 |
| standard | 2-50 | tight3-passive6 | -49.65 | 15 | 0 |
| standard | 2-50 | tight4-passive1 | -45.07 | 7 | 7 |
| standard | 2-50 | tight5-passive2 | -43.23 | 6 | 6 |
Game format: 2-100
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| standard | 2-100 | loose6-passive5 | -10.94 | 66 | 5 |
| standard | 2-100 | loose6-passive8 | -24.64 | 66 | 2 |
| standard | 2-100 | loose6-passive10 | -35.52 | 66 | 0 |
| standard | 2-100 | loose5-aggressive1 | -13.46 | 62 | 13 |
| standard | 2-100 | loose4-aggressive11 | -22.56 | 52 | 42 |
| standard | 2-100 | loose4-passive8 | -15.93 | 52 | 2 |
| standard | 2-100 | loose3-passive6 | -1.06 | 51 | 4 |
| standard | 2-100 | loose3-passive10 | -28.62 | 51 | 0 |
| standard | 2-100 | loose2-aggressive13 | -28.38 | 48 | 48 |
| standard | 2-100 | loose2-aggressive12 | -25.06 | 48 | 47 |
| standard | 2-100 | loose2-aggressive0 | -3.18 | 48 | 12 |
| standard | 2-100 | loose1-passive6 | -0.64 | 41 | 4 |
| standard | 2-100 | loose1-passive8 | -25.19 | 41 | 2 |
| standard | 2-100 | loose0-aggressive8 | -13.78 | 40 | 30 |
| standard | 2-100 | loose0-passive10 | -44.22 | 40 | 0 |
| standard | 2-100 | gto | 1.59 | 38 | 12 |
| standard | 2-100 | tight0-aggressive10 | -26.50 | 36 | 36 |
| standard | 2-100 | tight0-aggressive9 | -21.58 | 36 | 35 |
| standard | 2-100 | tight1-aggressive7 | -10.66 | 33 | 26 |
| standard | 2-100 | tight2-aggressive8 | -31.14 | 30 | 30 |
| standard | 2-100 | tight3-aggressive5 | -10.67 | 27 | 24 |
| standard | 2-100 | tight3-passive0 | -7.09 | 27 | 11 |
| standard | 2-100 | tight4-aggressive7 | -49.72 | 26 | 26 |
| standard | 2-100 | tight4-aggressive6 | -28.64 | 26 | 25 |
| standard | 2-100 | tight4-passive7 | -38.31 | 26 | 3 |
| standard | 2-100 | tight5-passive9 | -78.45 | 25 | 1 |
| standard | 2-100 | tight6-aggressive4 | -59.71 | 19 | 19 |
| standard | 2-100 | tight7-aggressive3 | -54.55 | 18 | 18 |
| standard | 2-100 | tight7-aggressive2 | -30.88 | 18 | 17 |
| standard | 2-100 | tight8-passive1 | -82.40 | 10 | 10 |
| standard | 2-100 | tight9-passive2 | -80.76 | 9 | 9 |
| standard | 2-100 | tight10-passive3 | -76.71 | 8 | 8 |
| standard | 2-100 | tight11-passive4 | -94.51 | 7 | 7 |
| standard | 2-100 | tight11-passive6 | -66.30 | 7 | 4 |
Game format: 3-0
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| standard | 3-0 | loose10-passive5 | -41.28 | 66 | 1 |
| standard | 3-0 | loose10-passive6 | -47.08 | 66 | 0 |
| standard | 3-0 | loose9-passive2 | -32.89 | 64 | 6 |
| standard | 3-0 | loose8-aggressive6 | -35.10 | 57 | 38 |
| standard | 3-0 | loose7-aggressive8 | -32.29 | 49 | 49 |
| standard | 3-0 | loose7-aggressive7 | -29.61 | 49 | 48 |
| standard | 3-0 | loose6-passive5 | -17.32 | 41 | 1 |
| standard | 3-0 | loose6-passive6 | -21.23 | 41 | 0 |
| standard | 3-0 | loose5-passive2 | -9.42 | 40 | 6 |
| standard | 3-0 | loose4-aggressive3 | -10.79 | 37 | 26 |
| standard | 3-0 | loose3-aggressive5 | -20.47 | 33 | 33 |
| standard | 3-0 | loose3-aggressive4 | -14.95 | 33 | 32 |
| standard | 3-0 | loose2-aggressive1 | -2.04 | 26 | 20 |
| standard | 3-0 | loose1-aggressive2 | -7.57 | 25 | 24 |
| standard | 3-0 | loose0-aggressive2 | -16.49 | 24 | 24 |
| standard | 3-0 | loose0-passive3 | -2.13 | 24 | 5 |
| standard | 3-0 | loose0-passive5 | -8.67 | 24 | 1 |
| standard | 3-0 | loose0-passive6 | -11.95 | 24 | 0 |
| standard | 3-0 | gto | -0.07 | 18 | 14 |
| standard | 3-0 | tight0-aggressive0 | -20.96 | 17 | 17 |
| standard | 3-0 | tight1-passive4 | -0.94 | 14 | 4 |
| standard | 3-0 | tight2-passive5 | -11.12 | 13 | 1 |
| standard | 3-0 | tight2-passive6 | -18.93 | 13 | 0 |
| standard | 3-0 | tight3-passive1 | -2.64 | 10 | 7 |
| standard | 3-0 | tight4-passive0 | -19.49 | 9 | 9 |
Game format: 3-50
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| standard | 3-50 | loose11-passive6 | -41.47 | 61 | 2 |
| standard | 3-50 | loose11-passive7 | -52.29 | 61 | 1 |
| standard | 3-50 | loose10-passive3 | -31.17 | 60 | 7 |
| standard | 3-50 | loose9-aggressive7 | -25.46 | 53 | 30 |
| standard | 3-50 | loose8-aggressive12 | -25.93 | 44 | 44 |
| standard | 3-50 | loose8-aggressive11 | -22.41 | 44 | 43 |
| standard | 3-50 | loose8-aggressive10 | -21.04 | 44 | 42 |
| standard | 3-50 | loose7-passive6 | -18.09 | 42 | 2 |
| standard | 3-50 | loose7-passive8 | -28.65 | 42 | 0 |
| standard | 3-50 | loose6-passive4 | -8.72 | 41 | 6 |
| standard | 3-50 | loose5-aggressive3 | -9.75 | 37 | 22 |
| standard | 3-50 | loose4-aggressive9 | -18.31 | 32 | 32 |
| standard | 3-50 | loose4-aggressive8 | -16.20 | 32 | 31 |
| standard | 3-50 | loose4-aggressive7 | -10.30 | 32 | 30 |
| standard | 3-50 | loose3-passive4 | -0.23 | 30 | 6 |
| standard | 3-50 | loose3-passive6 | -11.09 | 30 | 2 |
| standard | 3-50 | loose3-passive8 | -22.04 | 30 | 0 |
| standard | 3-50 | loose2-aggressive0 | -1.82 | 28 | 19 |
| standard | 3-50 | loose1-aggressive6 | -21.80 | 26 | 26 |
| standard | 3-50 | loose1-aggressive5 | -12.56 | 26 | 25 |
| standard | 3-50 | loose1-aggressive4 | -7.78 | 26 | 24 |
| standard | 3-50 | gto | 1.39 | 23 | 16 |
| standard | 3-50 | loose0-passive4 | -0.28 | 23 | 6 |
| standard | 3-50 | loose0-passive6 | -20.44 | 23 | 2 |
| standard | 3-50 | tight0-aggressive1 | -5.25 | 22 | 20 |
| standard | 3-50 | tight0-passive8 | -37.69 | 22 | 0 |
| standard | 3-50 | tight1-aggressive2 | -37.69 | 21 | 21 |
| standard | 3-50 | tight2-passive2 | -3.61 | 17 | 12 |
| standard | 3-50 | tight3-passive0 | -43.64 | 15 | 15 |
| standard | 3-50 | tight3-passive1 | -20.01 | 15 | 14 |
| standard | 3-50 | tight4-passive5 | -32.71 | 12 | 3 |
| standard | 3-50 | tight5-passive8 | -65.19 | 10 | 0 |
| standard | 3-50 | tight6-passive4 | -53.60 | 6 | 6 |
MTT
MTT game format: 2-15
| Game Type | Game Format | Profile Name | Expected Win Loss | VPIP | PFR |
|---|---|---|---|---|---|
| mtt | 2-15 | loose7-passive2 | -10.65 | 61 | 3 |
| mtt | 2-15 | loose7-passive4 | -17.14 | 61 | 1 |
| mtt | 2-15 | loose7-passive5 | -19.54 | 61 | 0 |
| mtt | 2-15 | loose6-aggressive8 | -33.89 | 59 | 59 |
| mtt | 2-15 | loose6-aggressive7 | -29.70 | 59 | 58 |
| mtt | 2-15 | loose5-aggressive2 | -12.41 | 51 | 27 |
| mtt | 2-15 | loose4-aggressive6 | -20.74 | 41 | 41 |
| mtt | 2-15 | loose4-aggressive5 | -15.44 | 41 | 40 |
| mtt | 2-15 | loose3-passive3 | -2.72 | 37 | 2 |
| mtt | 2-15 | loose3-passive5 | -8.84 | 37 | 0 |
| mtt | 2-15 | loose2-aggressive1 | -3.89 | 35 | 21 |
| mtt | 2-15 | loose1-aggressive3 | -7.96 | 31 | 29 |
| mtt | 2-15 | loose0-aggressive4 | -16.24 | 30 | 30 |
| mtt | 2-15 | gto | 0.29 | 23 | 14 |
| mtt | 2-15 | tight0-aggressive1 | -17.40 | 21 | 21 |
| mtt | 2-15 | tight0-aggressive0 | -4.05 | 21 | 20 |
| mtt | 2-15 | tight0-passive3 | -0.71 | 21 | 2 |
| mtt | 2-15 | tight0-passive5 | -10.72 | 21 | 0 |
| mtt | 2-15 | tight1-passive5 | -15.60 | 20 | 0 |
| mtt | 2-15 | tight2-passive1 | -4.30 | 12 | 8 |
| mtt | 2-15 | tight3-passive0 | -15.88 | 11 | 11 |
| mtt | 2-15 | tight4-passive4 | -17.83 | 7 | 1 |
| mtt | 2-15 | tight4-passive5 | -24.69 | 7 | 0 |
MTT request example
Notice it is a 2-blind game, since straddle_seat is -1.
Also, the big blind is 100 and the ante is 15, so the game format is 2-15, matching the MTT game format listed above.
{
"request_id":"1",
"hand":{
"gameuuid":"hand-example-073",
"game_type":"nlhe",
"game_mode_code":"mtt",
"actions":{
"entries":[]
},
"players":[
{"uid":"34574158", "seat_no":0, "stack":8360},
{"uid":"34574162", "seat_no":1, "stack":13235},
{"uid":"34574161", "seat_no":2, "stack":9235,"hole_cards":"AsAd"},
{"uid":"34574159", "seat_no":3, "stack":10235},
{"uid":"34574160", "seat_no":4, "stack":7235},
{"uid":"34574164", "seat_no":5, "stack":10235},
{"uid":"34574169", "seat_no":6, "stack":11000},
{"uid":"34574163", "seat_no":7, "stack":11500}
],
"big_blind":100,
"ante":15,
"dealer_seat":7,
"sb_seat":0,
"bb_seat":1,
"straddle_seat":-1
},
"mtt":{
"prize_pool":10000.0,
"total_registered_players":16,
"current_level":1,
"players":[
{"stack":13235, "rank":1},
{"stack":11500, "rank":2},
{"stack":11250, "rank":3},
{"stack":11000, "rank":4},
{"stack":10500, "rank":5},
{"stack":10235, "rank":6},
{"stack":10235, "rank":7},
{"stack":9235, "rank":8},
{"stack":9000, "rank":9},
{"stack":8360, "rank":10},
{"stack":7235, "rank":11},
{"stack":7000, "rank":12},
{"stack":6500, "rank":13}
],
"payout_structure":[
{"position":1, "prize_value":5000.0},
{"position":2, "prize_value":2500.0},
{"position":3, "prize_value":1000.0},
{"position":4, "prize_value":500.0},
{"position":5, "prize_value":300.0},
{"position":6, "prize_value":200.0},
{"position":7, "prize_value":200.0},
{"position":8, "prize_value":200.0},
{"position":9, "prize_value":100.0},
{"position":10, "prize_value":0.0}
],
"blind_structure":[
{"level":1, "ante":15, "big_blind":100, "small_blind":50}
]
},
"strategy_profile": {
"target_profile_name": "loose7-passive2"
}
}