openapi: 3.1.0
info:
  title: TxLINE off-chain API for the Hybrid on-chain/off-chain TxODDS Data system
  version: 1.5.6
  description: |2

    ## Overview

    This API provides access to real-time and historical sports data from the **TxLINE on-chain/off-chain Data system**.

    It makes proprietary TxODDS available for any funded blockchain users by linking the on-chain `subscribe` transaction by issuing time-limited API tokens.
    - The data is canonicalised so that all fixtures, odds, or scores are provably identifiable and ordered--confirmed by on-chain cryptographic proofs.
    - The data is delivered in a request-response or Server-Sent Events (SSE) streaming form.

    Examples of accessing the accompanying on-chain program are available publicly at: https://txline.txodds.com/documentation.
    All data returned by the off-chain API is canonicalised such that every single record can be cryptographically proven on-chain to be
    part of the unique and consistent dataset generated by the TxODDS Data system.

    ## Key features

    * The odds data includes the `Stable Price` demargined prices and percentages, currently for key markets in European football (soccer).
    * **Free subscription option that offers World Cup 2026 odds and off-the-board signals in real-time sampled every 60 seconds**.
    * **Data access paid for by the TxLINE token tethered to USDT ata rate 1 USDT = 1_000 TxLINE tokens** The TxLINE utility token can purchased using the associated Solana program.
    * **Fine-grained service level selection** The user can list the pre-configured **service levels** that either map to pre-defined league bundles or allow custom selecting the leagues explicitly.
     The price also depends on the sampling period for the data.
    * **Maximum subscription option that offers all leagues in real-time**.
    * **Historical Snapshots:** Query the latest state of any market at a specific point in time.
    * **Historical Updates:** Query the updates for any given key such as fixture or market for a given time period.
    * **Live Data Streams:** Real-time, low-latency data feeds using Server-Sent Events (SSE).
    * **On-chain Validation:** Retrieve Merkle proofs to cryptographically verify data against the on-chain held Merkle roots by calling appropriate validate on-chain instructions.

    ## How do the users gain access to off-chain data (see more details and examples at: https://github.com/txodds/tx-on-chain)

    1. For paid service tiers, the user purchases TxODDS TxLINE utility tokens for USDT at a fixed rate using either a script (e.g., calling `purchase_subscription_token_usdt`) or an affiliate website. The tokens are deposited into the user's associated token account. (Note: This step is skipped for the free World Cup tier).
    2. As a guest, with no prior authentication, the user calls the off-chain API at "https://txline.txodds.com/auth/guest/start" (or `txline-dev` for DevNet) to obtain an anonymous JWT with Guest claims. **Please note that the JWT token has 30 days  expiration so if you are issuing calls to the data endpoints beyond 30 days, you should either pre-acquire a new JWT token in time before 30 days expire or respond to the returned HTTP 401 code by reacquiring a fresh JWT token.**
    3. The user creates, signs, and confirms a Solana transaction to the `subscribe` instruction, indicating the duration in weeks (must be a multiple of 4 weeks, e.g. 4, 8, 12) and the chosen service level. The user explicitly acts as the transaction fee payer. For the free tier, the smart contract registers the subscription but charges 0 TxLINE tokens.
    4. The user records the confirmed transaction signature (`txSig`).
    5. The user constructs a strict message binding consisting of the `txSig`, a comma-separated list of selected leagues, and the JWT.
    6. The user cryptographically signs this message using their wallet's secret key to generate a detached signature, which is then Base64-encoded.
    7. The user activates the subscription with the off-chain server at "https://txline.txodds.com/api/token/activate" (or `txline-dev` for DevNet) by posting the `txSig`, the Base64 wallet signature, and the selected leagues array, using the JWT for authorization.
    8. The off-chain server validates the cryptographic proof and entitlements, issuing an appropriate API Token or rejecting the activation with a reason.
    9. The user calls the documented APIs while the subscription is valid, supplying both the JWT and the API Token.
    10. Before the subscription expires, the user may call the `subscribe` instruction again to extend the validity period (by a multiple of 4 weeks, e.g. 4, 8, 12) via the same off-chain activation call. The selected leagues can also be amended.
    11. If the previous subscription has expired, the user can activate a new API Token by repeating the process.
servers:
- url: https://txline.txodds.com
  description: Production TxLINE server
- url: http://txline-dev.txodds.com
  description: Test TxLINE server
