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

# Questions

> Retrieve and manage question data

## Overview

The Questions endpoints allow you to retrieve detailed information about individual questions, resolve/unresolve questions, and access question metadata. Questions are the core forecasting units on Metaculus.

<Note>
  Questions are typically accessed through Posts. Use the `/api/posts/` endpoint to retrieve questions with their surrounding context.
</Note>

***

## Get Question Details

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://www.metaculus.com/api/questions/3530/" \
    -H "Authorization: Token YOUR_TOKEN"
  ```

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

  response = requests.get(
      "https://www.metaculus.com/api/questions/3530/",
      headers={"Authorization": "Token YOUR_TOKEN"}
  )
  print(response.json())
  ```
</CodeGroup>

`GET /api/questions/{questionId}/`

Retrieve detailed information about a specific question by its ID.

### Path Parameters

<ParamField path="questionId" type="integer" required>
  The unique identifier of the question
</ParamField>

### Query Parameters

<ParamField query="with_cp" type="boolean" default="false">
  Include community predictions (aggregations) in the response
</ParamField>

<ParamField query="minimize" type="boolean" default="true">
  Minimize the aggregation data by reducing the number of historical data points
</ParamField>

### Response Fields

<ResponseField name="id" type="integer">
  Unique identifier for the question
</ResponseField>

<ResponseField name="title" type="string">
  The question title
</ResponseField>

<ResponseField name="description" type="string">
  Full description of the question in markdown format
</ResponseField>

<ResponseField name="type" type="string">
  Question type. One of: `binary`, `multiple_choice`, `numeric`, `discrete`, `date`
</ResponseField>

<ResponseField name="status" type="string">
  Current question status: `upcoming`, `open`, `closed`, or `resolved`
</ResponseField>

<ResponseField name="created_at" type="string (datetime)">
  ISO 8601 timestamp when the question was created
</ResponseField>

<ResponseField name="open_time" type="string (datetime)">
  When the question opened for forecasting
</ResponseField>

<ResponseField name="scheduled_close_time" type="string (datetime)">
  When the question is scheduled to close
</ResponseField>

<ResponseField name="actual_close_time" type="string (datetime)">
  When the question actually closed (may differ from scheduled)
</ResponseField>

<ResponseField name="scheduled_resolve_time" type="string (datetime)">
  When the question is scheduled to resolve
</ResponseField>

<ResponseField name="actual_resolve_time" type="string (datetime)">
  When the question actually resolved
</ResponseField>

<ResponseField name="resolution" type="string">
  The resolved value. Format depends on question type:

  * Binary: `"yes"` or `"no"`
  * Multiple choice: The selected option string
  * Numeric/Date/Discrete: A numeric value as string
  * Unsuccessful: `"annulled"` or `"ambiguous"`
</ResponseField>

<ResponseField name="resolution_criteria" type="string">
  Criteria used to resolve the question
</ResponseField>

<ResponseField name="fine_print" type="string">
  Additional clarifications and edge cases
</ResponseField>

<ResponseField name="post_id" type="integer">
  ID of the post containing this question
</ResponseField>

### Type-Specific Fields

#### Binary Questions

<ResponseField name="possibilities" type="object">
  Contains `type: "binary"`
</ResponseField>

#### Multiple Choice Questions

<ResponseField name="options" type="array">
  Current list of answer options
</ResponseField>

<ResponseField name="all_options_ever" type="array">
  All options that have ever existed for this question
</ResponseField>

<ResponseField name="options_history" type="array">
  Array of `[timestamp, options_array]` pairs showing when options changed
</ResponseField>

#### Continuous Questions (Numeric, Date, Discrete)

<ResponseField name="scaling" type="object">
  Scaling information for the question

  <ResponseField name="range_min" type="number">
    Lower boundary of the input range
  </ResponseField>

  <ResponseField name="range_max" type="number">
    Upper boundary of the input range
  </ResponseField>

  <ResponseField name="zero_point" type="number">
    Only present for logarithmically scaled questions
  </ResponseField>

  <ResponseField name="open_upper_bound" type="boolean">
    Whether the upper bound is open
  </ResponseField>

  <ResponseField name="open_lower_bound" type="boolean">
    Whether the lower bound is open
  </ResponseField>

  <ResponseField name="inbound_outcome_count" type="integer">
    Number of possible outcomes within the range (default: 200)
  </ResponseField>

  <ResponseField name="continuous_range" type="array">
    List of real-value locations where the CDF is evaluated (201 values)
  </ResponseField>
