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

# Get one event with its markets

> One event with its markets; 404 for an unknown id, 503 when event data is unavailable.



## OpenAPI

````yaml /openapi.json get /public/v1/events/{universal_id}
openapi: 3.1.0
info:
  description: >-
    Read-only prediction-market data across Polymarket, Kalshi, Limitless and
    predict.fun over REST. Every request sends your key as `Authorization:
    Bearer tl_live_…`; try any endpoint from its page.
  title: TrendlineLabs Public API
  version: '1'
servers:
  - description: Production
    url: https://systems.trendlinelabs.ai
security: []
tags:
  - description: 'Read back the key you are calling with: its scopes, tier and rate limit.'
    name: Your key
  - description: Events group markets across venues; each carries a `universal_id`.
    name: Events
  - description: One market's order book, price history and trades on one venue.
    name: Markets
  - description: Current prices for a set of markets in one call.
    name: Prices
  - description: Live cross-venue price gaps on the same market.
    name: Opportunities
paths:
  /public/v1/events/{universal_id}:
    get:
      tags:
        - Events
      summary: Get one event with its markets
      description: >-
        One event with its markets; 404 for an unknown id, 503 when event data
        is unavailable.
      operationId: getEvent
      parameters:
        - description: the event universal id, from /public/v1/events or search
          in: path
          name: universal_id
          required: true
          schema:
            description: the event universal id, from /public/v1/events or search
            title: Universal Id
            type: string
      responses:
        '200':
          content:
            application/json:
              example:
                categories:
                  - crypto
                  - bitcoin
                category_group: crypto
                first_seen_at: '2026-09-01T12:00:00.000Z'
                image_url: null
                is_live: false
                kalshi_event_ticker: KXBTC-26DEC31
                last_seen_at: '2026-10-06T05:59:30.000Z'
                limitless_event_id: null
                liquidity_usd: 412000
                markets:
                  - deadline_at: '2026-12-31T23:59:59.000Z'
                    kalshi_market_ticker: KXBTC-26DEC31-B100000
                    limitless_market_id: null
                    poly_market_slug: bitcoin-above-100k-on-december-31
                    predictfun_market_id: null
                    price_24h_change_by_platform:
                      kalshi: 0.02
                      polymarket: 0.01
                    source_lanes:
                      - kalshi
                      - polymarket
                    status: active
                    title: Bitcoin above $100k on December 31?
                    universal_id: mk-btc-100k-2026
                    venue_details:
                      kalshi:
                        close_time: '2026-12-31T23:59:59Z'
                        liquidity_raw: 152000
                        open_time: '2026-09-01T12:00:00Z'
                        rules_primary: >-
                          Resolves YES if the reference price is above $100,000
                          at the close.
                        rules_secondary: null
                        url: https://kalshi.com/markets/kxbtc
                        volume_24h: 20211
                        yes_sub_title: Above $100,000
                      limitless: null
                      polymarket:
                        best_bid: 0.44
                        description: >-
                          Resolves YES if Bitcoin trades above $100,000 on
                          December 31.
                        end_date: '2026-12-31T23:59:59Z'
                        liquidity: 260000
                        resolution_source: https://example.com/btc-index
                        start_date: '2026-09-01T12:00:00Z'
                        url: >-
                          https://polymarket.com/event/bitcoin-above-100k-on-december-31
                        volume_24h: 30000
                      predictfun: null
                    volume_24h_by_platform:
                      kalshi: 20211
                      polymarket: 30000
                    volume_24h_usd: 50211
                    volume_by_platform:
                      kalshi: 734201.5
                      polymarket: 1100000
                    volume_usd: 1834201.5
                    yes_subject: Bitcoin above $100k
                platform_count: 2
                poly_event_slug: bitcoin-above-100k-on-december-31
                predictfun_event_id: null
                resolution_date: '2026-12-31T23:59:59.000Z'
                source_lanes:
                  - kalshi
                  - polymarket
                status: active
                title: Bitcoin price at year end
                total_volume_usd: 1834201.5
                universal_id: ev-btc-100k-2026
              schema:
                $ref: '#/components/schemas/PublicEvent'
          description: Successful Response
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: 'unauthorized: no key, or a key that is unknown, revoked or expired.'
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            WWW-Authenticate:
              description: Bearer realm="public-api"
              schema:
                type: string
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: >-
            insufficient_scope: the key lacks the scope this route needs;
            ip_not_allowed: the request came from an address outside the key's
            allowlist; tier_required: the key owner's plan does not include API
            access; access_not_granted: API access is free but granted on
            request; request it on https://trendlinelabs.ai/developer.
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: 'not_found: no such event, market or key.'
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: >-
            invalid_request: a parameter is missing, unknown, malformed or out
            of bounds, or a cursor does not match.
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: >-
            rate_limited: too many requests, or too many failed authentications;
            wait Retry-After seconds.
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            Retry-After:
              description: seconds to wait before retrying
              schema:
                type: integer
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: >-
            internal_error: an unexpected failure on our side; quote the request
            id. The body may instead be text/plain with no envelope and no
            X-RateLimit-* headers when a failure escapes the route's own
            handling.
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          description: >-
            dependency_unavailable: one of our own stores could not be read;
            retry later; upstream_unavailable: the data source is unreadable,
            absent or older than its bound; never an empty 200.
          headers:
            Cache-Control:
              description: no-store on every answer
              schema:
                type: string
            X-RateLimit-Limit:
              description: >-
                requests allowed per window for this key; present once the key
                passed the limiter
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: >-
                requests left in this window; present once the key passed the
                limiter
              schema:
                type: integer
            X-RateLimit-Reset:
              description: >-
                seconds until the window resets; present once the key passed the
                limiter
              schema:
                type: integer
            X-Request-Id:
              description: >-
                this request's id (yours, when you sent X-Request-Id); equals
                the envelope's request_id
              schema:
                type: string
      security:
        - HTTPBearer: []
      x-codeSamples:
        - label: cURL
          lang: bash
          source: >
            #!/bin/sh

            # getEvent: Get one event with its markets. Needs TRENDLINE_API_KEY;
            TRENDLINE_API_BASE overrides the base.

            curl -sS
            "${TRENDLINE_API_BASE:-https://systems.trendlinelabs.ai}/public/v1/events/ev-btc-100k-2026"
            \
              -H "Authorization: Bearer $TRENDLINE_API_KEY"
        - label: Python
          lang: python
          source: >
            """getEvent: Get one event with its markets. Needs
            TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base."""

            import os


            import requests


            BASE = os.environ.get("TRENDLINE_API_BASE",
            "https://systems.trendlinelabs.ai")

            KEY = os.environ["TRENDLINE_API_KEY"]


            r = requests.get(f"{BASE}/public/v1/events/ev-btc-100k-2026",
            params={},
                             headers={"Authorization": f"Bearer {KEY}"}, timeout=10)
            r.raise_for_status()

            print(r.json())
        - label: JavaScript
          lang: javascript
          source: >
            // getEvent: Get one event with its markets. Needs
            TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base.

            const BASE = process.env.TRENDLINE_API_BASE ??
            "https://systems.trendlinelabs.ai";

            const KEY = process.env.TRENDLINE_API_KEY;

            const r = await fetch(`${BASE}/public/v1/events/ev-btc-100k-2026`, {
            headers: { Authorization: `Bearer ${KEY}` } });

            console.log(r.status, await r.json());