paths:
  /auth/guest/start:
    post:
      tags:
      - Authentication
      summary: Start a new guest session
      description: |
        Initiates a new, anonymous guest session and returns a JSON Web Token (JWT).
        This token must be provided as a Bearer token in the Authorization header for subsequent calls,
        such as the token activation endpoint. This JWT token expires after 30 days.
      operationId: postAuthGuestStart
      responses:
        '200':
          description: A JWT for the guest session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '500':
          description: Returned if an unexpected error occurs during token issuance.
          content:
            text/plain:
              schema:
                type: string
  /api/token/activate:
    post:
      tags:
      - Authentication
      summary: Activate subscription and retrieve API token
      description: |
        Activate a user subscription and issue a long-lived API token.
        Supports three modes based on the on-chain transaction:
        1. Legacy subscriptions (pass empty leagues array).
        2. Standard matrix subscriptions (pass empty leagues array).
        3. Custom matrix subscriptions (pass requested league IDs up to the purchased limit).
        The entire request intent must be cryptographically signed by the user's wallet.
      operationId: postApiTokenActivate
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user session JWT.
        required: true
        schema:
          type: string
      requestBody:
        description: The cryptographic payload containing the transaction signature,
          wallet signature, and requested leagues.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivationPayload'
            example:
              txSig: 5kb6gnsSu1inDF9nCVV3WcgKryyBFGFkrYS28Sp1avS8mq6Xcw6iq3yzkBTjmq8bGptgqYTXPmjyWECzKzUxYG3C
              walletSignature: 2BvM...
              leagues:
              - 501
              - 804
              - 202
        required: true
      responses:
        '200':
          description: The newly generated API token.
          content:
            text/plain:
              schema:
                type: string
              example: txoracle_api_123abc456def
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            body'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT.'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: ''
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: ''
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
  /api/guest/purchase/quote:
    post:
      tags:
      - Purchase
      summary: Request a partially signed purchase quote given the wallet public key
        and required TxLINE amount in whole units
      description: |
        Authorize and generate a partially signed Solana transaction for purchasing TxLINE utility tokens.

        **Pricing & Fees:**
        - **Base Rate:** 1,000 TxLINE = 1 USDT
        - **Premium/Markup:** Currently 0% (0 basis points)

        **Prerequisites:**
        - The `buyerPubkey` wallet must hold an active Associated Token Account (ATA) for USDT.
        - The wallet must have a sufficient USDT balance to cover the total quoted cost.

        The response includes a financial breakdown of the exact base cost and any applied premium fees. The returned transaction payload must be signed by the user's wallet before submission.
      operationId: postApiGuestPurchaseQuote
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the guest session JWT.
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseQuoteRequest'
            example:
              buyerPubkey: 5kb6gnsSu1inDF9nCVV3WcgKryyBFGFkrYS28Sp1avS8mq6Xcw6iq3yzkBTjmq8bGptgqYTXPmjyWECzKzUxYG3C
              txlineAmount: 50
        required: true
      responses:
        '200':
          description: The partially signed transaction payload alongside the explicit
            USDT fee breakdown.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseQuoteResponse'
              example:
                transactionBase64: AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA...
                baseUsdtCost: 0.05
                feeUsdtAmount: 0
                totalUsdtCharged: 0.05
        '400':
          description: 'Validation failed: Payload exceeded maximum limits, or the
            buyer''s wallet has insufficient USDT.'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT.'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: 'Blockchain error: Failed to derive PDAs or connect to the
            Solana RPC.'
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
  /api/fixtures/snapshot:
    get:
      tags:
      - Fixtures
      summary: Get the latest snapshot of fixtures, optionally starting at or within
        30 days after a given epoch day
      operationId: getApiFixturesSnapshot
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: startEpochDay
        in: query
        description: Optional. The day at or within 30 days after which the fixtures
          start. Defaults to the current day in UTC.
        required: false
        schema:
          type: integer
      - name: competitionId
        in: query
        description: Optional. Filter by a specific competition ID.
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Fixture'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter startEpochDay,
            Invalid value for: query parameter competitionId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/fixtures/updates/{epochDay}/{hourOfDay}:
    get:
      tags:
      - Fixtures
      summary: Get all fixture updates for a single fixture on a given day
      operationId: getApiFixturesUpdatesEpochdayHourofday
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: epochDay
        in: path
        description: The day since the Unix epoch
        required: true
        schema:
          type: integer
      - name: hourOfDay
        in: path
        description: The hour of the day (0-23)
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: A list of fixture updates. If no updates are found for the
            given parameters, an empty list is returned.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Fixture'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter epochDay, Invalid
            value for: path parameter hourOfDay'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/fixtures/validation:
    get:
      tags:
      - Fixtures
      summary: Get a Merkle proof for a specific fixture update
      description: |
        Each fixture returned or referenced in the TxODDS Oracle API is part of an hourly batch of fixture updates.
        Blockchain holds the Merkle root (ultimate cryptographic containment proof) of each fixture belonging to that batch.
        This endpoint returns the Merkle proof, i.e., the hashes along the branch of the Merkle tree for the batch up to but not inclusive of that Merkle root.
        The user can then call on-chain validation directly to get a cryptographic validation that a given fixture update was published
        by TxODDS as confirmed by the published Merkle root. This on-chain transaction requires the fixture record and the Merkle proof returned here.
      operationId: getApiFixturesValidation
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: query
        description: The ID of the fixture to validate.
        required: true
        schema:
          type: integer
          format: int64
      - name: timestamp
        in: query
        description: Optional. A Unix timestamp (ms) to get the validation proof for
          a specific point in time. Defaults to now.
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FixtureValidation'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter fixtureId, Invalid
            value for: query parameter timestamp'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/fixtures/batch-validation:
    get:
      tags:
      - Fixtures
      summary: Get a Merkle proof for an entire hourly batch of fixtures
      description: |
        Fixture data is grouped into hourly batches. Each batch is represented by a Merkle Tree, and its root hash is published on-chain.
        This Merkle root is contained within the batch's metadata.

        This endpoint allows you to validate the integrity of the batch metadata itself. It returns the metadata for the specified hourly batch, along with a Merkle proof.

        A user can take this proof and the metadata (which includes the final Merkle root) and use it to verify against a higher-level tree or commitment, thus cryptographically proving the integrity of the entire batch's claimed state.
      operationId: getApiFixturesBatch-validation
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: epochDay
        in: query
        description: The day since the Unix epoch for the desired batch.
        required: true
        schema:
          type: integer
      - name: hourOfDay
        in: query
        description: The hour of the day (UTC, 0-23) for the desired batch.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FixtureBatchValidation'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter epochDay, Invalid
            value for: query parameter hourOfDay'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/odds/snapshot/{fixtureId}:
    get:
      tags:
      - Odds
      summary: Get snapshots of the latest odds for a fixture
      description: Return the latest odds for each unique market line for a given
        fixture. If the 'asOf' parameter is provided, the snapshots are taken at that
        point in time from historical data. Otherwise, it returns the current live
        snapshot if it exists within the current 5-minutes interval.
      operationId: getApiOddsSnapshotFixtureid
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: path
        description: The ID of the fixture
        required: true
        schema:
          type: integer
          format: int64
      - name: asOf
        in: query
        description: Optional Unix timestamp (ms) for a historical snapshot. If omitted,
          returns the live snapshot.
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OddsPayload'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter fixtureId, Invalid
            value for: query parameter asOf'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/odds/updates/{fixtureId}:
    get:
      tags:
      - Odds
      summary: Get currently live odds updates for a single fixture
      description: Return all available odds offers for a single fixture from the
        current, in-memory 5-minute cache.
      operationId: getApiOddsUpdatesFixtureid
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: path
        description: The ID of the fixture to retrieve live updates for
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OddsPayload'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/odds/updates/{epochDay}/{hourOfDay}/{interval}:
    get:
      tags:
      - Odds
      summary: Get a json array of all odd updates from a specific historical 5-minute
        interval
      operationId: getApiOddsUpdatesEpochdayHourofdayInterval
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: epochDay
        in: path
        description: The day since the Unix epoch
        required: true
        schema:
          type: integer
      - name: hourOfDay
        in: path
        description: The hour of the day (0-23)
        required: true
        schema:
          type: integer
      - name: interval
        in: path
        description: The 0-indexed 5-minute interval within the hour (0-11)
        required: true
        schema:
          type: integer
      - name: fixtureId
        in: query
        description: Optional filter by fixture ID
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OddsPayload'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter epochDay, Invalid
            value for: path parameter hourOfDay, Invalid value for: path parameter
            interval, Invalid value for: query parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/odds/stream:
    get:
      tags:
      - Odds
      summary: Get a real-time Server-Sent Events stream of odds updates
      description: |
        A long-lived stream of odds updates.

        The stream consists of two types of events:
        1. **Data messages:** These have an `id` in the format `timestamp:index` and `data` containing a JSON object for a single Odds record.
        2. **Heartbeats:** These have an `event` field set to `heartbeat` and may have data like `{"Ts": 12345}`.
      operationId: getApiOddsStream
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: query
        description: Optional. Filter the event stream for a single fixture ID.
        required: false
        schema:
          type: integer
          format: int64
      - name: Last-Event-ID
        in: header
        description: Optional. The ID of the last event received, to resume the stream.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/OddsStreamEvent'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/odds/validation:
    get:
      tags:
      - Odds
      summary: Get a Merkle proof for a specific odds update
      description: |
        Each odds update is part of a batch whose state is committed to the blockchain via a Merkle root.
        This endpoint returns the cryptographic proof for a single odds update, identified by its unique messageId.
        The proof consists of the hashes along the branch of the Merkle tree, which can be used to reconstruct the root.
        A user can then use this proof and the odds record in an on-chain transaction to cryptographically verify that the odds update was
        published by the TxODDS Oracle as confirmed by the on-chain Merkle root.
      operationId: getApiOddsValidation
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: messageId
        in: query
        description: The unique message ID of the odds update to validate.
        required: true
        schema:
          type: string
      - name: ts
        in: query
        description: Timestamp of the odds message.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OddsValidation'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter messageId, Invalid
            value for: query parameter ts'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/snapshot/{fixtureId}:
    get:
      tags:
      - Scores
      summary: Get snapshots for each action in the latest score events for a fixture
      operationId: getApiScoresSnapshotFixtureid
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: path
        description: The ID of the fixture
        required: true
        schema:
          type: integer
          format: int64
      - name: asOf
        in: query
        description: Optional Unix timestamp (ms) for the latest time the historical
          snapshots are returned for. If omitted, returns the live snapshot.
        required: false
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Scores'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter fixtureId, Invalid
            value for: query parameter asOf'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/updates/{epochDay}/{hourOfDay}/{interval}:
    get:
      tags:
      - Scores
      summary: Get a json array of all score updates from a specific historical 5-minute
        interval (no live data is returned)
      operationId: getApiScoresUpdatesEpochdayHourofdayInterval
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: epochDay
        in: path
        description: The day since the Unix epoch
        required: true
        schema:
          type: integer
      - name: hourOfDay
        in: path
        description: The hour of the day (0-23)
        required: true
        schema:
          type: integer
      - name: interval
        in: path
        description: The 0-indexed 5-minute interval within the hour (0-11)
        required: true
        schema:
          type: integer
      - name: fixtureId
        in: query
        description: Optional filter by fixture ID
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Scores'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter epochDay, Invalid
            value for: path parameter hourOfDay, Invalid value for: path parameter
            interval, Invalid value for: query parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/updates/{fixtureId}:
    get:
      tags:
      - Scores
      summary: Get the sequence of score updates for a single fixture within the current
        5-min interval
      description: Return a json array of all score updates for a single fixture included
        within the current 5-minute interval with live data if it exists.
      operationId: getApiScoresUpdatesFixtureid
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: path
        description: The ID of the fixture to retrieve all updates for
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Scores'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/historical/{fixtureId}:
    get:
      tags:
      - Scores
      summary: Get the full sequence of score updates for a single fixture
      description: Return a json array of all score updates for a single fixture provided
        its start time is between two weeks and six hours in the past from current
        time.
      operationId: getApiScoresHistoricalFixtureid
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: path
        description: The ID of the fixture to retrieve all updates for
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Scores'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: path parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/stream:
    get:
      tags:
      - Scores
      summary: Get a real-time Server-Sent Events stream of scores updates
      description: |
        A long-lived stream of scores updates.

        The stream consists of two types of events:
        1. **Data messages:** These have an `id` in the format `timestamp:index` and `data` containing a JSON object for a single Scores record.
        2. **Heartbeats:** These have an `event` field set to `heartbeat` and may have data like `{"Ts": 12345}`.
      operationId: getApiScoresStream
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: query
        description: Optional. Filter the event stream for a single fixture ID.
        required: false
        schema:
          type: integer
          format: int64
      - name: Last-Event-ID
        in: header
        description: Optional. The ID of the last event received, to resume the stream.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/ScoresStreamEvent'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter fixtureId'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/stat-validation:
    get:
      tags:
      - Scores
      summary: Get a Merkle proof for fixture statistics
      description: "This endpoint provides a deep cryptographic proof for statistics\
        \ within a single scores update. \nThe TxODDS Oracle data is structured in\
        \ a three-level Merkle hierarchy:\n\n1. A main batch contains summaries for\
        \ multiple fixtures.\n2. Each fixture summary is the root of a sub-tree of\
        \ all score update events for that fixture.\n3. Each score update event is\
        \ the root of a sub-tree of all the individual statistics it contains.\n\n\
        This endpoint returns the full set of proofs needed to connect the stat(s)\
        \ all the way to the main batch root published on-chain.\n\n### Request Modes\n\
        The endpoint supports two mutually exclusive request formats:\n\n* **Legacy\
        \ Mode (`statKey`, `statKey2`)**: Returns a `ScoresStatValidation` payload\
        \ containing proofs for one or two specific statistics.\n* **V2 Mode (`statKeys`)**:\
        \ Accepts a comma-separated list of keys and returns a `ScoresStatValidationV2`\
        \ payload supporting dynamic N-dimensional proofs across any number of requested\
        \ statistics.\n\n### On-Chain Execution\nWith the returned data, the user\
        \ can execute an on-chain transaction to validate that a supplied strategy\
        \ holds against the extracted stats. \nFor example, validating that a team's\
        \ score exceeded a threshold, or that the difference between two scores meets\
        \ a specific binary condition.\n"
      operationId: getApiScoresStat-validation
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: query
        description: The ID of the fixture for the scores event.
        required: true
        schema:
          type: integer
          format: int32
      - name: seq
        in: query
        description: The sequence number of the specific scores event within the fixture's
          history.
        required: true
        schema:
          type: integer
          format: int32
      - name: statKey
        in: query
        description: 'Legacy Mode: The key identifying the specific statistic to validate
          (e.g., 1 for ''Participant1_Score'').'
        required: false
        schema:
          type: integer
          format: int32
      - name: statKey2
        in: query
        description: 'Legacy Mode: The key identifying an optional second statistic
          to validate for two-stat predicates.'
        required: false
        schema:
          type: integer
          format: int32
      - name: statKeys
        in: query
        description: 'V2 Mode: Comma-separated list of stat keys used in N-stat validation
          strategies.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/ScoresStatValidation'
                - $ref: '#/components/schemas/ScoresStatValidationV2'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter fixtureId, Invalid
            value for: query parameter seq, Invalid value for: query parameter statKey,
            Invalid value for: query parameter statKey2'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
  /api/scores/stat-validation-v3:
    get:
      tags:
      - Scores
      summary: Get a Merkle multiproof for fixture statistics
      description: "This endpoint provides a deep cryptographic proof for statistics\
        \ within a single scores update. \nThe TxODDS Oracle data is structured in\
        \ a three-level Merkle hierarchy:\n\n* A main batch contains summaries for\
        \ multiple fixtures.\n* Each fixture summary is the root of a sub-tree of\
        \ all score update events for that fixture.\n* Each score update event is\
        \ the root of a sub-tree of all the individual statistics it contains.\n\n\
        This endpoint returns the full set of proofs needed to connect the stats all\
        \ the way to the main batch root published on-chain.\n\n### Request Format\n\
        The endpoint requires a comma-separated list of up to 5 keys in the `statKeys`\
        \ parameter and returns a `ScoresStatValidationV3` payload supporting compressed\
        \ multiproof validation.\n\n### On-Chain Execution\nWith the returned data,\
        \ the user can execute an on-chain transaction to validate that a supplied\
        \ strategy holds against the extracted stats. \nFor example, validating that\
        \ a team's score exceeded a threshold, or that the difference between two\
        \ scores meets a specific binary condition.\n"
      operationId: getApiScoresStat-validation-v3
      parameters:
      - name: Authorization
        in: header
        description: Bearer token for the user's session JWT.
        required: true
        schema:
          type: string
      - name: X-Api-Token
        in: header
        description: The user's long-lived API token.
        required: true
        schema:
          type: string
      - name: fixtureId
        in: query
        description: The ID of the fixture for the scores event.
        required: true
        schema:
          type: integer
          format: int32
      - name: seq
        in: query
        description: The sequence number of the specific scores event within the fixture's
          history.
        required: true
        schema:
          type: integer
          format: int32
      - name: statKeys
        in: query
        description: Comma-separated list of 1 to 5 stat keys for multiproof validation.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoresStatValidationV3'
        '400':
          description: 'Invalid value for: header Authorization, Invalid value for:
            header X-Api-Token, Invalid value for: query parameter fixtureId, Invalid
            value for: query parameter seq, Invalid value for: query parameter statKeys'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: 'Authorization failed: Invalid or expired guest JWT'
          content:
            text/plain:
              schema:
                type: string
        '403':
          description: 'Access denied: Invalid API token or insufficient permissions'
          content:
            text/plain:
              schema:
                type: string
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
      security:
      - httpAuth: []
        apiKeyAuth: []
