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

# GET /api/v1/questions/{id} — Question Detail

> Fetch a canonical question with every linked platform market, full outcome pricing, match confidence scores, and the computed cross-platform index result.

The question detail endpoint returns everything Predexy knows about a single canonical question. The response includes every platform market linked to that question, each market's outcome prices and 24-hour volume, the algorithm that matched it, and the computed index — including the best buy and sell prices, spread in basis points, and per-platform price breakdown.

## Endpoint

```
GET https://api.predexy.com/api/v1/questions/{id}
```

## Authentication

A session JWT is required:

```
Authorization: Bearer <your_jwt>
```

## Path parameters

<ParamField path="id" type="string" required>
  Canonical question UUID. Obtain this from the `id` field returned by `GET /api/v1/discover`.
</ParamField>

## Example request

```bash cURL theme={null}
curl https://api.predexy.com/api/v1/questions/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
  -H "Authorization: Bearer <your_jwt>"
```

## Response

The response wraps a single `QuestionDetail` object in `data`.

### QuestionDetail fields

<ResponseField name="id" type="string" required>
  Canonical question UUID.
</ResponseField>

<ResponseField name="title" type="string" required>
  Canonical question text.
</ResponseField>

<ResponseField name="slug" type="string" required>
  URL-safe identifier.
</ResponseField>

<ResponseField name="category" type="string" required>
  Market category.
</ResponseField>

<ResponseField name="end_time" type="string">
  ISO 8601 expiry timestamp. `null` for perpetual markets.
</ResponseField>

<ResponseField name="markets" type="QuestionMarket[]" required>
  All platform markets linked to this canonical question.

  <Expandable title="QuestionMarket fields">
    <ResponseField name="id" type="string">
      Market UUID in Predexy's database.
    </ResponseField>

    <ResponseField name="title" type="string">
      Platform-specific market title. This may differ from the canonical question title because each platform names markets independently.
    </ResponseField>

    <ResponseField name="slug" type="string">
      Market slug on the originating platform.
    </ResponseField>

    <ResponseField name="status" type="string">
      Market status on the platform (e.g. `open`, `closed`, `resolved`).
    </ResponseField>

    <ResponseField name="platform_market_id" type="string">
      The market's native ID on the platform — use this if you need to call the platform's own API directly.
    </ResponseField>

    <ResponseField name="platform_id" type="string">
      Platform UUID in Predexy's database.
    </ResponseField>

    <ResponseField name="platform_slug" type="string">
      Platform slug, e.g. `polymarket`, `limitless`, `manifold`.
    </ResponseField>

    <ResponseField name="platform_name" type="string">
      Platform display name, e.g. `"Polymarket"`.
    </ResponseField>

    <ResponseField name="volume24h" type="number">
      24-hour trading volume in USD.
    </ResponseField>

    <ResponseField name="liquidity" type="number">
      Current available liquidity in USD.
    </ResponseField>

    <ResponseField name="confidence" type="number">
      Match confidence score from 0 to 1. Values at or above 0.85 are auto-accepted; values between 0.70 and 0.84 go through human review. `null` for manually linked markets.
    </ResponseField>

    <ResponseField name="match_method" type="string">
      Algorithm used to link this market to the canonical question: `semantic` (embedding-based), `manual` (human-curated), or `exact` (string match).
    </ResponseField>

    <ResponseField name="outcomes" type="object[]">
      List of market outcomes with current prices.

      <Expandable title="outcome fields">
        <ResponseField name="label" type="string">
          Outcome label, e.g. `"Yes"` or `"No"`.
        </ResponseField>

        <ResponseField name="outcome_index" type="number">
          Zero-based position index for this outcome.
        </ResponseField>

        <ResponseField name="price" type="number">
          Current probability price from 0 to 1.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="index" type="IndexResult" required>
  Computed cross-platform index for this question.

  <Expandable title="IndexResult fields">
    <ResponseField name="index_price" type="number">
      Volume-weighted consensus probability across all linked platforms.
    </ResponseField>

    <ResponseField name="divergence" type="number">
      Weighted standard deviation of Yes prices.
    </ResponseField>

    <ResponseField name="divergence_category" type="string">
      `low`, `medium`, or `high` based on the divergence value.
    </ResponseField>

    <ResponseField name="platform_count" type="number">
      Number of platforms contributing to the index.
    </ResponseField>

    <ResponseField name="best_buy_price" type="number">
      Cheapest Yes price across all platforms.
    </ResponseField>

    <ResponseField name="best_buy_platform" type="string">
      Slug of the platform with the cheapest price.
    </ResponseField>

    <ResponseField name="best_sell_price" type="number">
      Most expensive Yes price across all platforms.
    </ResponseField>

    <ResponseField name="best_sell_platform" type="string">
      Slug of the platform with the highest price.
    </ResponseField>

    <ResponseField name="spread_bps" type="number">
      Spread between cheapest and most expensive price in basis points.
    </ResponseField>

    <ResponseField name="platform_prices" type="object">
      Map of platform slug to Yes price, e.g. `{"polymarket": 0.62, "limitless": 0.58}`.
    </ResponseField>
  </Expandable>
</ResponseField>

## Sample response

```json theme={null}
{
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "title": "Will BTC reach $100k by 2026?",
    "slug": "will-btc-reach-100k-by-2026",
    "category": "crypto",
    "end_time": "2026-01-01T00:00:00Z",
    "markets": [
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000001",
        "title": "Bitcoin to $100,000 before 2026?",
        "slug": "bitcoin-100k-2026",
        "status": "open",
        "platform_market_id": "0xabc123",
        "platform_id": "e1f2a3b4-0000-0000-0000-000000000010",
        "platform_slug": "polymarket",
        "platform_name": "Polymarket",
        "volume24h": 52000.00,
        "liquidity": 180000.00,
        "confidence": 0.97,
        "match_method": "semantic",
        "outcomes": [
          { "label": "Yes", "outcome_index": 0, "price": 0.62 },
          { "label": "No",  "outcome_index": 1, "price": 0.38 }
        ]
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000002",
        "title": "Will BTC reach $100k by 2026?",
        "slug": "btc-100k-2026",
        "status": "open",
        "platform_market_id": "limit-789",
        "platform_id": "e1f2a3b4-0000-0000-0000-000000000011",
        "platform_slug": "limitless",
        "platform_name": "Limitless",
        "volume24h": 8200.00,
        "liquidity": 21000.00,
        "confidence": 0.91,
        "match_method": "semantic",
        "outcomes": [
          { "label": "Yes", "outcome_index": 0, "price": 0.58 },
          { "label": "No",  "outcome_index": 1, "price": 0.42 }
        ]
      }
    ],
    "index": {
      "index_price": 0.61,
      "divergence": 0.034,
      "divergence_category": "medium",
      "platform_count": 2,
      "best_buy_price": 0.58,
      "best_buy_platform": "limitless",
      "best_sell_price": 0.62,
      "best_sell_platform": "polymarket",
      "spread_bps": 400,
      "platform_prices": {
        "polymarket": 0.62,
        "limitless": 0.58
      }
    }
  }
}
```

<Tip>
  The `platform_prices` map in the index result is the fastest way to compare prices at a glance. If you need to act on an opportunity, pair the `best_buy_platform` and `best_sell_platform` values with the corresponding `platform_market_id` from the `markets` array to route your order to the right venue.
</Tip>
