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

# Live clock + score for a single market

> Thin variant of the `live` field on `/api/markets/:slug` — meant for the trader detail page poll loop. Returns `live: null` when the underlying fixture isn't currently in play (pre-match, finished, no oracle binding). Cache-Control allows the edge to coalesce identical polls within a 5s window.



## OpenAPI

````yaml /api-reference/openapi.json get /api/markets/{symbol}/live
openapi: 3.1.0
info:
  title: PredictStreet API
  description: >-
    Client-facing HTTP API for the PredictStreet prediction-market platform.
    **Partner kinds.** Every authenticated endpoint resolves a request's
    *effective wallet* from the partner row. `single_wallet` partners bind to
    one `associatedWallet` set at creation. `multi_wallet` partners declare the
    actor on every request via an `X-User-Wallet: 0x<40-hex>` header. See the
    [Partner kinds](/auth/api-keys#partner-kinds) doc for the full contract.
  version: '2026-06-16'
  contact:
    name: PredictStreet partners
    email: partners@predictstreet.com
servers:
  - url: https://core.api.dev.predictstreet.sde.adifoundation.ai
    description: Testnet (partner integrator API — final domain TBD)
security: []
tags:
  - name: Deposits
    description: >-
      Gasless USDC deposit relay - submit a signed EIP-2612 permit and the
      platform broadcasts the on-chain deposit for you (no gas).
  - name: Events
    description: >-
      Polymarket-style event grouping with football metadata (group, stage,
      teams, tags).
  - name: Tags
    description: Curated tag taxonomy used to filter events.
  - name: Markets
    description: 'Public market data: list, detail, orderbook, trades, OHLC.'
  - name: Crypto
    description: >-
      Crypto price markets: the underlying-asset price curve and Up/Down series
      navigation. The markets themselves are ordinary binary markets — list them
      through /api/markets and /api/events.
  - name: Orders
    description: >-
      Signed-order place / cancel / read. Requires `X-Api-Key` with
      `orders:read` / `orders:write` scope; every write additionally requires an
      EIP-712 signature over the order.
  - name: Portfolio
    description: >-
      Balances, positions, trades, fees, vault info for the key's
      `associatedWallet`. Requires `X-Api-Key` with `portfolio:read` scope.
  - name: Matches
    description: >-
      A match groups several events into one fixture/card (1X2 + first-scorer +
      over-under under one matchup).
  - name: Vault
    description: >-
      Backend co-signatures for ERC-1155 split / merge, and recovery for
      off-chain locks when the corresponding chain tx never confirmed. Requires
      `X-Api-Key` with `vault:write` scope plus an EIP-712 signature over the
      operation.
  - name: Leaderboard
    description: Public ranked leaderboard across PnL / volume buckets.
  - name: Search
    description: Global search across users, events, and matches.
  - name: Withdrawal Security
    description: >-
      Self-service withdrawal 2FA (TOTP) and withdrawal-address whitelist. Same
      endpoints serve the web app (user sessions) and API-key integrators.
      Mutations need `vault:write`, reads `portfolio:read`. Both are opt-in per
      wallet and only gate withdrawals once the platform enables
      withdrawal-security enforcement.
  - name: Platform
    description: >-
      Public platform state: the contract registry, the platform fee
      configuration, the platform freeze flag and active notices. No
      authentication.
paths:
  /api/markets/{symbol}/live:
    get:
      tags:
        - Markets
      summary: Live clock + score for a single market
      description: >-
        Thin variant of the `live` field on `/api/markets/:slug` — meant for the
        trader detail page poll loop. Returns `live: null` when the underlying
        fixture isn't currently in play (pre-match, finished, no oracle
        binding). Cache-Control allows the edge to coalesce identical polls
        within a 5s window.
      operationId: MarketsController_liveBySymbol
      parameters:
        - name: symbol
          required: true
          in: path
          description: Market symbol (NOT the slug).
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketLiveRespDto'
components:
  schemas:
    MarketLiveRespDto:
      type: object
      properties:
        live:
          nullable: true
          description: >-
            Latest live clock + score frame for this market, or null when the
            underlying fixture is not currently in play.
          allOf:
            - $ref: '#/components/schemas/MarketLiveStatusDto'
      required:
        - live
    MarketLiveStatusDto:
      type: object
      properties:
        state:
          type: string
          nullable: true
          description: >-
            Raw provider period/status code, kept verbatim for display.
            api-football: "1H" | "HT" | "2H" | "ET" | "BT" | "P" | "LIVE". Stats
            Perform: "FirstHalf" | "HalfTime" | "SecondHalf" | … Null when the
            frame carried no state.
        minute:
          type: number
          nullable: true
          description: >-
            Elapsed match minute; null when the provider sent no clock. Caps at
            45/90 during stoppage — the added minutes are in `addedMinute`.
        addedMinute:
          type: number
          nullable: true
          description: >-
            Stoppage / added minutes (the "+N" in "90+3"); null when the match
            is not in stoppage. Render as `${minute}+${addedMinute}`.
        score:
          nullable: true
          description: Parsed running score; null until the first scored frame arrives.
          allOf:
            - $ref: '#/components/schemas/MarketLiveScoreDto'
        scoreText:
          type: string
          nullable: true
          description: >-
            Raw score string as the provider sent it (e.g. "2-1"); display
            fallback when the numeric parse fails.
        penaltyScore:
          nullable: true
          description: >-
            Penalty-shootout tally, present only while a shootout is in progress
            or decided; the on-pitch score stays in `score` (render e.g. "1-1
            (5-4 pens)"). Usually absent.
          allOf:
            - $ref: '#/components/schemas/MarketLiveScoreDto'
        penaltyScoreText:
          type: string
          nullable: true
          description: >-
            Raw shootout tally as the provider sent it (e.g. `5-4`); display
            fallback. Usually absent.
        inPlay:
          type: boolean
          description: >-
            True while the fixture is live — kickoff to the final whistle,
            half-time and other breaks included (read `state`, e.g. `HT`, for a
            pause). False once the match is over.
        provider:
          type: string
          description: >-
            Feed that produced this frame (`api-football`, `statsperform`,
            `lsports`, …), or `final` for the persisted final-score frame kept
            after the game.
        asOf:
          type: string
          description: >-
            ISO-8601 timestamp the frame was observed at the provider. Treat the
            clock as stale when this falls far behind the current time.
        significantEvent:
          type: string
          nullable: true
          description: >-
            Latest significant match event for a one-line badge, e.g. "goal — A.
            Dedić" / "card — …" / "substitution — …" (from Stats Perform Opta
            typeId + player). Sticky: the last event rides through later frames
            until a newer one arrives. Null when none has been reported for this
            fixture.
        sport:
          type: string
          nullable: true
          description: >-
            Sport of the underlying contest as reported by the oracle frame
            ("soccer" | "tennis" | "baseball" | "boxing" | "cricket" | "cs2" |
            "dota2" | "lol" | "valorant" | …). Tells you how to read the frame:
            tennis reports sets instead of a minute clock, cricket innings,
            esports maps. Absent on legacy frames.
        setScores:
          type: string
          nullable: true
          example: 160-0 0-164
          description: >-
            Per-segment score line; the segment semantics follow `sport`.
            Tennis: per-set game scores in play order, e.g. "6-4 3-2" —
            `score`/`scoreText` carry SETS won ("1-0") and `state` the current
            set label ("Set 2"); `minute` stays null. Cricket: space-separated
            per-innings home-away run pairs in innings order, e.g. "160-0 0-164"
            (the batting side's runs land on its own side); the whole-match
            totals travel in `score`/`scoreText`, never as a trailing segment
            here. Esports: `score`/`scoreText` carry MAPS won ("2-1") for all
            four disciplines and `state` is "Map N"/"Live"/"Played"; this field
            is present only for the round-based ones (cs2, valorant) as
            space-separated per-map round scores in map order, e.g. "13-11 10-13
            13-9" — absent on dota2/lol frames (their map periods are a 1-0 flag
            or kills, not a score); the maps-won total is never appended as a
            trailing segment. Absent on football frames and on the persisted
            final-score fallback.
        homeCountry:
          type: string
          nullable: true
          description: >-
            ISO-3166-1 alpha-2 of the HOME player's nationality (tennis flags).
            Absent when the provider carried no usable nationality (uneven
            coverage, doubles, football frames) — render no flag then.
            Live-only, like setScores.
        awayCountry:
          type: string
          nullable: true
          description: >-
            ISO-3166-1 alpha-2 of the AWAY player's nationality — see
            homeCountry.
        inningHalf:
          type: string
          enum:
            - top
            - bottom
          description: >-
            Baseball only: which half of the inning is being played. "top" = the
            AWAY side is batting, "bottom" = the HOME side. Absent outside
            baseball and outside live play.
        balls:
          type: number
          description: >-
            Baseball only: balls in the at-bat in progress (0-3; a 4th walks the
            batter and the count resets). Live-only and NOT sticky — it
            disappears as soon as a frame stops carrying it, so a stale count is
            never shown as current.
        strikes:
          type: number
          description: >-
            Baseball only: strikes in the at-bat in progress (0-2; a 3rd is an
            out and the count resets). Same live-only rule as balls.
        outs:
          type: number
          description: >-
            Baseball only: outs in the current half-inning (0-3; the 3rd ends
            the half). Same live-only rule as balls.
        bases:
          description: >-
            Baseball only: occupied bases as [1st, 2nd, 3rd] — [true,false,true]
            means runners on 1st and 3rd. Reported by MLB/NPB/KBO feeds; mostly
            ABSENT for CPBL and LMB. Absence means UNKNOWN, not "bases empty" —
            render nothing rather than an empty diamond.
          type: array
          items:
            type: boolean
        periodClock:
          type: string
          example: '07:27'
          description: >-
            American football only: time LEFT in the current quarter as "mm:ss"
            (a countdown; "00:00" once the quarter is over — read `state` for
            "HT"). Moves only when the provider sends a frame (the play clock
            stops between plays), so render it verbatim and never tick it down
            locally. Live-only and NOT sticky — absent as soon as a frame stops
            carrying it, and absent outside american football.
      required:
        - state
        - minute
        - addedMinute
        - score
        - scoreText
        - inPlay
        - provider
        - asOf
        - significantEvent
      description: >-
        Live clock + score frame of a fixture. While the game runs it is
        refreshed from the live feed; after the game a persisted final-score
        frame (`provider: "final"`, `state` such as `Played`, `inPlay: false`)
        may remain.
    MarketLiveScoreDto:
      type: object
      properties:
        home:
          type: number
          description: Goals/points for the home side.
        away:
          type: number
          description: Goals/points for the away side.
      required:
        - home
        - away

````

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