Poker starting hand combinations calculator
The poker starting hand combinations calculator turns a familiar preflop label into an exact number of two-card holdings.
Run — free
Enter standard notation such as AA, AKs, AKo, or AK, or use a clear phrase such as pocket aces or seven-six suited connectors. The result identifies the normalized hand class, reports its combination count, and shows the counting logic. It is useful for range construction, blocker analysis, study notes, and checking calculations without confusing hand combinations with equity or drawing odds.
What a starting-hand combination means
A starting-hand class is a label for several concrete two-card holdings. Pocket aces, for example, is not one physical hand: it can be ace of spades with ace of hearts, ace of spades with ace of diamonds, and four other suit pairings. Those concrete holdings are called combinations, or combos. This calculator counts combinations before any community cards are dealt and before any known cards are removed from the deck. Enter a pocket pair as AA or as pocket aces. Enter two different ranks with an s suffix for suited, an o suffix for offsuit, or no suffix when both suited and offsuit holdings should be included. The output normalizes reversed notation, so KAs is treated as AKs, and explains the arithmetic behind the result. The calculation answers how many physical starting hands belong to the described class. It does not estimate win probability, equity against a range, pot odds, or the likelihood of improving after the flop. Keeping those questions separate prevents a common category error in poker study.
Why the exact counts are 6, 4, 12, and 16
Every rank has four cards, one in each suit. For a pocket pair, two cards must be selected from the four cards of the same rank. The unordered selection is C(4,2), which equals 6. For a suited hand with two different ranks, the suit can be spades, hearts, diamonds, or clubs, giving exactly 4 holdings. For an offsuit hand, selecting one of four cards of the first rank and one of four cards of the second rank initially gives 16 holdings. Four of those share a suit, so excluding them leaves 12 offsuit combinations. If suitedness is not restricted, all 16 holdings remain: 4 suited plus 12 offsuit. The same rules apply whether the ranks are adjacent. Therefore, seven-six suited connectors has 4 combinations, just like ace-king suited, while seven-six without a suitedness restriction has 16. The word connectors describes rank structure and strategic behavior; it does not create a different suit-counting formula. This fixed combinatorial structure makes the result deterministic and exact.
Using combo counts in range work
Combination counts give weight to a preflop range. A range containing AA and AKs contains 10 combinations before card removal: 6 for the pair and 4 for the suited hand. Adding AKo contributes 12 more. This matters because a list of hand labels does not assign equal frequency to each label; an offsuit non-pair represents twice as many holdings as a pocket pair and three times as many as its suited version. Use the calculator to audit range charts, convert strategic hand classes into counts, or check educational examples. Remember that the answer assumes a complete 52-card deck with no known hole cards or board cards. Once cards are visible, blockers can reduce the available combinations, and that requires specifying exactly which cards have been removed. This capability deliberately does not guess blockers from context. It also treats an unsuffixed non-pair such as AK as the complete 16-combination class, not as an ambiguous request. Use AKs or AKo whenever you want only one suitedness category, and use clear rank names when writing the hand in words.
What you can do with it
Audit a preflop range
Turn each hand class in a range chart into its exact number of physical holdings and verify the total.
Check a poker lesson
Confirm why pocket pairs, suited hands, and offsuit hands carry different weights in an example.
Build study notes
Attach a normalized notation and a concise counting explanation to every starting-hand category you review.
FAQ
How many combinations does a pocket pair have?
Every pocket pair has 6 combinations because two cards are chosen from the four cards of that rank.
How many combinations does a suited non-pair have?
It has 4 combinations, one for each suit shared by the two ranks.
How many combinations does an offsuit non-pair have?
It has 12 combinations: 16 ways to choose the two ranks minus the 4 same-suit holdings.
What does AK without a suffix mean?
It includes both suited and offsuit ace-king holdings, for 16 combinations in total.
Does the calculator account for blockers?
No. It counts the full preflop hand class before any known cards are removed from the deck.
What does an API request cost?
Each API request costs $0.002. The calculation is also suitable for the free browser runner.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/hobby/poker-hand-combinations \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"AKs"}'const res = await fetch("https://api.kit.forhosting.com/hobby/poker-hand-combinations", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "AKs"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/poker-hand-combinations",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "AKs"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/poker-hand-combinations", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"AKs"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"AKs"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/poker-hand-combinations", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "AKs"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.poker_hand_combinations",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |