# Ticket Placement Request

<table><thead><tr><th width="115.0677490234375" align="center">Source</th><th width="55.919189453125" align="center"></th><th width="114.782958984375" align="center">Destination</th></tr></thead><tbody><tr><td align="center"><strong>Client</strong></td><td align="center"><strong>→</strong></td><td align="center"><strong>MTS</strong></td></tr></tbody></table>

The Ticket placement request is the main element in the client-to-MTS communication. It contains the actual bets the client has received from the end customer. The request is sent to MTS, which will respond with a Ticket placement response. The essential part of the response is MTS's suggestion of whether this concrete bet (or ticket) should be accepted or rejected. In other words, this is the core function of the risk management system. MTS determines the mentioned suggestion in a process called ticket validation. In this process, MTS considers multiple factors, including comparing the actual bet (ticket) against the client's configuration parameters and the client's accumulated liability (incurred by previously accepted tickets).

### Ticket structure <a href="#mtsticketplacementrequest-v3.0-ticketstructure" id="mtsticketplacementrequest-v3.0-ticketstructure"></a>

From the top-level perspective, a ticket consists of two parts:

* envelope
* content

The envelope includes additional information about the content. Envelope fields are described in the below Envelope and Content table.

The content part represents the **Ticket placement request** itself and constitutes the Content object.

The most complex part of the Content object is the Bets array (described in a separate table below).

Further on, the Bets array includes several fields, with the Selections array being the most complex one (also described in a separate table below).

The following diagram depicts the ticket structure by using a simple ticket example. Please note that this diagram does not include all possible fields. For a complete list of fields and descriptions, please refer to the tables below.

**Ticket structure diagram:**

<div align="left" data-full-width="false"><figure><img src="https://754701251-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk9SMFSuFGUx0b4iEHZ2f%2Fuploads%2FAsrDVGLbxpe5aYRkX2Jv%2F101482902.png?alt=media&#x26;token=3d96eb54-9fc4-409a-8541-392843973eb9" alt="" width="563"><figcaption></figcaption></figure></div>

**Envelope and Content table:**

The Envelope provides the Content's (Ticket placement request) context and contains the following fields (besides Content):

* operatorId
* correlationId
* timestampUtc
* operation
* version

<table data-full-width="true"><thead><tr><th width="353.282958984375">Example</th><th width="173.19879150390625">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>{
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>"operatorId": 9985,
</code></pre></td><td>operatorId</td><td>ID to uniquely identify the client from which the ticket originated<br>ID is provided to the client by Sportradar<br>The client is obliged to include it in every ticket</td><td>M</td><td>Integer</td></tr><tr><td><pre><code>"content": {
</code></pre></td><td>content</td><td>See Content object description below</td><td>M</td><td>Object</td></tr><tr><td><pre><code>       ...........
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>       ...........
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>  },
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>"correlationId": "Uw59kwUL",
</code></pre></td><td>correlationId</td><td>Client defined string to facilitate the request-response pairing,<br>Sportradar is obliged to return the same string in the corresponding response</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"timestampUtc": 1678202888000,
</code></pre><p><br><br></p></td><td>timestampUtc</td><td>Timestamp of ticket placement as submitted by the client (Unix time in milliseconds format),<br>minimal: 1,<br>maximum: 9223372036854776000</td><td>M</td><td>Integer</td></tr><tr><td><pre data-overflow="wrap"><code>"operation": "ticket-placement",
</code></pre></td><td>operation</td><td><p>Should be "ticket-placement" in the case of Ticket Placement Request,</p><p>in the case of Cancellation, Cash-out, External Settlement and Pre-validated Ticket Placement requests / responses - enumerator:</p><ul><li>"ticket-cancel"</li><li>"ticket-cashout"</li><li>"ticket-ext-settlement"</li><li>"ticket-placement-inform",</li></ul><p>in the case of Acknowledgement messages and Acknowledgement reply messages - enumerator:</p><ul><li>"ticket-placement-ack"</li><li>"ticket-cancel-ack"</li><li>"ticket-cashout-ack"</li><li>"ticket-ext-settlement-ack"</li></ul></td><td>M</td><td>String</td></tr><tr><td><pre><code>"version": "3.0"
</code></pre></td><td>version</td><td>Indicates the ticket format version</td><td>M</td><td>String</td></tr><tr><td>}</td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>

### Content object (Ticket placement request) <a href="#mtsticketplacementrequest-v3.0-contentcontentobject-ticketplacementrequest" id="mtsticketplacementrequest-v3.0-contentcontentobject-ticketplacementrequest"></a>

