Exchange
metaculus
Drift Type
changed_params / changed_response
Severity
MEDIUM — adapter may be missing useful filtering options; url_title field now a backward-compat alias that may eventually be removed
Their Docs
Source: Metaculus GitHub codebase (posts/views.py, questions/views.py) and live API at https://www.metaculus.com/api
New query parameters on GET /posts/ not in our spec:
include_descriptions (Boolean, default true) — controls whether post body text is returned
include_cp_history (Boolean, nullable) — includes full crowd-prediction history per question
include_movements (Boolean, nullable) — includes prediction-movement deltas
include_conditional_cps (Boolean, nullable) — includes CPs for conditional branches
group_cutoff (Integer, default 3, max 3) — limits how many sub-questions get CP data in group posts (replaces the with_cp flag's implied behavior)
include_average_scores (Boolean) — includes averaged scoring data
include_user_forecasts (Boolean) — includes the requesting user's own forecasts inline
Missing field on POST /questions/withdraw/ request body:
withdraw_at (timestamp, optional) — schedule a future withdrawal; defaults to now; rejected if set in the past. Our Withdrawal schema only has { question: integer }.
Missing fields in Post response schema:
short_title (string) — new canonical short title; url_title is now a backward-compat alias for it. Code reading post.url_title (e.g., utils.ts:285) still works but short_title should be preferred.
actual_resolve_time (datetime, nullable) — promoted to top-level Post; in our spec it only appears inside the nested Question schema.
curation_status_updated_at (datetime) — new field.
html_metadata_json — new metadata field.
resolved (boolean) — appears in every spec response example but is absent from the Post schema definition itself.
coauthors (array) — appears in response examples but absent from schema definition.
Missing topic under Post.projects:
Live responses include a topic array under post.projects with fields id, name, slug, emoji, and section (e.g., "section": "hot_categories"). Our Post.projects schema enumerates only site_main, tournament, category, tag, question_series, and default_project.
Our Cached Spec
core/specs/metaculus/Metaculus.yaml (v2.0.0, generated 2026-03-01) — all of the above are missing.
callApi() References at Risk
callApi("GetPosts", { ...apiParams, limit, offset }) at fetchMarkets.ts:54 and fetchEvents.ts:37 — these calls don't pass the new parameters, potentially receiving less efficient responses than possible (e.g., could pass include_cp_history=true to get forecast data in a single call).
callApi("GetPost", { postId: numericId }) at fetchMarkets.ts:95 and fetchEvents.ts:106 — no impact from param changes.
Hardcoded URL Bypasses
POST ${ctx.baseUrl}/questions/withdraw/ at cancelOrder.ts:71 — sends [{ question: questionId }] without withdraw_at support.
Impact
group_cutoff (default 3) limits how many sub-questions receive CP data in group posts. Adapter calls may be receiving truncated CP coverage without knowing it.
url_title backward-compat alias will eventually be removed; utils.ts:285 and related code should migrate to short_title.
post.projects.topic is silently dropped from all normalized output.
Found by automated spec drift audit
Exchange
metaculus
Drift Type
changed_params / changed_response
Severity
MEDIUM — adapter may be missing useful filtering options;
url_titlefield now a backward-compat alias that may eventually be removedTheir Docs
Source: Metaculus GitHub codebase (
posts/views.py,questions/views.py) and live API at https://www.metaculus.com/apiNew query parameters on
GET /posts/not in our spec:include_descriptions(Boolean, defaulttrue) — controls whether post body text is returnedinclude_cp_history(Boolean, nullable) — includes full crowd-prediction history per questioninclude_movements(Boolean, nullable) — includes prediction-movement deltasinclude_conditional_cps(Boolean, nullable) — includes CPs for conditional branchesgroup_cutoff(Integer, default3, max3) — limits how many sub-questions get CP data in group posts (replaces thewith_cpflag's implied behavior)include_average_scores(Boolean) — includes averaged scoring datainclude_user_forecasts(Boolean) — includes the requesting user's own forecasts inlineMissing field on
POST /questions/withdraw/request body:withdraw_at(timestamp, optional) — schedule a future withdrawal; defaults to now; rejected if set in the past. OurWithdrawalschema only has{ question: integer }.Missing fields in
Postresponse schema:short_title(string) — new canonical short title;url_titleis now a backward-compat alias for it. Code readingpost.url_title(e.g.,utils.ts:285) still works butshort_titleshould be preferred.actual_resolve_time(datetime, nullable) — promoted to top-levelPost; in our spec it only appears inside the nestedQuestionschema.curation_status_updated_at(datetime) — new field.html_metadata_json— new metadata field.resolved(boolean) — appears in every spec response example but is absent from thePostschema definition itself.coauthors(array) — appears in response examples but absent from schema definition.Missing
topicunderPost.projects:Live responses include a
topicarray underpost.projectswith fieldsid,name,slug,emoji, andsection(e.g.,"section": "hot_categories"). OurPost.projectsschema enumerates onlysite_main,tournament,category,tag,question_series, anddefault_project.Our Cached Spec
core/specs/metaculus/Metaculus.yaml(v2.0.0, generated 2026-03-01) — all of the above are missing.callApi() References at Risk
callApi("GetPosts", { ...apiParams, limit, offset })atfetchMarkets.ts:54andfetchEvents.ts:37— these calls don't pass the new parameters, potentially receiving less efficient responses than possible (e.g., could passinclude_cp_history=trueto get forecast data in a single call).callApi("GetPost", { postId: numericId })atfetchMarkets.ts:95andfetchEvents.ts:106— no impact from param changes.Hardcoded URL Bypasses
POST ${ctx.baseUrl}/questions/withdraw/atcancelOrder.ts:71— sends[{ question: questionId }]withoutwithdraw_atsupport.Impact
group_cutoff(default 3) limits how many sub-questions receive CP data in group posts. Adapter calls may be receiving truncated CP coverage without knowing it.url_titlebackward-compat alias will eventually be removed;utils.ts:285and related code should migrate toshort_title.post.projects.topicis silently dropped from all normalized output.Found by automated spec drift audit