</ResponseField>

<ResponseField name="unit" type="string">
  The unit of measurement (e.g., "\$", "people", "degrees C")
</ResponseField>

<ResponseField name="open_upper_bound" type="boolean">
  Whether probability mass can extend beyond the upper bound
</ResponseField>

<ResponseField name="open_lower_bound" type="boolean">
  Whether probability mass can extend below the lower bound
</ResponseField>

### Community Predictions (with\_cp=true)

<ResponseField name="aggregations" type="object">
  Contains community prediction aggregations using different methods

  <ResponseField name="recency_weighted" type="object">
    Time-weighted average of user predictions

    <ResponseField name="latest" type="object">
      Most recent aggregation snapshot

      <ResponseField name="start_time" type="number">
        Unix timestamp when this aggregation started
      </ResponseField>

      <ResponseField name="forecast_values" type="array">
        For continuous questions: 201-value CDF array. For binary: single probability.
      </ResponseField>

      <ResponseField name="forecaster_count" type="integer">
        Number of forecasters included in this aggregation
      </ResponseField>

      <ResponseField name="interval_lower_bounds" type="array">
        Lower bounds of prediction intervals (for continuous questions)
      </ResponseField>

      <ResponseField name="centers" type="array">
        Center points of prediction intervals
      </ResponseField>

      <ResponseField name="interval_upper_bounds" type="array">
        Upper bounds of prediction intervals
      </ResponseField>
    </ResponseField>

    <ResponseField name="history" type="array">
      Array of historical aggregation snapshots (same structure as latest)
    </ResponseField>

    <ResponseField name="score_data" type="object">
      Scoring metrics for this aggregation method
    </ResponseField>
  </ResponseField>

  <ResponseField name="unweighted" type="object">
    Simple average of user predictions (same structure as recency\_weighted)
  </ResponseField>

  <ResponseField name="metaculus_prediction" type="object">
    Metaculus's proprietary prediction algorithm (same structure as recency\_weighted)
  </ResponseField>
</ResponseField>

***

## Resolve Question

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://www.metaculus.com/api/questions/3530/resolve/" \
    -H "Authorization: Token YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "resolution": "yes",
      "actual_resolve_time": "2024-01-15T10:00:00Z"
    }'
  ```

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

  response = requests.post(
      "https://www.metaculus.com/api/questions/3530/resolve/",
      headers={
          "Authorization": "Token YOUR_TOKEN",
          "Content-Type": "application/json"
      },
      json={
          "resolution": "yes",
          "actual_resolve_time": "2024-01-15T10:00:00Z"
      }
  )
  print(response.json())
  ```
</CodeGroup>

`POST /api/questions/{questionId}/resolve/`

Resolve a question with a final outcome. Requires curator or admin permissions.

### Path Parameters

<ParamField path="questionId" type="integer" required>
  The unique identifier of the question to resolve
</ParamField>

### Request Body

<ParamField body="resolution" type="string" required>
  The resolution value:

  * Binary: `"yes"` or `"no"`
  * Multiple choice: One of the option strings
  * Numeric/Date/Discrete: A numeric value as string
  * Unsuccessful: `"annulled"` or `"ambiguous"`
</ParamField>

<ParamField body="actual_resolve_time" type="string (datetime)" required>
  ISO 8601 timestamp when the resolution became known
</ParamField>

### Response

<ResponseField name="post_id" type="integer">
  The ID of the post containing the resolved question
</ResponseField>

<Note>
  Only users with `curator` or `admin` permissions can resolve questions.
</Note>

***

## Unresolve Question

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://www.metaculus.com/api/questions/3530/unresolve/" \
    -H "Authorization: Token YOUR_TOKEN"
  ```

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

  response = requests.post(
      "https://www.metaculus.com/api/questions/3530/unresolve/",
      headers={"Authorization": "Token YOUR_TOKEN"}
  )
  print(response.json())
  ```
</CodeGroup>

`POST /api/questions/{questionId}/unresolve/`

Remove the resolution from a question, reopening it for forecasting or re-resolution.

### Path Parameters

<ParamField path="questionId" type="integer" required>
  The unique identifier of the question to unresolve
</ParamField>

### Response

<ResponseField name="post_id" type="integer">
  The ID of the post containing the unresolved question
</ResponseField>

<Note>
  Only users with `curator` or `admin` permissions can unresolve questions.
</Note>


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