components:
  schemas:
    PublicEvent:
      properties:
        categories:
          default: []
          description: the event's categories
          items:
            type: string
          title: Categories
          type: array
        category_group:
          anyOf:
            - type: string
            - type: 'null'
          description: the broad category group
          title: Category Group
        first_seen_at:
          anyOf:
            - type: string
            - type: 'null'
          description: when the event was first seen, ISO 8601
          title: First Seen At
        image_url:
          anyOf:
            - type: string
            - type: 'null'
          description: an image for the event, when a venue publishes one
          title: Image Url
        is_live:
          description: true while the event is in progress
          title: Is Live
          type: boolean
        kalshi_event_ticker:
          anyOf:
            - type: string
            - type: 'null'
          description: the Kalshi event ticker, when Kalshi lists the event
          title: Kalshi Event Ticker
        last_seen_at:
          anyOf:
            - type: string
            - type: 'null'
          description: when the event was last seen on a venue, ISO 8601
          title: Last Seen At
        limitless_event_id:
          anyOf:
            - type: string
            - type: 'null'
          description: the Limitless event id, when Limitless lists the event
          title: Limitless Event Id
        liquidity_usd:
          anyOf:
            - type: number
            - type: 'null'
          description: liquidity in USD across the event's markets, on every venue we track
          title: Liquidity Usd
        markets:
          default: []
          description: the active markets, then up to 6 recently resolved ones
          items:
            $ref: '#/components/schemas/PublicEventMarket'
          title: Markets
          type: array
        platform_count:
          description: how many venues list the event
          title: Platform Count
          type: integer
        poly_event_slug:
          anyOf:
            - type: string
            - type: 'null'
          description: the Polymarket event slug, when Polymarket lists the event
          title: Poly Event Slug
        predictfun_event_id:
          anyOf:
            - type: string
            - type: 'null'
          description: the predict.fun event id, when predict.fun lists the event
          title: Predictfun Event Id
        resolution_date:
          anyOf:
            - type: string
            - type: 'null'
          description: when the event resolves, ISO 8601
          title: Resolution Date
        source_lanes:
          default: []
          description: the venues this event was matched from
          items:
            type: string
          title: Source Lanes
          type: array
        status:
          anyOf:
            - type: string
            - type: 'null'
          description: the event's status
          title: Status
        title:
          anyOf:
            - type: string
            - type: 'null'
          description: the event title
          title: Title
        total_volume_usd:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            total traded volume in USD across the event's markets, on every
            venue we track
          title: Total Volume Usd
        universal_id:
          description: the event universal id
          title: Universal Id
          type: string
      required:
        - universal_id
        - is_live
        - platform_count
      title: PublicEvent
      type: object
    PublicError:
      properties:
        error:
          $ref: '#/components/schemas/PublicErrorBody'
          description: the refusal
      required:
        - error
      title: PublicError
      type: object
    PublicEventMarket:
      properties:
        deadline_at:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market resolves or closes, ISO 8601
          title: Deadline At
        kalshi_market_ticker:
          anyOf:
            - type: string
            - type: 'null'
          description: the Kalshi ticker, when Kalshi lists the market
          title: Kalshi Market Ticker
        limitless_market_id:
          anyOf:
            - type: string
            - type: 'null'
          description: the Limitless id, when Limitless lists the market
          title: Limitless Market Id
        poly_market_slug:
          anyOf:
            - type: string
            - type: 'null'
          description: the Polymarket slug, when Polymarket lists the market
          title: Poly Market Slug
        predictfun_market_id:
          anyOf:
            - type: string
            - type: 'null'
          description: the predict.fun id, when predict.fun lists the market
          title: Predictfun Market Id
        price_24h_change_by_platform:
          additionalProperties:
            type: number
          default: {}
          description: >-
            24-hour price change, by venue, as each feed publishes it (unit not
            yet confirmed)
          title: Price 24H Change By Platform
          type: object
        source_lanes:
          default: []
          description: the venues this market was matched from
          items:
            type: string
          title: Source Lanes
          type: array
        status:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            active for a trading market; resolved markets are listed after the
            active ones
          title: Status
        title:
          anyOf:
            - type: string
            - type: 'null'
          description: the market title
          title: Title
        universal_id:
          anyOf:
            - type: string
            - type: 'null'
          description: 'the market universal id: the id every per-market route takes'
          title: Universal Id
        venue_details:
          $ref: '#/components/schemas/PublicVenueDetails'
          default: {}
          description: each listing venue's own fields
        volume_24h_by_platform:
          additionalProperties:
            type: number
          default: {}
          description: 24-hour traded volume in USD, by venue
          title: Volume 24H By Platform
          type: object
        volume_24h_usd:
          anyOf:
            - type: number
            - type: 'null'
          description: 24-hour traded volume in USD across the listed venues
          title: Volume 24H Usd
        volume_by_platform:
          additionalProperties:
            type: number
          default: {}
          description: total traded volume in USD, by venue
          title: Volume By Platform
          type: object
        volume_usd:
          anyOf:
            - type: number
            - type: 'null'
          description: total traded volume in USD across the listed venues
          title: Volume Usd
        yes_subject:
          anyOf:
            - type: string
            - type: 'null'
          description: what a YES outcome refers to, when the venues name it
          title: Yes Subject
      title: PublicEventMarket
      type: object
    PublicErrorBody:
      properties:
        code:
          description: >-
            a machine-readable code from x-known-codes; a new code may be added,
            so handle an unknown one by its status
          title: Code
          type: string
          x-known-codes:
            - access_not_granted
            - dependency_unavailable
            - insufficient_scope
            - internal_error
            - invalid_request
            - ip_not_allowed
            - market_closed
            - not_found
            - rate_limited
            - tier_required
            - unauthorized
            - upstream_unavailable
            - venue_not_listed
            - venue_unsupported
        message:
          description: a human-readable explanation; never parse it
          title: Message
          type: string
        request_id:
          description: >-
            this request's id, also sent as the X-Request-Id header; quote it
            when asking for help
          title: Request Id
          type: string
      required:
        - code
        - message
        - request_id
      title: PublicErrorBody
      type: object
    PublicVenueDetails:
      properties:
        kalshi:
          anyOf:
            - $ref: '#/components/schemas/PublicKalshiDetails'
            - type: 'null'
          description: Kalshi's own fields, when Kalshi lists the market
        limitless:
          anyOf:
            - $ref: '#/components/schemas/PublicLimitlessDetails'
            - type: 'null'
          description: Limitless's own fields, when Limitless lists the market
        polymarket:
          anyOf:
            - $ref: '#/components/schemas/PublicPolymarketDetails'
            - type: 'null'
          description: Polymarket's own fields, when Polymarket lists the market
        predictfun:
          anyOf:
            - $ref: '#/components/schemas/PublicPredictfunDetails'
            - type: 'null'
          description: predict.fun's own fields, when predict.fun lists the market
      title: PublicVenueDetails
      type: object
    PublicKalshiDetails:
      properties:
        close_time:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market closes, ISO 8601
          title: Close Time
        liquidity_raw:
          anyOf:
            - type: number
            - type: 'null'
          description: liquidity as Kalshi reports it
          title: Liquidity Raw
        open_time:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market opened, ISO 8601
          title: Open Time
        rules_primary:
          anyOf:
            - type: string
            - type: 'null'
          description: Kalshi's primary resolution rules
          title: Rules Primary
        rules_secondary:
          anyOf:
            - type: string
            - type: 'null'
          description: Kalshi's secondary resolution rules
          title: Rules Secondary
        url:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's page on kalshi.com
          title: Url
        volume_24h:
          anyOf:
            - type: number
            - type: 'null'
          description: 24-hour volume as Kalshi reports it
          title: Volume 24H
        yes_sub_title:
          anyOf:
            - type: string
            - type: 'null'
          description: Kalshi's label for the YES side
          title: Yes Sub Title
      title: PublicKalshiDetails
      type: object
    PublicLimitlessDetails:
      properties:
        description:
          anyOf:
            - type: string
            - type: 'null'
          description: Limitless's market description
          title: Description
        end_date:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market ends, ISO 8601
          title: End Date
        liquidity:
          anyOf:
            - type: number
            - type: 'null'
          description: liquidity in USD
          title: Liquidity
        status:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's status as Limitless reports it
          title: Status
        url:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's page on limitless.exchange
          title: Url
      title: PublicLimitlessDetails
      type: object
    PublicPolymarketDetails:
      properties:
        best_bid:
          anyOf:
            - type: number
            - type: 'null'
          description: Polymarket's best YES bid, 0..1
          title: Best Bid
        description:
          anyOf:
            - type: string
            - type: 'null'
          description: Polymarket's market description and resolution text
          title: Description
        end_date:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market ends, ISO 8601
          title: End Date
        liquidity:
          anyOf:
            - type: number
            - type: 'null'
          description: liquidity in USD as Polymarket reports it
          title: Liquidity
        resolution_source:
          anyOf:
            - type: string
            - type: 'null'
          description: the source Polymarket names for resolution
          title: Resolution Source
        start_date:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market started, ISO 8601
          title: Start Date
        url:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's page on polymarket.com
          title: Url
        volume_24h:
          anyOf:
            - type: number
            - type: 'null'
          description: 24-hour volume in USD as Polymarket reports it
          title: Volume 24H
      title: PublicPolymarketDetails
      type: object
    PublicPredictfunDetails:
      properties:
        description:
          anyOf:
            - type: string
            - type: 'null'
          description: predict.fun's market description
          title: Description
        end_date:
          anyOf:
            - type: string
            - type: 'null'
          description: when the market ends, ISO 8601
          title: End Date
        no_ask:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            predict.fun's best NO ask as the feed publishes it (unit not yet
            confirmed)
          title: No Ask
        no_bid:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            predict.fun's best NO bid as the feed publishes it (unit not yet
            confirmed)
          title: No Bid
        status:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's status as predict.fun reports it
          title: Status
        url:
          anyOf:
            - type: string
            - type: 'null'
          description: the market's page on predict.fun
          title: Url
        yes_bid:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            predict.fun's best YES bid as the feed publishes it (unit not yet
            confirmed)
          title: Yes Bid
      title: PublicPredictfunDetails
      type: object
  securitySchemes:
    HTTPBearer:
      description: 'Authorization: Bearer tl_live_…'
      scheme: bearer
      type: http

````

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