components:
  schemas:
    A:
      title: A
      type: object
    A1:
      title: A
      type: object
    A2:
      title: A
      type: object
    ActivationPayload:
      title: ActivationPayload
      type: object
      required:
      - txSig
      - walletSignature
      properties:
        txSig:
          type: string
        walletSignature:
          type: string
        leagues:
          type: array
          items:
            type: integer
            format: int32
    Attack:
      title: Attack
      type: object
    AttackPossession:
      title: AttackPossession
      type: object
    Away:
      title: Away
      type: object
    Basketball:
      title: Basketball
      type: object
    BasketballData:
      title: BasketballData
      type: object
      properties:
        Action:
          type: string
        Active:
          type: boolean
        AssistConfirmed:
          type: boolean
        AssistId:
          type: integer
          format: int32
        BlockConfirmed:
          type: boolean
        BlockerId:
          type: integer
          format: int32
        Clock:
          $ref: '#/components/schemas/UsFootballFixtureClock'
        FouledId:
          type: integer
          format: int32
        Id:
          type: integer
          format: int32
        New:
          $ref: '#/components/schemas/BasketballUpdateReference'
        Outcome:
          type: string
        Previous:
          $ref: '#/components/schemas/BasketballUpdateReference'
        ReplaceId:
          type: integer
          format: int32
        Type:
          type: string
    BasketballFixtureScore:
      title: BasketballFixtureScore
      type: object
      required:
      - Participant1
      - Participant2
      properties:
        Participant1:
          $ref: '#/components/schemas/BasketballTotalScore'
        Participant2:
          $ref: '#/components/schemas/BasketballTotalScore'
    BasketballFixtureStatus:
      title: BasketballFixtureStatus
      oneOf:
      - $ref: '#/components/schemas/A1'
      - $ref: '#/components/schemas/C1'
      - $ref: '#/components/schemas/F1'
      - $ref: '#/components/schemas/FO1'
      - $ref: '#/components/schemas/H1'
      - $ref: '#/components/schemas/H2'
      - $ref: '#/components/schemas/HT1'
      - $ref: '#/components/schemas/I1'
      - $ref: '#/components/schemas/NS1'
      - $ref: '#/components/schemas/OB12'
      - $ref: '#/components/schemas/OT13'
      - $ref: '#/components/schemas/Q11'
      - $ref: '#/components/schemas/Q1B1'
      - $ref: '#/components/schemas/Q21'
      - $ref: '#/components/schemas/Q31'
      - $ref: '#/components/schemas/Q3B1'
      - $ref: '#/components/schemas/Q41'
      - $ref: '#/components/schemas/TXCC1'
      - $ref: '#/components/schemas/TXCS1'
      - $ref: '#/components/schemas/WO1'
    BasketballPartiState:
      title: BasketballPartiState
      type: object
      required:
      - AttackingBasket
      - ActiveTimeout
      - Challenges
      properties:
        AttackingBasket:
          type: boolean
        ActiveTimeout:
          type: boolean
        Challenges:
          type: integer
          format: int32
    BasketballScore:
      title: BasketballScore
      type: object
      required:
      - Score
      - Fouls
      - PersonalFouls
      - Blocks
      - Rebounds
      - FreeThrows_made
      - 2pts_made
      - 3pts_made
      - FreeThrows_missed
      - 2pts_missed
      - 3pts_missed
      - FreeThrows_attempts
      - 2pts_attempts
      - 3pts_attempts
      - Assists
      - Turnovers
      - Steals
      - UsedTimeouts
      properties:
        Score:
          type: integer
          format: int32
        Fouls:
          type: integer
          format: int32
        PersonalFouls:
          type: integer
          format: int32
        Blocks:
          type: integer
          format: int32
        Rebounds:
          type: integer
          format: int32
        FreeThrows_made:
          type: integer
          format: int32
        2pts_made:
          type: integer
          format: int32
        3pts_made:
          type: integer
          format: int32
        FreeThrows_missed:
          type: integer
          format: int32
        2pts_missed:
          type: integer
          format: int32
        3pts_missed:
          type: integer
          format: int32
        FreeThrows_attempts:
          type: integer
          format: int32
        2pts_attempts:
          type: integer
          format: int32
        3pts_attempts:
          type: integer
          format: int32
        Assists:
          type: integer
          format: int32
        Turnovers:
          type: integer
          format: int32
        Steals:
          type: integer
          format: int32
        UsedTimeouts:
          type: integer
          format: int32
    BasketballTotalScore:
      title: BasketballTotalScore
      type: object
      properties:
        Period:
          $ref: '#/components/schemas/Map_BasketballScore'
        HT:
          $ref: '#/components/schemas/BasketballScore'
        OT:
          $ref: '#/components/schemas/Map_BasketballScore'
        OTTotal:
          $ref: '#/components/schemas/BasketballScore'
        Total:
          $ref: '#/components/schemas/BasketballScore'
    BasketballUpdateReference:
      title: BasketballUpdateReference
      type: object
      properties:
        AssistConfirmed:
          type: boolean
        AssistId:
          type: integer
          format: int32
        BlockConfirmed:
          type: boolean
        BlockerId:
          type: integer
          format: int32
        Clock:
          $ref: '#/components/schemas/UsFootballFixtureClock'
        FouledId:
          type: integer
          format: int32
        IsPlayerRebound:
          type: boolean
        IsTeam:
          type: boolean
        IsTeamRebound:
          type: boolean
        Outcome:
          description: Union of PointAttemptOutcome and FreeThrowOutcome
          type: string
        Participant:
          type: integer
          format: int32
        PlayerId:
          type: integer
          format: int32
        PlayerInId:
          type: integer
          format: int32
        PlayerOutId:
          type: integer
          format: int32
        TeamFoul:
          type: boolean
        TurnoverId:
          type: integer
          format: int32
        Type:
          description: Union of FoulType, ReboundType, and FreeThrowType
          type: string
        UpdatePlayersOnCourt:
          type: boolean
    BatchMetadata:
      title: BatchMetadata
      type: object
      required:
      - totalUpdateCount
      - numUniqueFixtures
      - overallBatchStartTs
      - overallBatchEndTs
      properties:
        totalUpdateCount:
          type: integer
          format: int32
        numUniqueFixtures:
          type: integer
          format: int32
        overallBatchStartTs:
          type: integer
          format: int64
        overallBatchEndTs:
          type: integer
          format: int64
    Blocked:
      title: Blocked
      type: object
    C:
      title: C
      type: object
    C1:
      title: C
      type: object
    C2:
      title: C
      type: object
    Complete:
      title: Complete
      type: object
    ConversionSafety:
      title: ConversionSafety
      type: object
    Danger:
      title: Danger
      type: object
    DangerPossession:
      title: DangerPossession
      type: object
    Defensive:
      title: Defensive
      type: object
    DefensiveConversion:
      title: DefensiveConversion
      type: object
    Downed:
      title: Downed
      type: object
    END:
      title: END
      type: object
    ET1:
      title: ET1
      type: object
    ET2:
      title: ET2
      type: object
    F:
      title: F
      type: object
    F1:
      title: F
      type: object
    F2:
      title: F
      type: object
    FET:
      title: FET
      type: object
    FO:
      title: FO
      type: object
    FO1:
      title: FO
      type: object
    FPE:
      title: FPE
      type: object
    FairCatch:
      title: FairCatch
      type: object
    FieldGoalMissed:
      title: FieldGoalMissed
      type: object
    FieldGoalSuccessful:
      title: FieldGoalSuccessful
      type: object
    Fixture:
      title: Fixture
      type: object
      required:
      - Ts
      - StartTime
      - Competition
      - CompetitionId
      - FixtureGroupId
      - Participant1Id
      - Participant1
      - Participant2Id
      - Participant2
      - FixtureId
      - Participant1IsHome
      properties:
        Ts:
          type: integer
          format: int64
        StartTime:
          type: integer
          format: int64
        Competition:
          type: string
        CompetitionId:
          type: integer
          format: int32
        FixtureGroupId:
          type: integer
          format: int32
        Participant1Id:
          type: integer
          format: int32
        Participant1:
          type: string
        Participant2Id:
          type: integer
          format: int32
        Participant2:
          type: string
        FixtureId:
          type: integer
          format: int64
        Participant1IsHome:
          type: boolean
    FixtureBatchSummary:
      title: FixtureBatchSummary
      type: object
      required:
      - fixtureId
      - competitionId
      - competition
      - updateStats
      - updateSubTreeRoot
      properties:
        fixtureId:
          type: integer
          format: int64
        competitionId:
          type: integer
          format: int32
        competition:
          type: string
        updateStats:
          $ref: '#/components/schemas/FixtureUpdateStats'
        updateSubTreeRoot:
          type: string
          format: binary
    FixtureBatchValidation:
      title: FixtureBatchValidation
      type: object
      required:
      - metadata
      - proof
      properties:
        metadata:
          $ref: '#/components/schemas/BatchMetadata'
        proof:
          $ref: '#/components/schemas/List_ProofNode'
    FixtureType:
      title: FixtureType
      oneOf:
      - $ref: '#/components/schemas/Basketball'
      - $ref: '#/components/schemas/Soccer'
      - $ref: '#/components/schemas/UsFootball'
    FixtureUpdateStats:
      title: FixtureUpdateStats
      type: object
      required:
      - updateCount
      - minTimestamp
      - maxTimestamp
      properties:
        updateCount:
          type: integer
          format: int32
        minTimestamp:
          type: integer
          format: int64
        maxTimestamp:
          type: integer
          format: int64
    FixtureValidation:
      title: FixtureValidation
      type: object
      required:
      - snapshot
      - summary
      - subTreeProof
      - mainTreeProof
      properties:
        snapshot:
          $ref: '#/components/schemas/Fixture'
        summary:
          $ref: '#/components/schemas/FixtureBatchSummary'
        subTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        mainTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
    FreeKickType:
      title: FreeKickType
      oneOf:
      - $ref: '#/components/schemas/Attack'
      - $ref: '#/components/schemas/Danger'
      - $ref: '#/components/schemas/HighDanger'
      - $ref: '#/components/schemas/Offside'
      - $ref: '#/components/schemas/Safe'
    Fumble:
      title: Fumble
      type: object
    GoalType:
      title: GoalType
      oneOf:
      - $ref: '#/components/schemas/Head'
      - $ref: '#/components/schemas/Other'
      - $ref: '#/components/schemas/OwnGoal'
      - $ref: '#/components/schemas/Shot'
    H1:
      title: H1
      type: object
    H11:
      title: H1
      type: object
    H2:
      title: H2
      type: object
    H21:
      title: H2
      type: object
    HT:
      title: HT
      type: object
    HT1:
      title: HT
      type: object
    HT2:
      title: HT
      type: object
    HTET:
      title: HTET
      type: object
    Head:
      title: Head
      type: object
    HighDanger:
      title: HighDanger
      type: object
    HighDangerPossession:
      title: HighDangerPossession
      type: object
    Home:
      title: Home
      type: object
    I:
      title: I
      type: object
    I1:
      title: I
      type: object
    I2:
      title: I
      type: object
    InPlayInfo:
      title: InPlayInfo
      type: object
      required:
      - BallSnapped
      - PlayersLiningUp
      - TimeoutParti1
      - TimeoutParti2
      - TVTimeout
      properties:
        BallSnapped:
          type: boolean
        PlayersLiningUp:
          type: boolean
        TimeoutParti1:
          type: boolean
        TimeoutParti2:
          type: boolean
        TVTimeout:
          type: boolean
        Outcome:
          $ref: '#/components/schemas/InPlayOutcome'
        NewSetOfDowns:
          type: boolean
        PenaltyIncreasedDown:
          type: boolean
        PreviousDown:
          $ref: '#/components/schemas/UsFootballFixtureDown'
    InPlayOutcome:
      title: InPlayOutcome
      oneOf:
      - $ref: '#/components/schemas/Blocked'
      - $ref: '#/components/schemas/Downed'
      - $ref: '#/components/schemas/FairCatch'
      - $ref: '#/components/schemas/FieldGoalMissed'
      - $ref: '#/components/schemas/FieldGoalSuccessful'
      - $ref: '#/components/schemas/Fumble'
      - $ref: '#/components/schemas/OutOfBounds'
      - $ref: '#/components/schemas/PassComplete'
      - $ref: '#/components/schemas/PassIncomplete'
      - $ref: '#/components/schemas/PassIntercepted'
      - $ref: '#/components/schemas/PassSack'
      - $ref: '#/components/schemas/Recovered'
      - $ref: '#/components/schemas/Return'
      - $ref: '#/components/schemas/RushComplete'
      - $ref: '#/components/schemas/Touchback'
    Incomplete:
      title: Incomplete
      type: object
    Intercepted:
      title: Intercepted
      type: object
    KickoffDetails:
      title: KickoffDetails
      type: object
      properties:
        Team:
          $ref: '#/components/schemas/Participant'
    KickoffInfo:
      title: KickoffInfo
      type: object
      required:
      - Team
      properties:
        Team:
          $ref: '#/components/schemas/Participant'
        Type:
          $ref: '#/components/schemas/KickoffType'
        Outcome:
          $ref: '#/components/schemas/KickoffOutcome'
        KickoffPreviousAction:
          $ref: '#/components/schemas/KickoffSource'
        PenaltyYards:
          type: integer
          format: int32
    KickoffOutcome:
      title: KickoffOutcome
      oneOf:
      - $ref: '#/components/schemas/FairCatch'
      - $ref: '#/components/schemas/Fumble'
      - $ref: '#/components/schemas/OutOfBounds'
      - $ref: '#/components/schemas/Recovered'
      - $ref: '#/components/schemas/Return'
      - $ref: '#/components/schemas/Touchback'
    KickoffSource:
      title: KickoffSource
      oneOf:
      - $ref: '#/components/schemas/ConversionSafety'
      - $ref: '#/components/schemas/DefensiveConversion'
      - $ref: '#/components/schemas/Safety1Pt'
      - $ref: '#/components/schemas/Safety2Pt'
    KickoffType:
      title: KickoffType
      oneOf:
      - $ref: '#/components/schemas/Onside'
      - $ref: '#/components/schemas/Regular'
    LineupData:
      title: LineupData
      type: object
      required:
      - id
      - normativeId
      - preferredName
      - gender
      - updateDateMillis
      properties:
        id:
          type: string
        normativeId:
          type: integer
          format: int32
        preferredName:
          type: string
        gender:
          type: string
        updateDateMillis:
          type: integer
          format: int64
        lineups:
          type: array
          items:
            $ref: '#/components/schemas/PlayerLineupData'
    List_ProofNode:
      title: List_ProofNode
      oneOf:
      - $ref: '#/components/schemas/Nil'
      - type: array
        items:
          $ref: '#/components/schemas/ProofNode'
    Map_BasketballScore:
      title: Map_BasketballScore
      type: object
      additionalProperties:
        $ref: '#/components/schemas/BasketballScore'
    Map_ScoreStatKey:
      title: Map_ScoreStatKey
      type: object
      additionalProperties:
        type: integer
        format: int32
    Map_SoccerPlayerStats:
      title: Map_SoccerPlayerStats
      type: object
      additionalProperties:
        $ref: '#/components/schemas/SoccerPlayerStats'
    Map_UsFootballPlayerStats:
      title: Map_UsFootballPlayerStats
      type: object
      additionalProperties:
        $ref: '#/components/schemas/UsFootballPlayerStats'
    Map_UsFootballScore:
      title: Map_UsFootballScore
      type: object
      additionalProperties:
        $ref: '#/components/schemas/UsFootballScore'
    Multiproof:
      title: Multiproof
      type: object
      required:
      - hashes
      properties:
        hashes:
          $ref: '#/components/schemas/List_ProofNode'
        indices:
          type: array
          items:
            type: integer
            format: int32
    NS:
      title: NS
      type: object
    NS1:
      title: NS
      type: object
    NS2:
      title: NS
      type: object
    Neutral:
      title: Neutral
      type: object
    Nil:
      title: Nil
      type: object
    OB:
      title: OB
      type: object
    OB1:
      title: OB1
      type: object
    OB10:
      title: OB10
      type: object
    OB11:
      title: OB11
      type: object
    OB12:
      title: OB
      type: object
    OB2:
      title: OB2
      type: object
    OB3:
      title: OB3
      type: object
    OB4:
      title: OB4
      type: object
    OB5:
      title: OB5
      type: object
    OB6:
      title: OB6
      type: object
    OB7:
      title: OB7
      type: object
    OB8:
      title: OB8
      type: object
    OB9:
      title: OB9
      type: object
    OT:
      title: OT
      type: object
    OT1:
      title: OT1
      type: object
    OT10:
      title: OT10
      type: object
    OT11:
      title: OT11
      type: object
    OT12:
      title: OT12
      type: object
    OT13:
      title: OT
      type: object
    OT2:
      title: OT2
      type: object
    OT3:
      title: OT3
      type: object
    OT4:
      title: OT4
      type: object
    OT5:
      title: OT5
      type: object
    OT6:
      title: OT6
      type: object
    OT7:
      title: OT7
      type: object
    OT8:
      title: OT8
      type: object
    OT9:
      title: OT9
      type: object
    Odds:
      title: Odds
      type: object
      required:
      - FixtureId
      - MessageId
      - Ts
      - Bookmaker
      - BookmakerId
      - SuperOddsType
      - InRunning
      properties:
        FixtureId:
          type: integer
          format: int64
        MessageId:
          type: string
        Ts:
          type: integer
          format: int64
        Bookmaker:
          type: string
        BookmakerId:
          type: integer
          format: int32
        SuperOddsType:
          type: string
        GameState:
          type: string
        InRunning:
          type: boolean
        MarketParameters:
          type: string
        MarketPeriod:
          type: string
        PriceNames:
          type: array
          items:
            type: string
        Prices:
          type: array
          items:
            type: integer
            format: int32
    OddsBatchSummary:
      title: OddsBatchSummary
      type: object
      required:
      - fixtureId
      - updateStats
      - oddsSubTreeRoot
      properties:
        fixtureId:
          type: integer
          format: int64
        updateStats:
          $ref: '#/components/schemas/OddsUpdateStats'
        oddsSubTreeRoot:
          type: string
          format: binary
    OddsPayload:
      title: OddsPayload
      type: object
      required:
      - FixtureId
      - MessageId
      - Ts
      - Bookmaker
      - BookmakerId
      - SuperOddsType
      - InRunning
      properties:
        FixtureId:
          type: integer
          format: int64
        MessageId:
          type: string
        Ts:
          type: integer
          format: int64
        Bookmaker:
          type: string
        BookmakerId:
          type: integer
          format: int32
        SuperOddsType:
          type: string
        GameState:
          type: string
        InRunning:
          type: boolean
        MarketParameters:
          type: string
        MarketPeriod:
          type: string
        PriceNames:
          type: array
          items:
            type: string
        Prices:
          type: array
          items:
            type: integer
            format: int32
        Pct:
          type: array
          items:
            description: Strictly formatted to 3 decimal places, or NA for quarter
              handicap lines
            examples:
            - 52.632
            type: string
            pattern: ^(NA|\d+\.\d{3})$
    OddsStreamEvent:
      title: OddsStreamEvent
      type: object
      properties:
        id:
          type: string
        event:
          type: string
        data:
          $ref: '#/components/schemas/OddsPayload'
    OddsUpdateStats:
      title: OddsUpdateStats
      type: object
      required:
      - updateCount
      - minTimestamp
      - maxTimestamp
      properties:
        updateCount:
          type: integer
          format: int32
        minTimestamp:
          type: integer
          format: int64
        maxTimestamp:
          type: integer
          format: int64
    OddsValidation:
      title: OddsValidation
      type: object
      required:
      - odds
      - summary
      - subTreeProof
      - mainTreeProof
      properties:
        odds:
          $ref: '#/components/schemas/Odds'
        summary:
          $ref: '#/components/schemas/OddsBatchSummary'
        subTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        mainTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
    Offensive:
      title: Offensive
      type: object
    Offside:
      title: Offside
      type: object
    Onside:
      title: Onside
      type: object
    Other:
      title: Other
      type: object
    OutOfBounds:
      title: OutOfBounds
      type: object
    OwnGoal:
      title: OwnGoal
      type: object
    P:
      title: P
      type: object
    PE:
      title: PE
      type: object
    Parti1:
      title: Parti1
      type: object
    Parti2:
      title: Parti2
      type: object
    Participant:
      title: Participant
      oneOf:
      - $ref: '#/components/schemas/Parti1'
      - $ref: '#/components/schemas/Parti2'
    PassComplete:
      title: PassComplete
      type: object
    PassIncomplete:
      title: PassIncomplete
      type: object
    PassIntercepted:
      title: PassIntercepted
      type: object
    PassOutcome:
      title: PassOutcome
      oneOf:
      - $ref: '#/components/schemas/Complete'
      - $ref: '#/components/schemas/Incomplete'
      - $ref: '#/components/schemas/Intercepted'
      - $ref: '#/components/schemas/Sack'
    PassSack:
      title: PassSack
      type: object
    PlayerData:
      title: PlayerData
      type: object
      required:
      - id
      - normativeId
      - country
      - team
      - dateOfBirth
      - gender
      - preferredName
      - updateDateMillis
      properties:
        id:
          type: string
        normativeId:
          type: integer
          format: int32
        country:
          type: string
        team:
          type: string
        dateOfBirth:
          type: string
        gender:
          type: string
        preferredName:
          type: string
        updateDateMillis:
          type: integer
          format: int64
    PlayerLineupData:
      title: PlayerLineupData
      type: object
      required:
      - fixturePlayerId
      - statusId
      - positionId
      - unitId
      - rosterNumber
      - starter
      - starred
      - player
      properties:
        fixturePlayerId:
          type: integer
          format: int32
        statusId:
          type: integer
          format: int32
        positionId:
          type: integer
          format: int32
        unitId:
          type: integer
          format: int32
        rosterNumber:
          type: string
        starter:
          type: boolean
        starred:
          type: boolean
        player:
          $ref: '#/components/schemas/PlayerData'
    ProofNode:
      title: ProofNode
      type: object
      required:
      - hash
      - isRightSibling
      properties:
        hash:
          type: string
          format: binary
        isRightSibling:
          type: boolean
    PurchaseQuoteRequest:
      title: PurchaseQuoteRequest
      type: object
      required:
      - buyerPubkey
      - txlineAmount
      properties:
        buyerPubkey:
          description: The public key of the buyer's Solana wallet.
          type: string
        txlineAmount:
          description: The amount of whole utility TxLINE tokens to purchase. Must
            be strictly positive and not exceed 100000000 (100000 USDT equivalent).
          type: integer
          format: int64
          minimum: 1
          maximum: 100000000
    PurchaseQuoteResponse:
      title: PurchaseQuoteResponse
      type: object
      required:
      - transactionBase64
      - baseUsdtCost
      - feeUsdtAmount
      - totalUsdtCharged
      properties:
        transactionBase64:
          type: string
        baseUsdtCost:
          description: The raw USDT cost for the tokens before fees (in whole USDT).
          type: number
        feeUsdtAmount:
          description: The premium fee applied to the transaction (currently 0 USDT).
          type: number
        totalUsdtCharged:
          description: The final total USDT amount the wallet will be charged.
          type: number
    Q1:
      title: Q1
      type: object
    Q11:
      title: Q1
      type: object
    Q1B:
      title: Q1B
      type: object
    Q1B1:
      title: Q1B
      type: object
    Q2:
      title: Q2
      type: object
    Q21:
      title: Q2
      type: object
    Q3:
      title: Q3
      type: object
    Q31:
      title: Q3
      type: object
    Q3B:
      title: Q3B
      type: object
    Q3B1:
      title: Q3B
      type: object
    Q4:
      title: Q4
      type: object
    Q41:
      title: Q4
      type: object
    Recovered:
      title: Recovered
      type: object
    Regular:
      title: Regular
      type: object
    Return:
      title: Return
      type: object
    RushComplete:
      title: RushComplete
      type: object
    Sack:
      title: Sack
      type: object
    Safe:
      title: Safe
      type: object
    SafePossession:
      title: SafePossession
      type: object
    Safety1Pt:
      title: Safety1Pt
      type: object
    Safety2Pt:
      title: Safety2Pt
      type: object
    ScoreStat:
      title: ScoreStat
      type: object
      required:
      - key
      - value
      - period
      properties:
        key:
          type: integer
          format: int32
        value:
          type: integer
          format: int32
        period:
          type: integer
          format: int32
    Scores:
      title: Scores
      type: object
      required:
      - fixtureId
      - gameState
      - startTime
      - isTeam
      - fixtureGroupId
      - competitionId
      - countryId
      - sportId
      - participant1IsHome
      - participant2Id
      - participant1Id
      - action
      - id
      - ts
      - connectionId
      - seq
      properties:
        fixtureId:
          type: integer
          format: int32
        gameState:
          type: string
        startTime:
          type: integer
          format: int64
        isTeam:
          type: boolean
        fixtureGroupId:
          type: integer
          format: int32
        competitionId:
          type: integer
          format: int32
        countryId:
          type: integer
          format: int32
        sportId:
          type: integer
          format: int32
        participant1IsHome:
          type: boolean
        participant2Id:
          type: integer
          format: int32
        participant1Id:
          type: integer
          format: int32
        coverageSecondaryData:
          type: boolean
        coverageType:
          type: string
        action:
          type: string
        id:
          type: integer
          format: int32
        ts:
          type: integer
          format: int64
        connectionId:
          type: integer
          format: int64
        seq:
          type: integer
          format: int32
        statusId:
          $ref: '#/components/schemas/UsFootballFixtureStatus'
        statusBasketballId:
          $ref: '#/components/schemas/BasketballFixtureStatus'
        statusSoccerId:
          $ref: '#/components/schemas/SoccerFixtureStatus'
        type:
          $ref: '#/components/schemas/FixtureType'
        confirmed:
          type: boolean
        clock:
          $ref: '#/components/schemas/UsFootballFixtureClock'
        down:
          $ref: '#/components/schemas/UsFootballFixtureDown'
        inPlayInfo:
          $ref: '#/components/schemas/InPlayInfo'
        kickoffInfo:
          $ref: '#/components/schemas/KickoffInfo'
        score:
          $ref: '#/components/schemas/UsFootballFixtureScore'
        data:
          $ref: '#/components/schemas/UsFootballData'
        scoreBasketball:
          $ref: '#/components/schemas/BasketballFixtureScore'
        dataBasketball:
          $ref: '#/components/schemas/BasketballData'
        scoreSoccer:
          $ref: '#/components/schemas/SoccerFixtureScore'
        dataSoccer:
          $ref: '#/components/schemas/SoccerData'
        stats:
          $ref: '#/components/schemas/Map_ScoreStatKey'
        participant:
          type: integer
          format: int32
        kickoff:
          $ref: '#/components/schemas/KickoffDetails'
        lineups:
          type: array
          items:
            $ref: '#/components/schemas/LineupData'
        possession:
          type: integer
          format: int32
        possessionType:
          $ref: '#/components/schemas/SoccerPossessionType'
        parti1StateSoccer:
          $ref: '#/components/schemas/SoccerPartiState'
        parti1StateUsFootball:
          $ref: '#/components/schemas/UsFootballPartiState'
        parti1StateBasketball:
          $ref: '#/components/schemas/BasketballPartiState'
        parti2StateSoccer:
          $ref: '#/components/schemas/SoccerPartiState'
        parti2StateUsFootball:
          $ref: '#/components/schemas/UsFootballPartiState'
        parti2StateBasketball:
          $ref: '#/components/schemas/BasketballPartiState'
        possibleEventSoccer:
          $ref: '#/components/schemas/SoccerPossibleNeutralEvent'
        possibleEventUsFootball:
          $ref: '#/components/schemas/UsFootballPossibleEvent'
        playerStatsSoccer:
          $ref: '#/components/schemas/SoccerFixturePlayerStats'
        playerStatsUsFootball:
          $ref: '#/components/schemas/UsFootballFixturePlayerStats'
    ScoresBatchSummary:
      title: ScoresBatchSummary
      type: object
      required:
      - fixtureId
      - updateStats
      - eventStatsSubTreeRoot
      properties:
        fixtureId:
          type: integer
          format: int32
        updateStats:
          $ref: '#/components/schemas/ScoresUpdateStats'
        eventStatsSubTreeRoot:
          type: string
          format: binary
    ScoresStatValidation:
      title: ScoresStatValidation
      type: object
      required:
      - ts
      - statToProve
      - eventStatRoot
      - summary
      - statProof
      - subTreeProof
      - mainTreeProof
      properties:
        ts:
          type: integer
          format: int64
        statToProve:
          $ref: '#/components/schemas/ScoreStat'
        eventStatRoot:
          type: string
          format: binary
        summary:
          $ref: '#/components/schemas/ScoresBatchSummary'
        statProof:
          $ref: '#/components/schemas/List_ProofNode'
        subTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        mainTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        statToProve2:
          $ref: '#/components/schemas/ScoreStat'
        statProof2:
          $ref: '#/components/schemas/List_ProofNode'
    ScoresStatValidationV2:
      title: ScoresStatValidationV2
      type: object
      required:
      - ts
      - eventStatRoot
      - summary
      - subTreeProof
      - mainTreeProof
      properties:
        ts:
          type: integer
          format: int64
        statsToProve:
          type: array
          items:
            $ref: '#/components/schemas/ScoreStat'
        eventStatRoot:
          type: string
          format: binary
        summary:
          $ref: '#/components/schemas/ScoresBatchSummary'
        statProofs:
          type: array
          items:
            $ref: '#/components/schemas/List_ProofNode'
        subTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        mainTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
    ScoresStatValidationV3:
      title: ScoresStatValidationV3
      type: object
      required:
      - ts
      - summary
      - eventStatRoot
      - multiproof
      - subTreeProof
      - mainTreeProof
      properties:
        ts:
          type: integer
          format: int64
        summary:
          $ref: '#/components/schemas/ScoresBatchSummary'
        eventStatRoot:
          type: string
          format: binary
        statsToProve:
          type: array
          items:
            $ref: '#/components/schemas/StatLeaf'
        multiproof:
          $ref: '#/components/schemas/Multiproof'
        subTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
        mainTreeProof:
          $ref: '#/components/schemas/List_ProofNode'
    ScoresStreamEvent:
      title: ScoresStreamEvent
      type: object
      properties:
        id:
          type: string
        event:
          type: string
        data:
          $ref: '#/components/schemas/Scores'
    ScoresUpdateStats:
      title: ScoresUpdateStats
      type: object
      required:
      - updateCount
      - minTimestamp
      - maxTimestamp
      properties:
        updateCount:
          type: integer
          format: int32
        minTimestamp:
          type: integer
          format: int64
        maxTimestamp:
          type: integer
          format: int64
    Shot:
      title: Shot
      type: object
    Side:
      title: Side
      oneOf:
      - $ref: '#/components/schemas/Defensive'
      - $ref: '#/components/schemas/Offensive'
    Soccer:
      title: Soccer
      type: object
    SoccerCondition:
      title: SoccerCondition
      description: Union of SoccerWeather and SoccerPitchCondition
      type: string
    SoccerData:
      title: SoccerData
      type: object
      properties:
        Action:
          type: string
        Color:
          type: string
        Conditions:
          type: array
          items:
            $ref: '#/components/schemas/SoccerCondition'
        New:
          $ref: '#/components/schemas/SoccerUpdateReference'
        Corner:
          type: boolean
        FreeKickType:
          type: string
        Goal:
          type: boolean
        GoalType:
          $ref: '#/components/schemas/GoalType'
        Minutes:
          type: integer
          format: int32
        Outcome:
          type: string
        Participant:
          type: integer
          format: int32
        Penalty:
          type: boolean
        PlayerId:
          type: integer
          format: int32
        PlayerInId:
          type: integer
          format: int32
        PlayerOutId:
          type: integer
          format: int32
        Previous:
          $ref: '#/components/schemas/SoccerUpdateReference'
        StatusId:
          type: integer
          format: int32
        ThrowInType:
          type: string
        Type:
          type: string
        RedCard:
          type: boolean
        YellowCard:
          type: boolean
        VAR:
          type: boolean
        VenueType:
          $ref: '#/components/schemas/SoccerVenueType'
    SoccerFixtureClock:
      title: SoccerFixtureClock
      type: object
      required:
      - running
      - seconds
      properties:
        running:
          type: boolean
        seconds:
          type: integer
          format: int32
    SoccerFixturePlayerStats:
      title: SoccerFixturePlayerStats
      type: object
      required:
      - Participant1
      - Participant2
      properties:
        Participant1:
          $ref: '#/components/schemas/Map_SoccerPlayerStats'
        Participant2:
          $ref: '#/components/schemas/Map_SoccerPlayerStats'
    SoccerFixtureScore:
      title: SoccerFixtureScore
      type: object
      required:
      - Participant1
      - Participant2
      properties:
        Participant1:
          $ref: '#/components/schemas/SoccerTotalScore'
        Participant2:
          $ref: '#/components/schemas/SoccerTotalScore'
    SoccerFixtureStatus:
      title: SoccerFixtureStatus
      oneOf:
      - $ref: '#/components/schemas/A2'
      - $ref: '#/components/schemas/C2'
      - $ref: '#/components/schemas/END'
      - $ref: '#/components/schemas/ET1'
      - $ref: '#/components/schemas/ET2'
      - $ref: '#/components/schemas/F2'
      - $ref: '#/components/schemas/FET'
      - $ref: '#/components/schemas/FPE'
      - $ref: '#/components/schemas/H11'
      - $ref: '#/components/schemas/H21'
      - $ref: '#/components/schemas/HT2'
      - $ref: '#/components/schemas/HTET'
      - $ref: '#/components/schemas/I2'
      - $ref: '#/components/schemas/NS2'
      - $ref: '#/components/schemas/P'
      - $ref: '#/components/schemas/PE'
      - $ref: '#/components/schemas/TXCC2'
      - $ref: '#/components/schemas/TXCS2'
      - $ref: '#/components/schemas/WET'
      - $ref: '#/components/schemas/WPE'
    SoccerPartiState:
      title: SoccerPartiState
      type: object
      required:
      - PossibleEvent
      properties:
        PossibleEvent:
          $ref: '#/components/schemas/SoccerPossiblePartiEvent'
    SoccerPlayerStats:
      title: SoccerPlayerStats
      type: object
      required:
      - goals
      - shots
      - ownGoals
      - penaltyAttempts
      - penaltyGoals
      - yellowCards
      - redCards
      properties:
        goals:
          type: integer
          format: int32
        shots:
          type: integer
          format: int32
        ownGoals:
          type: integer
          format: int32
        penaltyAttempts:
          type: integer
          format: int32
        penaltyGoals:
          type: integer
          format: int32
        yellowCards:
          type: integer
          format: int32
        redCards:
          type: integer
          format: int32
    SoccerPossessionType:
      title: SoccerPossessionType
      oneOf:
      - $ref: '#/components/schemas/AttackPossession'
      - $ref: '#/components/schemas/DangerPossession'
      - $ref: '#/components/schemas/HighDangerPossession'
      - $ref: '#/components/schemas/SafePossession'
    SoccerPossibleNeutralEvent:
      title: SoccerPossibleNeutralEvent
      type: object
      required:
      - RedCard
      - YellowCard
      - VAR
      properties:
        RedCard:
          type: boolean
        YellowCard:
          type: boolean
        VAR:
          type: boolean
    SoccerPossiblePartiEvent:
      title: SoccerPossiblePartiEvent
      type: object
      required:
      - Goal
      - Penalty
      - Corner
      properties:
        Goal:
          type: boolean
        Penalty:
          type: boolean
        Corner:
          type: boolean
    SoccerScore:
      title: SoccerScore
      type: object
      required:
      - Goals
      - YellowCards
      - RedCards
      - Corners
      properties:
        Goals:
          type: integer
          format: int32
        YellowCards:
          type: integer
          format: int32
        RedCards:
          type: integer
          format: int32
        Corners:
          type: integer
          format: int32
    SoccerTotalScore:
      title: SoccerTotalScore
      type: object
      properties:
        H1:
          $ref: '#/components/schemas/SoccerScore'
        HT:
          $ref: '#/components/schemas/SoccerScore'
        H2:
          $ref: '#/components/schemas/SoccerScore'
        ET1:
          $ref: '#/components/schemas/SoccerScore'
        ET2:
          $ref: '#/components/schemas/SoccerScore'
        PE:
          $ref: '#/components/schemas/SoccerScore'
        ETTotal:
          $ref: '#/components/schemas/SoccerScore'
        Total:
          $ref: '#/components/schemas/SoccerScore'
    SoccerUpdateReference:
      title: SoccerUpdateReference
      type: object
      properties:
        Clock:
          $ref: '#/components/schemas/SoccerFixtureClock'
        FreeKickType:
          $ref: '#/components/schemas/FreeKickType'
        GoalType:
          $ref: '#/components/schemas/GoalType'
        Minutes:
          type: integer
          format: int32
        Outcome:
          description: A string representing either a ShotOutcome, SoccerPenaltyOutcome,
            or InjuryOutcome
          type: string
        PlayerId:
          type: integer
          format: int32
        PlayerInId:
          type: integer
          format: int32
        PlayerOutId:
          type: integer
          format: int32
        ThrowInType:
          $ref: '#/components/schemas/ThrowInType'
        Type:
          type: string
    SoccerVenueType:
      title: SoccerVenueType
      oneOf:
      - $ref: '#/components/schemas/Away'
      - $ref: '#/components/schemas/Home'
      - $ref: '#/components/schemas/Neutral'
    StatLeaf:
      title: StatLeaf
      type: object
      required:
      - stat
      - statProof
      properties:
        stat:
          $ref: '#/components/schemas/ScoreStat'
        statProof:
          $ref: '#/components/schemas/List_ProofNode'
    Stat_N:
      title: Stat_N
      type: object
      required:
      - n
      properties:
        n:
          type: integer
          format: int32
    Stat_N_YD:
      title: Stat_N_YD
      type: object
      required:
      - n
      - yards
      properties:
        n:
          type: integer
          format: int32
        yards:
          type: integer
          format: int32
    Stat_N_YD_TD:
      title: Stat_N_YD_TD
      type: object
      required:
      - n
      - yards
      - touchdowns
      properties:
        n:
          type: integer
          format: int32
        yards:
          type: integer
          format: int32
        touchdowns:
          type: integer
          format: int32
    Stat_Pass:
      title: Stat_Pass
      type: object
      properties:
        passer:
          $ref: '#/components/schemas/Stat_Pass_Passer'
        receiver:
          $ref: '#/components/schemas/Stat_Pass_Receiver'
    Stat_Pass_Passer:
      title: Stat_Pass_Passer
      type: object
      properties:
        complete:
          $ref: '#/components/schemas/Stat_N_YD_TD'
        incomplete:
          $ref: '#/components/schemas/Stat_N_YD'
        intercepted:
          $ref: '#/components/schemas/Stat_N_YD'
        sack:
          $ref: '#/components/schemas/Stat_N'
    Stat_Pass_Receiver:
      title: Stat_Pass_Receiver
      type: object
      properties:
        complete:
          $ref: '#/components/schemas/Stat_N_YD_TD'
        incomplete:
          $ref: '#/components/schemas/Stat_N_YD'
        intercepted:
          $ref: '#/components/schemas/Stat_N_YD'
    TXCC:
      title: TXCC
      type: object
    TXCC1:
      title: TXCC
      type: object
    TXCC2:
      title: TXCC
      type: object
    TXCS:
      title: TXCS
      type: object
    TXCS1:
      title: TXCS
      type: object
    TXCS2:
      title: TXCS
      type: object
    ThrowInType:
      title: ThrowInType
      oneOf:
      - $ref: '#/components/schemas/Attack'
      - $ref: '#/components/schemas/Danger'
      - $ref: '#/components/schemas/Safe'
    TokenResponse:
      title: TokenResponse
      type: object
      required:
      - token
      properties:
        token:
          type: string
    Touchback:
      title: Touchback
      type: object
    UpdateReference:
      title: UpdateReference
      type: object
      properties:
        Clock:
          $ref: '#/components/schemas/UsFootballFixtureClock'
        IsTeam:
          type: boolean
        Outcome:
          $ref: '#/components/schemas/PassOutcome'
        PlayerId:
          type: integer
          format: int32
        ReceiverId:
          type: integer
          format: int32
        RusherId:
          type: integer
          format: int32
        SackedPlayerId:
          type: integer
          format: int32
        Yards:
          type: integer
          format: int32
        YardsToGo:
          type: integer
          format: int32
    UsFootball:
      title: UsFootball
      type: object
    UsFootballData:
      title: UsFootballData
      type: object
      properties:
        Action:
          type: string
        Active:
          type: boolean
        BigPlay:
          type: boolean
        Challenge:
          type: boolean
        Clock:
          $ref: '#/components/schemas/UsFootballFixtureClock'
        Down:
          type: string
        FieldGoal:
          type: boolean
        Id:
          type: integer
          format: int32
        IsTeam:
          type: boolean
        New:
          $ref: '#/components/schemas/UpdateReference'
        NewSetOfDowns:
          type: boolean
        Origin:
          type: string
        Outcome:
          type: string
        Participant:
          type: integer
          format: int32
        Participants:
          type: array
          items:
            type: integer
            format: int32
        PasserId:
          type: integer
          format: int32
        Penalty:
          type: boolean
        PlayerI