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

> ## Agent Instructions
> To integrate AGG, start with Quickstart: REST (https://docs.agg.market/quickstart/rest), then Order lifecycle & statuses (https://docs.agg.market/concepts/order-lifecycle).
> Track every trade until it reaches a terminal status. Before retrying a failed or timed-out call, read Errors, retries & idempotency (https://docs.agg.market/concepts/errors).
> The API reference is generated from https://docs.agg.market/openapi/openapi.json.

# Get Venue Event

> Returns a single venue event. By default the response includes an embedded `venueMarkets` array. DEPRECATION: embedded `venueMarkets` is deprecated and will be removed — fetch the event's markets from GET /venue-markets?venueEventId=. To opt into the lean response now (no `venueMarkets`), send the `expand` query without `markets` (e.g. `?expand=`); send `?expand=markets` to pin markets inline across the future default change. `marketCount` and the rolled-up `volume` cover the event's whole matched cluster by default. `marketCount` is the number of rows GET /venue-markets?venueEventId= returns for this event (open markets, matched siblings folded into their anchor), so it can be paged to exactly. `volume` sums EVERY open and closed market in the cluster including those folded siblings, so it is not a total over those rows. Send `cluster=false` to scope both to this venue event alone. The embedded `venueMarkets` array is always this one event's markets regardless of `cluster`.



## OpenAPI

````yaml /openapi/openapi.json get /venue-events/{id}
openapi: 3.0.2
info:
  title: AGG API
  version: 1.0.0
  description: >-
    Prediction market aggregator REST API — authentication, users, venue events,
    venue markets, orderbooks, charts, and execution workflows.
servers:
  - url: https://api.agg.market
    description: Production
security: []
tags:
  - name: Authentication
    description: Sign users in and manage their session tokens.
  - name: Markets
    description: Find events, markets and outcomes to trade.
  - name: Market Data
    description: Live orderbooks, prices, charts and scores for those markets.
  - name: Trading
    description: Quote, place, sign, track and cancel orders.
  - name: Portfolio
    description: A user's orders, positions, balances and activity.
  - name: Funding
    description: Deposit addresses, withdrawals, balance refills and fiat on-ramp.
  - name: Users
    description: The signed-in user's profile, linked accounts, KYC and venue keys.
  - name: Hosted Venue Accounts
    description: Provision, fund and withdraw from venue accounts hosted for the user.
  - name: Webhooks
    description: Configure and operate webhook delivery to your server.
  - name: Partner Admin
    description: Server-side reads across your app's users, orders and analytics.
  - name: Paper Trading
    description: Simulated accounts and orders for testing without real funds.
  - name: News
    description: News feeds linked to markets.
  - name: Correlated Markets
    description: Markets related to a given market and the effect of its resolution.
paths:
  /venue-events/{id}:
    get:
      tags:
        - Markets
      summary: Get Venue Event
      description: >-
        Returns a single venue event. By default the response includes an
        embedded `venueMarkets` array. DEPRECATION: embedded `venueMarkets` is
        deprecated and will be removed — fetch the event's markets from GET
        /venue-markets?venueEventId=. To opt into the lean response now (no
        `venueMarkets`), send the `expand` query without `markets` (e.g.
        `?expand=`); send `?expand=markets` to pin markets inline across the
        future default change. `marketCount` and the rolled-up `volume` cover
        the event's whole matched cluster by default. `marketCount` is the
        number of rows GET /venue-markets?venueEventId= returns for this event
        (open markets, matched siblings folded into their anchor), so it can be
        paged to exactly. `volume` sums EVERY open and closed market in the
        cluster including those folded siblings, so it is not a total over those
        rows. Send `cluster=false` to scope both to this venue event alone. The
        embedded `venueMarkets` array is always this one event's markets
        regardless of `cluster`.
      operationId: getVenueEventById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: cluster
          in: query
          required: false
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - externalIdentifier
                  - title
                  - image
                  - venue
                  - categories
                properties:
                  id:
                    description: >-
                      Event id. List responses return one row per matched
                      cluster, and for a matched event this id is the cluster
                      anchor — the handle to use for cross-venue lookups.
                      Re-resolve it from discovery rather than storing it as a
                      permanent key: clusters can merge, after which the id
                      remains a valid event but is no longer the cluster head.
                      See the Matched Clusters guide.
                    type: string
                  externalIdentifier:
                    type: string
                  title:
                    type: string
                  description:
                    type: string
                    nullable: true
                  image:
                    type: string
                    nullable: true
                  venue:
                    $ref: '#/components/schemas/Venue'
                  deployerVenue:
                    type: string
                    nullable: true
                  volume:
                    minimum: 0
                    type: number
                    nullable: true
                  status:
                    type: string
                    enum:
                      - open
                      - closed
                      - resolved
                      - unopened
                      - paused
                  startDate:
                    type: string
                    nullable: true
                  endDate:
                    type: string
                    nullable: true
                  creationDate:
                    type: string
                    nullable: true
                  gameStartTime:
                    type: string
                    nullable: true
                  categories:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - category
                      properties:
                        id:
                          type: string
                        category:
                          type: object
                          required:
                            - id
                            - name
                            - displayName
                            - parentId
                            - eventCount
                            - volume24hr
                            - volume
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                            displayName:
                              type: string
                              nullable: true
                            parentId:
                              type: string
                              nullable: true
                            eventCount:
                              type: number
                            volume24hr:
                              type: number
                            volume:
                              type: number
                  slug:
                    type: string
                    nullable: true
                  subtitle:
                    type: string
                    nullable: true
                  venues:
                    description: >-
                      Venues this row's matched cluster spans — use it for venue
                      badges. On a cluster anchor this is the cluster-wide set;
                      a non-anchor member usually reports the same set, but
                      narrows to its own venue when none of its markets have
                      cross-venue counterparts.
                    type: array
                    items:
                      $ref: '#/components/schemas/Venue'
                  marketCount:
                    minimum: 0
                    description: >-
                      Number of markets on this event. Use this rather than the
                      length of an embedded venueMarkets array, which is a
                      preview on list responses. On GET /venue-events/:id this
                      counts the whole matched cluster (send cluster=false to
                      scope it to the single venue event); on list responses it
                      counts the row's own event.
                    type: integer
                  venueCount:
                    minimum: 0
                    description: Length of `venues` — the size of the matched cluster.
                    type: integer
                  groupMarketCount:
                    minimum: 0
                    type: integer
                  groupParentId:
                    description: >-
                      Same-venue companion grouping: the id of this event's
                      group base. NULL means the event IS the base, or is
                      standalone. A venue splits one game into several events
                      (`… - More Markets`, `… : Spread`), and same-venue events
                      never share a matched cluster (the sole exception is
                      Hyperliquid HIP-4 deployers, see
                      /recipes/hyperliquid-deployers) — so on a companion,
                      `matchedVenueEvents[]` lists the other venues' EQUIVALENT
                      companions, not the game's cluster. Use this id (or the
                      shared `aggKey`) to reach the base. See
                      /recipes/sports-market-detail.
                    type: string
                    nullable: true
                  updatedAt:
                    type: string
                    nullable: true
                  venueMarkets:
                    description: >-
                      Embedded markets. On list responses this is a preview of
                      up to three markets chosen to represent the event on a
                      card — not the complete set, and not necessarily the
                      largest; use marketCount for totals. On the by-id response
                      it is uncapped. Deprecated on both — fetch markets from
                      GET /venue-markets?venueEventId=.
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - venue
                        - externalIdentifier
                        - question
                        - venueMarketOutcomes
                      properties:
                        id:
                          type: string
                        venue:
                          $ref: '#/components/schemas/Venue'
                        deployerVenue:
                          type: string
                          nullable: true
                        marketId:
                          type: string
                          nullable: true
                        externalIdentifier:
                          type: string
                        venueEventId:
                          type: string
                          nullable: true
                        question:
                          type: string
                        description:
                          type: string
                          nullable: true
                        rulesPrimary:
                          type: string
                          nullable: true
                        rulesSecondary:
                          type: string
                          nullable: true
                        conditionId:
                          type: string
                          nullable: true
                        volume:
                          minimum: 0
                          type: number
                          nullable: true
                        volume24hr:
                          minimum: 0
                          type: number
                          nullable: true
                        image:
                          type: string
                          nullable: true
                        venueMarketOutcomes:
                          type: array
                          items:
                            type: object
                            required:
                              - id
                              - venueMarketId
                              - label
                            properties:
                              id:
                                type: string
                              venueMarketId:
                                type: string
                              externalIdentifier:
                                type: string
                                nullable: true
                              label:
                                type: string
                              title:
                                type: string
                                nullable: true
                              price:
                                minimum: 0
                                maximum: 1
                                deprecated: true
                                description: >-
                                  No longer returned. Fetch live prices from GET
                                  /midpoints (pass this outcome's parent
                                  venueMarketId in `ids` and match on
                                  `outcomes[].venueMarketOutcomeId`), or
                                  subscribe to the WebSocket midpoint stream.
                                type: number
                              winner:
                                type: boolean
                                nullable: true
                              payoutPerShare:
                                minimum: 0
                                maximum: 1
                                description: >-
                                  Per-share USDC payout of this outcome in [0,
                                  1] once the market settles. Source of truth
                                  over `winner` when set: a Polymarket UMA 50/50
                                  stores 0.5 on both sides, a Novig void stores
                                  its refund prices (e.g. 0.155 / 0.845). `null`
                                  = unknown; clients fall back to `winner ?
                                  1/winnerCount : 0`.
                                type: number
                                nullable: true
                              refundAtCost:
                                description: >-
                                  True when the venue voided the market and
                                  returns every holder their stake (ProphetX).
                                  `winner` is true on every outcome and
                                  `payoutPerShare` is null; the per-share refund
                                  is the holder's own average entry price. Check
                                  this BEFORE `payoutPerShare` / `winner ?
                                  1/winnerCount : 0`.
                                type: boolean
                              matchedVenueMarketOutcomes:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - venueMarketId
                                    - venueMarketOutcomeId
                                  properties:
                                    venueMarketId:
                                      type: string
                                    venueMarketOutcomeId:
                                      type: string
                        status:
                          type: string
                          enum:
                            - open
                            - closed
                            - resolved
                            - unopened
                            - paused
                        startDate:
                          type: string
                          nullable: true
                        endDate:
                          type: string
                          nullable: true
                        creationDate:
                          type: string
                          nullable: true
                        createdAt:
                          type: string
                          nullable: true
                        resolutionDate:
                          type: string
                          nullable: true
                        negRisk:
                          type: boolean
                        venues:
                          type: array
                          items:
                            $ref: '#/components/schemas/Venue'
                        venueCount:
                          minimum: 0
                          type: integer
                        arbReturn:
                          type: number
                          nullable: true
                        aggKey:
                          description: >-
                            Deterministic canonical key computed from this
                            venue's own data; null when not canonicalizable.
                            This is a fetch filter, not a cross-venue join key —
                            it is guaranteed identical across venues only for
                            sports head-to-head and crypto up/down markets, and
                            two members of the same matched cluster can carry
                            different keys. Use the event id and
                            matchedVenueMarkets for identity.
                          type: string
                          nullable: true
                        sportsMarketType:
                          type: string
                          nullable: true
                        sectionRank:
                          type: integer
                          nullable: true
                        period:
                          type: string
                          nullable: true
                        marketCategory:
                          type: string
                          nullable: true
                        marketGroup:
                          type: string
                          nullable: true
                        marketSubtype:
                          type: string
                          nullable: true
                        lineValue:
                          type: number
                          nullable: true
                        minOrderSize:
                          description: >-
                            Per-market minimum order size in shares/contracts.
                            Populated for Polymarket (the market's own floor)
                            and PRED (0.001); null elsewhere. POST
                            /execution/limit-orders validates `sizeRaw` against
                            this value on Polymarket. `null` means AGG ingested
                            no value for this market — NOT that the market has
                            no minimum; other venues enforce their own floors
                            this field does not carry.
                          type: number
                          nullable: true
                        tickSize:
                          description: >-
                            Price increment from the venue's market metadata. A
                            seed value — prefer the runtime-inferred `tick` from
                            GET /orderbooks or GET /orderbook/outcome/:outcomeId
                            when aligning a limit price, since the live grid can
                            be finer than this.
                          type: number
                          nullable: true
                        feeRate:
                          description: >-
                            The venue's published taker fee rate for this
                            market. `null` means we do not have it — fall back
                            to your own table; `0` is a real rate meaning the
                            venue charges nothing. Excludes our builder and
                            clearinghouse fees, which appear in the quote's
                            `feeBreakdown`. See /recipes/venue-fees.
                          type: number
                          nullable: true
                        feeExponent:
                          description: >-
                            Exponent paired with `feeRate`: `0` = flat fraction
                            of notional, `>= 1` = quadratic family. `null` when
                            `feeBasis` is `winnings`, which has no price curve.
                            See /recipes/venue-fees.
                          type: number
                          nullable: true
                        feeBasis:
                          description: >-
                            When the fee is charged: `fill` at execution,
                            `fill_in_game_only` only on fills matched while the
                            event is live, `winnings` at settlement on net
                            profit per market, `exit` only when a position is
                            closed or settles as a winner (opening trades are
                            free). See /recipes/venue-fees.
                          type: string
                          enum:
                            - fill
                            - fill_in_game_only
                            - winnings
                            - exit
                          nullable: true
                        matchedVenueMarkets:
                          description: >-
                            The same market on other venues, as linked by AGG's
                            matching pipeline. This is the cross-venue linkage —
                            it hangs off each market, not off the event, and is
                            complete regardless of which cluster member you
                            queried.
                          type: array
                          items:
                            type: object
                            required:
                              - id
                              - venue
                              - externalIdentifier
                              - question
                            properties:
                              id:
                                type: string
                              venue:
                                $ref: '#/components/schemas/Venue'
                              deployerVenue:
                                type: string
                                nullable: true
                              externalIdentifier:
                                type: string
                              question:
                                type: string
                              description:
                                type: string
                                nullable: true
                              rulesPrimary:
                                type: string
                                nullable: true
                              rulesSecondary:
                                type: string
                                nullable: true
                              volume:
                                minimum: 0
                                type: number
                                nullable: true
                              volume24hr:
                                minimum: 0
                                type: number
                                nullable: true
                              status:
                                type: string
                                enum:
                                  - open
                                  - closed
                                  - resolved
                                  - unopened
                                  - paused
                              conditionId:
                                type: string
                                nullable: true
                              arbReturn:
                                type: number
                                nullable: true
                              shortTitle:
                                type: string
                                nullable: true
                              image:
                                type: string
                                nullable: true
                              venueEvent:
                                type: object
                                required:
                                  - id
                                  - externalIdentifier
                                properties:
                                  id:
                                    type: string
                                  externalIdentifier:
                                    type: string
                                  slug:
                                    type: string
                                    nullable: true
                                  title:
                                    type: string
                                    nullable: true
                                  series:
                                    type: object
                                    required:
                                      - id
                                      - venue
                                      - externalIdentifier
                                    properties:
                                      id:
                                        type: string
                                      name:
                                        type: string
                                        nullable: true
                                      venue:
                                        type: string
                                      externalIdentifier:
                                        type: string
                                    nullable: true
                                nullable: true
                              venueMarketOutcomes:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueMarketId
                                    - label
                                  properties:
                                    id:
                                      type: string
                                    venueMarketId:
                                      type: string
                                    externalIdentifier:
                                      type: string
                                      nullable: true
                                    label:
                                      type: string
                                    title:
                                      type: string
                                      nullable: true
                                    price:
                                      deprecated: true
                                      description: >-
                                        No longer returned. Fetch live prices
                                        from GET /midpoints — sibling outcomes
                                        are covered by the `matched[]` entries
                                        of the parent market's midpoint item.
                                      type: number
                                    winner:
                                      type: boolean
                                      nullable: true
                                    payoutPerShare:
                                      minimum: 0
                                      maximum: 1
                                      description: >-
                                        Per-share USDC payout of this outcome in
                                        [0, 1] once the market settles. Source
                                        of truth over `winner` when set: a
                                        Polymarket UMA 50/50 stores 0.5 on both
                                        sides, a Novig void stores its refund
                                        prices (e.g. 0.155 / 0.845). `null` =
                                        unknown; clients fall back to `winner ?
                                        1/winnerCount : 0`.
                                      type: number
                                      nullable: true
                                    refundAtCost:
                                      description: >-
                                        True when the venue voided the market
                                        and returns every holder their stake
                                        (ProphetX). `winner` is true on every
                                        outcome and `payoutPerShare` is null;
                                        the per-share refund is the holder's own
                                        average entry price. Check this BEFORE
                                        `payoutPerShare` / `winner ?
                                        1/winnerCount : 0`.
                                      type: boolean
                  arbReturn:
                    type: number
                    nullable: true
                  series:
                    type: object
                    required:
                      - externalIdentifier
                    properties:
                      externalIdentifier:
                        type: string
                    nullable: true
                  recurrence:
                    type: string
                    nullable: true
                  aggKey:
                    description: >-
                      Deterministic canonical key computed from this venue's own
                      data; null when not canonicalizable. This is a fetch
                      filter, not a cross-venue join key — it is guaranteed
                      identical across venues only for sports head-to-head and
                      crypto up/down markets, and two members of the same
                      matched cluster can carry different keys. Use the event id
                      and matchedVenueMarkets for identity.
                    type: string
                    nullable: true
                  structureType:
                    type: string
                    enum:
                      - candidate
                      - sport
                      - axis
                      - dates
                    nullable: true
                  sport:
                    type: string
                    nullable: true
                  settlementDiff:
                    type: object
                    required:
                      - sharedSummary
                      - differences
                    properties:
                      sharedSummary:
                        type: string
                      differences:
                        type: array
                        items:
                          type: object
                          required:
                            - type
                            - title
                            - perVenue
                          properties:
                            type:
                              type: string
                            title:
                              type: string
                            perVenue:
                              type: object
                              additionalProperties:
                                type: string
                            summary:
                              type: string
                    nullable: true
                  matchedVenueEvents:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - venue
                        - externalIdentifier
                        - title
                      properties:
                        id:
                          description: >-
                            Sibling event id. Re-resolve from discovery rather
                            than persisting: cluster merges re-point members
                            onto the surviving root, after which this id remains
                            a valid event but is no longer the cluster head.
                          type: string
                        venue:
                          $ref: '#/components/schemas/Venue'
                        externalIdentifier:
                          type: string
                        title:
                          type: string
                        slug:
                          type: string
                          nullable: true
                        status:
                          type: string
                          enum:
                            - open
                            - closed
                            - resolved
                            - unopened
                            - paused
                        series:
                          type: object
                          required:
                            - externalIdentifier
                          properties:
                            externalIdentifier:
                              type: string
                          nullable: true
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      security:
        - appId: []
components:
  schemas:
    Venue:
      type: string
      enum:
        - kalshi
        - polymarket
        - limitless
        - opinion
        - predict
        - pred
        - tiprun
        - probable
        - myriad
        - hyperliquid
        - novig
        - prophetx
        - betdex
    ErrorMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
  securitySchemes:
    appId:
      type: apiKey
      in: header
      name: x-app-id
      description: Your application ID. Required for all app-tier and user-tier routes.

````