This object constitutes the ticket itself. Its main part is the bets array (which represents one or more actual bets) and additional information related to the ticket.

The Content object includes the following fields:

* type
* ticketId
* bets (array)
* context (ticket context)
* location

**Content object table:**

<table data-full-width="true"><thead><tr><th width="351.4453125">Example</th><th width="167.2213134765625">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>"content": {
</code></pre></td><td><br></td><td><br></td><td><br></td><td>Object</td></tr><tr><td><pre><code>"type": "ticket",
</code></pre></td><td>type</td><td>Declaration of content type, should be "ticket" in case of Ticket placement request</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"ticketId": "Ticket_3690",
</code></pre></td><td>ticketId</td><td>Client defined string to identify the ticket (unique in the client's system),<br>minimal string length = 1,<br>maximum string length = 128</td><td>M</td><td>String</td></tr><tr><td><pre><code>"bets": [
</code></pre></td><td>bets</td><td>See <a href="#mtsticketplacementrequest-v3.0-betsbetsarray">bets array description</a>,<br>minimal number of bets per content (ticket) = 1,<br>maximum number = 50</td><td>M</td><td>Array</td></tr><tr><td><pre><code>........... ],
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>"context": {
</code></pre></td><td>context</td><td>Ticket context - additional information related to the ticket</td><td>M</td><td>Object</td></tr><tr><td><pre data-overflow="wrap"><code> "channel": {
</code></pre></td><td><ul><li>channel</li></ul></td><td>Specifies the means of delivery of service to client's end customers (bettors), also called distribution channel</td><td>M</td><td>Object</td></tr><tr><td><pre data-full-width="true"><code>"type": "mobile",
</code></pre></td><td><ul><li><p></p><ul><li>type</li></ul></li></ul></td><td><p>Declaration of channel type, enumerator:</p><ul><li>agent</li><li>call-centre</li><li>internet</li><li>mobile</li><li>mobile-app</li><li>phone (used for USSD betting - USSD is a communication protocol in mobile networks)</li><li>retail</li><li>sms</li><li>terminal</li><li>tv-app</li></ul></td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"ip": "109.74.24.155",
</code></pre></td><td><ul><li><p></p><ul><li>ip</li></ul></li></ul></td><td><p>IP address of the end customer's device</p><p>May be present only if "type": "internet" or "type": "mobile" or "type": "mobile-app" or "type":" tv-app"</p></td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"deviceId": "device_133123",
</code></pre></td><td><ul><li><p></p><ul><li>deviceId</li></ul></li></ul></td><td><p>ID of the end customer's device</p><p>May be present only if "type": "mobile" or "type": "tv-app" or "type": "internet" or "type": "retail" or<br>"type": "sms" or "type": "mobile-app"</p><p>Minimal string length = 1,<br>maximum length = 36,<br>allowed characters : uppercase and lowercase letters, numerals, #, :, -, _, \<br>Java regex: ^[0-9A-Za-z#:\\-_]{1,36}$</p></td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"shopId": "shop_789135",
</code></pre></td><td><ul><li><p></p><ul><li>shopId</li></ul></li></ul></td><td><p>ID of the shop</p><p>May be present only if "type": "retail" or "type": "terminal"</p><p>Minimal string length = 1,<br>maximum length = 36,<br>allowed characters : uppercase and lowercase letters, numerals, #, :, -, _, \</p></td><td>M<br>if "type": "retail" or<br>"type": "terminal"</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"terminalId": "term_2313",
</code></pre></td><td><ul><li><p></p><ul><li>terminalId</li></ul></li></ul></td><td><p>May be present only if "type": "terminal"</p><p>Minimal string length = 1,<br>maximum length = 36,<br>allowed characters : uppercase and lowercase letters, numerals, #, :, -, _, \</p></td><td>M<br>if "type": "terminal"</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"lang": "ES",
</code></pre></td><td><ul><li><p></p><ul><li>lang</li></ul></li></ul></td><td>End customer's user interface language code according to <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO 639-1 </a>(string length = 2)</td><td>M</td><td>String</td></tr><tr><td><pre><code>"location": {
</code></pre></td><td><p></p><ul><li>— location</li></ul></td><td>May be present only if "type": "retail" or "type": "terminal"</td><td>O</td><td>Object</td></tr><tr><td><pre><code>   "type": "geo", 
</code></pre></td><td><ul><li>--— type</li></ul></td><td>Currently the only supported type: "geo"</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>   "latitude": 46.1,
</code></pre></td><td><ul><li>--—  latitude</li></ul></td><td>min. value: -90.0, max. value: 90.0</td><td>M</td><td>Number</td></tr><tr><td><pre data-overflow="wrap"><code>   "longitude": 14.5 }
</code></pre></td><td><ul><li>--— longitude</li></ul></td><td>min. value: -180.0, max. value: 180.0</td><td>M</td><td>Number</td></tr><tr><td><pre><code>    },
</code></pre></td><td><br></td><td>(end of "channel" object)<br></td><td><br></td><td><br></td></tr><tr><td><pre><code>"payoutCap": [
</code></pre></td><td><ul><li>payoutCap</li></ul></td><td>Array of ticket maximum payouts,<br>minimal number of payout caps per ticket =1,<br>maximum number = 5</td><td>O</td><td>Array</td></tr><tr><td><pre><code>          {
</code></pre></td><td><br></td><td></td><td></td><td></td></tr><tr><td><pre><code>"type": "cash",
</code></pre></td><td><ul><li><p></p><ul><li>type</li></ul></li></ul></td><td><p>Enumerator:</p><ul><li>cash</li><li>withheld</li></ul></td><td>M</td><td>String</td></tr><tr><td><pre><code>"currency": "EUR",
</code></pre></td><td><ul><li><p></p><ul><li>currency</li></ul></li></ul></td><td>3 or 4 letter currency code, BTC and mBTC are also supported (4 letters only apply to mBTC).<br>For more details please check<br><a href="https://www.iso.org/iso-4217-currency-codes.html">https://www.iso.org/iso-4217-currency-codes.html</a></td><td>M</td><td>String</td></tr><tr><td><pre><code>"amount": "100",
</code></pre></td><td><ul><li><p></p><ul><li>amount</li></ul></li></ul></td><td>String pattern: 1 up to 8 digits, optionally followed by a decimal point and 1 up to 8 digits,<br>Java regex: ^\\d{1,8}(\\.\\d{1,8})?$</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"traceId": "Source2099"
</code></pre></td><td><ul><li><p></p><ul><li>traceId</li></ul></li></ul></td><td><p>A string to help identify the source of operation/action/state</p><p>Minimal string length = 1,<br>maximum length = 128,</p></td><td>O</td><td>String</td></tr><tr><td><pre><code>           }
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td>],</td><td><br></td><td>(end oy payoutCap array)<br></td><td><br></td><td><br></td></tr><tr><td><pre><code>"endCustomer": {
</code></pre></td><td><ul><li>endCustomer</li></ul></td><td>Data about client's end customer (bettor), it can only be omitted if the bet is placed by an unregistered bettor in retail or on a terminal</td><td>O</td><td>Object</td></tr><tr><td><pre data-overflow="wrap"><code>"id": "endCustomer_e34t45",
</code></pre></td><td><ul><li><p></p><ul><li>id</li></ul></li></ul></td><td>End customer's unique ID (in client's system). It should be an anonymous value which cannot be used to identify a physical person.<br>minimal string length = 1,<br>maximum length = 36,<br>allowed characters are : uppercase and lowercase letters, numerals, #, :, -, _, \<br>Java regex: ^[0-9A-Za-z#:\\-_]{1,36}$</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"confidence": "1.15"
</code></pre></td><td><ul><li><p></p><ul><li>confidence</li></ul></li></ul></td><td>End customer's suggested CCF<br>Java regex: ^\\d{1,8}(\\.\\d{1,8})?$</td><td>O</td><td>String</td></tr><tr><td><pre><code>        },
</code></pre></td><td><br></td><td>(end of endCustomer object)<br></td><td><br></td><td><br></td></tr><tr><td><pre><code>"limitId": 1409,
</code></pre></td><td><ul><li>limitId</li></ul></td><td>LimitId number provided to the client by Sportradar MTS CI team or OAM,<br>minimal value =1,<br>maximum value = 2147483647</td><td>M</td><td>Integer</td></tr><tr><td><pre><code>"walletId": "wallet_27839",
</code></pre></td><td><ul><li>walletId</li></ul></td><td>Client defined string to identify the wallet (ID or type),<br>minimal string length = 1,<br>maximum string length = 128</td><td>O</td><td>String</td></tr><tr><td><pre><code>"ref": {
</code></pre></td><td><ul><li>ref</li></ul></td><td>Reference to another ticket,<br>must be present when placing a request with <a href="https://app.gitbook.com/s/3JvMJx2x71aK15pDIp2j/features/alternative-stake-1">Alternative stake</a></td><td><p>M</p><p>(only in requests with Alternative stake)</p></td><td><br>Object</td></tr><tr><td><pre data-overflow="wrap"><code>"ticketId": "Ticket_1005",
</code></pre></td><td><ul><li><p></p><ul><li>ticketId</li></ul></li></ul></td><td>Id of the referenced ticket,<br>for the field format, see description</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>"ticketSignature": "AAbzv7XIEl+SmjWB3x
DB0AIB6fUZVFOvmGKm6Rcvxm0=",
</code></pre></td><td><ul><li><p></p><ul><li>ticketSignature</li></ul></li></ul></td><td>Signature from MTS's response to initial ticket placement</td><td>M</td><td>String</td></tr><tr><td><pre><code>"type": "alt-stake"
</code></pre></td><td><ul><li><p></p><ul><li>type</li></ul></li></ul></td><td>The only currently supported value is "alt-stake"</td><td>M</td><td>String</td></tr><tr><td>}</td><td><br></td><td>(end of ref object)<br></td><td><br></td><td><br></td></tr><tr><td>}</td><td><br></td><td>(end of context object)<br></td><td><br></td><td><br></td></tr><tr><td>},</td><td><br></td><td>(end of content object)<br></td><td><br></td><td><br></td></tr></tbody></table>

