# Overview

A hand history is a ledger of every piece of information and action that occurred within an online poker hand.  The hand histories must provide all of the information needed for the user to fully reconstruct the hand from the user's point of view.  This specification standardizes the format of these hand histories to ensure that all the data is available to the user regardless of where the hand was played or how the hand intends to be reviewed.

This specification is intended to be an open format that any poker site or network is free to use to ensure that they are providing complete hand history data to their players and the hand histories can be consumed via any tool of the customer's choice for review.

{% hint style="info" %}
**Online Poker Operators**

If the specification does not meet your needs for a particular use case, please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your recommended changes for review and inclusion into the specification.  The specification is versioned to allow for continual improvements.
{% endhint %}

{% hint style="info" %}
**Third Party Developers**

We strongly encourage every third party developer to support consumption of hand histories conformed to the specification.  If you believe that certain information is potentially missing or could be a benefit to be included in the hand history, please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your recommended changes for review and potential inclusion into the specification.  The specification is versioned to allow for continual improvements.
{% endhint %}

{% hint style="success" %}
**Tournament Summaries**

Where hand histories outline every action within a single poker hand, they cannot contain all of the information needed about a tournament as a whole and some of that data may not be available until the conclusion of the tournament.  Tournament summaries are equally as important as hand histories; however, due to their structural differences, there is a separate and independent [standardized tournament summary specification](https://handhistory-org.gitbook.io/standardized-tournament-summary/).
{% endhint %}


# Guiding Principles

Our guiding principles for making design choices.

This specification was created and will be maintained by following these main principles:

* **Open Standard:**&#x20;
  * **No Intentional Secrets:** The standard does NOT withhold any detail necessary for interoperable implementation. As flaws are inevitable, the standard will fix flaws identified during implementation and interoperability testing and to incorporate said changes into a revised version or superseding version of the standard to be released under terms that do not violate the open standard requirement.
  * **Availability:** The standard is freely and publicly available under royalty-free and patent-free terms.
  * **No Agreements:** There is no license agreements, NDA, grant, click-through or any other form of paper to deploy conforming implementations of the standard.
  * **Interoperable:** Implementation and consumption of the standard does not require any non open standard technology.
* **Lossless:**
  * The standard should allow for no loss of data from the real-time events from the user's perspective. The user's perspective should be completely replayable via the user at any point in time after the hand has completed.
* **Efficient:**
  * The standard should be as efficient as possible without sacrificing data loss and portability.  However, due to cheap storage, efficiency should always be the last guiding principle.


# JSON Object

Why we chose JSON.

Every standardized hand history *MUST* be in a self contained JSON [\<standardized\_hand\_history>](/json-object/untitled-1) object.

We chose JSON due to it meeting the following needs:

* It is plain text and accessible.
* It is understandable by any person without requiring third party software (other than a text editor).
* It is structured and the structure can be standardized and documented.
* It is an efficient structured format.
* JSON enjoys wide adoption and therefore development libraries across all programming languages.


# Storage Format

How is the JSON stored on the users computer.

#### File and File Name Format:

* All hand histories *MUST* be stored in plain text files.
* All hand histories files *MUST* have an .OHH file extension.
* Filenames *MUST* use only ASCII characters.

{% hint style="info" %}
Other than the above requirements, hand history filenames can be named anything.  We recommend including at least the table name in the filename.
{% endhint %}

#### Required Fields

All fields are required unless otherwise stated in the specification.

#### Hand History Grouping per File

Hand histories are self contained and theoretically can be one hand history per file or a million hand histories per file.  However, for efficiency and portability we recommend that there is one file for each table session which contains all of the hand histories played during that table session within a single file.

Since each hand history is a self-contained JSON object, to include multiple hand histories in a single file, each [hand history JSON object](/json-object/untitled-1) *MUST* be separated by one blank line such as:

```javascript
{"ohh": <standardized_hand_history_object_1>}

{"ohh": <standardized_hand_history_object_2>}

{"ohh": <standardized_hand_history_object_3>}
```

{% hint style="warning" %}
The resulting .OHH file will not be a valid JSON structure and will instead be several JSON objects; however, this trade-off allows writers to stream the hands to the end of the hand history file upon completion of the hand without re-parsing and/or re-saving previous hands.
{% endhint %}

{% hint style="info" %}
If hand histories are being provided to a user at a later date, it is acceptable to group all hand histories by date played into a single file so long as each hand history object is separated by one blank line.
{% endhint %}


# The Specification

Standardized Hand History Specification.

### Standardized Hand History specification

**Type:** Object

**Format**: JSON

**Version:** 1.4.9

**Structure:**

```javascript
{"ohh":
  {
		"spec_version": version_string,
		"site_name": string,
		"network_name": string,
		"internal_version": version_string,
		"tournament": boolean
		"tournament_info": <tournament_info_obj>,
		"game_number": string,
		"start_date_utc": string,
		"table_name": string,
		"table_handle": string,
		"table_skin": string,
		"game_type": string,
		"bet_limit": <bet_limit_obj>,
		"table_size": integer,
		"currency": string,
		"dealer_seat": integer,
		"small_blind_amount": decimal,
		"big_blind_amount": decimal,
		"ante_amount": decimal,
		"hero_player_id": integer,
		"flags": [
			string,
			string
		],
		"players": [
			<player_obj>,
			<player_obj>
		],
		"rounds": [
			<round_obj>,
			<round_obj>
		],
		"pots": [
			<pot_obj>,
			<pot_obj>
		],
		"tournament_bounties": [
			<tournament_bounty_obj>,
			<tournament_bounty_obj>
		]
	}
}
```

**Examples:**

[See examples.](/examples/holdem-cash-hand-ipoker)


# spec\_version

A string with information describing the version of the specification.

#### spec\_version

A string with information describing the version of the specification.

**Type**: string

**Format:** [version\_string](/string-formats/less-than-version_obj-greater-than)

{% hint style="danger" %}
See the [Change Log](https://hh-specs.handhistory.org/change-log/change-log) for the current version number.
{% endhint %}

**Example:**

```javascript
"spec_version": "1.4.9"
```


# site\_name

The name of the poker site.

#### **site\_name**

The name of the poker site.

**Type**: string

**Example:**

```javascript
"site_name": "MVS Poker Site"
```


# network\_name

The name of the network that the client site belongs to.

#### network\_name

The name of the network that the client site belongs to.

**Type:** string

**Example:**

```javascript
"network_name": "MVS Poker Network"
```


# internal\_version

The site's internal version and network used to create the history.

#### internal\_version

The site's internal version of the created hand history.

{% hint style="danger" %}
Any modification to the generated hand history should increment the version.  Even minor bug fixes!
{% endhint %}

**Type:** string

**Format:** [version\_string](/string-formats/less-than-version_obj-greater-than)

**Example:**

```javascript
"internal_version": "1.0.5"
```

{% hint style="info" %}
It is recommended but not required to increment the major and minor versions of the internal\_version to match the spec\_version and bug fixes increment the patch number.
{% endhint %}


# tournament

Denotes whether this is a tournament hand.

**tournament**

Whether or not this is a tournament hand.

**Nullable:** true

{% hint style="info" %}
For tournaments only.  Omit for cash games.
{% endhint %}

**Type:** boolean

**Example:**

```javascript
"tournament": true
```


# tournament\_info

A JSON object collection of tournament specific properties.

**tournament\_info**

A JSON object of tournament specific properties.

**Required:** cash games=no, required for tournaments / sit n' go's.

{% hint style="info" %}
For tournaments and sit n' go's only.  Omit for cash games.
{% endhint %}

**Type:** [\<tournament\_info\_obj>](/tournament-info-object/tournament_info_obj) object

**Structure:**

```javascript
{
    "tournament_info": <tournament_info_obj>
}
```


# game\_number

The game number or other identifier that uniquely identifies the hand.

#### **game\_number**

The game number or other identifier that uniquely identifies the hand on the network.

**Type:** string

**Example:**

```javascript
"game_number": "1234567-0"
```


# start\_date\_utc

The date and time at the start of the hand.

#### start\_date\_utc

The date and time at the start of the hand in UTC/GMT.

{% hint style="warning" %}
The time should ***always be in UTC/GMT*** regardless of the site or user's timezone.
{% endhint %}

**Type:** string

**Format:** ISO8601 format. "yyyy-mm-ddThh:mm:ssZ"

**Example:**\
See section 5.8 in the RFC: <https://tools.ietf.org/html/rfc3339#section-5.8>

```javascript
"start_date_utc": "2017-12-31T09:45:26Z"
```


# table\_name

The name of the table.

#### table\_name

The name of the table.&#x20;

{% hint style="warning" %}
If your site intends to allow Head-Up Displays, the table\_name must also be available either directly in the window title or easily computed based on the window title to uniquely identify the table window with the hand history.
{% endhint %}

**Type:** string

**Example:**

```javascript
"table_name": "Cash Table 6-max #12"
```


# table\_handle

The window handle of the table.

**table\_handle**

The window handle of the table which the hand is from.

**Nullable:** true

{% hint style="info" %}
For hands saved while playing.  Can be omitted, null, or empty string if there is no table window associated with the hand.
{% endhint %}

**Type:** handle\_string

Example:

```javascript
"table_handle": "0A123BDE"
```


# table\_skin

The display skin used at the table.

**table\_skin**

The name of the skin or theme used by the site in the table display.

**Nullable:** true

{% hint style="info" %}
For hands saved while playing.  Can be omitted, null, or empty string if there is no table window associated with the hand.
{% endhint %}

**Type:** string

**Example:**

```javascript
"table_skin": "Table Skin 1"
```


# game\_type

The type of game being played.

#### game\_type

The type of game being played.

**Type:** string

**Options:** One of:&#x20;

* Holdem
* Omaha
* OmahaHiLo
* Stud
* StudHiLo
* Draw

{% hint style="warning" %}
If your network spreads a game type that is not supported, please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your request to have the game\_type added to the specification, at which point, we'll add it and increment the spec\_version number to support the new game type.
{% endhint %}

**Example:**

```javascript
"game_type": "Holdem"
```


# bet\_limit

The betting limitations for the game.

#### bet\_limit

The limitations on the betting for the game.

**Type:** [\<bet\_limit\_obj>](/bet-limit-object/bet_limit_obj) object

**Structure:**

```javascript
"bet_limit": <bet_limit_obj>
```


# table\_size

Number of seats at the table that are available for players to be seated.

#### table\_size

Number of seats at the table that are available for players to be seated.

**Type:** integer

**Format:** Integer from 2 to 10 seats

**Example:**

```javascript
"table_size": 6
```


# currency

The currency of the game or tournament buy-in and fee.

#### currency

The currency of the game or tournament buy-in and fee as an ISO currency code.

**Type:** string

**Format:** [ISO4217 currency code](https://www.iso.org/iso-4217-currency-codes.html)

* "XPM" - Play Money; a currency with no monetary value
* "XSC" - PokerStars coin

{% hint style="warning" %}
If your site uses a coin specific to your site that has value and is not considered play money then please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your coin for inclusion in the specification at which point we will include it and increase the specification's version number.  Your site specific coin should be three characters and not conflict with any existing currencies.
{% endhint %}

**Example:**

```javascript
"currency": "USD"
```


# dealer\_seat

The seat number of the button.

#### dealer\_seat

The seat number of the button.

**Type:** integer

**Format** integer from 1 to 10

**Example:**

```javascript
"dealer_seat": 5
```


# small\_blind\_amount

Amount of the small blind.

#### small\_blind\_amount

The amount of the small blind (in the [currency](/json-object/currency) specified).

**Nullable:** true.  Can be omitted if the game does not have blinds, but required for games with blinds.

{% hint style="info" %}
If the game does not have blinds then **small\_blind\_amount** can either be ommitted, null or zero.
{% endhint %}

**Type:** decimal

**Example:**

```javascript
"small_blind_amount": 25.00
```


# big\_blind\_amount

Amount of the big blind.

#### big\_blind\_amount

The amount of the big blind (in the [currency](/json-object/currency) specified).

**Nullable:** true

{% hint style="info" %}
If the game does not have blinds then **big\_blind\_amount** can either be ommitted, null or set or zero.
{% endhint %}

**Type:** decimal

**Example:**

```javascript
"big_blind_amount": 50.00
```


# ante\_amount

Amount of the ante for all players.

#### ante\_amount

The amount of the ante, for all players, in the [currency](/json-object/currency) specified.

**Type:** decimal

**Nullable:** true

{% hint style="info" %}
If the game does not have antes then **ante\_amount** can either be ommitted, null or zero.
{% endhint %}

**Example:**

$1 ante

```javascript
"ante_amount": 1.00
```

Not an ante game:

```javascript
"ante_amount": null
```


# hero\_player\_id

The unique identifier of the player.

#### hero\_player\_id

The Id of the player (from the list of players in the player list) that is the hero.

**Type:** integer

**Nullable:** true

{% hint style="info" %}
If this is an observed hand then hero\_player\_id can either be omitted or set to null.
{% endhint %}

**Example:**

```javascript
"hero_player_id": 2
```

No hero player in the hand.

```javascript
"hero_player_id": null
```


# flags

Hand flags that may be relevant.

#### flags

Hand flags that may be relevant. Special characteristics about a hand that may be needed to fully understand the hand. This is easily expanded without hand history format change.

**Nullable:** true

{% hint style="info" %}
Can be omitted, null or empty array if there are no flags associated with the hand.
{% endhint %}

**Type:** array (of strings)

**Options:**

* "Run\_It\_Twice": Two \[or more] sets of board cards are used in the play of the same hand.  This flag should also be used for hands that are run three times or more.
* "Anonymous": The players at the table are all anonymous players and do not have a specified name or ID associated with them for historical records.
* "Observed": The hand was observed and the hero was not dealt into the hand.
* "Fast":  Fast poker game.  Any fast fold variant where once you fold you immediately move to the next hand.
* "Cap": A game that limits the amount that each player can wager per hand.
* "Bomb\_Pot": A hand with extra money in the pot and which goes directly to the flop with no preflop action.

{% hint style="warning" %}
If you need to flag a hand that is currently not an option then please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your request for inclusion in the specification at which point we will add it and increase the specification version number.
{% endhint %}

**Example:**

An anonymous table that was observed:

```
"flags": [
    "Anonymous",
    "Observed"
]
```


# players

All players at the table.

#### players

An array of [\<player\_obj>](/player-object/player-object-definition) objects for all of the players that were at the table when the hand was dealt.

**Type:** array of [\<player\_obj>](/player-object/player-object-definition) objects

**Example:**

```javascript
"players": [
		<player_obj>
		<player_obj>
]
```


# rounds

The betting rounds that occurred within the hand.

#### rounds

An array of \<round\_obj> objects betting rounds that occurred within the hand.

{% hint style="warning" %}
Every hand must have one round 0 (Preflop).
{% endhint %}

{% hint style="warning" %}
Any showdown information such as a player showing cards or mucking known cards should be included in a "Showdown" round.\
Mucking without card information can be omitted and does not require a Showdown round.
{% endhint %}

**Type:** array of [\<round\_obj>](/round-object/round_obj) objects

**Example:**

```javascript
"rounds": [
    <round_obj>,
    <round_obj>,
    <round_obj>
]
```


# pots

The pots and pot results for the hand.

#### pots

The pots and pot results for the hand.

**Type:** array of [\<pot\_obj>](/pot-object/pot_obj) objects

**Example:**

```javascript
"pots": [
    <pot_obj>,
    <pot_obj>
]
```


# tournament\_bounties

Bounties received by a player in the hand.

#### tournament\_bounties

Bounties received by a player in the hand.

**Nullable:** true

{% hint style="info" %}
For tournaments and sit n' go's only.  Omit for cash games.
{% endhint %}

**Type:** array of [\<tournament\_bounty\_obj>](/tournament-bounty-object/tournament_bounty_obj) objects

**Example:**

```javascript
"tournament_bounties": [
    <tournament_bounty_obj>,
    <tournament_bounty_obj>
]
```


# \<bet\_limit\_obj>

The bet limit object which defines the betting limitations of the game.

#### bet\_limit

The bet limit object which defines the betting limitations of the game.

**Type:** object

**Structure:**

```javascript
"bet_limit": {
    "bet_type": string,
    "bet_cap": decimal
}
```


# bet\_cap

The cap on bets for the game.

#### **bet\_cap**

The cap on bets for the game.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
If the game is not a CAP game then "bet\_cap" can either be ommitted, set to null or set to 0.
{% endhint %}

**Example:**

$20.00 CAP&#x20;

```javascript
"bet_cap": 20.00
```

Not a cap game:

```javascript
"bet_cap": null
```


# bet\_type

The betting type of the game.

#### bet\_type

The betting type for the game.

**Type:** string

**Format:** one of:

* "NL" - No Limit
* "PL" - Pot Limit
* "FL" - Fixed Limit

**Example:**

No-Limit Holdem

```javascript
"bet_type": "NL"
```


# \<player\_obj>

The player object defining one of the players in the hand.

#### player

The player object defining one of the players who was at the table when the hand was dealt.

**Type**: object

**Structure:**

```javascript
{
	"id": integer,
	"seat": integer,
	"name": string,
	"display": string,
	"starting_stack": decimal,
	"player_bounty": decimal,
	"is_sitting_out": boolean
}
```


# id

The unique identifier of the player at the table.

#### id

The unique identifier for the player within the hand. This Id is used to identify the player in all other locations of the hand history.  This player identifier is hand history specific and does not need to be the same across hand histories.

{% hint style="info" %}
The player "id" is simliar to the "seat"; however, it should be independent from the seat for the case when a player gets up and a new player is seated in the middle of a hand.  In this case, the players would have different player ids but the same seat number.
{% endhint %}

**Type:** integer

**Example:**

```javascript
"id": 3
```


# seat

The seat number where the player is seated at the table.

#### seat

The seat number where the player is seated at the table.

{% hint style="warning" %}
Seat numbers must be no larger than the number of seats at the table.

For example at a 6-max table the seat numbers must be between 1 and 6.

If a seat is empty that seat number can be omitted, but there must not be a seat number higher than the size of the table.
{% endhint %}

**Type:** integer

**Format:** integer between 1 to 10

**Example:**

```javascript
"seat": 3
```


# name

The identifying name of the player.

#### name

The identifying name of the player as displayed on the site.\
This could be different to the name shown at the table.

**Type:** string

**Example:**

```javascript
"name": "MVS Player ID"
```


# display

The display name of the player.

The name of the player as displayed at the table.

**Nullable:** true

{% hint style="info" %}
Can be omitted or null if the player's display name is the same as their real name on the poker site.
{% endhint %}

**Type**: string

**Example**:

```javascript
"display": "MVS Player"
```


# starting\_stack

The starting stack of the player at the beginning of the hand.

#### starting\_stack

The starting stack of the player at the beginning of the hand.

**Type:** decimal

**Example:**

```javascript
"starting_stack": 123.23
```


# player\_bounty

The amount that will be awarded as a bounty to the player that eliminates this player from a tournament.

#### player\_bounty

The amount that will be awarded as a bounty to the player that eliminates this player from a tournament.

**Nullable:** true

{% hint style="info" %}
For bounty tournaments only.  Omit for other games.
{% endhint %}

**Type:** decimal

**Example:**&#x20;

```javascript
"player_bounty": 1.25
```

No player bounty.

```javascript
"player_bounty": null
```


# is\_sitting\_out

Denotes whether the player is sitting out.

**is\_sitting\_out**

Whether or not the player was sitting out of the hand and was not dealt cards.

**Type**: boolean (optional)

**Nullable**: true

{% hint style="warning" %}
Can be omitted, null or false if the player was dealt into the hand.
{% endhint %}

Example:

`"is_sitting_out": true`


# \<round\_obj>

The round object defining the betting rounds that occurred during the hand.

#### round

An object defining the betting rounds that occurred during the hand.

**Type:** object

**Structure:**

```javascript
{
	"id": integer,
	"street": street_string
	"cards": [
		string,
		string,
		string
	],
	"actions": [
		<action_obj>,
		<action_obj>
	]
}

```


# id

The incrementing identifier of the round specifying the order of the rounds.

#### id

The round identifier that is an integer and increments for each successive round (specifying the order of rounds).\
The first round is round zero.

**Type:** integer

**Example:**

```javascript
"id": 0
```


# street

The name of the street/round.

#### street

The name of the street or round.

**Type:** string

**Options:**

* "Preflop"
* "Flop"
* "Turn"
* "River"
* "Showdown"

**Example:**

```
"street": "Preflop"
```

{% hint style="warning" %}
The street does not need to be unique in the rounds array.  For instance, there will be two round objects with different id's that are both "Flop" for run it twice hands.  The round id specifies the order that the round occurred.
{% endhint %}


# cards

The card(s) added to the board during the round.

#### cards

The card(s) added to the board during the round.

**Nullable:** true

{% hint style="warning" %}
Can be omitted, null or an empty array If the betting round adds no cards to the board.
{% endhint %}

{% hint style="danger" %}
Only new board cards should be specified.  For example, on the turn, only specify the one new card. DO NOT include the flop cards.
{% endhint %}

**Type:** array of [card\_string](/string-formats/card)

**Examples:**

Three flop cards: As, Kh, 5d

```javascript
"cards": [
    "As",
    "Kh",
    "5d"
]
```

One turn card:

```javascript
"cards": [
    "4h"
]
```


# actions

Actions performed in the round.

#### actions

An array of [\<action\_obj>](/action-object/action_obj) objects outlining the actions performed within the round in the order that they were performed.

{% hint style="info" %}
Maintaining the order of the actions is important.  The first action should be in array position 0, the second action in array position 1, etc.
{% endhint %}

**Type:** array of [\<action\_obj>](/action-object/action_obj) objects

**Example:**

```javascript
"actions": [
    <action_obj>,
    <action_obj>,
    ...
]
```


# \<action\_obj>

The action object defining the action within the round.

**action**

An object defining the action within the round.

**Type:** object

**Structure:**

```javascript
{
	"action_number": integer,
	"player_id": integer,
	"action": string,
	"description": string,
	"amount": decimal,
	"is_allin": boolean,
	"cards": [
		card string,
		card string
	]
}
```


# action\_number

The order of the action.

#### action\_number

An integer that increments with each action in the round.  The first action of any round has an action\_number of 0 and all subsequent actions are sequentially numbered.

**Type:** integer

**Example:**

```javascript
"action_number": 3
```


# player\_id

The unique player identifier of the player performing the action.

#### player\_id

The unique player identifier of the player performing the action as defined in the [\<player\_obj>](/player-object/player-object-definition).

**Type:** integer

**Nullable:** true

{% hint style="info" %}
Most actions require a player\_id, but some (like "Add to Pot") do not, and for those this can be omitted or set to null.
{% endhint %}

**Example:**

```javascript
"player_id": 3
```


# action

The action performed.

#### action

The action performed.

**Type:** string

**Options:**

* "Dealt Cards": Player is dealt cards.
* "Mucks Cards": The player mucks/doesn't show their cards.
* "Shows Cards": The player shows their cards. Should be included in a "Showdown" round.
* "Post Ante": The player posts an ante.
* "Post SB": The player posts the small blind.
* "Post BB": The player posts the big blind.
* "Straddle": The player posts a straddle to buy the button.
* "Post Dead": The player posts a dead blind.
* "Post Extra Blind": The player posts any other type of blind.
* "Fold": The player folds their cards.
* "Check": The player checks.
* "Bet": The player bets in an un-bet/unraised pot.
* "Raise": The player makes a raise.
* "Call": The player calls a bet/raise.
* "Added Chips" - Player adds chips to his chip stack (cash game only).
* "Sits Down" - Player sits down at a seat.
* "Stands Up" - Player removes them self from the table.
* "Add to Pot" - This can be a player or non-player action.  Can be used when the site adds money/chips to the pot to stimulate action, for example.  With this action "player\_id" can be omitted or null if it is not related to a specific player.
* "Player Adjustment" - This can be used to record any payments to or from the player **outside of the pot**.  `action_obj.amount` may be negative for fees paid by the player, or positive for bonuses paid to the player.

{% hint style="warning" %}
"Bet" is not a valid pre-flop action.
{% endhint %}

**Example:**

The player posted the big blind:

```javascript
"action": "Post BB"
```


# description

A description of the action.

**description**

An optional description of the action performed for use with actions such as "Add to Pot" or "Player Adjustment".

**Type:** string (optional)

**Nullable:** true

{% hint style="warning" %}
Can be omitted, null or empty string if no description is required for this action.
{% endhint %}

**Example:**

The player paid a fee outside of the pot:

```javascript
"action": "Player Adjustment",
"description": "Jackpot Fee Paid"
```


# amount

The amount of the action performed.

#### amount

The amount of the action performed / the total amount put in during this action.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
Can be omitted, null or zero if the action does not require a bet amount.\
For example: required for Bet and Raise or Call actions, but optional for Check and Fold actions.
{% endhint %}

{% hint style="warning" %}
For a "Raise" the "amount" specified in the \<action\_obj> should be the amount the player put into the pot for this action.

For example, if a player bet $2 and was raised then re-raised to a total of $20 the amount for the raise should be 18.00
{% endhint %}

{% hint style="warning" %}
If a player faces a $50 bet and raises $100 to $150, the amount is $150.
{% endhint %}

**Example:**

The player raises to $100 flat:

```javascript
"amount": 100.00
```


# is\_allin

Denotes whether the player has committed all of their chips to the pot.

#### is\_allin

Whether or not the player has committed all of their chips into the pot with this action.

**Type:** boolean (optional)

**Nullable:** true

{% hint style="warning" %}
Can be omitted, null or false if the player did not go all-in with this action.
{% endhint %}

**Example:**

```javascript
"is_allin": false
```


# cards

The cards involved in the action.

#### cards

The cards involved in the action.

**Nullable:** true

{% hint style="info" %}
If no cards are involved in the action then the "cards" property can be omitted or set to null.
{% endhint %}

{% hint style="warning" %}
If less than the normal number of cards is known (for example if a player shows only one card when folding) then it is valid to list only the known card(s).
{% endhint %}

**Type:** array of [card\_string](/string-formats/card)

**Example:**

Eight of clubs and ten of clubs.

```javascript
"cards": [
    "8c",
    "Tc"
]
```

No cards.

```javascript
"cards": null
```


# \<pot\_obj>

The pot object defining the pot and results for the hand.

#### pot

An object defining the pot and result of the pot for the hand.

**Type:** object

**Structure:**

```javascript
{
	"number": integer,
	"amount": decimal,
	"rake": decimal,
	"jackpot": decimal,
	"player_wins": [
		<player_win_obj>,
		<player_win_obj>
	]
}
```


# number

Identifier of the pot within the hand.

#### number

An ordered identifier of the pot within the hand.

{% hint style="warning" %}
The main pot should be 0.  The first side pot would be 1, etc.
{% endhint %}

**Type:** integer

**Example:**

```javascript
"number": 0
```


# amount

The total amount in the pot (including rake).

#### amount

The total amount in this pot (including rake).

**Type:** decimal

**Example:**

```javascript
"amount": 123.23
```


# rake

The amount of rake taken from the pot.

#### rake

The amount from the pot that was taken for rake.

**Nullable:** true

{% hint style="info" %}
Can be omitted or set to null or zero if no rake was taken from the pot
{% endhint %}

**Type:** decimal

**Example:**

```javascript
"rake": 3.23
```


# jackpot

The amount taken from the pot for a jackpot contribution.

**jackpot**

The amount taken from the pot as jackpot or other type of fee/contribution.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
For jackpot tables/games only. &#x20;

Can be omitted, null or zero for non-jackpot tables.
{% endhint %}

**Example:**&#x20;

`"jackpot": 0.50`&#x20;


# player\_wins

The wins for each player involved in the hand.

#### player\_wins

The wins for each player who won money from this pot.

**Type:** array of [\<player\_wins\_obj>](/player-wins-object/player_wins_obj) objects

**Example:**

```javascript
"player_wins": [
    <player_wins_obj>
    <player_wins_obj>
]
```


# \<player\_wins>

The object defining the win amount of the players in a pot.

#### player\_wins\_obj

An object defining the amount the player won in the pot.

**Type:** object

**Structure:**

```javascript
{
	"player_id": int,
	"win_amount": decimal,
	"cashout_amount": decimal,
	"cashout_fee": decimal,
	"bonus_amount": decimal,
	"contributed_rake": decimal
}
```


# player\_id

The unique player identifier of the player involved in the pot.

#### player\_id

The unique player identifier of the player involved in the pot as defined in the [\<player\_obj>](/player-object/player-object-definition).

**Type:** integer

**Example:**

```javascript
"player_id": 3
```


# win\_amount

The amount the player won in the pot.

#### win\_amount

The amount the player won in the pot.\
This is the amount the player actually took from the pot, excluding rake and any other fees.

**Type:** decimal

**Example:**

Player won $155.25

```javascript
"win_amount": 155.25
```


# cashout\_amount

The amount paid to the player if they cashed out of the hand.

**cashout\_amount**

The amount paid out to a player if they chose to cash out of a hand instead of playing to showdown.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
For cashout games only.  Omit if the player did not cash out.
{% endhint %}

{% hint style="warning" %}
Normally the amount the player would have won if they had gone to showdown should still be specified in "win\_amount" as normal.
{% endhint %}

**Example:**

`"cashout_amount": 12.34`


# cashout\_fee

The fee for cashing out of the hand.

**cashout\_fee**

The fee removed from the cashout amount if the player chose to cash out of the hand.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
For cashout hands only.  Can be omitted, null or zero if the player did not cash out of the hand.
{% endhint %}

**Example:**

`"cashout_fee": 1.23`


# bonus\_amount

The amount paid to the player in addition to any normal winnings.

**bonus\_amount**

The amount paid to the player in addition to any normal winnings in the hand.

**Type:** decimal (optional)

**Nullable:** true

{% hint style="info" %}
Optional.  Can be omitted, null, or zero if there was no bonus amount paid to the player.
{% endhint %}

**Example:**

`"bonus_amount": 20.00`


# contributed\_rake

The amount of rake in the pot.

```
"contributed_rake": decimal
```

#### contributed\_rake

The amount of rake taken from this specific part of the pot.

**Type:** decimal

**Example:**

Player won $95.00 from a $100 pot, with $5.00 rake.

```
"contributed_rake": 5.00
```


# \<tournament\_info\_obj>

The object defining the tournament.

#### tournament\_info

An object defining a tournament or sit n' go.

**Type:** object

**Example:**

```javascript
{
  "tournament_number": string,
  "name": string,  
  "start_date_utc": string,
  "currency": string,
  "buyin_amount": decimal,
  "fee_amount": decimal,
  "bounty_fee_amount": decimal,
  "initial_stack": integer,
  "type": string,
  "flags": array,
  "speed": object
}

```


# tournament\_number

The tournament number.

#### tournament\_number

The tournament number as specified by the site.

**Type:** string

**Example:**

```javascript
"tournament_number": "T#1000001"
```


# name

The name of the tournament.

#### name

The name of the tournament.

**Type:** string

**Example:**

```javascript
"name": "MVS Super Series 6-max"
```


# start\_date\_utc

The start date and time of the tournament.

#### start\_date\_utc

The start date and time of the tournament in UTC/GMT.

{% hint style="warning" %}
The time should ***always be in UTC/GMT*** regardless of the site or user's timezone.
{% endhint %}

**Type:** string

**Format:** ISO8601 format. "yyyy-mm-ddThh:mm:ssZ"

**Example:**\
See section 5.8 in the RFC: <https://tools.ietf.org/html/rfc3339#section-5.8>

```javascript
"start_date_utc": "2017-12-31T09:45:26Z"
```


# currency

The currency of the tournament buy-in and fee.

#### currency

The currency of the tournament buy-in and fee.

**Type:** string

**Format:** [ISO4217 currency code](https://www.iso.org/iso-4217-currency-codes.html)

* "PPC" - Poker play coin (play money)
* "XSC" - PokerStars coin

{% hint style="warning" %}
If your site uses a coin specific to your site that has value and is not considered play money then please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your coin for inclusion in the specification at which point we will include it and increase the specification's version number.  Your site specific coin should be three characters and not conflict with any existing currencies.
{% endhint %}

**Example:**

```javascript
"currency": "USD"
```


# buyin\_amount

The buy-in amount for the tournament.

#### buyin\_amount

The buy-in amount for the tournament (as specified in [currency](/tournament-info-object/tournament_info_obj/currency)).

**nullable:** true

{% hint style="info" %}
Can be omitted, null or zero if the tournament is free to enter, or if the only cost is for bounty or fee for example.
{% endhint %}

{% hint style="warning" %}
This is the buy-in amount and should not include bounty cost or tournament fees.

For example for a tournament which is $20 + $2 the **buyin\_amount** would be 20.00.\
For a €5 + €5 + €1 bounty tournament the **buyin\_amount** would be 5.00.
{% endhint %}

**Type:** decimal

**Example:**&#x20;

```javascript
"buyin_amount": 20.00
```


# bounty\_fee\_amount

The fee paid for the player's tournament bounty.

#### bounty\_fee\_amount

The fee paid for the player's tournament bounty.

**nullable:** true

{% hint style="info" %}
Can be omitted, null or zero if there is no bounty fee for the tournament.
{% endhint %}

**Type:** decimal

**Example:**

```
"bounty_fee_amount": 5.00
```


# fee\_amount

The fee paid to buy-in to the tournament.

#### fee\_amount

The fee paid to buy-in to the tournament (as specified in [currency](/tournament-info-object/tournament_info_obj/currency)).

**nullable:** true

{% hint style="info" %}
Can be omitted, null or zero if there is no fee to enter the tournament.
{% endhint %}

**Type:** decimal

**Example:**

```javascript
"fee_amount": 2.00
```


# initial\_stack

The number of chips provided to the player to start the tournament.

#### initial\_stack

The number of chips provided to the player to start the tournament.

**Type:** integer

{% hint style="warning" %}
The integer should ***not*** be formatted.  No thousands separators, etc.
{% endhint %}

{% hint style="warning" %}
If players can buy-in for different amounts and start with different stack sizes this should be the lowest "base" starting stack.
{% endhint %}

**Example:**

```javascript
"initial_stack": 1500
```


# type

The type of the tournament.

#### type

The type of the tournament - single or multi-table.

**Type:** string

**Options:**

* "STT": Single table tournament
* "MTT": Multi-table tournament

**Example:**

```javascript
"type": "STT"
```


# flags

Descriptive properties of the tournament.

#### flags

Descriptive properties of the tournament.

**Nullable:** true

{% hint style="info" %}
If the tournament does not have any flags this can be omitted, null or an empty array.
{% endhint %}

**Type:** array of strings

**Options:**

* "SNG": Sit 'N Go.
* "DON": Double or nothing.  Half of the players win double their buy-in and half win nothing.
* "Bounty": Bounty.  Players are awarded prizes for knocking out specific players.
* "Shootout": A multi-table tournament played in stages where each table plays until one player remains, with the winners moving on to the next phase.
* "Rebuy": Players are offered the opportunity to rebuy stacks of chips. There are various forms of this that include timed or when a player is felted, or a maximum number of rebuys. Rebuy tournaments where the only option for rebuy comes as the player is felted should be flagged as "Re-Entry" instead of rebuy tournaments.
* "Matrix": One buyin is split between multiple games.  Some of the prize pool is awarded for each game while another portion is awarded for the aggregate total placing between the games.
* "Push\_Or\_Fold": For every hand you are required to fold or push all-in.
* "Satellite": Prize includes entry into another tournament.
* "Steps": Steps tournament where players incrementally gain seats to additional tournaments of greater value.
* "Deep": Deep stack tournament.  Starting stacks are more big blinds than a normal tournament starting stack.
* "Multi-Entry": Players can have more than a single entry into the same tournament.  It is not synonymous with rebuy tournaments, but rather includes tournaments where a player can have more than a single entry at the beginning of the tournament.
* "Fifty50": Fifty fifty.  Fifty percent of players win a prize.  All winners are awarded the same base prize plus an amount based on the number of chips remaining in the player's stack when half of the players have been eliminated.
* "Flipout": Players' hands are all played face up without betting rounds.
* "TripleUp": A third of the players win three times their buy-in and the remaining players win nothing.
* "Lottery": Fast action games with accelerated blind level timings and shorter stacks. The prize is randomly chosen before the game begins.
* "Re-Entry": A player can re-enter a tournament after they are felted.
* "Power\_Up": Three person game with special "powers" that are not typically possible in table games.
* "Progressive-Bounty": Same as bounty tournaments except that bounty winning amounts can vary.  Usually half of the bounty amount goes to the hand winner and the other half of the bounty is added to the winner's bounty.

{% hint style="info" %}
If your site/network offers a type of tournament that cannot be properly identified via one of the above flags then please see the [Change Request Process](/contact-us/change-request-process) to learn how to submit your request to include the flag in the specification at which point, once approved, it will get included and the specification version will be increased.
{% endhint %}

**Example:**

Fifty, fifty sit 'n go.

```javascript
"flags": [
    "SNG",
    "Fifty50"
]
```


# speed

The speed the blinds increase in the tournament.

#### speed

The speed that the blinds increase in the tournament.

**Type:** object [\<speed\_obj>](/speed-object/speed_obj)

**Example:**

```javascript
"speed": <speed_obj>
```


# \<tournament\_bounty\_obj>

An object defining specific tournament bounties.

#### tournament\_bounties

An object defining specific tournament bounties won by players in a bounty tournament hand.

**Type:** object

**Structure:**

```javascript
{
	"player_id": int,
	"bounty_won": decimal,
	"defeated_player_id": int
}
```


# player\_id

Unique player identifier for the player who won the bounty.

#### player\_id

The unique player identifier, as defined in the [players](/json-object/players) array, of the player who won the bounty.

**Type:** integer

**Example:**

```javascript
"player_id": 3
```


# bounty\_won

The amount the player won for the bounty.

#### bounty\_won

The amount the player won, in the specified tournament [currency](/tournament-info-object/tournament_info_obj/currency), by obtaining the bounty.

**Type:** decimal

**Example:**

```javascript
"bounty_won": 25.50
```


# defeated\_player\_id

The unique player identifier of the player with the bounty that was eliminated.

#### defeated\_player\_id

The unique player identifier, as defined in the [players](/json-object/players) array, of the player with the bounty that was eliminated.

**Type:** integer

**Example:**

```javascript
"defeated_player_id": 8
```


# \<speed\_obj>

Speed.

#### **\<speed\_obj>**

Tournament speed.

**Type:** object

**Structure:**

```javascript
{
	"type": string,		
	"round_time": integer
}
```


# type

Description of the speed at which the blinds increase.

#### type

The description at which the speed of the blinds increase.

**Type:** string

**Options:**

* "Normal"
* "Semi-Turbo"
* "Turbo"
* "Super-Turbo"
* "Hyper-Turbo"
* "Ultra-Turbo"

{% hint style="warning" %}
Classification of the speed is at the site/network's discretion.
{% endhint %}

**Example:**

```javascript
"type": "Semi-Turbo"
```


# round\_time

The amount of time between blind increases.

#### round\_time

The amount of time (in seconds) between blinds increases.

**Type:** integer

**Format:** integer in seconds

**Example:**

Blinds increase every five minutes (300 seconds):

```javascript
"round_time": 300
```


# version\_string

The version string consisting of three parts.

The version string consists of three integer parts each separated by a period.

**Type:** string

**Format:** \<major>.\<minor>.\<patch>

* \<major> - (Integer) The major version number.  Only incremented for major changes.
* \<minor> - (Integer) The minor version number.  Incremented for non-major changes.
* \<patch> - (Integer) The patch version number.  Incremented on bug fix releases.

**Example:** &#x20;

```javascript
"1.2.0"
```


# card\_string

The definition of a card.

#### card

The definition of a card.

**Type:** string

**Format:** Rank followed by suit.

**Rank Options:**

* "A": Ace
* "K": King
* "Q": Queen
* "J": Jack
* "T": Ten
* "9": Nine
* "8": Eight
* ...
* "2": Two

**Suit Options:**

* "h": Hearts
* "s": Spades
* "d": Diamonds
* "c": Clubs

**Example:**

Ace of spades

```javascript
"As"
```


# Holdem cash hand (iPoker)

A 6-max holdem cash hand played at iPoker.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "iPoker Network",
        "site_name": "iPoker",
        "game_type": "Holdem",
        "table_name": "Brehuiesti",
        "table_size": 6,
        "game_number": "8599887794",
        "start_date_utc": "2020-04-07T14:32:50",
        "currency": "EUR",
        "ante_amount": 0.00,
        "small_blind_amount": 0.01,
        "big_blind_amount": 0.02,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "hero_player_id": 3,
        "dealer_seat": 8,
        "players": [
            {
                "name": "Player1",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 0.80,
                "seat": 1
            },
            {
                "name": "Player3",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 2.38,
                "seat": 3
            },
            {
                "name": "Player5",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 2.67,
                "seat": 5
            },
            {
                "name": "Hero",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 2.00,
                "seat": 6
            },
            {
                "name": "Player8",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 2.86,
                "seat": 8
            },
            {
                "name": "Player10",
                "id": 5,
                "player_bounty": 0,
                "starting_stack": 2.00,
                "seat": 10
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 5,
                        "action": "Post SB",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Post BB",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 3,
                        "cards": [
                            "As",
                            "Tc"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 2,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 3,
                        "action": "Raise",
                        "amount": 0.06,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 4,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 5,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 9,
                        "player_id": 0,
                        "action": "Call",
                        "amount": 0.04,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "5c",
                    "7d",
                    "Js"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 3,
                        "action": "Bet",
                        "amount": 0.06,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 0,
                        "action": "Raise",
                        "amount": 0.18,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "number": 0,
                "amount": 0.25,
                "rake": 0.01,
                "player_wins": [
                    {
                        "player_id": 0,
                        "win_amount": 0.24,
                        "contributed_rake": 0.01
                    }
                ]
            }
        ]
    }
}
```


# Holdem cash hand (PokerStars)

A holdem cash hand played at a PokerStars fast-fold table, where players were all-in.

```
{
    "ohh": {
        "spec_version": "1.4.6",
        "internal_version": "1.4.6",
        "network_name": "PokerStars",
        "site_name": "PokerStars",
        "game_type": "Holdem",
        "flags": [
            "Fast"
        ],
        "table_name": "McNaught",
        "table_size": 9,
        "game_number": "226935652098",
        "start_date_utc": "2021-05-21T07:53:30",
        "currency": "USD",
        "ante_amount": 0.00,
        "small_blind_amount": 0.01,
        "big_blind_amount": 0.02,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "dealer_seat": 1,
        "hero_player_id": 5,
        "players": [
            {
                "name": "Player1",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 2.20,
                "seat": 1
            },
            {
                "name": "Player2",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 2.98,
                "seat": 2
            },
            {
                "name": "Player3",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 2.08,
                "seat": 3
            },
            {
                "name": "Player4",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 0.93,
                "seat": 4
            },
            {
                "name": "Player5",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 3.55,
                "seat": 5
            },
            {
                "name": "Hero",
                "id": 5,
                "player_bounty": 0,
                "starting_stack": 1.97,
                "seat": 6
            },
            {
                "name": "Player7",
                "id": 6,
                "player_bounty": 0,
                "starting_stack": 0.37,
                "seat": 7
            },
            {
                "name": "Player8",
                "id": 7,
                "player_bounty": 0,
                "starting_stack": 1.80,
                "seat": 8
            },
            {
                "name": "Player9",
                "id": 8,
                "player_bounty": 0,
                "starting_stack": 2.69,
                "seat": 9
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": [
                ],
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 1,
                        "action": "Post SB",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Post BB",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 5,
                        "cards": [
                            "3h",
                            "9d"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 4,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 5,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 6,
                        "action": "Raise",
                        "amount": 0.06,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 7,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 9,
                        "player_id": 8,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 10,
                        "player_id": 0,
                        "action": "Raise",
                        "amount": 0.21,
                        "is_allin": false
                    },
                    {
                        "action_number": 11,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 12,
                        "player_id": 2,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 13,
                        "player_id": 6,
                        "action": "Raise",
                        "amount": 0.31,
                        "is_allin": true
                    },
                    {
                        "action_number": 14,
                        "player_id": 0,
                        "action": "Call",
                        "amount": 0.16,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "Qd",
                    "5h",
                    "Qh"
                ],
                "street": "Flop",
                "actions": [
                ]
            },
            {
                "id": 2,
                "cards": [
                    "7d"
                ],
                "street": "Turn",
                "actions": [
                ]
            },
            {
                "id": 3,
                "cards": [
                    "3d"
                ],
                "street": "River",
                "actions": [
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 6,
                        "cards": [
                            "Jd",
                            "Kd"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "cards": [
                            "Ah",
                            "Th"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "rake": 0.03,
                "number": 0,
                "player_wins": [
                    {
                        "player_id": 6,
                        "win_amount": 0.74,
                        "cashout_fee": 0.00,
                        "cashout_amount": 0.31
                    }
                ],
                "amount": 0.77
            }
        ]
    }
}



```


# Omaha cash hand (WPN)

An omaha cash hand played at Winning Poker Network.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "Winning Poker Network",
        "site_name": "America's Cardroom",
        "game_type": "Omaha",
        "table_name": "Foxfield",
        "table_size": 6,
        "game_number": "55030950",
        "start_date_utc": "2019-05-28T11:09:33",
        "currency": "USD",
        "ante_amount": 0.00,
        "small_blind_amount": 0.01,
        "big_blind_amount": 0.02,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "PL"
        },
        "hero_player_id": 1,
        "dealer_seat": 2,
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 2,
                        "action": "Post SB",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 3,
                        "action": "Post BB",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 1,
                        "cards": [
                            "Ts",
                            "Kc",
                            "Ah",
                            "Ad"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 4,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 0,
                        "action": "Call",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 1,
                        "action": "Call",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 2,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 3,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "Qd",
                    "8c",
                    "9s"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 3,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Bet",
                        "amount": 0.07,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 1,
                        "action": "Call",
                        "amount": 0.07,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 2,
                "cards": [
                    "Js"
                ],
                "street": "Turn",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 1,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 3,
                "cards": [
                    "2s"
                ],
                "street": "River",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 1,
                        "action": "Bet",
                        "amount": 0.10,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 0,
                        "action": "Call",
                        "amount": 0.10,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 0,
                        "cards": [
                            "Qs",
                            "5c",
                            "9h",
                            "Qh"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 1,
                        "cards": [
                            "Ts",
                            "Kc",
                            "Ah",
                            "Ad"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "players": [
            {
                "name": "Player1",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 4.42,
                "seat": 1
            },
            {
                "name": "Hero",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 1.80,
                "seat": 2
            },
            {
                "name": "Player4",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 0.99,
                "seat": 4
            },
            {
                "name": "Player5",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 3.31,
                "seat": 5
            },
            {
                "name": "Player6",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 1.47,
                "seat": 6
            }
        ],
        "pots": [
            {
                "rake": 0.02,
                "number": 0,
                "player_wins": [
                    {
                        "player_id": 1,
                        "win_amount": 0.39,
                        "contributed_rake": 0.02
                    }
                ],
                "amount": 0.41
            }
        ]
    }
}
```


# Omaha hi/lo cash hand (PokerStars)

An omaha hi/lo cash hand played at PokerStars.  Different players won the high and low pots.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "PokerStars",
        "site_name": "PokerStars",
        "game_type": "OmahaHiLo",
        "table_name": "Victoria IV",
        "table_size": 9,
        "game_number": "142665060918",
        "start_date_utc": "2015-10-23T15:52:33",
        "currency": "USD",
        "ante_amount": 0.00,
        "small_blind_amount": 0.01,
        "big_blind_amount": 0.02,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "PL"
        },
        "hero_player_id": 3,
        "dealer_seat": 7,
        "players": [
            {
                "name": "Player2",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 4.13,
                "seat": 2
            },
            {
                "name": "Player3",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 0.66,
                "seat": 3
            },
            {
                "name": "Player4",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 2.10,
                "seat": 4
            },
            {
                "name": "Hero",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 2.20,
                "seat": 5
            },
            {
                "name": "Player6",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 1.11,
                "seat": 6
            },
            {
                "name": "Player7",
                "id": 5,
                "player_bounty": 0,
                "starting_stack": 1.58,
                "seat": 7
            },
            {
                "name": "Player8",
                "id": 6,
                "player_bounty": 0,
                "starting_stack": 1.15,
                "seat": 8
            },
            {
                "name": "Player9",
                "id": 7,
                "player_bounty": 0,
                "starting_stack": 1.75,
                "seat": 9
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 6,
                        "action": "Post SB",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 7,
                        "action": "Post BB",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 3,
                        "cards": [
                            "Jh",
                            "7d",
                            "Ts",
                            "5h"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 0,
                        "action": "Raise",
                        "amount": 0.07,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 2,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 4,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 9,
                        "player_id": 5,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 10,
                        "player_id": 6,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 11,
                        "player_id": 7,
                        "action": "Call",
                        "amount": 0.05,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "Kc",
                    "4c",
                    "3s"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 7,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 2,
                "cards": [
                    "5s"
                ],
                "street": "Turn",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 7,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 3,
                "cards": [
                    "7h"
                ],
                "street": "River",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 7,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 7,
                        "cards": [
                            "9h",
                            "Tc",
                            "Ah",
                            "4d"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "cards": [
                            "Qs",
                            "As",
                            "Kh",
                            "Ac"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "number": 0,
                "amount": 0.15,
                "rake": 0.00,
                "player_wins": [
                    {
                        "player_id": 0,
                        "win_amount": 0.08,
                        "contributed_rake": 0.00
                    },
                    {
                        "player_id": 7,
                        "win_amount": 0.07,
                        "contributed_rake": 0.00
                    }
                ]
            }
        ]
    }
}

```


# Holdem cash hand (888)

A holdem cash hand with a split pot, played at 888 Poker.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "888 Poker",
        "site_name": "Pacific Poker",
        "game_type": "Holdem",
        "table_name": "Milan 9 Max ($0.02 NL)",
        "table_size": 9,
        "game_number": "481325875",
        "start_date_utc": "2017-07-14T15:03:39",
        "currency": "USD",
        "ante_amount": 0.00,
        "small_blind_amount": 0.01,
        "big_blind_amount": 0.02,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "hero_player_id": 8,
        "dealer_seat": 4,
        "players": [
            {
                "name": "Player1",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 0.57,
                "seat": 1
            },
            {
                "name": "Player2",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 2.22,
                "seat": 2
            },
            {
                "name": "Player3",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 1.95,
                "seat": 3
            },
            {
                "name": "Player4",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 2.11,
                "seat": 4
            },
            {
                "name": "Player5",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 1.87,
                "seat": 5
            },
            {
                "name": "Player6",
                "id": 5,
                "player_bounty": 0,
                "starting_stack": 2.00,
                "seat": 6
            },
            {
                "name": "Player7",
                "id": 6,
                "player_bounty": 0,
                "starting_stack": 3.02,
                "seat": 7
            },
            {
                "name": "Player9",
                "id": 7,
                "player_bounty": 0,
                "starting_stack": 2.11,
                "seat": 9
            },
            {
                "name": "Hero",
                "id": 8,
                "player_bounty": 0,
                "starting_stack": 1.88,
                "seat": 10
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 4,
                        "action": "Post SB",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 5,
                        "action": "Post BB",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 8,
                        "cards": [
                            "Ad",
                            "Jh"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 6,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 7,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 8,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 0,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 9,
                        "player_id": 2,
                        "action": "Call",
                        "amount": 0.02,
                        "is_allin": false
                    },
                    {
                        "action_number": 10,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 11,
                        "player_id": 4,
                        "action": "Call",
                        "amount": 0.01,
                        "is_allin": false
                    },
                    {
                        "action_number": 12,
                        "player_id": 5,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "8d",
                    "Kh",
                    "2s"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 4,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 5,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 2,
                        "action": "Bet",
                        "amount": 0.06,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 4,
                        "action": "Raise",
                        "amount": 0.12,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 5,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 2,
                        "action": "Call",
                        "amount": 0.06,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 2,
                "cards": [
                    "Ts"
                ],
                "street": "Turn",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 4,
                        "action": "Bet",
                        "amount": 0.22,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Call",
                        "amount": 0.22,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 3,
                "cards": [
                    "Kd"
                ],
                "street": "River",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 4,
                        "action": "Bet",
                        "amount": 0.16,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Call",
                        "amount": 0.16,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 4,
                        "cards": [
                            "7d",
                            "Kc"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "cards": [
                            "Ks",
                            "4s"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "number": 0,
                "amount": 1.06,
                "rake": 0.06,
                "player_wins": [
                    {
                        "player_id": 2,
                        "win_amount": 0.50,
                        "contributed_rake": 0.03
                    },
                    {
                        "player_id": 4,
                        "win_amount": 0.50,
                        "contributed_rake": 0.03
                    }
                ]
            }
        ]
    }
}
```


# Holdem tournament hand (888)

A 6-max Single Table Tournament (STT) hand played at 888 Poker.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "888 Poker",
        "site_name": "Pacific Poker",
        "game_type": "Holdem",
        "start_date_utc": "2013-12-30T16:08:49",
        "table_size": "6",
        "table_name": "#1",
        "game_number": "591212284",
        "currency": "",
        "ante_amount": 0.00,
        "small_blind_amount": 30.00,
        "big_blind_amount": 60.00,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "tournament_info": {
            "name": "",
            "start_date_utc": "2013-12-30T16:08:49",
            "type": "MTT",
            "buyin_amount": 0.10,
            "currency": "USD",
            "fee_amount": 0.01,
            "bounty_fee_amount": 0.00,
            "tournament_number": "53999979",
            "flags": "",
            "initial_stack": 1500,
            "speed": {
                "type": "Normal",
                "round_time": 10
            }
        },
        "tournament_bounties": [
        ],
        "tournament_rebuys": [
        ],
        "hero_player_id": 2,
        "dealer_seat": 1,
        "players": [
            {
                "name": "Player1",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 555.00,
                "seat": 1
            },
            {
                "name": "Player4",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 1078.00,
                "seat": 4
            },
            {
                "name": "Hero",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 580.00,
                "seat": 6
            },
            {
                "name": "Player9",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 787.00,
                "seat": 9
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 1,
                        "action": "Post SB",
                        "amount": 30.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Post BB",
                        "amount": 60.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 2,
                        "cards": [
                            "9d",
                            "7c"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 3,
                        "action": "Call",
                        "amount": 60.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 0,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 1,
                        "action": "Call",
                        "amount": 30.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 2,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "7s",
                    "6d",
                    "5d"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 1,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 3,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 2,
                "cards": [
                    "4c"
                ],
                "street": "Turn",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 1,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Bet",
                        "amount": 90.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "rake": 0.00,
                "number": 0,
                "player_wins": [
                    {
                        "player_id": 2,
                        "win_amount": 180.00,
                        "contributed_rake": 0.00
                    }
                ],
                "amount": 180.00
            }
        ]
    }
}



```


# Holdem tournament hand (PokerStars)

A 3-max "lottery" tournament hand played at PokerStars.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "PokerStars",
        "site_name": "PokerStars",
        "game_type": "Holdem",
        "start_date_utc": "2019-03-28T08:16:05",
        "table_size": 3,
        "table_name": "2572001822 1",
        "game_number": "198636399064",
        "currency": "",
        "ante_amount": 0.00,
        "small_blind_amount": 10.00,
        "big_blind_amount": 20.00,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "tournament_info": {
            "name": "",
            "start_date_utc": "2019-03-28T08:16:05",
            "type": "STT",
            "buyin_amount": 0.23,
            "currency": "USD",
            "fee_amount": 0.02,
            "bounty_fee_amount": 0.00,
            "tournament_number": "2572001822",
            "flags": "",
            "initial_stack": 1500,
            "speed": {
                "type": "Normal",
                "round_time": 10
            }
        },
        "tournament_bounties": [
        ],
        "tournament_rebuys": [
        ],
        "hero_player_id": 0,
        "dealer_seat": 2,
        "players": [
            {
                "name": "Hero",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 500.00,
                "seat": 1
            },
            {
                "name": "Player2",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 490.00,
                "seat": 2
            },
            {
                "name": "Player3",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 510.00,
                "seat": 3
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 2,
                        "action": "Post SB",
                        "amount": 10.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Post BB",
                        "amount": 20.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 0,
                        "cards": [
                            "4d",
                            "9h"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 2,
                        "action": "Call",
                        "amount": 10.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 0,
                        "action": "Check",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "2s",
                    "Ac",
                    "Js"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 2,
                        "action": "Bet",
                        "amount": 40.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 0,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 2,
                        "action": "Mucks Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "rake": 0.00,
                "number": 0,
                "player_wins": [
                    {
                        "player_id": 2,
                        "win_amount": 40.00,
                        "contributed_rake": 0.00
                    }
                ],
                "amount": 40.00
            }
        ]
    }
}



```


# Holdem tournament hand (iPoker)

A multi-table tournament (MTT) holdem hand played at iPoker.

```
{
    "ohh": {
        "spec_version": "1.2.2",
        "internal_version": "1.2.2",
        "network_name": "iPoker Network",
        "site_name": "iPoker",
        "game_type": "Holdem",
        "start_date_utc": "2018-05-25T14:35:34",
        "table_size": 0,
        "table_name": "€100 Gtd - Rebuy, 926126756, 925681798",
        "game_number": "7948166852",
        "currency": "",
        "ante_amount": 16.00,
        "small_blind_amount": 80.00,
        "big_blind_amount": 160.00,
        "bet_limit": {
            "bet_cap": 0.00,
            "bet_type": "NL"
        },
        "tournament_info": {
            "name": "",
            "start_date_utc": "2018-05-25T14:35:34",
            "type": "MTT",
            "buyin_amount": 0.45,
            "currency": "EUR",
            "fee_amount": 0.05,
            "bounty_fee_amount": 0.00,
            "tournament_number": "925681798",
            "flags": "",
            "initial_stack": 1500,
            "speed": {
                "type": "Normal",
                "round_time": 10
            }
        },
        "tournament_bounties": [
        ],
        "tournament_rebuys": [
        ],
        "dealer_seat": 2,
        "hero_player_id": 5,
        "players": [
            {
                "name": "Player2",
                "id": 0,
                "player_bounty": 0,
                "starting_stack": 12953.00,
                "seat": 2
            },
            {
                "name": "Player3",
                "id": 1,
                "player_bounty": 0,
                "starting_stack": 23199.00,
                "seat": 3
            },
            {
                "name": "Player4",
                "id": 2,
                "player_bounty": 0,
                "starting_stack": 23187.00,
                "seat": 4
            },
            {
                "name": "Player5",
                "id": 3,
                "player_bounty": 0,
                "starting_stack": 11690.00,
                "seat": 5
            },
            {
                "name": "Player6",
                "id": 4,
                "player_bounty": 0,
                "starting_stack": 18903.00,
                "seat": 6
            },
            {
                "name": "Hero",
                "id": 5,
                "player_bounty": 0,
                "starting_stack": 9193.00,
                "seat": 8
            },
            {
                "name": "Player9",
                "id": 6,
                "player_bounty": 0,
                "starting_stack": 9972.00,
                "seat": 9
            },
            {
                "name": "Player10",
                "id": 7,
                "player_bounty": 0,
                "starting_stack": 15963.00,
                "seat": 10
            }
        ],
        "rounds": [
            {
                "id": 0,
                "cards": "",
                "street": "Preflop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 1,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 2,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 3,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 4,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 5,
                        "player_id": 5,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 6,
                        "player_id": 6,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 7,
                        "player_id": 7,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 8,
                        "player_id": 0,
                        "action": "Post Ante",
                        "amount": 16.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 9,
                        "player_id": 1,
                        "action": "Post SB",
                        "amount": 80.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 10,
                        "player_id": 2,
                        "action": "Post BB",
                        "amount": 160.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 11,
                        "player_id": 5,
                        "cards": [
                            "Qh",
                            "Qc"
                        ],
                        "action": "Dealt Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 12,
                        "player_id": 3,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 13,
                        "player_id": 4,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 14,
                        "player_id": 5,
                        "action": "Raise",
                        "amount": 480.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 15,
                        "player_id": 6,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 16,
                        "player_id": 7,
                        "action": "Call",
                        "amount": 480.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 17,
                        "player_id": 0,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 18,
                        "player_id": 1,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 19,
                        "player_id": 2,
                        "action": "Fold",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 1,
                "cards": [
                    "4s",
                    "Jc",
                    "7d"
                ],
                "street": "Flop",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 5,
                        "action": "Bet",
                        "amount": 929.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 7,
                        "action": "Call",
                        "amount": 929.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 2,
                "cards": [
                    "7s"
                ],
                "street": "Turn",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 5,
                        "action": "Bet",
                        "amount": 2230.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 7,
                        "action": "Raise",
                        "amount": 4460.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 3,
                        "player_id": 5,
                        "action": "Raise",
                        "amount": 5450.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 4,
                        "player_id": 7,
                        "action": "Call",
                        "amount": 3220.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 3,
                "cards": [
                    "Jd"
                ],
                "street": "River",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 5,
                        "action": "Bet",
                        "amount": 88.00,
                        "is_allin": true
                    },
                    {
                        "action_number": 2,
                        "player_id": 7,
                        "action": "Call",
                        "amount": 88.00,
                        "is_allin": false
                    }
                ]
            },
            {
                "id": 4,
                "street": "Showdown",
                "actions": [
                    {
                        "action_number": 1,
                        "player_id": 5,
                        "cards": [
                            "Qh",
                            "Qc"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    },
                    {
                        "action_number": 2,
                        "player_id": 7,
                        "cards": [
                            "8s",
                            "9s"
                        ],
                        "action": "Shows Cards",
                        "amount": 0.00,
                        "is_allin": false
                    }
                ]
            }
        ],
        "pots": [
            {
                "rake": 0.00,
                "number": 0,
                "player_wins": [
                    {
                        "player_id": 5,
                        "win_amount": 18722.00,
                        "contributed_rake": 0.00
                    }
                ],
                "amount": 18722.00
            }
        ]
    }
}



```


# Change Request Process

How to contact us to request a change to the specification.

The standard specification is versioned to allow for bug fixes, continued improvements and further advancements.  If you have a request to change the specification, please email your requests to <request@handhistory.org> and provide the following information:

* Your full name.
* Business name.
* Explanation of the requested change and why it is needed.
* Your proposed modification to the standard specification.

We will review all requests and you will be contacted regardless if your change request was approved or denied.

{% hint style="success" %}
Upon approval of a change request, the specification will be updated to reflect the approved change and the version number of the specification will be increased.
{% endhint %}


# Support

How to contact us for support.

Questions are welcome and will help us improve the documentation!\
If you have any questions regarding the standard specification, please email us at <support@handhistory.org> with your question and we will respond as quickly as possible.


# Change Log

The specification is versioned to allow for continual improvements.\
This page lists the changes in each version.

#### **1.4.9 - May 20, 2026**

* Added **"Bomb\_Pot"** option to **flags** field.

#### **1.4.8 - April 10, 2026**

* Added **"Player Adjustment"** action, and **description** field to **action\_obj**.

#### **1.4.7 - March 4, 2024**

* Deprecated **contributed\_rake** in the **player\_wins** object.

#### **1.4.6 - February 28, 2024**

* Changed play money from "PPC" to "XPM" in the **currency** section.\
  PPC will still be supported for existing hands but XPM should be used for new hands.

#### 1.4.5 - January 25, 2024

* Added **"Add to Pot"** action for cases where the site adds bonus money or chips to the pot.
* Made **player\_id** optional to allow for "Add to Pot" action.

#### 1.4.4 - January 25, 2024

* Clarified that all fields are required unless otherwise stated.
* Added optional/nullable to several fields:&#x20;
  * **small\_blind\_amount**
  * **big\_blind\_amount**
  * **pot\_obj > rake**
  * **player\_wins > contributed\_rake**
  * **tournament\_info\_obj > (buyin\_amount, bounty\_fee\_amount, fee\_amount, flags)**
* Added "**is\_sitting\_out**" in **\<player\_obj>** so that players who are sitting out can be included in the player list.

#### **1.4.3 - August 3, 2022**

* Removed re-buy information as it is being moved to the Open Tournament Summary (OTS) specification.

#### **1.4.2 - July 13, 2022**

* Removed the explicit requirement for there to be a Showdown round in the Rounds list.  This is only required if a hand goes to showdown, or a player chooses to show their cards without a showdown.

#### 1.4.1 - March 23, 2022

* Specified that the following fields are optional:
  * **able\_handle**
  * **table\_skin**
  * **flags**
  * **round\_obj > cards**, **player\_obj > display**

#### 1.4.0 - Feb. 25, 2022

* Clarified that "**Run\_It\_Twice**" flag is used for any number of runs.
* Added "jackpot" in **\<pot\_obj>**
* Added "cashout", "cashout\_fee", "bonus" in **\<player\_wins>**
* Clarified that "amount" and "is\_allin" are optional in **\<action\_obj>**

#### 1.3.0 - July 02, 2020

* Added "tournament"
* Added "table\_skin"
* Added "display" in **\<player\_obj>**

#### 1.2.2. - June 19, 2020

* Corrected "round" to "id" in the 'id' field of **\<round\_obj>**

#### 1.2.1 - June 01, 2020

* Corrected "players\_wins" to "player\_wins" in **\<pot\_obj>**

#### 1.2.0 - April 23, 2020

* Added a root object to wrap each hand and identify the type of JSON object.\
  **{"ohh":** \<standardized\_hand\_history\_object>**}**

#### 1.1.1 - February 27, 2020

* Added **table\_handle**

#### 1.0.1 - Late 2019

* **hero\_player\_id** was changed to Nullable.  Null example added.
* **\<action\_obj>.cards** was changed to Nullable.  Null example added.
* **\<round\_object>.street** options are capitalized instead of all lowercase.  Example updated.\
  Flags options are capitalized instead of all uppercase.  Example updated.
* **player\_obj>.player\_bounty** was changed to nullable.  Info panel text changed from "For bounty tournaments only." to "For bounty tournaments only.  Omit for other games."  Null example added.
* **\<tournament\_info\_obj>.flags** - all non-acronym options changed to caplitalized instead of all uppercase.
* **\<tournament\_rebuy\_obj>** - all options changed to capitalized instead of all uppercase.
* **\<speed\_obj>.type** - all options changed to capitalized instead of all uppercase.
* **ante\_amount** - corrected typo "f the game..." to "If the game...".
* Rounds - "(Pre-Flop)" changed to "(Preflop)" in text to match names used in \<round\_obj>.street.
* **\<bet\_limit\_obj>.bet\_type** - "No-Limit" changed to "No Limit" to match the other options.<br>
* **round\_obj>.id** - added text "The first round is round zero."
* **\<round\_obj>.actions** - corrected typo "Maining the order..." to "Maintaining the order...".\
  Changed "id" to "Id" or "identifier" in text in a few places for consistency.

#### v1.0.0 - Late 2019

The initial version


