Metaculus API endpoint
Returns public aggregation forecast history points for one Metaculus question. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.
/metaculus/question/{id}/forecast-historyPath parameters:
id: required Metaculus question or post id, for example 43612.Query parameters:
method: optional aggregation method. Allowed values: recency_weighted, unweighted, single_aggregation. Defaults to recency_weighted.max_points: maximum history points to return. Defaults to 500; maximum 2000. When the upstream history has more points, the most recent points are returned.Notable response behavior:
data.public_page_derived is true.max_points values return invalid-parameter errors before upstream IO.| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| start_ts | 5 | 2026-06-22 to 2026-09-02 |
| end_ts | 5 | 2026-06-30 to 2029-06-22 |
| start_time | 5 | 2026-06-22 to 2026-09-02 |
| end_time | 5 | 2026-06-30 to 2029-06-22 |
| forecaster_count | 5 | 2 to 5, median 4 |
| center | 5 | 0.47 to 0.74, median 0.57 |
| lower | 5 | 0.39 to 0.7, median 0.42 |
| upper | 5 | 0.61 to 0.79, median 0.65 |
| centers | 5 | median 3 entries |
| interval_lower_bounds | 5 | median 3 entries |
| interval_upper_bounds | 5 | median 3 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Metaculus question or post id | 43612 | |
| method | string | No | Aggregation method Allowed values: recency_weighted, unweighted, single_aggregation. | recency_weighted | |
| max_points | integer | No | Maximum history points to return, default 500, max 2000 | 500 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/metaculus/question/43612/forecast-history?method=recency_weighted" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"method": "recency_weighted",
"points_count": 1,
"max_points": 500,
"question": {
"id": 43612,
"title": "Tampa sulphur price in June 2026?",
"public_page_derived": true
},
"points": [
{
"start_ts": 1780333200,
"end_ts": 1780333580.206417,
"start_time": "2026-06-01T17:00:00Z",
"end_time": "2026-06-01T17:06:20Z",
"forecaster_count": 17,
"center": 0.36,
"lower": 0.26,
"upper": 0.61
}
],
"public_page_derived": true
}
}Request schema
No body schema
Response schema
#/definitions/metaculus.forecastHistoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | metaculus.ForecastHistoryResponse | No | ||||
| data.fetched_at | string | No | 2026-06-07T14:00:00Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.max_points | integer | No | 500 | Maximum number of history points requested. When there are more, the most recent are returned. | ||
| data.method | string | No | recency_weighted | Aggregation method used: `recency_weighted`, `unweighted` or `single_aggregation`. | ||
| data.points | array | No | Forecast history points in time order, one item per period. | |||
| data.points[].center | number | No | 0.36 | Central value of the community forecast, as Metaculus reports it. Same as the first value in `centers`. | ||
| data.points[].centers | array | No | All central values of the forecast, as Metaculus reports them. Multiple-choice questions have one per option. | |||
| data.points[].end_time | string | No | 2026-06-01T17:06:20Z | End of the period this point covers, in UTC (RFC 3339). | ||
| data.points[].end_ts | number | No | 1780333580.206417 | End of the period this point covers, in Unix seconds. | ||
| data.points[].forecaster_count | integer | No | 17 | Number of forecasters behind this point. | ||
| data.points[].interval_lower_bounds | array | No | All lower interval bounds of the forecast, in the same order as `centers`. | |||
| data.points[].interval_upper_bounds | array | No | All upper interval bounds of the forecast, in the same order as `centers`. | |||
| data.points[].lower | number | No | 0.26 | Lower bound of the forecast interval, as Metaculus reports it. | ||
| data.points[].start_time | string | No | 2026-06-01T17:00:00Z | Start of the period this point covers, in UTC (RFC 3339). | ||
| data.points[].start_ts | number | No | 1780333200 | Start of the period this point covers, in Unix seconds. | ||
| data.points[].upper | number | No | 0.61 | Upper bound of the forecast interval, as Metaculus reports it. | ||
| data.points_count | integer | No | 25 | Number of history points returned. | ||
| data.public_page_derived | boolean | No | true | Always `true`: the values are those shown publicly on Metaculus, without a login. | ||
| data.question | object | No | Summary of the Metaculus question this response is about. | |||
| data.question.categories | array | No | Categories the question is filed under. | |||
| data.question.categories[].emoji | string | No | 💼 | Emoji shown next to the category or project on Metaculus. | ||
| data.question.categories[].id | integer | No | 3698 | Metaculus id of the category or project. | ||
| data.question.categories[].name | string | No | Economy & Business | Display name, for example `Economy & Business`. | ||
| data.question.categories[].slug | string | No | economy-business | URL slug, for example `economy-business`. | ||
| data.question.categories[].type | string | No | category | Kind of project, for example `category` or `tournament`. | ||
| data.question.comment_count | integer | No | 16 | Number of comments on the question. | ||
| data.question.edited_at | string | No | 2026-06-07T13:14:34Z | Time the question was last edited, in UTC (RFC 3339). | ||
| data.question.forecaster_count | integer | No | 54 | Number of forecasters who have forecast on the question. | ||
| data.question.forecasts_count | integer | No | 149 | Total number of forecasts submitted on the question. | ||
| data.question.id | integer | No | 43612 | Metaculus post id of the question. Use it with the question endpoints. | ||
| data.question.latest_forecast_center | number | No | 0.52 | Central value of the latest community forecast, as Metaculus reports it. | ||
| data.question.latest_forecast_lower | number | No | 0.37 | Lower bound of the latest community forecast interval. | ||
| data.question.latest_forecast_upper | number | No | 0.66 | Upper bound of the latest community forecast interval. | ||
| data.question.open_time | string | No | 2026-06-01T17:00:00Z | Time the question opened for forecasts, in UTC (RFC 3339). | ||
| data.question.projects | array | No | Tournaments and projects the question belongs to. | |||
| data.question.projects[].emoji | string | No | 💼 | Emoji shown next to the category or project on Metaculus. | ||
| data.question.projects[].id | integer | No | 3698 | Metaculus id of the category or project. | ||
| data.question.projects[].name | string | No | Economy & Business | Display name, for example `Economy & Business`. | ||
| data.question.projects[].slug | string | No | economy-business | URL slug, for example `economy-business`. | ||
| data.question.projects[].type | string | No | category | Kind of project, for example `category` or `tournament`. | ||
| data.question.public_page_derived | boolean | No | true | Always `true`: the values are those shown publicly on Metaculus, without a login. | ||
| data.question.published_at | string | No | 2026-05-29T15:33:53Z | Time the question was published, in UTC (RFC 3339). | ||
| data.question.question_id | integer | No | 43609 | Metaculus id of the underlying question, which can differ from the post `id`. | ||
| data.question.question_title | string | No | What will be the World Bank monthly price of liquid sulphur in June 2026? | Full wording of the question. | ||
| data.question.question_type | string | No | numeric | Question type, for example `binary`, `numeric` or `multiple_choice`. | ||
| data.question.resolved | boolean | No | false | Whether the question has been resolved. | ||
| data.question.scheduled_close_time | string | No | 2026-07-15T00:00:00Z | Time the question is scheduled to close to forecasts, in UTC (RFC 3339). | ||
| data.question.scheduled_resolve_time | string | No | 2026-09-07T00:00:00Z | Time the question is scheduled to resolve, in UTC (RFC 3339). | ||
| data.question.slug | string | No | tampa-sulphur-price-in-june-2026 | URL slug of the question. | ||
| data.question.status | string | No | open | Question status on Metaculus, for example `open`. | ||
| data.question.title | string | No | Tampa sulphur price in June 2026? | Question title as shown on Metaculus. | ||
| data.question.unit | string | No | USD/metric ton | Unit of the answer for numeric questions, for example `USD/metric ton`. | ||
| data.question.url | string | No | https://www.metaculus.com/questions/43612/tampa-sulphur-price-in-june-2026/ | Metaculus page URL of the question. | ||
| data.source_url | string | No | https://www.metaculus.com/questions/43612/ | URL the data was read from. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/metaculus/question/43612/forecast-history?method=recency_weighted" \
-H "x-api-key: $CRAWLORA_API_KEY"