> ## Documentation Index
> Fetch the complete documentation index at: https://docs.splashsports.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List transactions

> Every movement of cash your trading caused, newest first: each order that filled (`type: order`, a `debit` for a buy and a `credit` for a sale) and each settlement payout (`type: settlement`, always a `credit`). When a market settles, a position on the winning side is closed and its payout appears here as a settlement transaction, with the record (the result, the price each contract paid and the contracts held) in `settlement`. A position that settles worthless pays nothing and adds no transaction. Orders that did not fill add none either; follow those with [List orders](/predictions/reference/orders/list-orders).

Use `from` and `to` (ISO 8601 timestamps with a time zone) to read a period, and `limit` and `offset` to page. `amount` is always positive; `effect` says which way the cash moved. To see how a position ended, use [Get a position](/predictions/reference/positions/get-a-position); for its settlement record, use this list.

Sign the request with your API key; see [Authentication](/predictions/authentication). It always reads the key's own account: a `user_id` query parameter is refused with a `401`.



## OpenAPI

````yaml /predictions/openapi.json get /transactions
openapi: 3.1.0
info:
  title: Splash Predictions API
  version: 1.0.0
  description: >-
    Splash prediction markets: leagues, games, game lines, futures and player
    props, and the signed routes to place orders, read your orders, positions
    and transactions, and read your account's fee settings and cash balance. The
    market endpoints need no authentication; the order, position, account and
    balance endpoints are [signed with an API key](/predictions/authentication).
servers:
  - url: https://api.splashsports.com/predictions-service/api
    description: Production
security: []
tags:
  - name: Discover
    description: The home feed.
  - name: Sub-categories
    description: Leagues, their availability and their tabs.
  - name: Markets
    description: Market group listings and single groups.
  - name: Events
    description: One game's markets, shaped for the game page.
  - name: Orders
    description: Place orders and read them. Signed requests.
  - name: Positions
    description: Read your positions. Signed requests.
  - name: Activity
    description: 'Your transaction history: fills and settlement payouts. Signed requests.'
  - name: Account
    description: Your fee settings, maximum trade and cash balance. Signed requests.
