Skip to content

Spec drift: metaculus — GET /posts/ missing 7 new query params; Post response schema missing short_title, actual_resolve_time, coauthors, topic, and 3 other fields #2000

Description

@realfishsam

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    coreCore sidecar/server logicspec-driftCached OpenAPI spec out of date vs venue's live docs

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions