{
  "contract_version": "2026-09-03",
  "description": "Golden fixtures for the IQ Apparatus render contract. Sanitized: UUIDs are dummies, signed media URLs are placeholders, and no internal author or reviewer metadata is present. Field shapes match live responses exactly.",
  "fixtures": [
    {
      "file": "catalog-list.json",
      "endpoint": "GET /api-courses",
      "purpose": "Catalog item shape, including the non-null organization_id (contract 2026-08-24), accredited_provider_name, credit_designations, available_certificate_types, activity_details, the enriched card_display_config (credit chips, price, provider, format line, CTA, summary), series membership for the series rail, and the `overview` block (about, statement of need, objectives, audience, accreditation, faculty, references) added in contract 2026-08-24 so a landing page needs no second request."
    },
    {
      "file": "bramwell-series-module.json",
      "endpoint": "GET /api-course-content",
      "purpose": "Full Bramwell series module: all phase types, ready avatar video with per-block expires_at, debrief, references, series roadmap with next/previous, and the follow_up outcomes instrument (shown with recheck answer keys, i.e. as an outcomes:read key sees it). Every component also carries the decision-gating fields added in contract 2026-08-28 (reveals_on_answer on each decision, reveal_after on the blocks it unlocks). The hook phase leads with the declared scene image component (source: bramwell_patient_image), added in contract 2026-08-31. Debrief carries answer_key_available and, for an outcomes:read key, answerKeyHtml (gated in contract 2026-09-02). Contract 2026-09-03 adds within-phase pagination: every component carries screen_index/screen_role/anchor_id and every phase carries display_mode/screen_count — the hook phase is a single screen, and the content phase shows a 5-screen grouping."
    },
    {
      "file": "media-pending.json",
      "endpoint": "GET /api-course-content",
      "purpose": "Avatar renders in pending and failed states with fallback_html and no media_expires_at."
    },
    {
      "file": "unknown-future-revision.json",
      "endpoint": "GET /api-course-content",
      "purpose": "Forward-compatibility probe: unknown contract_version, unknown phase type, unknown component type, unknown top-level field."
    },
    {
      "file": "whoami.json",
      "endpoint": "GET /api/public/whoami",
      "purpose": "Key self-discovery: the organization an API key is bound to, its display name, and its granted scopes. Envelopes also echo authenticated_organization_id."
    }
  ],
  "artifacts": [
    {
      "file": "https://iqapparatus.com/contract/bramwell-geometry.json",
      "purpose": "Computed geometry of every data-ref surface on the public reference render at 375 / 768 / 1280 in four states. Diff your own render against it; see section 11 of the rendering spec.",
      "reference_render": "https://iqapparatus.com/reference/bramwell"
    }
  ]
}