**Relations between distribution channel parameters**

<table data-header-hidden data-full-width="true"><thead><tr><th>Distribution channel "channel type"</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><p><strong>Distribution channel</strong></p><ul><li><strong>"channel type"</strong></li></ul></td><td><strong>End-customer is</strong></td><td><strong>"channel"</strong></td><td><ul><li><strong>"ip"</strong></li></ul></td><td><ul><li><strong>"deviceId"</strong></li></ul></td><td><ul><li><strong>"shopId"</strong></li></ul></td><td><ul><li><strong>"terminalId"</strong></li></ul></td><td><ul><li><strong>"lang"</strong></li></ul></td><td><p><strong>"endCustomer"</strong></p><ul><li><strong>"id"</strong></li></ul></td></tr><tr><td>agent</td><td>registered</td><td>mandatory</td><td>omitted</td><td>omitted</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>call-centre</td><td>registered</td><td>mandatory</td><td>omitted</td><td>omitted</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>internet</td><td>registered</td><td>mandatory</td><td>optional</td><td>optional</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>mobile</td><td>registered</td><td>mandatory</td><td>optional</td><td>optional</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>mobile-app</td><td>registered</td><td>mandatory</td><td>optional</td><td>optional</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>phone</td><td>registered</td><td>mandatory</td><td>omitted</td><td>omitted</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>retail</td><td>unregistered</td><td>mandatory</td><td>omitted</td><td>optional</td><td>mandatory</td><td>omitted</td><td>mandatory</td><td>omitted</td></tr><tr><td>retail</td><td>registered</td><td>mandatory</td><td>omitted</td><td>optional</td><td>mandatory</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>sms</td><td>registered</td><td>mandatory</td><td>omitted</td><td>optional</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr><tr><td>terminal</td><td>unregistered</td><td>mandatory</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td><td>mandatory</td><td>omitted</td></tr><tr><td>terminal</td><td>registered</td><td>mandatory</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td><td>mandatory</td><td>mandatory</td></tr><tr><td>tv-app</td><td>registered</td><td>mandatory</td><td>optional</td><td>optional</td><td>omitted</td><td>omitted</td><td>mandatory</td><td>mandatory</td></tr></tbody></table>

