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

# List events

> Get a paginated list of prediction market events

## Authentication

Public — no authentication required. Provide `X-Public-Key` to receive personalized data (e.g. watchlist status).

## Query parameters

<ParamField query="page" type="integer" default="1">
  Page number.
</ParamField>

<ParamField query="size" type="integer" default="20">
  Results per page.
</ParamField>

<ParamField query="category" type="string">
  Filter by category (e.g. `sports`, `crypto`, `politics`).
</ParamField>

<ParamField query="subcategory" type="string">
  Filter by subcategory.
</ParamField>

<ParamField query="status" type="string">
  Filter by status: `open`, `paused`, `closed`, `resolved`, `cancelled`. Defaults to `open` (includes `paused`) when omitted.
</ParamField>

<ParamField query="keyword" type="string">
  Search events by title keyword.
</ParamField>

<ParamField query="currency" type="string" default="USD">
  Currency for prices: `USD` or `NGN`.
</ParamField>

<ParamField query="trending" type="boolean">
  Return trending events only.
</ParamField>

<ParamField query="watchlist" type="boolean">
  Return watchlisted events only (requires `X-Public-Key`).
</ParamField>

<ParamField query="seriesSlug" type="string">
  Filter by event series slug (e.g. `crypto-btc-1h`).
</ParamField>

<ParamField query="sportGameSlug" type="string">
  Filter by sports game slug to fetch all related events (H2H, Goal Spread, Total Goals) for a match (e.g. `bm-game-20260524-mci-avl`). Only applies to sports events.
</ParamField>

## Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://relay.bayse.markets/v1/pm/events?category=sports&status=open&currency=USD&page=1&size=10"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({
    category: 'sports',
    status: 'open',
    currency: 'USD',
    page: 1,
    size: 10,
  });
  const response = await fetch(
    `https://relay.bayse.markets/v1/pm/events?${params}`
  );
  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  resp = requests.get(
      'https://relay.bayse.markets/v1/pm/events',
      params={
          'category': 'sports',
          'status': 'open',
          'currency': 'USD',
          'page': 1,
          'size': 10,
      },
  )
  data = resp.json()
  ```

  ```go Go theme={null}
  req, _ := http.NewRequest("GET", "https://relay.bayse.markets/v1/pm/events", nil)
  q := req.URL.Query()
  q.Add("category", "sports")
  q.Add("status", "open")
  q.Add("currency", "USD")
  q.Add("page", "1")
  q.Add("size", "10")
  req.URL.RawQuery = q.Encode()
  resp, _ := http.DefaultClient.Do(req)
  ```
</CodeGroup>

## Response

<ResponseField name="events" type="array">
  List of event objects.

  <Expandable title="event fields">
    <ResponseField name="id" type="string">UUID of the event.</ResponseField>
    <ResponseField name="slug" type="string">Human-readable URL slug for the event.</ResponseField>
    <ResponseField name="title" type="string">The prediction question.</ResponseField>
    <ResponseField name="description" type="string">Additional context.</ResponseField>
    <ResponseField name="category" type="string">Event category.</ResponseField>
    <ResponseField name="type" type="string">`single` or `combined`.</ResponseField>
    <ResponseField name="engine" type="string">`AMM` or `CLOB`.</ResponseField>
    <ResponseField name="status" type="string">Current status: `open`, `paused`, `closed`, `resolved`, or `cancelled`.</ResponseField>
    <ResponseField name="openingDate" type="string">ISO 8601 — when the event opens for trading. Present on time-boxed events (e.g. crypto).</ResponseField>
    <ResponseField name="resolutionDate" type="string">ISO 8601 — when the outcome is determined.</ResponseField>
    <ResponseField name="closingDate" type="string">ISO 8601 — when trading closes.</ResponseField>
    <ResponseField name="imageUrl" type="string">Cover image URL.</ResponseField>
    <ResponseField name="liquidity" type="number">Total liquidity in the event.</ResponseField>
    <ResponseField name="totalVolume" type="number">Total trading volume.</ResponseField>
    <ResponseField name="totalOrders" type="integer">Total number of orders placed.</ResponseField>
    <ResponseField name="supportedCurrencies" type="array">Currencies available for trading.</ResponseField>
    <ResponseField name="userWatchlisted" type="boolean">Whether the authenticated user has watchlisted this event.</ResponseField>
    <ResponseField name="assetSymbolPair" type="string">Trading pair symbol (e.g. `BTCUSDT`). Present on crypto events.</ResponseField>
    <ResponseField name="eventThreshold" type="number">Opening/reference price for the event. Present on crypto events.</ResponseField>
    <ResponseField name="eventThresholdRange" type="string">Threshold range in format `"100-200"`. Present when the event covers a price range.</ResponseField>
    <ResponseField name="eventCloseValue" type="number">Closing price at resolution. Present on resolved crypto events.</ResponseField>
    <ResponseField name="seriesSlug" type="string">Slug of the event series this event belongs to (e.g. `crypto-btc-1h`).</ResponseField>
    <ResponseField name="sportGameId" type="string">ID of the sports game. Present on sports events.</ResponseField>
    <ResponseField name="sportGameSlug" type="string">Slug of the sports game (e.g. `bm-game-20260524-mci-avl`). Use this to fetch all related events for the match.</ResponseField>

    <ResponseField name="sportMarketType" type="string">
      Type of sports market. Present on sports events. One of:
      `TEAM_H2H_3WAY` (match winner),
      `BOTH_TEAMS_TO_SCORE` (both teams score?),
      `FIRST_TEAM_TO_SCORE` (which team scores first?),
      `GOAL_SPREAD` (team wins by X+ goals),
      `TOTAL_GOALS` (total goals by both teams),
      `TOTAL_GOALS_HOME` (home team total goals),
      `TOTAL_GOALS_AWAY` (away team total goals),
      `TOTAL_CORNERS` (total corners, full match),
      `FIRST_HALF_CORNERS` (corners in 1st half),
      `SECOND_HALF_CORNERS` (corners in 2nd half).
    </ResponseField>

    <ResponseField name="markets" type="array">
      Sub-markets within the event.

      <Expandable title="market fields">
        <ResponseField name="id" type="string">UUID of the market.</ResponseField>
        <ResponseField name="title" type="string">Sub-market question.</ResponseField>
        <ResponseField name="status" type="string">Market status.</ResponseField>
        <ResponseField name="outcome1Id" type="string">UUID of outcome 1.</ResponseField>
        <ResponseField name="outcome1Label" type="string">Label for outcome 1 (e.g. `YES`).</ResponseField>
        <ResponseField name="outcome1Price" type="number">Current probability price for outcome 1 (0.00–1.00).</ResponseField>
        <ResponseField name="outcome2Id" type="string">UUID of outcome 2.</ResponseField>
        <ResponseField name="outcome2Label" type="string">Label for outcome 2 (e.g. `NO`).</ResponseField>
        <ResponseField name="outcome2Price" type="number">Current probability price for outcome 2 (0.00–1.00).</ResponseField>
        <ResponseField name="resolvedOutcomeId" type="string">UUID of the resolved outcome. Present when the market is resolved.</ResponseField>
        <ResponseField name="yesBuyPrice" type="number">Effective buy price for outcome 1.</ResponseField>
        <ResponseField name="noBuyPrice" type="number">Effective buy price for outcome 2.</ResponseField>
        <ResponseField name="minimumOrderAmount" type="number">Minimum order amount for that market in the requested `currency`. While most markets have a minimum order amount of 1.00 USD or 100.00 NGN, individual markets can specify their own minimum order amounts. Use this field instead of hardcoding a single value.</ResponseField>
        <ResponseField name="feePercentage" type="number">Trading fee as a percentage.</ResponseField>
        <ResponseField name="totalOrders" type="integer">Number of orders in this market.</ResponseField>
        <ResponseField name="rules" type="string">Resolution criteria.</ResponseField>
        <ResponseField name="marketThreshold" type="number">Opening/reference price for the market. Present on crypto markets.</ResponseField>
        <ResponseField name="marketThresholdRange" type="string">Threshold range in format `"100-200"`. Present when the market covers a price range.</ResponseField>
        <ResponseField name="marketCloseValue" type="number">Closing price at resolution. Present on resolved crypto markets.</ResponseField>
        <ResponseField name="propLine" type="number">The threshold value (e.g. 1.5 goals, 9.5 corners). Present on goal and corner prop markets.</ResponseField>
        <ResponseField name="propDirection" type="string">Directional label: `OVER` for prop markets. Present on goal and corner prop markets.</ResponseField>

        <ResponseField name="propTeam" type="object">
          Team details for team-specific markets. Present on Goal Spread, Total Goals Home/Away, and H2H home/away markets; `null` for match-level markets (Total Goals, corners, Both Teams to Score, H2H Draw, First Team to Score "Neither").

          <Expandable title="propTeam fields">
            <ResponseField name="id" type="string">Team UUID.</ResponseField>
            <ResponseField name="name" type="string">Full team name (e.g. `Manchester City FC`).</ResponseField>
            <ResponseField name="slug" type="string">URL-safe team slug (e.g. `manchester-city-fc`).</ResponseField>
            <ResponseField name="league" type="string">League name (e.g. `England - Premier League`).</ResponseField>
            <ResponseField name="sport" type="string">Sport type (e.g. `SOCCER`).</ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="liquidityReward" type="object">
          Liquidity reward program info. Present when the market has an active reward program.

          <Expandable title="liquidityReward fields">
            <ResponseField name="rewardPool" type="number">Total USD reward pool for the current epoch.</ResponseField>
            <ResponseField name="maxSpreadCents" type="integer">Maximum bid-ask spread in cents to qualify for rewards.</ResponseField>
            <ResponseField name="minNotionalOrderSize" type="number">Minimum order size in USD to qualify for rewards.</ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  <Expandable title="pagination fields">
    <ResponseField name="page" type="integer">Current page.</ResponseField>
    <ResponseField name="size" type="integer">Results per page.</ResponseField>
    <ResponseField name="lastPage" type="integer">Last available page.</ResponseField>
    <ResponseField name="totalCount" type="integer">Total matching events.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "events": [
      {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "slug": "super-eagles-afcon-2026",
        "title": "Will Super Eagles qualify for AFCON 2026?",
        "description": "Nigeria national football team qualification.",
        "category": "sports",
        "type": "single",
        "engine": "AMM",
        "status": "open",
        "resolutionDate": "2025-11-20T00:00:00Z",
        "closingDate": "2025-11-19T18:00:00Z",
        "imageUrl": "https://cdn.bayse.markets/events/afcon2026.jpg",
        "liquidity": 50000,
        "totalVolume": 120000,
        "totalOrders": 843,
        "supportedCurrencies": ["USD", "NGN"],
        "userWatchlisted": false,
        "markets": [
          {
            "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
            "title": "Will Super Eagles qualify?",
            "status": "open",
            "outcome1Id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
            "outcome1Label": "YES",
            "outcome1Price": 0.72,
            "outcome2Id": "d4e5f6a7-b8c9-0123-defa-234567890123",
            "outcome2Label": "NO",
            "outcome2Price": 0.28,
            "yesBuyPrice": 0.72,
            "minimumOrderAmount": 1,
            "noBuyPrice": 0.28,
            "feePercentage": 2.0,
            "totalOrders": 843,
            "rules": "Resolves YES if Nigeria qualifies for AFCON 2026."
          }
        ]
      },
      {
        "id": "e5f6a7b8-c9d0-1234-efab-cd567890abcd",
        "slug": "mci-vs-avl-2026-05-24",
        "title": "Manchester City vs Aston Villa",
        "description": "Premier League match",
        "category": "sports",
        "type": "combined",
        "engine": "CLOB",
        "status": "open",
        "sportMarketType": "TEAM_H2H_3WAY",
        "sportGameId": "game-12345",
        "sportGameSlug": "bm-game-20260524-mci-avl",
        "resolutionDate": "2026-05-24T20:00:00Z",
        "closingDate": "2026-05-24T15:00:00Z",
        "imageUrl": "https://cdn.bayse.markets/events/mci-avl.jpg",
        "liquidity": 75000,
        "totalVolume": 250000,
        "totalOrders": 1250,
        "supportedCurrencies": ["USD"],
        "userWatchlisted": true,
        "markets": [
          {
            "id": "f6a7b8c9-d0e1-2345-fabc-678901234567",
            "title": "Manchester City to Win",
            "status": "open",
            "outcome1Id": "01234567-89ab-cdef-0123-456789abcdef",
            "outcome1Label": "YES",
            "outcome1Price": 0.63,
            "outcome2Id": "fedcba98-7654-3210-fedc-ba9876543210",
            "outcome2Label": "NO",
            "outcome2Price": 0.37,
            "propTeam": {
              "id": "team-uuid-1",
              "name": "Manchester City FC",
              "slug": "manchester-city-fc",
              "league": "England - Premier League",
              "sport": "SOCCER"
            },
            "yesBuyPrice": 0.63,
            "noBuyPrice": 0.37,
            "feePercentage": 0.5,
            "totalOrders": 420,
            "rules": "Resolves YES if Manchester City wins the match."
          },
          {
            "id": "a7b8c9d0-e1f2-3456-abcd-789012345678",
            "title": "Aston Villa to Win",
            "status": "open",
            "outcome1Id": "12345678-9abc-def0-1234-56789abcdef0",
            "outcome1Label": "YES",
            "outcome1Price": 0.63,
            "outcome2Id": "0fedcba9-8765-4321-0fed-cba987654321",
            "outcome2Label": "NO",
            "outcome2Price": 0.37,
            "propTeam": {
              "id": "team-uuid-2",
              "name": "Aston Villa FC",
              "slug": "aston-villa-fc",
              "league": "England - Premier League",
              "sport": "SOCCER"
            },
            "yesBuyPrice": 0.63,
            "noBuyPrice": 0.37,
            "feePercentage": 0.5,
            "totalOrders": 420,
            "rules": "Resolves YES if Aston Villa wins the match."
         },
         {
           "id": "b8c9d0e1-f234-5678-bcde-890123456789",
           "title": "Draw",
           "status": "open",
           "outcome1Id": "23456789-abcd-ef01-2345-6789abcdef01",
           "outcome1Label": "YES",
           "outcome1Price": 0.63,
           "outcome2Id": "1fedcba9-8765-4321-1fed-cba987654321",
           "outcome2Label": "NO",
           "outcome2Price": 0.37,
           "propTeam": null,
           "yesBuyPrice": 0.63,
           "noBuyPrice": 0.37,
           "feePercentage": 0.5,
           "totalOrders": 420,
           "rules": "Resolves YES if match ends in a draw."
         },
        ]
      }
    ],
    "pagination": {
      "page": 1,
      "size": 10,
      "lastPage": 3,
      "totalCount": 28
    }
  }
  ```
</ResponseExample>
