{
    "version": "cmx-medgen-page-format-registry-v1",
    "updated_at": "2026-05-23",
    "canonical_contract_url": "https://cmx-medgen-contract.pages.dev/contract.md",
    "canonical_registry_url": "https://cmx-medgen-contract.pages.dev/page-format-registry.json",
    "update_rule": "Whenever CMX adds a new public page type, changes a page module structure, changes accepted HTML, or edits a page-specific content format, update this registry and redeploy the same Pages project before asking MedGen to generate that page.",
    "response_mode": "cmx_page_skeleton_response",
    "primary_response_path": "result.cmx_page",
    "fallback_response_path": "article.body",
    "global_rules": {
        "locale_strategy": "single_root",
        "cmx_owns": [
            "routes",
            "content paths",
            "global header",
            "global footer",
            "CSS",
            "responsive spacing",
            "canonical URLs",
            "schema assembly",
            "preview",
            "approval",
            "deploy"
        ],
        "medgen_owns": [
            "localized headings",
            "localized body fragments",
            "module props",
            "FAQ",
            "CTA labels",
            "media suggestions",
            "alt text",
            "sources",
            "relations"
        ],
        "allowed_html_tags": [
            "section",
            "article",
            "header",
            "div",
            "h1",
            "h2",
            "h3",
            "p",
            "ul",
            "ol",
            "li",
            "dl",
            "dt",
            "dd",
            "strong",
            "em",
            "small",
            "blockquote",
            "table",
            "thead",
            "tbody",
            "tr",
            "th",
            "td",
            "a"
        ],
        "forbidden_html": [
            "doctype",
            "html",
            "head",
            "body",
            "script",
            "style",
            "iframe",
            "form",
            "input",
            "textarea",
            "button",
            "svg",
            "canvas",
            "link",
            "meta",
            "inline style attributes",
            "on* event attributes"
        ]
    },
    "response_schema": {
        "required": [
            "result.cmx_page.version",
            "result.cmx_page.content_type",
            "result.cmx_page.route",
            "result.cmx_page.locale",
            "result.cmx_page.seo",
            "result.cmx_page.modules"
        ],
        "example": {
            "result": {
                "cmx_page": {
                    "version": "cmx-page-skeleton-v1",
                    "content_type": "technical_page",
                    "route": "/editorial-policy/",
                    "locale": "bg_BG",
                    "seo": {
                        "title": "{{localized SEO title}}",
                        "description": "{{localized SEO description}}"
                    },
                    "modules": [
                        {
                            "type": "page_header",
                            "props": {
                                "h1": "{{page H1}}",
                                "lead": "{{page lead}}"
                            }
                        },
                        {
                            "type": "rich_text",
                            "props": {
                                "html": "<section><h2>{{section heading}}</h2><p>{{paragraph}}</p></section>"
                            }
                        }
                    ],
                    "faq": [],
                    "media": [],
                    "relations": []
                }
            }
        }
    },
    "page_formats": {
        "home": {
            "content_type": "home_page",
            "route": "/",
            "content_path": "content/pages/home.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "home_hero",
                "trust_cards",
                "homepage_sections"
            ],
            "required_slots": [
                "brand_slogan",
                "hero_h1",
                "hero_lead",
                "hero_image",
                "hero_image_alt",
                "trust_cards",
                "catalog_heading",
                "reviews_heading",
                "experts_heading",
                "methodology_heading",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "home_hero.lead": "<p>{{homepage lead}}</p>",
                "trust_cards.items.body": "<p>{{trust card body}}</p>"
            }
        },
        "technical.about": {
            "content_type": "technical_page",
            "page_key": "about",
            "route": "/about/",
            "content_path": "content/pages/technical/about.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "related_pages"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "sections",
                "related_pages",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{section heading}}</h2><p>{{paragraph}}</p></section>"
            }
        },
        "technical.methodology": {
            "content_type": "technical_page",
            "page_key": "methodology",
            "route": "/methodology/",
            "content_path": "content/pages/technical/methodology.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "faq"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "method_sections",
                "evaluation_steps",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{method heading}}</h2><p>{{method body}}</p><ol><li>{{step}}</li></ol></section>"
            }
        },
        "technical.editorial_policy": {
            "content_type": "technical_page",
            "page_key": "editorial_policy",
            "route": "/editorial-policy/",
            "content_path": "content/pages/technical/editorial-policy.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "related_pages"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "editorial_principles",
                "review_process",
                "corrections_policy",
                "related_pages",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{policy heading}}</h2><p>{{policy paragraph}}</p><ul><li>{{policy item}}</li></ul></section>"
            }
        },
        "technical.information_sources": {
            "content_type": "technical_page",
            "page_key": "information_sources",
            "route": "/sources/",
            "content_path": "content/pages/technical/sources.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "source_list"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "source_policy_sections",
                "source_groups",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{source heading}}</h2><p>{{source explanation}}</p></section>"
            }
        },
        "technical.affiliate_disclosure": {
            "content_type": "technical_page",
            "page_key": "affiliate_disclosure",
            "route": "/affiliate-disclosure/",
            "content_path": "content/pages/technical/affiliate-disclosure.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "related_pages"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "commercial_disclosure_sections",
                "related_pages",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{disclosure heading}}</h2><p>{{disclosure body}}</p></section>"
            }
        },
        "technical.contact": {
            "content_type": "technical_page",
            "page_key": "contact",
            "route": "/contact/",
            "content_path": "content/pages/technical/contact.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "cmx_fixed_modules_after_medgen": [
                "contact_form"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "contact_intro_sections",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{contact heading}}</h2><p>{{contact paragraph}}</p></section>"
            }
        },
        "technical.faq": {
            "content_type": "technical_page",
            "page_key": "faq",
            "route": "/faq/",
            "content_path": "content/pages/technical/faq.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "faq"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "faq.answer_html": "<p>{{answer}}</p>"
            }
        },
        "technical.how_to_use": {
            "content_type": "technical_page",
            "page_key": "how_to_use",
            "route": "/how-to-use/",
            "content_path": "content/pages/technical/how-to-use.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text",
                "faq"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "usage_steps",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{step group heading}}</h2><ol><li>{{step}}</li></ol></section>"
            }
        },
        "technical.suggest_supplement": {
            "content_type": "technical_page",
            "page_key": "suggest_supplement",
            "route": "/suggest-supplement/",
            "content_path": "content/pages/technical/suggest-supplement.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "submission_guidance",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{guidance heading}}</h2><p>{{guidance paragraph}}</p><ul><li>{{required info}}</li></ul></section>"
            }
        },
        "technical.disclaimer": {
            "content_type": "technical_page",
            "page_key": "disclaimer",
            "route": "/disclaimer/",
            "content_path": "content/pages/technical/disclaimer.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "disclaimer_sections",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{disclaimer heading}}</h2><p>{{disclaimer text}}</p></section>"
            }
        },
        "technical.privacy_policy": {
            "content_type": "technical_page",
            "page_key": "privacy_policy",
            "route": "/privacy-policy/",
            "content_path": "content/pages/technical/privacy-policy.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "privacy_sections",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{privacy heading}}</h2><p>{{privacy text}}</p></section>"
            }
        },
        "technical.terms_of_use": {
            "content_type": "technical_page",
            "page_key": "terms_of_use",
            "route": "/terms/",
            "content_path": "content/pages/technical/terms.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "terms_sections",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{terms heading}}</h2><p>{{terms text}}</p></section>"
            }
        },
        "technical.cookie_policy": {
            "content_type": "technical_page",
            "page_key": "cookie_policy",
            "route": "/cookie-policy/",
            "content_path": "content/pages/technical/cookie-policy.json",
            "medgen_api_type": "tech_page",
            "required_modules": [
                "page_header",
                "rich_text"
            ],
            "required_slots": [
                "page_h1",
                "page_lead",
                "cookie_sections",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "rich_text.html": "<section><h2>{{cookie heading}}</h2><p>{{cookie text}}</p></section>"
            }
        },
        "index.catalog": {
            "content_type": "index_page",
            "page_key": "catalog",
            "route": "/bady/",
            "content_path": "content/pages/categories/bady.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "category_header",
                "index_intro"
            ],
            "required_slots": [
                "h1",
                "lead",
                "intro_html",
                "widget_headings",
                "empty_state_text",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "index_intro.html": "<section><h2>{{catalog heading}}</h2><p>{{catalog intro}}</p></section>"
            }
        },
        "index.reviews": {
            "content_type": "index_page",
            "page_key": "reviews_index",
            "route": "/obzory/",
            "content_path": "content/pages/categories/obzory.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "category_header",
                "index_intro",
                "review_grid"
            ],
            "required_slots": [
                "h1",
                "lead",
                "intro_html",
                "empty_state_text",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "index_intro.html": "<section><h2>{{reviews heading}}</h2><p>{{reviews intro}}</p></section>"
            }
        },
        "index.experts": {
            "content_type": "index_page",
            "page_key": "experts_index",
            "route": "/experts/",
            "content_path": "content/pages/authors/experts.json",
            "medgen_api_type": "author",
            "required_modules": [
                "page_header",
                "authors_grid_intro"
            ],
            "required_slots": [
                "h1",
                "lead",
                "intro_html",
                "empty_state_text",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "authors_grid_intro.html": "<section><h2>{{experts heading}}</h2><p>{{experts intro}}</p></section>"
            }
        },
        "index.guides": {
            "content_type": "index_page",
            "page_key": "guides_index",
            "route": "/guides/",
            "content_path": "content/pages/categories/guides.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "category_header",
                "index_intro"
            ],
            "required_slots": [
                "h1",
                "lead",
                "intro_html",
                "empty_state_text",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "index_intro.html": "<section><h2>{{guides heading}}</h2><p>{{guides intro}}</p></section>"
            }
        },
        "dynamic.product_card": {
            "content_type": "product_card",
            "route_pattern": "/bady/{product_slug}/",
            "content_path_pattern": "content/pages/supplements/{product_slug}.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "product_hero",
                "product_details",
                "product_notes"
            ],
            "required_slots": [
                "product_name",
                "product_brand",
                "product_summary",
                "product_long_description",
                "product_image",
                "product_image_alt",
                "price_label",
                "seller_label",
                "safety_note",
                "affiliate_note",
                "review_cta_label",
                "review_route",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "product_hero.summary_html": "<p>{{short product summary}}</p>",
                "product_details.html": "<section><h2>{{details heading}}</h2><p>{{long product description}}</p><dl><dt>{{fact label}}</dt><dd>{{fact value}}</dd></dl></section>",
                "product_notes.safety_note_html": "<p>{{safety note}}</p>"
            }
        },
        "dynamic.product_review": {
            "content_type": "product_review",
            "route_pattern": "/obzory/{product_slug}-review/",
            "content_path_pattern": "content/pages/technical/{product_slug}-review.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "review_header",
                "review_verdict",
                "review_body",
                "review_relations"
            ],
            "required_slots": [
                "review_h1",
                "review_lead",
                "review_summary",
                "rating",
                "verdict",
                "pros",
                "cons",
                "review_sections",
                "product_route",
                "product_anchor_label",
                "expert_route",
                "expert_anchor_label",
                "faq",
                "sources",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "review_header.summary_html": "<p>{{review summary}}</p>",
                "review_verdict.verdict_html": "<p>{{verdict}}</p>",
                "review_body.html": "<section><h2>{{section heading}}</h2><p>{{section body}}</p></section>"
            }
        },
        "dynamic.expert_profile": {
            "content_type": "expert_profile",
            "route_pattern": "/experts/{expert_slug}/",
            "content_path_pattern": "content/pages/authors/{expert_slug}.json",
            "medgen_api_type": "author",
            "required_modules": [
                "author_header",
                "author_body",
                "author_disclosure"
            ],
            "required_slots": [
                "expert_name",
                "expert_role",
                "short_bio",
                "full_bio",
                "qualification_heading",
                "reviewed_materials_heading",
                "review_refs",
                "disclosure_text",
                "portrait_image",
                "portrait_image_alt",
                "same_as_links",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "author_header.bio_html": "<p>{{short bio}}</p>",
                "author_body.html": "<section><h2>{{qualification heading}}</h2><p>{{full bio}}</p></section>",
                "author_disclosure.html": "<p>{{disclosure text}}</p>"
            }
        },
        "dynamic.guide_article": {
            "content_type": "guide_article",
            "route_pattern": "/guides/{guide_slug}/",
            "content_path_pattern": "content/pages/technical/{guide_slug}.json",
            "medgen_api_type": "content_page",
            "required_modules": [
                "article_header",
                "article_body"
            ],
            "required_slots": [
                "guide_h1",
                "guide_lead",
                "sections",
                "related_products",
                "related_reviews",
                "faq",
                "seo_title",
                "seo_description"
            ],
            "accepted_markup": {
                "article_body.html": "<section><h2>{{section heading}}</h2><p>{{section body}}</p></section>"
            }
        }
    }
}