{% hint style="info" %}
**Note**

* If a bet is placed from an adaptive site for mobiles or a proper mobile version of a site, then the channel should be "mobile"
* If a bet is placed from a terminal installed in a shop then the channel should be "terminal" and "shopID" and "terminalID" should be included in the bet.
* The "endCustomer" object can only be omitted if the bet is placed by an unregistered bettor in retail or on a terminal.
  {% endhint %}

### Bets array <a href="#mtsticketplacementrequest-v3.0-betsbetsarray" id="mtsticketplacementrequest-v3.0-betsbetsarray"></a>

The actual bets are specified in the Bets array. Ticket format v3.0 allows for multiple bets to be included in one ticket. Each Bets array element consists of the following fields:

* betId
* selections
* stake
* context (bet context)

**Bets array table:**

<table data-full-width="true"><thead><tr><th width="351.462646484375">Example</th><th width="155.23785400390625">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>    "bets": [
</code></pre></td><td>bets</td><td>Array of bets,<br>minimal number of bets per content (ticket) = 1,<br>maximum number = 50</td><td>M</td><td>Array</td></tr><tr><td><pre><code>      {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>        "betId": "Ticket_3690_bet0",
</code></pre></td><td>betId</td><td>Unique bet id (in the client's system),<br>minimal string length = 1,<br>maximum length = 128</td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>        "selections":
        [ {
           ......
           ......  
        } ],            
</code></pre></td><td>selections</td><td>Array of bet selections, <a href="#mtsticketplacementrequest-v3.0-selectionsselectionsarray">see description,</a><br>minimal number of selections per bet = 1,<br>maximum number = 100</td><td>M</td><td>Array</td></tr><tr><td><pre><code>        "stake": [
</code></pre></td><td>stake</td><td>Array of bet stakes,<br>minimal number of stake per bet =1,<br>maximum number = 5</td><td>M</td><td>Array</td></tr><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>            "type": "cash",
</code></pre></td><td><ul><li>type</li></ul></td><td><p>Stake type, enumerator:</p><ul><li>cash (used for stake and payout)</li><li>bonus (amount added on top of end customer's winnings in case a bet is won )</li></ul></td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "currency": "DKK",
</code></pre></td><td><ul><li>currency</li></ul></td><td><p>The client must always submit stakes in punter's local currency,</p><p>Currently MTS does not support multiple bets with stakes in different currencies,</p><p>See description</p></td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "amount": "12",
</code></pre></td><td><ul><li>amount</li></ul></td><td>See description</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "mode": "total",
</code></pre></td><td><ul><li>mode</li></ul></td><td><p>Stake mode enumerator<br>(default = total):</p><ul><li>unit - stake amount relates to each sub-bet<br>(a sub-bet is one combination (in case of system bets))</li><li>total - stake amount relates to all sub-bets (each sub-bet receives a portion of the amount)</li></ul></td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "traceId": "Source_2099"
          }
        ],
</code></pre></td><td><ul><li>traceId</li></ul></td><td><p>A string to help identify the source of operation/action/state</p><p>Minimal string length = 1,<br>maximum length = 128,</p></td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>        "context": {       
</code></pre></td><td>context</td><td>Bet context - additional information related to the bet</td><td>O</td><td>Object</td></tr><tr><td><pre data-overflow="wrap"><code>            "oddsChange": "higher",  
</code></pre></td><td><ul><li>oddsChange</li></ul></td><td><p>Specifies MTS behaviour in the event when the actual odds from the client's UOF at the moment of validation differ from those submitted in the ticket, enumerator:</p><ul><li>none: do not accept odds change, ticket rejected - default behaviour</li><li>any: accept tickets with any odds change, consider feed's odds</li><li>lower: <strong>(Currently not supported)</strong> accept tickets when feed's odds are equal or lower, consider feed's odds</li><li>higher: accept tickets when feed's odds are equal or higher, consider feed's odds</li></ul></td><td>O</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "payoutCap":  [
               {
              .......
              .......
              }] 
</code></pre></td><td><ul><li>payoutCap</li></ul></td><td><p>Array of bet maximum payouts,<br>minimal number of payout caps per bet =1,<br>maximum number = 5</p><p>See description of payoutCap array above</p></td><td>O</td><td>Array</td></tr><tr><td>        }</td><td><br></td><td></td><td></td><td></td></tr><tr><td>    }</td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td>],</td><td><br></td><td><br></td><td><br></td><td><br></td></tr></tbody></table>

### Selections array <a href="#mtsticketplacementrequest-v3.0-selectionsselectionsarray" id="mtsticketplacementrequest-v3.0-selectionsselectionsarray"></a>

The actual selections (one or more) that constitute a bet are included here. A selection represents a specific outcome (the one that a bettor places a bet on) of a specific market of an event. (Basic example: home win in 1x2 market of a soccer match.)

There are 5 types of selections foreseen in the ticket format v3.0 as well as several ways of selection nesting.

**Selections array table:**

<table data-full-width="true"><thead><tr><th width="353.45050048828125">Example</th><th width="165.37939453125">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>        "selections": [
</code></pre></td><td>selections</td><td>Array of selections,<br>minimal number of selections per bet = 1,<br>maximum number = 100</td><td>M</td><td>Array</td></tr><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>            "type": .....,
             ........
             ........
             }
       ],    