paths:
  /transactions:
    get:
      tags:
        - Activity
      summary: List transactions
      description: >-
        Every movement of cash your trading caused, newest first: each order
        that filled (`type: order`, a `debit` for a buy and a `credit` for a
        sale) and each settlement payout (`type: settlement`, always a
        `credit`). When a market settles, a position on the winning side is
        closed and its payout appears here as a settlement transaction, with the
        record (the result, the price each contract paid and the contracts held)
        in `settlement`. A position that settles worthless pays nothing and adds
        no transaction. Orders that did not fill add none either; follow those
        with [List orders](/predictions/reference/orders/list-orders).


        Use `from` and `to` (ISO 8601 timestamps with a time zone) to read a
        period, and `limit` and `offset` to page. `amount` is always positive;
        `effect` says which way the cash moved. To see how a position ended, use
        [Get a position](/predictions/reference/positions/get-a-position); for
        its settlement record, use this list.


        Sign the request with your API key; see
        [Authentication](/predictions/authentication). It always reads the key's
        own account: a `user_id` query parameter is refused with a `401`.
      operationId: listTransactions
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
          description: Page size, 1 to 50. Default 50.
          example: 20
        - name: offset
          in: query
          schema:
            type: integer
            minimum: 0
            default: 0
          description: >-
            Transactions to skip, 0 or more. Default 0. Page with `offset +=
            limit` and stop when `offset + limit >= total`.
          example: 0
        - name: from
          in: query
          schema:
            type: string
            format: date-time
          description: >-
            Only transactions at or after this time. An ISO 8601 timestamp with
            a time zone, such as `2026-11-01T00:00:00Z` or
            `2026-11-01T00:00:00-05:00`; not epoch milliseconds. Anything else
            is a `400`.
          example: '2026-11-01T00:00:00Z'
        - name: to
          in: query
          schema:
            type: string
            format: date-time
          description: Only transactions at or before this time. The same format as `from`.
          example: '2026-11-30T23:59:59Z'
      responses:
        '200':
          description: Your transactions, newest first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionListResponse'
              examples:
                Order transactions:
                  summary: Order transactions
                  value:
                    status: success
                    data:
                      - id: tx_6af0d057a1c94e2b8d3f60a7c5e1b28d
                        type: order
                        effect: credit
                        amount: 6.55
                        title: Markets - Sold
                        market_title: KC @ BUF • Chiefs to win
                        created_at: 1794166871236
                        order:
                          id: ord_6af0d056c50d27e8a6b19f34d0e8c3a1
                          side: 'yes'
                          yes_price: 0.665
                          no_price: 0.335
                          quantity: 10
                          status: executed
                          fill_cost: 0
                          updated_at: 1794166871236
                          created_at: 1794166870000
                          executed_at: 1794166871236
                          remaining_quantity: 0
                          fill_quantity: 10
                          fees: 0.1
                          action: sell
                          splash_action: sell
                          proceeds: 6.65
                          splash_side: 'yes'
                          trade_price: 0.655
                          proceeds_minus_fees: 6.55
                          fill_cost_plus_fees: 0
                          request_id: c47b19e2-0f6d-4b8a-a3e5-71d9f2c08a56
                          time_in_force: FOK
                        market:
                          id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
                          provider_ticker: aec-nfl-kc-buf-2026-11-08
                          title: Kansas City Chiefs to win the game?
                          sub_category: nfl
                          type: moneyline
                          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          event_start: 1794160800000
                          moneyline_type: two_way
                          team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
                          price_yes:
                            american: '-144'
                            decimal: 1.69x
                            percentage: 59%
                            price: $0.59
                            numeric_price: 0.59
                          price_no:
                            american: '+138'
                            decimal: 2.38x
                            percentage: 42%
                            price: $0.42
                            numeric_price: 0.42
                          volume: 184532.17
                          liquidity: 9266.25
                          yes_liquidity: 5378.8
                          no_liquidity: 4334.95
                          last_price_yes: 0.585
                          last_price_no: 0.415
                          status: active
                          updated_at: 1793977442118
                          rules: >-
                            This market resolves to "Yes" if the Kansas City
                            Chiefs win their game against the Buffalo Bills
                            scheduled for November 8, 2026. It resolves to "No"
                            if the Buffalo Bills win. If the game ends in a tie,
                            is canceled, or is postponed past November 15, 2026,
                            the market resolves 50-50.
                          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
                      - id: tx_6aedec66e2b7c4a9f0d18e53b6a2c7f4
                        type: order
                        effect: debit
                        amount: 5.97
                        title: Markets - Bought
                        market_title: KC @ BUF • Chiefs to win
                        created_at: 1793977446412
                        order:
                          id: ord_6aedec658f3a61c2d94e07b5a1c6e2d9
                          side: 'yes'
                          yes_price: 0.585
                          no_price: 0.415
                          quantity: 10
                          status: executed
                          fill_cost: 5.85
                          updated_at: 1793977446412
                          created_at: 1793977445000
                          executed_at: 1793977446412
                          remaining_quantity: 0
                          fill_quantity: 10
                          fees: 0.12
                          action: buy
                          splash_action: buy
                          proceeds: 0
                          splash_side: 'yes'
                          trade_price: 0.597
                          proceeds_minus_fees: 0
                          fill_cost_plus_fees: 5.97
                          request_id: 3f1c2a9e-5b7d-4e0a-9c1d-8a6b2e4f7d10
                          time_in_force: FOK
                        market:
                          id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
                          provider_ticker: aec-nfl-kc-buf-2026-11-08
                          title: Kansas City Chiefs to win the game?
                          sub_category: nfl
                          type: moneyline
                          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          event_start: 1794160800000
                          moneyline_type: two_way
                          team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
                          price_yes:
                            american: '-144'
                            decimal: 1.69x
                            percentage: 59%
                            price: $0.59
                            numeric_price: 0.59
                          price_no:
                            american: '+138'
                            decimal: 2.38x
                            percentage: 42%
                            price: $0.42
                            numeric_price: 0.42
                          volume: 184532.17
                          liquidity: 9266.25
                          yes_liquidity: 5378.8
                          no_liquidity: 4334.95
                          last_price_yes: 0.585
                          last_price_no: 0.415
                          status: active
                          updated_at: 1793977442118
                          rules: >-
                            This market resolves to "Yes" if the Kansas City
                            Chiefs win their game against the Buffalo Bills
                            scheduled for November 8, 2026. It resolves to "No"
                            if the Buffalo Bills win. If the game ends in a tie,
                            is canceled, or is postponed past November 15, 2026,
                            the market resolves 50-50.
                          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
                    total: 2
                    offset: 0
                    limit: 50
                  description: >-
                    A sale that filled, credited $6.55 after the fee, and the
                    buy before it, debited $5.97 including the fee.
                Settlement transaction:
                  summary: Settlement transaction
                  value:
                    status: success
                    data:
                      - id: tx_6af1a3c2b48e0d7f1a9c53e6b2d8f017
                        type: settlement
                        effect: credit
                        amount: 20
                        title: Markets - Settlement
                        market_title: KC @ BUF • Over 47.5 points
                        created_at: 1794174120000
                        settlement:
                          id: smnt_6af1a3c27d9e4b0f8c2a65e1d3b7f940
                          amount: 20
                          created_at: 1794174120000
                          updated_at: 1794174120000
                          market_id: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
                          position_id: pos_6aedecf7f6c1b4e9a3d27f50c8e4a1d3
                          result: 'yes'
                          settlement_price: 1
                          yes_quantity: 20
                          no_quantity: 0
                        market:
                          id: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
                          provider_ticker: tsc-nfl-kc-buf-2026-11-08-47pt5
                          title: 'Chiefs vs. Bills: Total Points O/U 47.5'
                          sub_category: nfl
                          type: total
                          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          event_start: 1794160800000
                          line: 47.5
                          yes_line_display: O 47.5
                          no_line_display: U 47.5
                          price_yes:
                            american: '-117'
                            decimal: 1.85x
                            percentage: 54%
                            price: $0.54
                            numeric_price: 0.54
                          price_no:
                            american: '+113'
                            decimal: 2.13x
                            percentage: 47%
                            price: $0.47
                            numeric_price: 0.47
                          volume: 71455.92
                          liquidity: 4350.3
                          yes_liquidity: 2298.2
                          no_liquidity: 2211.5
                          last_price_yes: 0.535
                          last_price_no: 0.465
                          status: settled
                          updated_at: 1793977442118
                          rules: >-
                            This market resolves to "Yes" if the Kansas City
                            Chiefs and Buffalo Bills combine for more than 47.5
                            points in their game on November 8, 2026, overtime
                            included. Otherwise it resolves to "No".
                          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
                          result: 'yes'
                    total: 1
                    offset: 0
                    limit: 50
                  description: >-
                    The total settled `yes` and the 20 YES contracts held paid
                    $1 each: $20.00 credited, and the position is now closed.
                Empty page:
                  summary: Empty page
                  value:
                    status: success
                    data: []
                    total: 0
                    offset: 0
                    limit: 50
                  description: No transactions in the period, or `offset` past the end.
        '400':
          $ref: '#/components/responses/TradingBadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedUserScoped'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
      security:
        - SplashAccessKey: []
          SplashAccessTimestamp: []
          SplashAccessSignature: []
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            KEY="your-key-id"

            SECRET="your-secret"

            METHOD="GET"

            URLPATH="/predictions-service/api/transactions?limit=20"

            BODY=""


            TS=$(( $(date +%s) * 1000 ))

            SIG=$(printf '%s' "$TS$METHOD$URLPATH$BODY" | openssl dgst -sha256
            -hmac "$SECRET" -binary | base64)


            curl -X "$METHOD" "https://api.splashsports.com$URLPATH" \
              -H "SPLASH-ACCESS-KEY: $KEY" \
              -H "SPLASH-ACCESS-TIMESTAMP: $TS" \
              -H "SPLASH-ACCESS-SIGNATURE: $SIG"
        - lang: python
          label: Python
          source: >-
            import base64, hashlib, hmac, json, time

            import requests


            KEY = "your-key-id"

            SECRET = "your-secret"

            HOST = "https://api.splashsports.com"



            def sign(secret, timestamp, method, path, body):
                message = (timestamp + method + path + body).encode("utf-8")
                digest = hmac.new(secret.encode("utf-8"), message, hashlib.sha256).digest()
                return base64.b64encode(digest).decode("ascii")


            def request(method, path, payload=None):
                body = json.dumps(payload, separators=(",", ":")) if payload is not None else ""
                timestamp = str(int(time.time() * 1000))
                headers = {
                    "Content-Type": "application/json",
                    "SPLASH-ACCESS-KEY": KEY,
                    "SPLASH-ACCESS-TIMESTAMP": timestamp,
                    "SPLASH-ACCESS-SIGNATURE": sign(SECRET, timestamp, method, path, body),
                }
                return requests.request(method, HOST + path, headers=headers, data=body.encode("utf-8"))


            response = request("GET",
            "/predictions-service/api/transactions?limit=20")

            print(response.status_code, response.json())
        - lang: typescript
          label: TypeScript
          source: >-
            import { createHmac } from "node:crypto";


            const KEY = "your-key-id";

            const SECRET = "your-secret";

            const HOST = "https://api.splashsports.com";


            function sign(secret: string, timestamp: string, method: string,
            path: string, body: string): string {
              return createHmac("sha256", secret).update(timestamp + method + path + body, "utf8").digest("base64");
            }


            const method = "GET";

            const path = "/predictions-service/api/transactions?limit=20";

            const body = "";

            const timestamp = Date.now().toString();


            const response = await fetch(HOST + path, {
              method,
              headers: {
                "SPLASH-ACCESS-KEY": KEY,
                "SPLASH-ACCESS-TIMESTAMP": timestamp,
                "SPLASH-ACCESS-SIGNATURE": sign(SECRET, timestamp, method, path, body),
              },
            });

            console.log(response.status, await response.json());
        - lang: go
          label: Go
          source: "package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tkey    = \"your-key-id\"\n\tsecret = \"your-secret\"\n\thost   = \"https://api.splashsports.com\"\n)\n\nfunc sign(secret, timestamp, method, path string, body []byte) string {\n\tmac := hmac.New(sha256.New, []byte(secret))\n\tmac.Write([]byte(timestamp + method + path))\n\tmac.Write(body)\n\treturn base64.StdEncoding.EncodeToString(mac.Sum(nil))\n}\n\nfunc main() {\n\tmethod := \"GET\"\n\tpath := \"/predictions-service/api/transactions?limit=20\"\n\n\tvar body []byte // no body: the signature covers the empty string\n\ttimestamp := strconv.FormatInt(time.Now().UnixMilli(), 10)\n\n\treq, err := http.NewRequest(method, host+path, bytes.NewReader(body))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treq.Header.Set(\"SPLASH-ACCESS-KEY\", key)\n\treq.Header.Set(\"SPLASH-ACCESS-TIMESTAMP\", timestamp)\n\treq.Header.Set(\"SPLASH-ACCESS-SIGNATURE\", sign(secret, timestamp, method, path, body))\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\tout, _ := io.ReadAll(resp.Body)\n\tfmt.Println(resp.StatusCode, string(out))\n}"
