---
title: "Submit forecasts for questions"
method: POST
path: "/api/questions/forecast/"
tags: ["Questions & Forecasts"]
---

# Submit forecasts for questions

`POST /api/questions/forecast/`

This endpoint supports multiple simultaneous predictions, so the base object is a list of forecasts. Pass one forecast object for single questions and multiple forecast objects for group of questions or conditional forecasts.

## Request body

- Forecast[]
  - union
    - object
      - `question` integer, required
      - `probability_yes` number, float, required — Probability for a binary outcome
      - `end_time` string, date-time — The timestamp when the forecast is automatically withdrawn
    - object
      - `question` integer, required — ID of the numeric question (not post)
      - `continuous_cdf` number[], required — The CDF is 201 values long, representing the height of the CDF at 201 evenly spaced points across the question's range, taking into account the question's scaling. See notes in this section for suggestions on generating a cdf.<br><br> If a question has a closed lower bound (`question["open_lower_bound"] == False`), the first value of the CDF must be 0.0. Otherwise it must be at least 0.001 - meaning at least 0.1% of the probability mass must be assigned below the lower bound.<br><br> If a question has a closed upper bound (`question["open_upper_bound"] == False`), the last value of the CDF must be 1.0, otherwise no more than 0.999 - meaning at least 0.1% of the probability mass must be assigned above the upper bound.<br><br> At least 1% of the probability mass must be assigned uniformly within bounds, which means that the CDF must be strictly increasing by at least 0.01/200 = 0.00005 per step. No two adjacent values of the CDF can differ by more than 0.59, which is the largest number obtainable via the sliders.
      - `distribution_input` object — Optional. Slider values used for populating the sliders on the frontend at page load.
        - `type` 'slider' | 'quantile', required
        - `forecast` object[]
          - `center` number, float
          - `left` number, float
          - `right` number, float
          - `weight` number, float
      - `end_time` string, date-time — The timestamp when the forecast is automatically withdrawn
    - object
      - `question` integer, required
      - `probability_yes_per_category` object, required — Probability distribution for multiple categories. Sum of values must equal 1.0.
      - `end_time` string, date-time — The timestamp when the forecast is automatically withdrawn

## Response `201`

Forecasts submitted successfully

## Other responses

- `400` — Invalid request format

---

[API](https://skmtc.dev/metaculus/apis/metaculus-api.md) · [All operations](https://skmtc.dev/metaculus/apis/metaculus-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/metaculus/metaculus-api/revisions/f1b9a08e1da2/schema)