</code></pre></td><td><ul><li>type</li></ul></td><td>Any of 7 specific selection types is allowed here,<br>see descriptions below</td><td>M</td><td>String</td></tr></tbody></table>

**1. Selections ("type": "uf") table:**

This type of selection is used in cases when outcomes, markets, events, and specifiers (additional info) originate from UOF (from one of the UOF producers). The IDs of the elements mentioned also correspond to values obtained from UOF. Market settlements are also obtained from UOF.

Fields:

* type
* productId
* eventId
* marketId
* outcomeId
* specifiers
* odds

<table data-full-width="true"><thead><tr><th>Example</th><th width="100">Field Name</th><th>Field Description</th><th>Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>            "type": "uf",
</code></pre></td><td>type</td><td>Specifies a Selections type</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "productId": "3",
</code></pre></td><td>productId</td><td>Specifies the UOF producer, i.e. 1 for LiveOdds, 5 for Premium Cricket,<br>value is retrieved from the UOF feed,<br>Minimal string length = 1,<br>maximum length = 5</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "eventId": "sr:match:16470657",
</code></pre></td><td>eventId</td><td>Specifies a betting event as defined by UOF,<br>Value is retrieved from the UOF feed,<br>Minimal string length = 1,<br>maximum length = 100</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "marketId": "534",
</code></pre></td><td>marketId</td><td>Specifies a betting market as defined by UOF,<br>Value is retrieved from the UOF feed,<br>Minimal string length = 1,<br>maximum length = 100</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "outcomeId": "pre:
</code></pre><pre><code>outcometext:9919",
</code></pre></td><td>outcomeId</td><td>Specifies a market outcome as defined by UOF,<br>Value is retrieved from the UOF feed,<br>Minimal string length = 1,<br>maximum length = 1000,</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "specifiers": "setnr=1|total=45.5",
</code></pre></td><td>specifiers</td><td>Specifies an additional market data as defined by UOF,<br>Value is retrieved from the UOF feed,<br>Minimal string length = 1,<br>maximum length = 1000</td><td><p>O*</p><p><sub>*Although optional in the schema, when the UOF market is additionally defined by a specifier (<em>market line: Total 1.5, Total 2.5</em>), the specifier must be provided in the bet.</sub></p></td><td>String</td></tr><tr><td><pre><code> "odds": {
</code></pre></td><td>odds</td><td></td><td>M</td><td>Object</td></tr><tr><td><pre data-overflow="wrap"><code>  "type":"decimal",
</code></pre></td><td><ul><li>type</li></ul></td><td><p>Supported odds formats:</p><p>"type": "decimal", "type": "fractional", "type": "moneyline", "type": "hong-kong", "type": "indonesian", "type": "malay"</p></td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>                    "value": "7.1", 
</code></pre></td><td><ul><li>value</li></ul></td><td>Odds value submitted by the client,<br>String pattern: 1 up to 8 digits (the first digit should not be 0), optionally followed by a decimal point and 1 up to 8 digits,<br>Java regex: ^[1-9]\\d{0,7}(\\.\\d{1,8})?$</td><td>M</td><td>String</td></tr><tr><td><pre><code>"numerator": "10",
</code></pre></td><td><p></p><ul><li>numerator</li></ul></td><td>Numerator of fractional odds,<br>only present in "type": "fractional",<br>Java regex: ^[1-9]\d{0,7}$</td><td><p>M</p><p>only if "type": "fractional"</p></td><td>String</td></tr><tr><td><pre><code>"denominator": "3"
              }
           }
