Skip to main content

Overview

Projects in Metaculus organize questions into curated collections. There are several types:
  • Tournaments - Competitive forecasting events with leaderboards and prizes
  • Categories - Topic-based groupings (e.g., “Health & Pandemics”, “AI”)
  • Topics - High-level thematic areas
  • Communities - User-created private or public question collections
  • Site Main - The main Metaculus community
Projects are used to filter posts and track specialized leaderboards.

List Tournaments

curl -X GET "https://www.metaculus.com/api/projects/tournaments/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/tournaments/ Retrieve a list of all active tournaments.

Response

results
array
Array of tournament objects

Tournament Object

id
integer
Unique tournament identifier
type
string
Always "tournament"
name
string
Tournament name
slug
string
URL-friendly slug used in filters
prize_pool
string
Total prize pool amount
start_date
string (datetime)
When the tournament starts
close_date
string (datetime)
When the tournament ends
is_ongoing
boolean
Whether the tournament is currently active
user_permission
string
Current user’s permission: forecaster or viewer
default_permission
string
Default permission for new users
visibility
string
Visibility level: normal, not_in_main_feed, or unlisted

Get Tournament by Slug

curl -X GET "https://www.metaculus.com/api/projects/tournaments/aibq4/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/tournaments/{slug}/ Retrieve detailed information about a specific tournament.

Path Parameters

slug
string
required
The tournament slug

List Categories

curl -X GET "https://www.metaculus.com/api/projects/categories/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/categories/ Retrieve all available categories.

Response

results
array
Array of category objects

Category Object

id
integer
Unique category identifier
name
string
Category name (e.g., “Health & Pandemics”)
slug
string
URL-friendly slug (e.g., “health-pandemics”)
description
string
Category description

List Topics

curl -X GET "https://www.metaculus.com/api/projects/topics/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/topics/ Retrieve all available topics.

Response

results
array
Array of topic objects

Topic Object

id
integer
Unique topic identifier
name
string
Topic name
slug
string
URL-friendly slug
emoji
string
Emoji icon for the topic
section
string
Section this topic belongs to

List Communities

curl -X GET "https://www.metaculus.com/api/projects/communities/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/communities/ Retrieve all communities visible to the current user.

Response

Returns array of project objects with type: "community".

Get Community by Slug

curl -X GET "https://www.metaculus.com/api/projects/communities/my-community/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/communities/{slug}/ Retrieve detailed information about a specific community.

Path Parameters

slug
string
required
The community slug

Get Project Members

curl -X GET "https://www.metaculus.com/api/projects/144/members/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/{projectId}/members/ Retrieve members of a project (typically used for communities and tournaments).

Path Parameters

projectId
integer
required
The project ID

Response

results
array
Array of member objects
user
object
User information
id
integer
User ID
username
string
Username
permission
string
User’s permission level in this project
role
string
User’s role (e.g., “admin”, “member”)

Subscribe to Project

curl -X POST "https://www.metaculus.com/api/projects/144/subscribe/" \
  -H "Authorization: Token YOUR_TOKEN"
POST /api/projects/{projectId}/subscribe/ Subscribe to notifications from a project.

Path Parameters

projectId
integer
required
The project ID to subscribe to

Unsubscribe from Project

curl -X POST "https://www.metaculus.com/api/projects/144/unsubscribe/" \
  -H "Authorization: Token YOUR_TOKEN"
POST /api/projects/{projectId}/unsubscribe/ Unsubscribe from project notifications.

Path Parameters

projectId
integer
required
The project ID to unsubscribe from

Download Project Data

curl -X GET "https://www.metaculus.com/api/projects/144/download-data/?include_scores=true" \
  -H "Authorization: Token YOUR_TOKEN" \
  --output project_data.zip
GET /api/projects/{projectId}/download-data/ Download all question and forecast data for a project as a ZIP file containing CSVs.

Path Parameters

projectId
integer
required
The project ID

Query Parameters

include_comments
boolean
default:"false"
Include comment data in the export
include_scores
boolean
default:"false"
Include scoring data in the export

Response

Returns a ZIP file containing:
  • question_data.csv - Question metadata
  • forecast_data.csv - All forecasts and aggregations
  • comment_data.csv - Comments (if requested)
  • score_data.csv - Scores (if requested)
  • README.txt - Data dictionary
Access RestrictionsFull project data downloads are only available to:
  • Site administrators
  • Project administrators
  • Whitelisted users
Contact Metaculus if you need bulk data access for research purposes.

Get Site Main Project

curl -X GET "https://www.metaculus.com/api/projects/site_main/" \
  -H "Authorization: Token YOUR_TOKEN"
GET /api/projects/site_main/ Retrieve information about the main Metaculus community project.

Usage Examples

Filter Posts by Tournament

import requests

# Get all open questions in the AI Benchmarking tournament
response = requests.get(
    "https://www.metaculus.com/api/posts/",
    headers={"Authorization": "Token YOUR_TOKEN"},
    params={
        "tournaments": "aibq4",
        "statuses": "open",
        "limit": 50
    }
)

for post in response.json()["results"]:
    print(f"{post['title']} - {post['nr_forecasters']} forecasters")

Filter Posts by Category

import requests

# Get recent AI questions
response = requests.get(
    "https://www.metaculus.com/api/posts/",
    headers={"Authorization": "Token YOUR_TOKEN"},
    params={
        "categories": "artificial-intelligence",
        "order_by": "-published_at",
        "limit": 20
    }
)

for post in response.json()["results"]:
    print(f"{post['title']}")

Build docs developers (and LLMs) love