components:
  schemas:
    TransactionListResponse:
      type: object
      title: TransactionListResponse
      description: Your transactions, newest first.
      required:
        - status
        - data
        - total
        - offset
        - limit
      properties:
        status:
          type: string
          const: success
          description: Always `success` on a 200.
          example: success
        data:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
          description: >-
            Your transactions, newest first by `created_at`. A transaction whose
            market can no longer be read is left out, so a page can hold fewer
            than `limit` items while `total` still counts it.
        total:
          type: integer
          description: Transactions matching `from` and `to`, across all pages.
          example: 3
        offset:
          type: integer
          description: The `offset` the page starts at.
          example: 0
        limit:
          type: integer
          description: The page size.
          example: 50
    Transaction:
      type: object
      title: Transaction
      description: >-
        One movement of cash on your account from trading: an order filling
        (`type: order`) or a position being paid out at settlement (`type:
        settlement`). One flat object for both: `order` is present only on an
        order transaction and `settlement` only on a settlement transaction.
        Money is in dollars; timestamps are epoch milliseconds.
      required:
        - id
        - type
        - effect
        - amount
        - title
        - market_title
        - created_at
        - market
      properties:
        id:
          type: string
          description: The transaction's id, prefixed `tx_`.
          example: tx_6aedec66e2b7c4a9f0d18e53b6a2c7f4
        type:
          type: string
          enum:
            - order
            - settlement
          description: >-
            What moved the cash. `order`: an order filled, or a fill was later
            voided and reversed; `order` holds the order. `settlement`: the
            market settled and your position was paid out; `settlement` holds
            the record. A position that settles worthless pays nothing and has
            no transaction.
          example: order
        effect:
          type: string
          enum:
            - debit
            - credit
          description: >-
            Which way the cash moved. `debit`: taken from your cash (a buy that
            filled, or the reversal of a voided sale). `credit`: added to your
            cash (a sale that filled, a settlement payout, or the refund of a
            voided buy). Always `credit` on a settlement.
          example: debit
        amount:
          type: number
          description: >-
            How much cash moved, in dollars, always positive; `effect` gives the
            direction. A filled buy is what it cost you including the fee (the
            order's `fill_cost_plus_fees`); a filled sale is what you received
            after the fee (`proceeds_minus_fees`); a settlement is the payout
            (normally `settlement.amount`).
          example: 5.97
        title:
          type: string
          description: >-
            A short label for the movement, for display: `Markets - Bought`,
            `Markets - Sold`, `Markets - Settlement`, `Markets - Trade Voided
            Refund` (a voided buy refunded) or `Markets - Trade Voided Reversal`
            (a voided sale taken back).
          example: Markets - Bought
        market_title:
          type: string
          description: >-
            The game, market and side the transaction was on, ready to display,
            such as `KC @ BUF • Chiefs to win` or `KC @ BUF • Over 47.5 points`.
            On a settlement the side is the one the position held. An empty
            string when Splash could not build it.
          example: KC @ BUF • Chiefs to win
        created_at:
          type: integer
          format: int64
          description: >-
            When the cash moved. Epoch milliseconds. Transactions are listed
            newest first by this, and `from` and `to` filter on it.
          example: 1793977446412
        order:
          $ref: '#/components/schemas/Order'
          description: >-
            The order, as [Get an
            order](/predictions/reference/orders/get-an-order) returns it
            without its market. Present only when `type` is `order`.
        settlement:
          $ref: '#/components/schemas/Settlement'
          description: The settlement record. Present only when `type` is `settlement`.
        market:
          $ref: '#/components/schemas/Market'
          description: >-
            The market the transaction was on, as it is now rather than as it
            was when the cash moved.
      example:
        id: tx_6aedec66e2b7c4a9f0d18e53b6a2c7f4
        type: order
        effect: debit
        amount: 5.97
        title: Markets - Bought
        market_title: KC @ BUF • Chiefs to win
        created_at: 1793977446412
        order:
          id: ord_6aedec658f3a61c2d94e07b5a1c6e2d9
          side: 'yes'
          yes_price: 0.585
          no_price: 0.415
          quantity: 10
          status: executed
          fill_cost: 5.85
          updated_at: 1793977446412
          created_at: 1793977445000
          executed_at: 1793977446412
          remaining_quantity: 0
          fill_quantity: 10
          fees: 0.12
          action: buy
          splash_action: buy
          proceeds: 0
          splash_side: 'yes'
          trade_price: 0.597
          proceeds_minus_fees: 0
          fill_cost_plus_fees: 5.97
          request_id: 3f1c2a9e-5b7d-4e0a-9c1d-8a6b2e4f7d10
          time_in_force: FOK
        market:
          id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
          provider_ticker: aec-nfl-kc-buf-2026-11-08
          title: Kansas City Chiefs to win the game?
          sub_category: nfl
          type: moneyline
          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
          event_start: 1794160800000
          moneyline_type: two_way
          team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
          yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
          no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
          price_yes:
            american: '-144'
            decimal: 1.69x
            percentage: 59%
            price: $0.59
            numeric_price: 0.59
          price_no:
            american: '+138'
            decimal: 2.38x
            percentage: 42%
            price: $0.42
            numeric_price: 0.42
          volume: 184532.17
          liquidity: 9266.25
          yes_liquidity: 5378.8
          no_liquidity: 4334.95
          last_price_yes: 0.585
          last_price_no: 0.415
          status: active
          updated_at: 1793977442118
          rules: >-
            This market resolves to "Yes" if the Kansas City Chiefs win their
            game against the Buffalo Bills scheduled for November 8, 2026. It
            resolves to "No" if the Buffalo Bills win. If the game ends in a
            tie, is canceled, or is postponed past November 15, 2026, the market
            resolves 50-50.
          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
    TradingError:
      type: object
      title: TradingError
      description: >-
        The error body of the signed order and position routes. Same shape as
        the public `Error`, with the codes those routes can return. Branch on
        `error`; `message` is for people. See
        [Errors](/predictions/trading#errors).
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error` on an error response.
          example: error
        error:
          type: string
          description: >-
            Machine-readable code; branch on this. A string: the values below
            are the ones these routes return today, and a code not listed here
            should be handled by its HTTP status. See [Trading error
            codes](/predictions/enums#trading-error-codes-error).


            - `BAD_REQUEST` (400): invalid body or query, or an order check
            failed.

            - `NOT_AUTHORIZED` (401): the signature check failed, the request
            had no `SPLASH-ACCESS-KEY` header, or `user_id` was passed to `GET
            /orders`, `GET /orders/{id}`, `GET /positions`, `GET
            /positions/{id}` or `GET /transactions`.

            - `FOBIDDEN` (403): `Not authorized to trade`, the account may not
            trade. `FOBIDDEN` is the literal value the API returns (not
            `FORBIDDEN`); match it exactly.

            - `NOT_FOUND` (404): no such order, position or market on your
            account.

            - `DUPLICATE_REQUEST_ID` (409): another account used this
            `request_id`.

            - `UNSUPPORTED_MEDIA_TYPE` (415): a signed body that is not JSON.

            - `INTERNAL_ERROR` (500): the request could not be handled. On `POST
            /trading/orders` the order was not placed; poll the `request_id`,
            then try again with a new one.

            - `TRADING_API_UNAVAILABLE` (503): the Trading API is not taking
            signed requests; retry later.

            - `EXCHANGE_UNAVAILABLE`, `SERVICE_UNAVAILABLE` (503): the order
            could not be placed right now; retry later with a new `request_id`.
            On `GET /balance`, `SERVICE_UNAVAILABLE` means your balance could
            not be read; retry shortly.


            A `429 Too Many Requests` is the rate limit, not one of these codes;
            see [Rate limits](/predictions/rate-limits). Whether an order's
            `request_id` can be reused after an error: see [Order outcomes and
            retries](/predictions/trading#order-outcomes-and-retries).
          example: FOBIDDEN
        message:
          type: string
          description: >-
            Human-readable detail. For `BAD_REQUEST` and `NOT_AUTHORIZED` it
            names the cause, e.g. `Invalid price` or `Invalid signature`. Do not
            branch on it.
          example: Not authorized to trade
      example:
        status: error
        error: FOBIDDEN
        message: Not authorized to trade
    TooManyRequestsError:
      type: object
      title: TooManyRequestsError
      description: >-
        The body of a `429 Too Many Requests`: more than 10 requests per second
        from your IP address. It is not a `TradingError`; branch on the `429`
        status. See [Rate limits](/predictions/rate-limits).
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error`.
          example: error
        error:
          type: string
          const: TOO_MANY_REQUESTS
          description: Always `TOO_MANY_REQUESTS` on a rate-limited request.
          example: TOO_MANY_REQUESTS
        message:
          type: string
          description: Human-readable detail. Do not branch on it.
          example: Too many requests, try again later
      example:
        status: error
        error: TOO_MANY_REQUESTS
        message: Too many requests, try again later
    Error:
      type: object
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error` on an error response.
          example: error
        error:
          type: string
          enum:
            - BAD_REQUEST
            - NOT_FOUND
            - INTERNAL_ERROR
          description: >-
            Machine-readable code; branch on this. `BAD_REQUEST` (400),
            `NOT_FOUND` (404) or `INTERNAL_ERROR` (500). See [Error
            codes](/predictions/enums#error-codes-error).
          example: BAD_REQUEST
        message:
          type: string
          description: >-
            Human-readable detail for logs and people. Wording can change; do
            not branch on it.
          example: Invalid request parameters
      title: Error
      example:
        status: error
        error: BAD_REQUEST
        message: Invalid request parameters
    Order:
      type: object
      title: Order
      description: >-
        One order. Money fields are dollars; prices are per contract, between 0
        and 1, with up to four decimal places. Timestamps are epoch
        milliseconds. Read the dollar fields for amounts; fills land on tenths
        of a cent, so a price times a quantity can differ from them by a cent.
      required:
        - id
        - side
        - yes_price
        - no_price
        - quantity
        - status
        - fill_cost
        - updated_at
        - created_at
        - remaining_quantity
        - fill_quantity
        - fees
        - action
        - splash_action
        - proceeds
        - splash_side
        - trade_price
        - proceeds_minus_fees
        - fill_cost_plus_fees
        - request_id
        - time_in_force
      properties:
        id:
          type: string
          description: >-
            The order id (prefix `ord_`), as `order_id` was returned when you
            placed it.
          example: ord_6aedec658f3a61c2d94e07b5a1c6e2d9
        side:
          $ref: '#/components/schemas/OrderSide'
          description: >-
            The side as Splash routes the order to the exchange. Every order is
            recorded against the YES contract, so this is `yes`; read
            `splash_side` for the side you traded. See [Order
            sides](/predictions/enums#order-sides-splash_side-and-side).
          example: 'yes'
        yes_price:
          type: number
          description: >-
            Price per contract in YES terms, up to 4 decimal places. Until the
            order fills it is your limit price expressed as a YES price; once it
            fills, the average fill price. Always `yes_price + no_price = 1`.
          example: 0.585
        no_price:
          type: number
          description: >-
            The same price in NO terms: `1 - yes_price`. On a NO buy this is
            what you paid per contract, before fees.
          example: 0.415
        quantity:
          type: integer
          description: Contracts requested.
          example: 10
        status:
          $ref: '#/components/schemas/OrderStatus'
          description: >-
            `pending` while queued or in flight, then `executed` (filled) or
            `cancelled` (not filled, or refused). A fill-or-kill order is never
            `resting`. See [Order
            statuses](/predictions/enums#order-statuses-status-on-an-order).
          example: executed
        fill_cost:
          type: number
          description: >-
            Buys: dollars paid for the filled contracts, before fees, up to 4
            decimal places. 0 on a sell and until the order fills.
          example: 5.85
        updated_at:
          type: integer
          format: int64
          description: When the order last changed. Epoch milliseconds.
          example: 1793977446412
        created_at:
          type: integer
          format: int64
          description: When the order was recorded. Epoch milliseconds.
          example: 1793977445000
        executed_at:
          type: integer
          format: int64
          description: When the order executed. Epoch milliseconds. Absent until it does.
          example: 1793977446412
        remaining_quantity:
          type: integer
          description: >-
            Contracts not filled. Equals `quantity` until the exchange reports
            on the order.
          example: 0
        fill_quantity:
          type: integer
          description: >-
            Contracts filled. 0 until the order fills; equal to `quantity` on an
            executed fill-or-kill order.
          example: 10
        fees:
          type: number
          description: >-
            Total fees on the order, Splash's and the exchange provider's, in
            dollars rounded to cents. Charged on top of a buy and out of a
            sell's proceeds. Before the fill it holds only Splash's quoted fee.
          example: 0.12
        action:
          $ref: '#/components/schemas/OrderAction'
          description: >-
            Buy or sell of the YES contract, as routed to the exchange: a YES
            buy or a NO close is `buy`, a NO buy or a YES close is `sell`. Read
            `splash_action` for what you did. See [Order
            actions](/predictions/enums#order-actions-splash_action-and-action).
          example: buy
        splash_action:
          $ref: '#/components/schemas/OrderAction'
          description: >-
            What you did: `buy` opens or adds to a position, `sell` closes it.
            See [Order
            actions](/predictions/enums#order-actions-splash_action-and-action).
          example: buy
        proceeds:
          type: number
          description: >-
            Sells: dollars received for the filled contracts, before fees, up to
            4 decimal places. 0 on a buy and until the order fills.
          example: 0
        splash_side:
          $ref: '#/components/schemas/OrderSide'
          description: >-
            The side you traded: the side you bought on a buy, the side you sold
            on a sell. See [Order
            sides](/predictions/enums#order-sides-splash_side-and-side).
          example: 'yes'
        trade_price:
          type: number
          description: >-
            Your all-in price per contract, up to 4 decimal places: on a buy
            `(fill_cost + fees) / fill_quantity`, on a sell `(proceeds - fees) /
            fill_quantity`. 0 until the order fills.
          example: 0.597
        proceeds_minus_fees:
          type: number
          description: >-
            Sells: `proceeds - fees`, the dollars credited to you, rounded to
            cents. 0 on a buy.
          example: 0
        fill_cost_plus_fees:
          type: number
          description: >-
            Buys: `fill_cost + fees`, the dollars debited from you, rounded to
            cents. 0 on a sell.
          example: 5.97
        request_id:
          type: string
          description: The `request_id` the order was placed with.
          example: 3f1c2a9e-5b7d-4e0a-9c1d-8a6b2e4f7d10
        time_in_force:
          $ref: '#/components/schemas/TimeInForce'
          description: >-
            `FOK` (fill or kill). Every order today is fill-or-kill. See [Time
            in force](/predictions/enums#time-in-force-time_in_force).
          example: FOK
      example:
        id: ord_6aedec658f3a61c2d94e07b5a1c6e2d9
        side: 'yes'
        yes_price: 0.585
        no_price: 0.415
        quantity: 10
        status: executed
        fill_cost: 5.85
        updated_at: 1793977446412
        created_at: 1793977445000
        executed_at: 1793977446412
        remaining_quantity: 0
        fill_quantity: 10
        fees: 0.12
        action: buy
        splash_action: buy
        proceeds: 0
        splash_side: 'yes'
        trade_price: 0.597
        proceeds_minus_fees: 0
        fill_cost_plus_fees: 5.97
        request_id: 3f1c2a9e-5b7d-4e0a-9c1d-8a6b2e4f7d10
        time_in_force: FOK
    Settlement:
      type: object
      title: Settlement
      description: >-
        The record of one position being paid out when its market settled. Money
        is in dollars, prices are per contract, timestamps are epoch
        milliseconds.
      required:
        - id
        - amount
        - created_at
        - updated_at
        - market_id
        - position_id
        - result
        - settlement_price
        - yes_quantity
        - no_quantity
      properties:
        id:
          type: string
          description: The settlement's id, prefixed `smnt_`.
          example: smnt_6af1a3c27d9e4b0f8c2a65e1d3b7f940
        amount:
          type: number
          description: >-
            The payout in dollars: `settlement_price` × the contracts held,
            rounded to the cent. It is what was credited to your cash for this
            position.
          example: 20
        created_at:
          type: integer
          format: int64
          description: When the settlement was recorded. Epoch milliseconds.
          example: 1794174120000
        updated_at:
          type: integer
          format: int64
          description: >-
            When the settlement record last changed. Epoch milliseconds; the
            same as `created_at` unless the record was corrected later.
          example: 1794174120000
        market_id:
          type: string
          description: The market that settled; the same as `market.id` on the transaction.
          example: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
        position_id:
          type: string
          description: >-
            The position that was paid out, prefixed `pos_`. Look it up with
            [Get a position](/predictions/reference/positions/get-a-position);
            it is `closed` after settlement.
          example: pos_6aedecf7f6c1b4e9a3d27f50c8e4a1d3
        result:
          $ref: '#/components/schemas/MarketResult'
          description: >-
            How the market resolved: `yes`, `no`, or `scalar` (resolved to a
            value rather than a side). See [Market
            results](/predictions/enums#market-results-result).
          example: 'yes'
        settlement_price:
          type: number
          description: >-
            What each contract you held paid, in dollars, on the side you held,
            with up to four decimal places: 1 when your side won, 0 when it
            lost, and the value in between when the market resolved to one (0.5
            for a 50/50 resolution).
          example: 1
        yes_quantity:
          type: number
          description: YES contracts you held when the market settled; 0 if you held NO.
          example: 20
        no_quantity:
          type: number
          description: NO contracts you held when the market settled; 0 if you held YES.
          example: 0
      example:
        id: smnt_6af1a3c27d9e4b0f8c2a65e1d3b7f940
        amount: 20
        created_at: 1794174120000
        updated_at: 1794174120000
        market_id: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
        position_id: pos_6aedecf7f6c1b4e9a3d27f50c8e4a1d3
        result: 'yes'
        settlement_price: 1
        yes_quantity: 20
        no_quantity: 0
    Market:
      title: Market
      type: object
      description: >-
        Any market. `type` says which shape it is; each shape has its own page:
        [SpreadMarket](/predictions/types/spread-market),
        [TotalMarket](/predictions/types/total-market),
        [MoneylineMarket](/predictions/types/moneyline-market),
        [FutureTeamChampionMarket](/predictions/types/future-team-champion-market),
        [PlayerPropMarket](/predictions/types/player-prop-market). Fields marked
        with a type are present only on that type.
      required:
        - id
        - provider_ticker
        - title
        - sub_category
        - type
        - price_yes
        - price_no
        - volume
        - liquidity
        - yes_liquidity
        - no_liquidity
        - status
        - updated_at
        - rules
        - market_group_id
        - event_start
        - yes_line_display
        - no_line_display
      properties:
        id:
          type: string
          description: >-
            The market id (prefix `pm_`). This is the instrument you trade, sent
            as `market_id` on `POST /trading/orders`, and the id to follow for
            price updates.
          example: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        provider_ticker:
          type: string
          description: >-
            The market's ticker on the exchange where it trades, in the
            exchange's own format. It identifies the market on the exchange and
            stays the same for the life of the market, so use it to match this
            market against the exchange's own data; to trade, use `id`. Always
            present.
          example: aec-nfl-kc-buf-2026-11-08
        title:
          type: string
          description: >-
            The exchange provider's title for the market, usually the YES side
            as a question. Display text that can change; never parse it or key
            on it.
          example: Kansas City Chiefs to win the game?
        sub_category:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        price_yes:
          $ref: '#/components/schemas/MarketPrice'
          description: >-
            What one YES contract costs right now: the best YES ask in the book
            Splash holds, in every display form. A YES contract pays $1 if the
            market resolves YES. `price_yes` and `price_no` are both asks, so
            their `numeric_price` values usually sum to a little more than 1;
            the excess is the spread. Reads 0 when nobody is offering YES, and
            while quotes are suspended during an exchange outage.
        price_no:
          $ref: '#/components/schemas/MarketPrice'
          description: >-
            What one NO contract costs right now: the best NO ask, in every
            display form. A NO contract pays $1 if the market resolves NO. Reads
            0 when nobody is offering NO, and during an exchange outage.
        orderbook:
          $ref: '#/components/schemas/Orderbook'
          description: >-
            Splash's copy of the exchange provider's order book for this market,
            at most ten levels a side. Absent when the book is empty and while
            quotes are suspended during an exchange outage.
        volume:
          type: number
          description: >-
            Dollars traded on the exchange in this market, rounded to cents. It
            refreshes with order book updates rather than on every trade, so it
            can trail the latest trade by a few seconds.
          example: 184532.17
        liquidity:
          type: number
          description: >-
            Dollars resting in the book Splash holds: each bid level's price
            times its quantity, summed over the YES and NO ladders and rounded
            to cents. A floor, since the feed carries at most ten levels a side.
            0 whenever `orderbook` is absent.
          example: 9266.25
        yes_liquidity:
          type: number
          description: >-
            Dollars of YES you could buy right now: the YES ask depth valued at
            the ask prices, rounded to cents. 0 means nobody is offering YES, so
            treat the YES side as closed. It is not a share of `liquidity`;
            buyable depth and resting depth are different measures and do not
            add up.
          example: 5378.8
        no_liquidity:
          type: number
          description: >-
            Dollars of NO you could buy right now: the NO ask depth valued at
            the ask prices, rounded to cents. 0 means nobody is offering NO.
          example: 4334.95
        last_price_yes:
          type: number
          description: >-
            The most recent trade as a YES price per contract, up to 4 decimal
            places. Absent until the market has traded. Refreshes with order
            book updates, like `volume`.
          example: 0.585
        last_price_no:
          type: number
          description: >-
            The same trade as a NO price: `1 - last_price_yes`, up to 4 decimal
            places. Present exactly when `last_price_yes` is.
          example: 0.415
        status:
          $ref: '#/components/schemas/MarketStatus'
          description: >-
            `active` is tradeable. `expired` has stopped trading and has not
            settled. `settled` has resolved and carries `result`. See [Market
            statuses](/predictions/enums#market-statuses-status).
          example: active
        result:
          $ref: '#/components/schemas/MarketResult'
          description: >-
            How the market resolved: `yes`, `no`, or `scalar` (resolved to a
            value rather than a side). Absent until the market settles. See
            [Market results](/predictions/enums#market-results-result).
          example: 'yes'
        updated_at:
          type: integer
          format: int64
          description: >-
            When Splash last refreshed this market, from an order book or status
            update. Epoch milliseconds.
          example: 1793977442118
        rules:
          type: string
          description: >-
            The resolution rules the exchange provider publishes for this
            market, as plain text. They decide `result`.
          example: >-
            This market resolves to "Yes" if the Kansas City Chiefs win their
            game against the Buffalo Bills scheduled for November 8, 2026. It
            resolves to "No" if the Buffalo Bills win. If the game ends in a
            tie, is canceled, or is postponed past November 15, 2026, the market
            resolves 50-50.
        market_group_id:
          type: string
          description: >-
            The market group this market belongs to; `GET
            /prediction_markets/{id}` returns the whole group.
          example: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
        type:
          type: string
          enum:
            - spread
            - total
            - moneyline
            - future_team_champion
            - player_prop
          description: >-
            Which shape this market is, and so which fields below are present:
            `spread`, `total`, `moneyline`, `future_team_champion` or
            `player_prop`. See [Market
            types](/predictions/enums#market-types-type-on-a-market).
          example: moneyline
        event_id:
          type: string
          description: >-
            All but `future_team_champion`: the game. Resolve it in
            `included.events`.
          example: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        event_start:
          type: integer
          format: int64
          description: >-
            Scheduled start of the game, epoch milliseconds. On a future, the
            date the exchange provider gives the title event.
          example: 1794160800000
        line:
          type: number
          description: >-
            Spread, total, and a player prop ladder rung (274.5 for "275+").
            Absent on a moneyline, a future and a pool leg.
          example: 47.5
        yes_line_display:
          type: string
          description: >-
            The YES outcome as display text: `-2.5` (spread), `O 47.5` (total),
            `275+` (prop rung), `Yes` (future, pool leg). Absent on a moneyline.
          example: O 47.5
        no_line_display:
          type: string
          description: >-
            The NO outcome as display text: `+2.5`, `U 47.5`, `Under 275`, `No`.
            Absent on a moneyline.
          example: U 47.5
        team_id:
          type: string
          description: >-
            Spread, moneyline (not a `draw` leg), future and player prop: the
            team the market is about, or the player's team.
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        yes_team_id:
          type: string
          description: 'Spread, and `two_way` moneyline: the team whose side is YES.'
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        no_team_id:
          type: string
          description: >-
            Spread, and `two_way` moneyline: the team whose side is NO. Buying
            it is buying NO.
          example: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        moneyline_type:
          type: string
          enum:
            - two_way
            - one_way
            - draw
          description: >-
            Moneyline only: `two_way`, `one_way` or `draw`. See [Moneyline
            types](/predictions/enums#moneyline-types-moneyline_type).
          example: two_way
        prop_type:
          $ref: '#/components/schemas/PlayerPropType'
          description: >-
            Player prop only. See [Player prop
            types](/predictions/enums#player-prop-types-prop_type).
          example: passing_yards
        prop_type_display:
          type: string
          description: Player prop only. Heading for `prop_type`, e.g. `Anytime TD`.
          example: Passing Yards
        entity_id:
          type: string
          description: Player prop only. The player; resolve it in `included.entities`.
          example: 11cad59d-90dd-449c-a839-dddaba4fe16c
        live_stat_key:
          type: string
          description: >-
            Player prop only. Present when a live in-game stat streams for this
            prop type; its value is the key to read from the
            `player-activity-{event_id}-{entity_id}` channel payload.
          example: passing_yards
        live_stat:
          type: number
          description: >-
            Player prop only. The current value of `live_stat_key`: 0 until the
            player appears, the final figure once the game is over. Present
            exactly when `live_stat_key` is.
          example: 0
        alternate_lines:
          type: array
          description: >-
            Player prop only. The whole ladder, this market included. Absent
            when there is a single line.
          items:
            $ref: '#/components/schemas/PlayerPropLine'
      example:
        id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        provider_ticker: aec-nfl-kc-buf-2026-11-08
        title: Kansas City Chiefs to win the game?
        sub_category: nfl
        type: moneyline
        event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        event_start: 1794160800000
        moneyline_type: two_way
        team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        price_yes:
          american: '-144'
          decimal: 1.69x
          percentage: 59%
          price: $0.59
          numeric_price: 0.59
        price_no:
          american: '+138'
          decimal: 2.38x
          percentage: 42%
          price: $0.42
          numeric_price: 0.42
        volume: 184532.17
        liquidity: 9266.25
        yes_liquidity: 5378.8
        no_liquidity: 4334.95
        last_price_yes: 0.585
        last_price_no: 0.415
        status: active
        updated_at: 1793977442118
        rules: >-
          This market resolves to "Yes" if the Kansas City Chiefs win their game
          against the Buffalo Bills scheduled for November 8, 2026. It resolves
          to "No" if the Buffalo Bills win. If the game ends in a tie, is
          canceled, or is postponed past November 15, 2026, the market resolves
          50-50.
        market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
    OrderSide:
      type: string
      enum:
        - 'yes'
        - 'no'
      title: OrderSide
      description: >-
        Which side of a market's question. See [Order
        sides](/predictions/enums#order-sides-splash_side-and-side).
      example: 'yes'
    OrderStatus:
      type: string
      enum:
        - pending
        - executed
        - cancelled
        - resting
      title: OrderStatus
      description: >-
        `pending` while queued or in flight, then `executed` or `cancelled`. A
        fill-or-kill order is never `resting`. See [Order
        statuses](/predictions/enums#order-statuses-status-on-an-order).
      example: executed
    OrderAction:
      type: string
      enum:
        - buy
        - sell
      title: OrderAction
      description: >-
        `buy` or `sell`. See [Order
        actions](/predictions/enums#order-actions-splash_action-and-action).
      example: buy
    TimeInForce:
      type: string
      enum:
        - FOK
        - IOC
      title: TimeInForce
      description: >-
        `FOK` (fill or kill) fills completely or is cancelled. `IOC` is not yet
        accepted. See [Time in
        force](/predictions/enums#time-in-force-time_in_force).
      example: FOK
    MarketResult:
      type: string
      description: >-
        How a settled market resolved: `yes`, `no`, or `scalar` (resolved to a
        value rather than a side). Present once a market settles.
      enum:
        - 'yes'
        - 'no'
        - scalar
      title: MarketResult
      example: 'yes'
    SubCategoryId:
      type: string
      description: >-
        A league id. `pga` and `wc` appear in responses but are not accepted by
        `?sub_category=`. See
        [Leagues](/predictions/enums#leagues-sub_category).
      enum:
        - nfl
        - ncaaf
        - nba
        - wnba
        - ncaab
        - mlb
        - nhl
        - epl
        - mls
        - pga
        - wc
      title: SubCategoryId
      example: nfl
    MarketPrice:
      type: object
      description: >-
        One side's price in every display form. `numeric_price` is the price per
        contract in dollars, between 0 and 0.99; the strings are ready to
        render.
      required:
        - american
        - decimal
        - percentage
        - price
        - numeric_price
      properties:
        american:
          type: string
          description: >-
            American odds for the price, rounded to a whole number, with a sign:
            `-144` for a favourite, `+138` for an underdog. `-10000` when the
            price is 0.
          example: '-144'
        decimal:
          type: string
          description: >-
            Decimal odds, `1 / numeric_price` to 2 places, with an `x` suffix:
            `1.69x`. `0x` when the price is 0.
          example: 1.69x
        percentage:
          type: string
          description: >-
            The implied probability, `numeric_price` as a whole percentage:
            `59%`.
          example: 59%
        price:
          type: string
          description: >-
            The per-contract price in dollars, rounded to cents and formatted
            with a dollar sign: `$0.59`.
          example: $0.59
        numeric_price:
          type: number
          description: >-
            The per-contract price in dollars as a number, up to 4 decimal
            places (the exchange quotes in tenths of a cent), capped at 0.99. 0
            when nobody is offering this side. Use this field for arithmetic;
            the strings are for display.
          example: 0.59
      title: MarketPrice
      example:
        american: '-144'
        decimal: 1.69x
        percentage: 59%
        price: $0.59
        numeric_price: 0.59
    Orderbook:
      type: object
      description: >-
        Splash's copy of the exchange provider's order book for one market, at
        most ten levels a side. Present on list and single-group responses alike
        whenever the book is not empty; absent during an exchange outage. Bids
        are what holders will pay; asks, derived from the opposite side's bids,
        are what you can buy at.
      required:
        - bids
        - asks
      properties:
        bids:
          $ref: '#/components/schemas/OrderbookSide'
          description: >-
            Bids: the YES bids and the NO bids, each ordered by price ascending,
            so the best bid is last.
        asks:
          $ref: '#/components/schemas/OrderbookSide'
          description: >-
            Asks: what you can buy at. Each YES ask is the complement of a NO
            bid (a NO bid at 0.41 is a YES ask at 0.59) and each NO ask the
            complement of a YES bid, ordered by price ascending, so the best ask
            is first.
      title: Orderbook
      example:
        bids:
          'yes':
            - q: 4210
              p: 0.56
            - q: 3185
              p: 0.57
            - q: 2650
              p: 0.58
          'no':
            - q: 3920
              p: 0.39
            - q: 2875
              p: 0.4
            - q: 2140
              p: 0.41
        asks:
          'yes':
            - q: 2140
              p: 0.59
            - q: 2875
              p: 0.6
            - q: 3920
              p: 0.61
          'no':
            - q: 2650
              p: 0.42
            - q: 3185
              p: 0.43
            - q: 4210
              p: 0.44
    MarketStatus:
      type: string
      description: >-
        `active` is tradeable. `expired` closed without settling. `settled` has
        a `result`.
      enum:
        - active
        - expired
        - settled
      title: MarketStatus
      example: active
    PlayerPropType:
      type: string
      description: >-
        A player prop category. Full table with display titles and which are
        ladders or pools: [Player prop
        types](/predictions/enums#player-prop-types-prop_type).
      enum:
        - touchdowns
        - receiving_yards
        - receptions
        - rushing_yards
        - passing_yards
        - first_touchdown
        - team_first_touchdown
        - passing_touchdowns
        - fantasy_points_ppr
        - passing_completions
        - passing_attempts
        - rushing_attempts
        - scrimmage_yards
        - longest_reception
        - interceptions_thrown
        - most_passing_yards
        - points
        - rebounds
        - assists
        - points_rebounds_assists
        - three_points_made
        - steals
        - blocks
        - double_double
        - goals
        - goals_plus_assists
        - first_goal
        - hits
        - total_bases
        - hits_runs_rbis
        - home_runs
        - rbis
        - stolen_bases
        - strikeouts
        - outs
        - earned_runs_allowed
        - hits_allowed
        - walks_allowed
      title: PlayerPropType
      example: passing_yards
    PlayerPropLine:
      type: object
      description: One rung of a ladder as the line picker shows it.
      required:
        - id
        - provider_ticker
        - yes_line_display
        - no_line_display
        - price_yes
        - price_no
        - yes_liquidity
        - no_liquidity
        - status
        - rules
      properties:
        id:
          type: string
          description: >-
            The market id of this rung: the `market_id` to trade and the id to
            follow for price updates.
          example: pm_6aec4c985f2b7d0e6a3c81b4c9d5e159
        provider_ticker:
          type: string
          description: >-
            The ticker of this line's market on the exchange where it trades, in
            the exchange's own format. Each line is its own market, so this
            identifies the line on the exchange and stays the same for the life
            of the market; use it to match the line against the exchange's own
            data, and `id` to trade it. The line the market leads with has the
            same `id` and ticker as the market. Always present.
          example: astatc-nfl-kc-buf-2026-11-08-passyds-patmah-gte300
        line:
          type: number
          description: 'The half-point strike: 299.5 for "300+". Absent on a pool leg.'
          example: 299.5
        yes_line_display:
          type: string
          description: The YES outcome as display text, e.g. `300+`.
          example: 300+
        no_line_display:
          type: string
          description: The NO outcome as display text, e.g. `Under 300`.
          example: Under 300
        price_yes:
          $ref: '#/components/schemas/MarketPrice'
          description: Best YES ask for this rung, in every display form.
        price_no:
          $ref: '#/components/schemas/MarketPrice'
          description: Best NO ask for this rung, in every display form.
        last_price_yes:
          type: number
          description: >-
            Last trade on this rung as a YES price, up to 4 decimal places.
            Absent until it has traded.
          example: 0.285
        last_price_no:
          type: number
          description: '`1 - last_price_yes`. Present exactly when `last_price_yes` is.'
          example: 0.715
        yes_liquidity:
          type: number
          description: >-
            Dollars of YES buyable on this rung right now, rounded to cents. 0
            means no YES offers.
          example: 529.1
        no_liquidity:
          type: number
          description: >-
            Dollars of NO buyable on this rung right now, rounded to cents. 0
            means no NO offers.
          example: 874
        status:
          $ref: '#/components/schemas/MarketStatus'
          description: >-
            The rung's market status. See [Market
            statuses](/predictions/enums#market-statuses-status).
          example: active
        result:
          $ref: '#/components/schemas/MarketResult'
          description: How the rung resolved. Absent until it settles.
          example: 'no'
        rules:
          type: string
          description: This rung's own resolution rules from the exchange provider.
          example: >-
            This market resolves to "Yes" if Patrick Mahomes records 300+
            passing yards in the Kansas City Chiefs vs. Buffalo Bills game on
            November 8, 2026. If he does not play, it resolves to "No".
      title: PlayerPropLine
      example:
        id: pm_6aec4c985f2b7d0e6a3c81b4c9d5e159
        provider_ticker: astatc-nfl-kc-buf-2026-11-08-passyds-patmah-gte300
        line: 299.5
        yes_line_display: 300+
        no_line_display: Under 300
        price_yes:
          american: '+245'
          decimal: 3.45x
          percentage: 29%
          price: $0.29
          numeric_price: 0.29
        price_no:
          american: '-257'
          decimal: 1.39x
          percentage: 72%
          price: $0.72
          numeric_price: 0.72
        last_price_yes: 0.285
        last_price_no: 0.715
        yes_liquidity: 328.8
        no_liquidity: 835
        status: active
        rules: >-
          This market resolves to "Yes" if Patrick Mahomes records 300+ passing
          yards in the Kansas City Chiefs vs. Buffalo Bills game on November 8,
          2026. If he does not play, it resolves to "No".
    OrderbookSide:
      title: OrderbookSide
      type: object
      description: The YES and NO levels on one side of the book.
      required:
        - 'yes'
        - 'no'
      properties:
        'yes':
          type: array
          items:
            $ref: '#/components/schemas/PriceLevel'
          description: Levels for the YES contract, price ascending.
        'no':
          type: array
          items:
            $ref: '#/components/schemas/PriceLevel'
          description: Levels for the NO contract, price ascending.
      example:
        'yes':
          - q: 4210
            p: 0.56
          - q: 3185
            p: 0.57
          - q: 2650
            p: 0.58
        'no':
          - q: 3920
            p: 0.39
          - q: 2875
            p: 0.4
          - q: 2140
            p: 0.41
    PriceLevel:
      type: object
      description: One level of the order book.
      required:
        - p
        - q
      properties:
        p:
          type: number
          description: Price per contract in dollars, up to 4 decimal places.
          example: 0.58
        q:
          type: number
          description: Contracts resting at that price. Can be fractional.
          example: 2650
      title: PriceLevel
      example:
        q: 2650
        p: 0.58
  responses:
    TradingBadRequest:
      description: >-
        A query or path parameter failed validation (`Invalid request
        parameters`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            A query parameter failed validation:
              summary: A query parameter failed validation
              value:
                status: error
                error: BAD_REQUEST
                message: Invalid request parameters
              description: >-
                For example `?status=filled`, `?limit=0`, or a `request_id` with
                a character outside `A-Z a-z 0-9 _ -`.
    UnauthorizedUserScoped:
      description: >-
        The signature check failed, or the request had no `SPLASH-ACCESS-KEY`
        header. A failed check's `message` is one of `Unknown API key`, `API key
        revoked`, `Timestamp outside the allowed window` or `Invalid signature`.
        `API key revoked` is reported only when the signature is correct, so a
        wrong secret always reads `Invalid signature`. A request without the
        `SPLASH-ACCESS-KEY` header is not an API request and is refused with
        `You are not authorized to perform the requested action.` See
        [Authentication
        errors](/predictions/authentication#authentication-errors). This route
        also refuses `user_id` with the same message: it always acts as the
        key's own account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            Invalid signature:
              summary: Invalid signature
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Invalid signature
              description: >-
                The signature does not match what Splash computed. Check that
                you signed the exact body bytes and the full path including
                `/predictions-service/api` and the query string.
            Timestamp outside the allowed window:
              summary: Timestamp outside the allowed window
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Timestamp outside the allowed window
              description: >-
                `SPLASH-ACCESS-TIMESTAMP` is more than 30 seconds from server
                time. Check your clock.
            Unknown API key:
              summary: Unknown API key
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Unknown API key
            API key revoked:
              summary: API key revoked
              value:
                status: error
                error: NOT_AUTHORIZED
                message: API key revoked
            Missing or misspelled key header:
              summary: Missing or misspelled key header
              value:
                status: error
                error: NOT_AUTHORIZED
                message: You are not authorized to perform the requested action.
              description: >-
                The request carried no `SPLASH-ACCESS-KEY` header, because it
                was not signed or the header name is misspelled. A request
                without the `SPLASH-ACCESS-KEY` header is not an API request and
                is refused. Send all three `SPLASH-ACCESS-*` headers.
            user_id was passed:
              summary: user_id was passed
              value:
                status: error
                error: NOT_AUTHORIZED
                message: You are not authorized to perform the requested action.
              description: >-
                This route always acts as the key's own account, so `user_id` is
                refused rather than ignored. Remove it.
    RateLimited:
      description: >-
        Too Many Requests: more than 10 requests per second from your IP
        address. The request was not handled and nothing was recorded. If the
        response has a `Retry-After` header, wait that many seconds; otherwise
        back off (about 1 second, with jitter). Then send the same request
        again; on `POST /trading/orders` reuse the same `request_id`. See [Rate
        limits](/predictions/rate-limits).
      headers:
        Retry-After:
          description: >-
            Optional, and may be absent. When present, the number of seconds to
            wait before retrying; when absent, back off about 1 second with
            jitter.
          required: false
          schema:
            type: integer
          example: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequestsError'
          examples:
            Over the limit:
              summary: Over the limit
              value:
                status: error
                error: TOO_MANY_REQUESTS
                message: Too many requests, try again later
              description: >-
                More than 10 requests per second from your IP address. Nothing
                was recorded; wait about a second (or the `Retry-After` seconds
                when that header is present) and send the same request again.
    InternalError:
      description: >-
        The request could not be handled. On `POST /trading/orders` the order
        was not placed: poll `GET /orders?request_id=` before trying again. If
        the poll returns the order, follow it; otherwise send the order again
        with a new `request_id`, because this one now reads `cancelled`. See
        [Order outcomes and
        retries](/predictions/trading#order-outcomes-and-retries).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            The request could not be handled:
              summary: The request could not be handled
              value:
                status: error
                error: INTERNAL_ERROR
                message: >-
                  An internal error has occured and the request could not be
                  handled.
              description: >-
                The message is spelled `occured` on the wire. On `POST
                /trading/orders`, poll the `request_id` before trying again,
                then send the order with a new `request_id`.
    Unavailable:
      description: >-
        The Trading API cannot take signed requests right now
        (`TRADING_API_UNAVAILABLE`). Nothing was read or recorded. Retry later.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            The Trading API is not available:
              summary: The Trading API is not available
              value:
                status: error
                error: TRADING_API_UNAVAILABLE
                message: The trading API is not available.
  securitySchemes:
    SplashAccessKey:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-KEY
      description: >-
        Your API key id. Keys are issued by Splash on request, never expire, and
        stay valid until Splash revokes them, which it does on request. See
        [Authentication](/predictions/authentication).
    SplashAccessTimestamp:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-TIMESTAMP
      description: Unix milliseconds, within 30 seconds of server time.
    SplashAccessSignature:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-SIGNATURE
      description: >-
        `base64(HMAC-SHA256(secret, timestamp + METHOD + path + body))`. See
        [Authentication](/predictions/authentication).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.