</code></pre></td><td><p></p><ul><li>denominator</li></ul></td><td>Denominator of fractional odds,<br>only present in "type": "fractional",<br>Java regex: ^[1-9]\d{0,7}$</td><td><p>M</p><p>only if "type": "fractional"</p></td><td>String</td></tr></tbody></table>

**2. Selections ("type": "external") table:**\
Used in cases when outcomes, events, odds, and market settlements are not related to UOF or Sportradar but are managed by the client instead. Clients should provide unique identification of events and outcomes. Clients should provide ticket settlements on time (utilising External settlement requests).

Fields:

* type
* event
* expSettleTime
* odds
* outcome

<table data-full-width="true"><thead><tr><th width="409.54425048828125">Example</th><th width="147.052978515625">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>            "type": "external",
</code></pre></td><td>type</td><td>Specifies a Selections type</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "event": "ext:match:736977",
</code></pre></td><td>event</td><td>Unique event identifier as defined by the client, see <a href="external-content-description">format rules</a>,<br>minimal string length = 1,<br>maximum length = 100,</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>            "expSettleTime": 1691581504000,
</code></pre></td><td>expSettleTime</td><td>To inform MTS about the expected time of settlement, MTS may start certain actions based on this time (e.g. automatic settlement of unsettled tickets),<br>(Unix time milliseconds format),<br>see <a href="external-content-description">format rules</a>,<br>minimal: 1,<br>maximum: 9223372036854776000</td><td>M</td><td>Integer</td></tr><tr><td><pre><code>            "odds": {
</code></pre></td><td>odds</td><td>See odds description</td><td>M</td><td>Object</td></tr><tr><td><pre data-overflow="wrap"><code>              "type": "decimal",
</code></pre></td><td><ul><li>type</li></ul></td><td><br></td><td>M</td><td>String</td></tr><tr><td><pre><code>              "value": "7.1"
</code></pre></td><td><ul><li>value</li></ul></td><td><br></td><td>M</td><td>String</td></tr><tr><td><pre><code>              },
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>            "outcome": "ext-pre:9985:s77"
          }
</code></pre></td><td>outcome</td><td>Unique outcome identifier as defined by the client, should include unique designation of betting market and selection, see <a href="external-content-description">format rules</a>,<br>minimal string length = 1,<br>maximum length = 1000,</td><td>M</td><td>String</td></tr></tbody></table>

**3. Selections ("type": "uf-custom-bet") table:**\
Used in cases when selections constitute a custom bet (a bet including selections which would normally be rejected due to contingency rules). For more information, please see [Custom Bet description](https://app.gitbook.com/s/3JvMJx2x71aK15pDIp2j/features/custom-bet).

Fields:

* type
* selections (array)
* odds
* useHarmOdds

<table data-full-width="true"><thead><tr><th width="360.0303955078125">Example</th><th width="182.490478515625">Field Name</th><th>Field Description</th><th width="100" valign="middle">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td valign="middle"><br></td><td><br></td></tr><tr><td><pre><code>            "type": "uf-custom-bet",
</code></pre></td><td>type</td><td>Specifies a Selections type</td><td valign="middle">M</td><td>String</td></tr><tr><td><pre><code>            "selections": [  
                {
</code></pre></td><td>selections</td><td>Nesting of array of selections of "type":"uf",<br>minimal number of selections = 2,<br>maximum number = 10</td><td valign="middle">M</td><td>Array</td></tr><tr><td><pre><code>                  "type": "uf",
                     .......
                     .......
                     }
                        ],
</code></pre></td><td><ul><li>type</li></ul></td><td>Only selections of "type":"uf" are allowed here</td><td valign="middle">M</td><td>String</td></tr><tr><td><pre><code>            "odds": {
</code></pre></td><td>odds</td><td>See odds description above </td><td valign="middle">M</td><td>Object</td></tr><tr><td><pre><code>              "type": "decimal",
</code></pre></td><td><ul><li>type</li></ul></td><td><br></td><td valign="middle">M</td><td>String</td></tr><tr><td><pre><code>              "value": "7.1"
              },
</code></pre></td><td><ul><li>value</li></ul></td><td><br></td><td valign="middle">M</td><td>String</td></tr><tr><td><pre><code>            "useHarmOdds": true
</code></pre></td><td>useHarmOdds</td><td>This flag instructs MTS to use harmonized odds when invoking the UOF CB API.<br>The default setting is false.</td><td valign="middle">O</td><td>Boolean</td></tr><tr><td><pre><code>          }
</code></pre></td><td><br></td><td><br></td><td valign="middle"><br></td><td><br></td></tr></tbody></table>

**4. Selections ("type": "system") table:**\
This type of selection contains multiple selections that form a system bet.

Fields:

* type
* selections (array)
* size (array)

<table data-full-width="true"><thead><tr><th width="330.4296875">Example</th><th width="167.959228515625">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>            "type": "system",
</code></pre></td><td>type</td><td>Specifies a Selections type</td><td>M</td><td>String</td></tr><tr><td><pre><code>            "selections": [
</code></pre></td><td>selections</td><td>Nesting of array of selections of any type,<br>minimal number of selections = 2,<br>maximum number = 30</td><td>M</td><td>Array</td></tr><tr><td><pre><code>                {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>                "type": "uf",
                     .......
                     .......
                     }
                   ],   
</code></pre></td><td><ul><li>type</li></ul></td><td>Nested selection type, currently only "uf" is supported.</td><td>M</td><td>String</td></tr><tr><td><pre><code>             "size": [2,3
               ]
           }     
</code></pre></td><td>size</td><td>Array of size items (each item must be unique),<br>each item represents a system bet (in this example 2/4 and 3/4, given that there are four selections to make systems from),<br>minimal number of items = 1,<br>maximum number of items = 30</td><td>M</td><td>Array of integers</td></tr></tbody></table>

**5. Selections ("type": "ways") table:**

This type of selection contains one or more selections related to an event (or even the same market on an event) that are already included in another selection of the same bet.

Fields:

* type
* selections (array)

<table data-full-width="true"><thead><tr><th width="327.95574951171875">Example</th><th width="146.556396484375">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>          {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>            "type": "ways",
</code></pre></td><td>type</td><td>Specifies a Selections type</td><td>M</td><td>String</td></tr><tr><td><pre><code>            "selections": [
</code></pre></td><td>selections</td><td>Nesting of array of selections of "type":"uf" or "type":"external" or "type":"odds-boost",<br>minimal number of selections = 2,<br>maximum number = 30</td><td>M</td><td>Array</td></tr><tr><td><pre><code>                {
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre data-overflow="wrap"><code>                 "type": "uf",
                     .......
                     .......
                     }
                   ]
             }                     
</code></pre></td><td><ul><li>type</li></ul></td><td>Only selections of "type":"uf" or "type":"external" or "type":"odds-boost" are allowed here<br>(as only these types include "eventId" (or "event") field)</td><td>M</td><td>String</td></tr></tbody></table>

**6. Selection ("type": "odds-boost") table:**

This type of selection contains boosted odds and a selection type = "uf" or "external" (as only these are currently supported).

Fields:

* type
* selection
* odds (boosted odds)

<table data-full-width="true"><thead><tr><th width="350.88629150390625">Example</th><th width="199.3011474609375">Field Name</th><th>Field Description</th><th width="100">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>{
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>  "type": "odds-boost",
</code></pre></td><td>type</td><td>Specifies the Selection type</td><td>M</td><td>String</td></tr><tr><td><pre><code>  "selection": {
</code></pre></td><td>selection</td><td>Selection to which the boosted odds apply</td><td>M</td><td>Object</td></tr><tr><td><pre><code>                 "type": "uf",
                     .......
                     .......
                     },        
</code></pre></td><td><ul><li>type</li></ul></td><td>Only selections of "type":"uf" or "type":"external" are allowed here (as only these two types are supported)</td><td>M</td><td>String</td></tr><tr><td><pre><code>  "odds": {
</code></pre></td><td>odds</td><td>Selection's boosted odds,<br>See <a href="#mtsticketplacementrequest-v3.0-betsbetsarray">odds description</a></td><td>M</td><td>Object</td></tr><tr><td><pre><code>    "type": "decimal",
</code></pre></td><td><ul><li>type</li></ul></td><td><br></td><td>M</td><td>String</td></tr><tr><td><pre><code>    "value": "7.1
      }
   }       
</code></pre></td><td><ul><li>value</li></ul></td><td><br></td><td>M</td><td>String</td></tr></tbody></table>

**7. Selection ("type": "payout-modifier") table:**

This type of selection contains a selection that is eligible for the payout modification.&#x20;

Fields:

* type
* selection
* description
* reference

<table data-full-width="true"><thead><tr><th width="355.4765625">Example</th><th width="118.81072998046875">Field Name</th><th>Field Description</th><th width="118.4140625">Mandatory/ Optional</th><th width="100">Data Type</th></tr></thead><tbody><tr><td><pre><code>{
</code></pre></td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td><pre><code>   "type": "payout-modifier",
</code></pre></td><td>type</td><td>Specifies the Selection type</td><td>M</td><td>String</td></tr><tr><td><pre data-overflow="wrap"><code>   "reference": "24uAF4GHCmL3pYOmQujyjRsLTfrRIRDn",
</code></pre></td><td>reference</td><td>Specifies the unique identifier of the promotion that will be used in the settlement message to identify outcomes that need to be settled (across all eligible tickets), <br>client defined string.</td><td>M</td><td>String</td></tr><tr><td><pre><code>   "description": "2 Up",
</code></pre></td><td>description</td><td><p>Specifies the type of promotion to which the selection is linked, client defined string,<br>max. string length = 512,<br>min. string length =1.</p><p>Examples:<br>"2 Up",<br>"2 Goal Early Payout",<br>"Early Payout",<br>"Lose To Win",<br>"Supersub"</p></td><td>O</td><td>String</td></tr><tr><td><pre><code>    "selection": {
</code></pre></td><td>selection</td><td>Selection to which the promotion applies</td><td>M</td><td>Object</td></tr><tr><td><pre><code>            "type": "uf",
                .......
                .......
      }
}
</code></pre></td><td><ul><li>type</li></ul></td><td>Only selections of "type":"uf" are allowed here</td><td>M</td><td>String</td></tr></tbody></table>

<br>
