{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://artifacts.apis.io/create-web-page-com/json-schema/create-web-page-com-mcp-tool-schemas.json",
  "title": "Create Web Page MCP tool input/output schemas",
  "description": "inputSchema and outputSchema of each tool, extracted verbatim from the tools/list response of https://create-web-page.com/mcp (serverInfo create-web-page 0.2.0), fetched 2026-11-04.",
  "x-source": "https://create-web-page.com/mcp",
  "x-method": "probed",
  "$defs": {
    "account_whoami_input": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "account_whoami_output": {
      "type": "object",
      "properties": {
        "accountId": {
          "type": "string"
        },
        "authMode": {
          "type": "string",
          "enum": [
            "internal",
            "oauth",
            "demo"
          ]
        },
        "role": {
          "type": "string",
          "enum": [
            "owner",
            "demo"
          ]
        },
        "service": {
          "type": "string"
        },
        "demoExpiresAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "accountId",
        "authMode",
        "role",
        "service",
        "demoExpiresAt"
      ],
      "additionalProperties": false
    },
    "page_intake_start_input": {
      "type": "object",
      "properties": {
        "originalRequest": {
          "type": "string",
          "maxLength": 12000,
          "description": "The user's original page-creation request, copied verbatim when available."
        },
        "businessName": {
          "type": "string",
          "description": "Only include if the user already provided the business or project name."
        },
        "businessType": {
          "type": "string",
          "description": "Business category inferred from the user's words, such as hamburger restaurant or dental clinic."
        },
        "sourceUrl": {
          "type": "string",
          "description": "Public HTTP/HTTPS source URL provided by the user, such as a business website or link-in-bio page. Protected platforms (social networks, maps, paywalls) require client-side browsing or pasted details instead."
        },
        "sourceHandle": {
          "type": "string",
          "description": "Public social handle provided by the user."
        },
        "primaryGoal": {
          "type": "string",
          "description": "The main visitor action if known, such as book, call, WhatsApp, buy, or leave a lead."
        },
        "locale": {
          "type": "string",
          "description": "Preferred content locale if obvious from the conversation."
        }
      },
      "additionalProperties": false
    },
    "page_intake_start_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mode": {
          "type": "string",
          "enum": [
            "intake"
          ]
        },
        "title": {
          "type": "string"
        },
        "promptToUser": {
          "type": "string"
        },
        "canCreateNow": {
          "type": "boolean"
        },
        "recommendedNextTool": {
          "type": "string"
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "questions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sourceGuidance": {
          "type": "string"
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "provide_source",
                  "answer_questions",
                  "use_placeholders",
                  "create_from_brief"
                ]
              },
              "label": {
                "type": "string"
              },
              "prompt": {
                "type": "string"
              },
              "recommendedTool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "label",
              "prompt"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "mode",
        "title",
        "promptToUser",
        "canCreateNow",
        "recommendedNextTool",
        "missingFields",
        "questions",
        "sourceGuidance",
        "actions"
      ],
      "additionalProperties": false
    },
    "page_onboarding_start_input": {
      "type": "object",
      "properties": {
        "originalRequest": {
          "type": "string",
          "maxLength": 12000
        },
        "locale": {
          "type": "string",
          "description": "Preferred UI locale: en or es. If omitted, Spanish is used only when originalRequest is clearly Spanish; otherwise English. The result echoes the resolved locale \u2014 pass it on every page_onboarding_update call."
        },
        "suggestedSelection": {
          "type": "object",
          "properties": {
            "mainCategory": {
              "type": "string",
              "description": "Normalized id from the AI client, for example physical-business or online-business. The app does not infer this from raw text."
            },
            "subCategory": {
              "type": "string",
              "description": "Normalized subcategory id valid for the selected mainCategory, for example health."
            },
            "source": {
              "type": "string",
              "enum": [
                "user_agent_inference",
                "user_selected",
                "imported_source"
              ]
            },
            "confidence": {
              "type": "string",
              "enum": [
                "low",
                "medium",
                "high"
              ]
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "page_onboarding_start_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mode": {
          "type": "string",
          "enum": [
            "onboarding"
          ]
        },
        "locale": {
          "type": "string",
          "enum": [
            "en",
            "es"
          ]
        },
        "stepId": {
          "type": "string"
        },
        "canContinue": {
          "type": "boolean"
        },
        "selected": {
          "type": "object",
          "additionalProperties": true
        },
        "invalidSelection": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "choices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "layoutChoices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "paletteChoices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "primaryActions": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedLinks": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedBlocks": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "profileCopy": {
          "type": "object",
          "additionalProperties": true
        },
        "slugGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "qualityChecklist": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedMissingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "layoutGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "imageGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "readyToCreate": {
          "type": "boolean"
        },
        "uiHtml": {
          "type": "string"
        },
        "nextPrompt": {
          "type": "string"
        },
        "createFromBriefHints": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mode",
        "locale",
        "stepId",
        "canContinue",
        "selected",
        "invalidSelection",
        "missingFields",
        "choices",
        "layoutChoices",
        "paletteChoices",
        "primaryActions",
        "recommendedLinks",
        "recommendedBlocks",
        "profileCopy",
        "slugGuidance",
        "qualityChecklist",
        "recommendedMissingFields",
        "layoutGuidance",
        "imageGuidance",
        "readyToCreate",
        "uiHtml",
        "nextPrompt",
        "createFromBriefHints"
      ],
      "additionalProperties": false
    },
    "page_onboarding_update_input": {
      "type": "object",
      "properties": {
        "stepId": {
          "type": "string",
          "enum": [
            "category",
            "layout",
            "profile",
            "primary-action",
            "ready"
          ]
        },
        "locale": {
          "type": "string",
          "description": "en or es \u2014 resend the locale returned by page_onboarding_start (this tool is stateless). Defaults to English unless knownFields.description is clearly Spanish."
        },
        "selection": {
          "type": "object",
          "properties": {
            "mainCategory": {
              "type": "string"
            },
            "subCategory": {
              "type": "string"
            },
            "layout": {
              "type": "string",
              "enum": [
                "background_color",
                "full",
                "background_image"
              ]
            },
            "palette": {
              "type": "string",
              "description": "Palette id returned by paletteChoices, for example atom_dark_plum or atom_black."
            },
            "primaryAction": {
              "type": "string",
              "enum": [
                "appointment",
                "whatsapp",
                "phone",
                "maps",
                "buy",
                "lead",
                "subscribe",
                "follow"
              ]
            },
            "recommendedBlock": {
              "type": "string",
              "enum": [
                "image",
                "product",
                "contact_form",
                "text"
              ]
            },
            "desiredPath": {
              "type": "string",
              "description": "User's desired URL path. The server normalizes to letters, numbers, and hyphens."
            }
          },
          "additionalProperties": false
        },
        "knownFields": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "hasImage": {
              "type": "boolean"
            },
            "primaryActionDestination": {
              "type": "string",
              "description": "A real destination explicitly supplied by the user or imported public source. Do not invent booking/order URLs."
            },
            "supportingLinks": {
              "type": "boolean",
              "description": "True when the user has provided the initial phone/WhatsApp/location/social/site links they want on the page."
            },
            "supportingContent": {
              "type": "boolean",
              "description": "True when the user has provided enough extra page content, such as services, products, location, hours, FAQs, reviews, or key notes."
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "page_onboarding_update_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mode": {
          "type": "string",
          "enum": [
            "onboarding"
          ]
        },
        "locale": {
          "type": "string",
          "enum": [
            "en",
            "es"
          ]
        },
        "stepId": {
          "type": "string"
        },
        "canContinue": {
          "type": "boolean"
        },
        "selected": {
          "type": "object",
          "additionalProperties": true
        },
        "invalidSelection": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "choices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "layoutChoices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "paletteChoices": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "primaryActions": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedLinks": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedBlocks": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "profileCopy": {
          "type": "object",
          "additionalProperties": true
        },
        "slugGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "qualityChecklist": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "recommendedMissingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "layoutGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "imageGuidance": {
          "type": "object",
          "additionalProperties": true
        },
        "readyToCreate": {
          "type": "boolean"
        },
        "uiHtml": {
          "type": "string"
        },
        "nextPrompt": {
          "type": "string"
        },
        "createFromBriefHints": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mode",
        "locale",
        "stepId",
        "canContinue",
        "selected",
        "invalidSelection",
        "missingFields",
        "choices",
        "layoutChoices",
        "paletteChoices",
        "primaryActions",
        "recommendedLinks",
        "recommendedBlocks",
        "profileCopy",
        "slugGuidance",
        "qualityChecklist",
        "recommendedMissingFields",
        "layoutGuidance",
        "imageGuidance",
        "readyToCreate",
        "uiHtml",
        "nextPrompt",
        "createFromBriefHints"
      ],
      "additionalProperties": false
    },
    "source_import_input": {
      "type": "object",
      "properties": {
        "sourceUrl": {
          "type": "string",
          "format": "uri",
          "description": "Public http/https source URL to import."
        },
        "locale": {
          "type": "string",
          "description": "Preferred output locale if obvious from the conversation, such as es or en."
        }
      },
      "required": [
        "sourceUrl"
      ],
      "additionalProperties": false
    },
    "source_import_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "sourceUrl": {
          "type": "string"
        },
        "finalUrl": {
          "type": "string"
        },
        "fetchMode": {
          "type": "string",
          "enum": [
            "public_http",
            "public_http_browser_compatible"
          ]
        },
        "confidence": {
          "type": "number"
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "brief": {
          "type": "object",
          "properties": {
            "businessName": {
              "type": "string"
            },
            "sourceUrl": {
              "type": "string"
            },
            "primaryGoal": {
              "type": "string"
            },
            "audience": {
              "type": "string"
            },
            "offer": {
              "type": "string"
            },
            "location": {
              "type": "string"
            },
            "publicWhatsapp": {
              "type": "string"
            },
            "publicPhone": {
              "type": "string"
            },
            "publicBusinessEmail": {
              "type": "string"
            },
            "mustInclude": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "locale": {
              "type": "string"
            }
          },
          "required": [
            "businessName",
            "sourceUrl"
          ],
          "additionalProperties": false
        },
        "extracted": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "siteName": {
              "type": "string"
            },
            "structuredTypes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "text",
                  "url"
                ],
                "additionalProperties": false
              }
            },
            "images": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string"
                  },
                  "alt": {
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              }
            },
            "emails": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "phones": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "whatsapp": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "required": [
            "structuredTypes",
            "links",
            "images",
            "emails",
            "phones",
            "whatsapp"
          ],
          "additionalProperties": false
        },
        "suggested_blocks": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "social_row",
                  "whatsapp",
                  "phone_call",
                  "email_contact",
                  "image",
                  "gallery",
                  "video_embed",
                  "text",
                  "map_embed",
                  "product_card",
                  "lead_form",
                  "reviews",
                  "save_contact"
                ]
              },
              "props": {
                "type": "object",
                "additionalProperties": true
              },
              "source": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "props",
              "source"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "sourceUrl",
        "finalUrl",
        "fetchMode",
        "confidence",
        "warnings",
        "brief",
        "extracted",
        "suggested_blocks"
      ],
      "additionalProperties": false
    },
    "page_create_input": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "Internal page title and default header display_name."
        },
        "displayName": {
          "type": "string",
          "description": "Visible header display name. Defaults to title."
        },
        "bio": {
          "type": "string",
          "maxLength": 280,
          "description": "Optional short bio for the header."
        },
        "businessType": {
          "type": "string",
          "description": "Used by preset:auto inference. Examples: musician, restaurant, designer."
        },
        "slug": {
          "type": "string",
          "description": "Preferred public URL slug."
        },
        "layout": {
          "type": "string",
          "enum": [
            "link_in_bio"
          ],
          "description": "Layout id. Defaults to 'link_in_bio'."
        },
        "preset": {
          "type": "string",
          "enum": [
            "classic_dark",
            "sunset_gradient",
            "editorial_serif",
            "minimalist_light",
            "local_business",
            "bold_pop",
            "zen_neutral",
            "midnight_blue",
            "card_warm_terracotta",
            "card_navy_serif",
            "card_editorial_dark",
            "card_bold_realestate",
            "auto"
          ],
          "description": "Style preset id, or 'auto' to infer deterministically from businessType/style."
        },
        "style": {
          "type": "string",
          "description": "Free-form style hint used by preset:auto inference."
        },
        "initialPrompt": {
          "type": "string",
          "maxLength": 12000
        }
      },
      "required": [
        "title",
        "preset"
      ],
      "additionalProperties": false
    },
    "page_create_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_create_from_brief_input": {
      "type": "object",
      "properties": {
        "businessName": {
          "type": "string"
        },
        "bio": {
          "type": "string",
          "maxLength": 280,
          "description": "Optional short bio for the header."
        },
        "businessType": {
          "type": "string",
          "description": "Planning context only. Not rendered directly as public page copy."
        },
        "preferredSlug": {
          "type": "string",
          "description": "Desired URL path. Ask the user for it near the end of onboarding. Use normal letters, numbers, and hyphens; the server normalizes and makes it unique."
        },
        "layout": {
          "type": "string",
          "enum": [
            "link_in_bio"
          ],
          "description": "Defaults to 'link_in_bio'."
        },
        "preset": {
          "type": "string",
          "enum": [
            "classic_dark",
            "sunset_gradient",
            "editorial_serif",
            "minimalist_light",
            "local_business",
            "bold_pop",
            "zen_neutral",
            "midnight_blue",
            "card_warm_terracotta",
            "card_navy_serif",
            "card_editorial_dark",
            "card_bold_realestate",
            "auto"
          ],
          "description": "Style preset id, or 'auto' to infer deterministically. Defaults to 'auto'."
        },
        "sourceUrl": {
          "type": "string",
          "description": "Provenance reference only."
        },
        "sourceHandle": {
          "type": "string"
        },
        "primaryGoal": {
          "type": "string",
          "description": "Planning context only. Not rendered directly as public page copy."
        },
        "audience": {
          "type": "string",
          "description": "Planning context only. Not rendered directly as public page copy."
        },
        "offer": {
          "type": "string",
          "description": "Planning context only. Not rendered directly as public page copy; use bio and publicSections for final-audience copy."
        },
        "location": {
          "type": "string",
          "description": "Public business address or service area intended for map/address actions, not direct body copy and not the user's private/current location."
        },
        "publicWhatsapp": {
          "type": "string",
          "description": "Public WhatsApp phone number explicitly supplied by the user or a public source. Do not use the user's account phone or invent placeholder numbers."
        },
        "publicPhone": {
          "type": "string",
          "description": "Public business phone number explicitly supplied by the user or a public source. Do not use the user's private/account phone."
        },
        "publicBusinessEmail": {
          "type": "string",
          "description": "Public business contact email explicitly supplied by the user or a public source. Do not use the user's ChatGPT/account email."
        },
        "style": {
          "type": "string",
          "description": "Planning context only. Not rendered directly as public page copy."
        },
        "mustInclude": {
          "type": "array",
          "maxItems": 12,
          "items": {
            "type": "string"
          },
          "description": "Planning checklist only. Do not put section names, CTA labels, owner instructions, or private notes here; not rendered directly."
        },
        "publicSections": {
          "type": "array",
          "maxItems": 100,
          "items": {
            "type": "object",
            "description": "Final-audience page copy. Use the page's target language and correct spelling/accents. Do not put planning notes, owner instructions, or section labels here.",
            "properties": {
              "heading": {
                "type": "string",
                "maxLength": 160
              },
              "body": {
                "type": "string",
                "maxLength": 2000
              },
              "items": {
                "type": "array",
                "maxItems": 12,
                "items": {
                  "type": "string",
                  "maxLength": 280
                }
              },
              "alignment": {
                "type": "string",
                "enum": [
                  "left",
                  "center"
                ]
              }
            },
            "additionalProperties": false
          },
          "description": "Final-audience text sections to render on the public page. Write in the target language with correct spelling/accents. Only include facts the user supplied or that came from an imported public source; for sparse prompts, keep this short and avoid invented service lists, hours, benefits, testimonials, prices, or operational details."
        },
        "initialPrompt": {
          "type": "string",
          "maxLength": 12000
        },
        "locale": {
          "type": "string"
        },
        "onboardingMainCategory": {
          "type": "string",
          "description": "Validated category id from page_onboarding_*, for example physical-business or online-business."
        },
        "onboardingSubCategory": {
          "type": "string",
          "description": "Validated subcategory id from page_onboarding_*, for example health."
        },
        "onboardingLayout": {
          "type": "string",
          "enum": [
            "background_color",
            "full",
            "background_image"
          ],
          "description": "Layout style: background_color (minimalist), full (featured photo), or background_image (full image background)."
        },
        "onboardingPalette": {
          "type": "string",
          "description": "Palette id returned by page_onboarding_* paletteChoices, for example atom_dark_plum."
        },
        "primaryActionId": {
          "type": "string",
          "enum": [
            "appointment",
            "whatsapp",
            "phone",
            "maps",
            "buy",
            "lead",
            "subscribe",
            "follow"
          ]
        },
        "primaryActionLabel": {
          "type": "string",
          "maxLength": 120,
          "description": "Public label for the primary action in the page's target language."
        },
        "fallbackLeadForm": {
          "type": "object",
          "description": "Public fallback contact/interest form to use when the requested primary action lacks a real destination. All copy must be final-audience copy in the page's target language.",
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "contact",
                "booking_interest"
              ]
            },
            "title": {
              "type": "string",
              "maxLength": 160
            },
            "description": {
              "type": "string",
              "maxLength": 280
            },
            "fields": {
              "type": "array",
              "minItems": 1,
              "maxItems": 5,
              "items": {
                "type": "string",
                "enum": [
                  "name",
                  "email",
                  "phone",
                  "message",
                  "company"
                ]
              }
            },
            "submitLabel": {
              "type": "string",
              "maxLength": 120
            },
            "fieldLabels": {
              "type": "object",
              "description": "Field labels/placeholders, for example name/email/message in the page's target language.",
              "additionalProperties": {
                "type": "string",
                "maxLength": 120
              }
            },
            "successMessage": {
              "type": "string",
              "maxLength": 280
            },
            "consentText": {
              "type": "string",
              "maxLength": 400
            },
            "destinationEmail": {
              "type": "string",
              "format": "email",
              "description": "Private email that receives the form's enquiries (never shown on the page). Ask the user which email should receive them; without it the form cannot deliver anything and cannot be the page's only action at publish."
            }
          },
          "required": [
            "title",
            "submitLabel"
          ],
          "additionalProperties": false
        },
        "primaryActionUrl": {
          "type": "string",
          "description": "Real destination URL for the primary action when explicitly supplied by the user or imported public source, such as a booking link. Do not invent booking/order URLs; if missing, ask for it or use fallbackLeadForm."
        },
        "heroImageUrl": {
          "type": "string",
          "description": "Explicit user-provided image URL for featured-photo or full-image styles."
        }
      },
      "required": [
        "businessName"
      ],
      "additionalProperties": false
    },
    "page_create_from_brief_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "block_add_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "block": {
          "type": "object",
          "description": "The block to add. Must match one of the 14 allowed types with that type's strict props schema. The server generates the block id.",
          "oneOf": [
            {
              "type": "object",
              "description": "A tappable button with a label and URL. Optional thumbnail and icon.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "link"
                  ],
                  "description": "Use this variant only for a link block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "url": {
                      "type": "string",
                      "maxLength": 2048,
                      "description": "Destination URL using http, https, mailto, tel, or sms."
                    },
                    "thumbnail": {
                      "type": "object",
                      "properties": {
                        "src": {
                          "type": "string",
                          "description": "Image URL or stored media URL."
                        },
                        "alt": {
                          "type": "string",
                          "description": "Alt text for accessibility."
                        },
                        "width": {
                          "type": "number"
                        },
                        "height": {
                          "type": "number"
                        },
                        "mediaAssetId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "variants": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "src"
                      ],
                      "additionalProperties": false
                    },
                    "icon": {
                      "type": "string",
                      "maxLength": 64
                    },
                    "highlight": {
                      "type": "boolean"
                    },
                    "width": {
                      "type": "string",
                      "enum": [
                        "full",
                        "half"
                      ],
                      "description": "half lets two consecutive half-width links render side by side as one row. Default full."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "label",
                    "url"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "A compact row of social icons. Items are { platform, url }.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "social_row"
                  ],
                  "description": "Use this variant only for a social_row block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "maxItems": 16,
                      "items": {
                        "type": "object",
                        "properties": {
                          "platform": {
                            "type": "string",
                            "enum": [
                              "instagram",
                              "tiktok",
                              "youtube",
                              "x",
                              "facebook",
                              "linkedin",
                              "spotify",
                              "apple_music",
                              "soundcloud",
                              "github",
                              "pinterest",
                              "threads",
                              "twitch",
                              "discord",
                              "telegram",
                              "snapchat",
                              "vimeo",
                              "behance",
                              "dribbble",
                              "medium",
                              "substack",
                              "website",
                              "other",
                              "email",
                              "phone",
                              "whatsapp"
                            ]
                          },
                          "url": {
                            "type": "string",
                            "description": "For social platforms: a public http(s) profile URL. For contact platforms (email/phone/whatsapp): the bare email address or phone number \u2014 the page builds the mailto:/tel:/wa.me link."
                          },
                          "label": {
                            "type": "string",
                            "maxLength": 64
                          }
                        },
                        "required": [
                          "platform",
                          "url"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "items"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "WhatsApp CTA. Requires a WhatsApp number (digits only).",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "whatsapp"
                  ],
                  "description": "Use this variant only for a whatsapp block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "number": {
                      "type": "string",
                      "maxLength": 32,
                      "description": "Public WhatsApp phone number."
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 500,
                      "description": "Optional prefilled message."
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "number"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Tel: button. Requires a phone number.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "phone_call"
                  ],
                  "description": "Use this variant only for a phone_call block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "number": {
                      "type": "string",
                      "maxLength": 32,
                      "description": "Public phone number."
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "number"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Mailto: button. Requires an email address.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "email_contact"
                  ],
                  "description": "Use this variant only for a email_contact block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "email": {
                      "type": "string",
                      "description": "Public business email address."
                    },
                    "subject": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "email"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "A single image with layout classic | wide | background.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "image"
                  ],
                  "description": "Use this variant only for a image block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "image": {
                      "type": "object",
                      "properties": {
                        "src": {
                          "type": "string",
                          "description": "Image URL or stored media URL."
                        },
                        "alt": {
                          "type": "string",
                          "description": "Alt text for accessibility."
                        },
                        "width": {
                          "type": "number"
                        },
                        "height": {
                          "type": "number"
                        },
                        "mediaAssetId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "variants": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "src"
                      ],
                      "additionalProperties": false
                    },
                    "layout": {
                      "type": "string",
                      "enum": [
                        "classic",
                        "wide",
                        "background"
                      ]
                    },
                    "caption": {
                      "type": "string",
                      "maxLength": 280
                    },
                    "link_url": {
                      "type": "string",
                      "maxLength": 2048
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "image"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Multiple images in a grid or carousel.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "gallery"
                  ],
                  "description": "Use this variant only for a gallery block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "display": {
                      "type": "string",
                      "enum": [
                        "grid",
                        "carousel"
                      ]
                    },
                    "items": {
                      "type": "array",
                      "maxItems": 24,
                      "items": {
                        "type": "object",
                        "properties": {
                          "src": {
                            "type": "string",
                            "description": "Image URL or stored media URL."
                          },
                          "alt": {
                            "type": "string",
                            "description": "Alt text for accessibility."
                          },
                          "width": {
                            "type": "number"
                          },
                          "height": {
                            "type": "number"
                          },
                          "mediaAssetId": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "variants": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "src"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "YouTube, Vimeo, or mp4. Use normalized provider + video_id.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "video_embed"
                  ],
                  "description": "Use this variant only for a video_embed block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "provider": {
                      "type": "string",
                      "enum": [
                        "youtube",
                        "vimeo",
                        "mp4"
                      ]
                    },
                    "video_id": {
                      "type": "string",
                      "maxLength": 2048,
                      "description": "Video id or URL, depending on provider."
                    },
                    "title": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "thumbnail": {
                      "type": "object",
                      "properties": {
                        "src": {
                          "type": "string",
                          "description": "Image URL or stored media URL."
                        },
                        "alt": {
                          "type": "string",
                          "description": "Alt text for accessibility."
                        },
                        "width": {
                          "type": "number"
                        },
                        "height": {
                          "type": "number"
                        },
                        "mediaAssetId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "variants": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "src"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "provider",
                    "video_id"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "A short final-audience heading, body, and/or list block.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ],
                  "description": "Use this variant only for a text block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "heading": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "body": {
                      "type": "string",
                      "maxLength": 2000
                    },
                    "items": {
                      "type": "array",
                      "maxItems": 12,
                      "items": {
                        "type": "string",
                        "maxLength": 280
                      }
                    },
                    "alignment": {
                      "type": "string",
                      "enum": [
                        "left",
                        "center"
                      ]
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Google Maps embed by address, place_id, or lat/lng.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "map_embed"
                  ],
                  "description": "Use this variant only for a map_embed block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "address": {
                      "type": "string",
                      "maxLength": 400,
                      "description": "Public business address or service-area text."
                    },
                    "place_id": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "lat": {
                      "type": "number",
                      "minimum": -90,
                      "maximum": 90
                    },
                    "lng": {
                      "type": "number",
                      "minimum": -180,
                      "maximum": 180
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "zoom": {
                      "type": "number",
                      "minimum": 1,
                      "maximum": 20
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "A link-out commerce card with name, image, price, and buy URL.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "product_card"
                  ],
                  "description": "Use this variant only for a product_card block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "description": {
                      "type": "string",
                      "maxLength": 280
                    },
                    "price_text": {
                      "type": "string",
                      "maxLength": 40
                    },
                    "image": {
                      "type": "object",
                      "properties": {
                        "src": {
                          "type": "string",
                          "description": "Image URL or stored media URL."
                        },
                        "alt": {
                          "type": "string",
                          "description": "Alt text for accessibility."
                        },
                        "width": {
                          "type": "number"
                        },
                        "height": {
                          "type": "number"
                        },
                        "mediaAssetId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "variants": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "src"
                      ],
                      "additionalProperties": false
                    },
                    "buy_url": {
                      "type": "string",
                      "description": "Public http(s) purchase URL."
                    },
                    "cta_label": {
                      "type": "string",
                      "maxLength": 120
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "name"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Capture form. mode: contact | newsletter | booking_interest. Supply field labels and submit text for localized public pages.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "lead_form"
                  ],
                  "description": "Use this variant only for a lead_form block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "mode": {
                      "type": "string",
                      "enum": [
                        "contact",
                        "newsletter",
                        "booking_interest"
                      ]
                    },
                    "title": {
                      "type": "string",
                      "maxLength": 160
                    },
                    "description": {
                      "type": "string",
                      "maxLength": 280
                    },
                    "fields": {
                      "type": "array",
                      "minItems": 1,
                      "maxItems": 5,
                      "items": {
                        "type": "string",
                        "enum": [
                          "name",
                          "email",
                          "phone",
                          "message",
                          "company"
                        ]
                      }
                    },
                    "field_labels": {
                      "type": "object",
                      "description": "Public labels/placeholders for form fields in the page's target language.",
                      "additionalProperties": {
                        "type": "string",
                        "maxLength": 120
                      }
                    },
                    "submit_label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "success_message": {
                      "type": "string",
                      "maxLength": 280
                    },
                    "consent_text": {
                      "type": "string",
                      "maxLength": 400
                    },
                    "destination_email": {
                      "type": "string",
                      "description": "Public/business lead recipient email."
                    },
                    "destination_webhook": {
                      "type": "string",
                      "description": "Public http(s) webhook URL."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "mode",
                    "fields"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "Carousel or stack of testimonials.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "reviews"
                  ],
                  "description": "Use this variant only for a reviews block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "display": {
                      "type": "string",
                      "enum": [
                        "carousel",
                        "stack"
                      ]
                    },
                    "items": {
                      "type": "array",
                      "maxItems": 12,
                      "items": {
                        "type": "object",
                        "properties": {
                          "author": {
                            "type": "string",
                            "maxLength": 64
                          },
                          "role": {
                            "type": "string",
                            "maxLength": 120
                          },
                          "body": {
                            "type": "string",
                            "maxLength": 280
                          },
                          "rating": {
                            "type": "number",
                            "minimum": 1,
                            "maximum": 5
                          },
                          "avatar": {
                            "type": "object",
                            "properties": {
                              "src": {
                                "type": "string",
                                "description": "Image URL or stored media URL."
                              },
                              "alt": {
                                "type": "string",
                                "description": "Alt text for accessibility."
                              },
                              "width": {
                                "type": "number"
                              },
                              "height": {
                                "type": "number"
                              },
                              "mediaAssetId": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "variants": {
                                "type": "object",
                                "additionalProperties": {
                                  "type": "string"
                                }
                              }
                            },
                            "required": [
                              "src"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "author",
                          "body"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "items"
                  ]
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "description": "QR + save-contact footer for digital business cards. The vCard is derived from the page header and contact blocks; props only carry presentation copy.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "save_contact"
                  ],
                  "description": "Use this variant only for a save_contact block."
                },
                "props": {
                  "type": "object",
                  "properties": {
                    "style": {
                      "type": "string",
                      "enum": [
                        "qr_card",
                        "button"
                      ],
                      "description": "qr_card renders a QR + caption footer; button renders a single save-contact button."
                    },
                    "title": {
                      "type": "string",
                      "maxLength": 120,
                      "description": "Short caption, e.g. \"Scan to save\"."
                    },
                    "subtitle": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Secondary caption, e.g. \"Adds my contact card\"."
                    },
                    "button_label": {
                      "type": "string",
                      "maxLength": 120,
                      "description": "Save button text, e.g. \"Save contact\"."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "props"
              ],
              "additionalProperties": false
            }
          ]
        }
      },
      "required": [
        "pageId",
        "block"
      ],
      "additionalProperties": false
    },
    "block_add_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "layouts_list_input": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "layouts_list_output": {
      "type": "object",
      "additionalProperties": true
    },
    "presets_list_input": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "presets_list_output": {
      "type": "object",
      "additionalProperties": true
    },
    "page_get_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_get_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "media_upload_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        },
        "altText": {
          "type": "string",
          "description": "Meaningful alt text for the image."
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ],
          "description": "Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery block, background = page background."
        },
        "imageUrl": {
          "type": "string",
          "description": "Public direct image URL. The server validates redirects and blocks private network targets."
        },
        "imageBase64": {
          "type": "string",
          "description": "Base64 image bytes or a data:image/*;base64 data URI. Use only for small images."
        },
        "fileName": {
          "type": "string",
          "description": "Original file name when known."
        },
        "contentType": {
          "type": "string",
          "description": "Declared MIME type, such as image/png. The server still verifies magic bytes."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "media_upload_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid"
        },
        "pageId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "status": {
          "type": "string",
          "enum": [
            "awaiting_upload",
            "processing",
            "ready",
            "failed",
            "deleted"
          ]
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ]
        },
        "altText": {
          "type": "string"
        },
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadPageUrl": {
          "type": "string"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "deletedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "variants": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nextStep": {
          "type": "string"
        },
        "attached": {
          "type": "boolean"
        },
        "revisionId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "revisionVersion": {
          "type": [
            "number",
            "null"
          ]
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mediaAssetId",
        "status",
        "placement",
        "altText"
      ],
      "additionalProperties": true
    },
    "media_upload_link_create_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        },
        "altText": {
          "type": "string",
          "description": "Meaningful alt text for the image."
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ],
          "description": "Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery block, background = page background."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "media_upload_link_create_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid"
        },
        "pageId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "status": {
          "type": "string",
          "enum": [
            "awaiting_upload",
            "processing",
            "ready",
            "failed",
            "deleted"
          ]
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ]
        },
        "altText": {
          "type": "string"
        },
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadPageUrl": {
          "type": "string"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "deletedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "variants": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nextStep": {
          "type": "string"
        },
        "attached": {
          "type": "boolean"
        },
        "revisionId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "revisionVersion": {
          "type": [
            "number",
            "null"
          ]
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mediaAssetId",
        "status",
        "placement",
        "altText"
      ],
      "additionalProperties": true
    },
    "media_attach_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        },
        "altText": {
          "type": "string",
          "description": "Meaningful alt text for the image."
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ],
          "description": "Where the image should be used. header_photo = business-card top photo, avatar = profile header avatar, block_image = image inside a block (requires blockId), gallery_item = appended to a gallery block, background = page background."
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid",
          "description": "The mediaAssetId returned by media_upload or media_upload_link_create."
        },
        "blockId": {
          "type": "string",
          "description": "Required when placement is block_image; optional for gallery_item (targets a specific gallery block)."
        }
      },
      "required": [
        "pageId",
        "mediaAssetId",
        "placement"
      ],
      "additionalProperties": false
    },
    "media_attach_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid"
        },
        "pageId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "status": {
          "type": "string",
          "enum": [
            "awaiting_upload",
            "processing",
            "ready",
            "failed",
            "deleted"
          ]
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ]
        },
        "altText": {
          "type": "string"
        },
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadPageUrl": {
          "type": "string"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "deletedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "variants": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nextStep": {
          "type": "string"
        },
        "attached": {
          "type": "boolean"
        },
        "revisionId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "revisionVersion": {
          "type": [
            "number",
            "null"
          ]
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mediaAssetId",
        "status",
        "placement",
        "altText"
      ],
      "additionalProperties": true
    },
    "media_delete_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid",
          "description": "The mediaAssetId to delete."
        }
      },
      "required": [
        "pageId",
        "mediaAssetId"
      ],
      "additionalProperties": false
    },
    "media_delete_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "mediaAssetId": {
          "type": "string",
          "format": "uuid"
        },
        "pageId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "status": {
          "type": "string",
          "enum": [
            "awaiting_upload",
            "processing",
            "ready",
            "failed",
            "deleted"
          ]
        },
        "placement": {
          "type": "string",
          "enum": [
            "avatar",
            "header_photo",
            "block_image",
            "gallery_item",
            "background",
            "unassigned"
          ]
        },
        "altText": {
          "type": "string"
        },
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadPageUrl": {
          "type": "string"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "uploadedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "deletedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "variants": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nextStep": {
          "type": "string"
        },
        "attached": {
          "type": "boolean"
        },
        "revisionId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "revisionVersion": {
          "type": [
            "number",
            "null"
          ]
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [
        "ok",
        "mediaAssetId",
        "status",
        "placement",
        "altText"
      ],
      "additionalProperties": true
    },
    "page_claim_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "The editToken returned by page_create for the anonymous demo page."
        }
      },
      "required": [
        "pageId",
        "editToken"
      ],
      "additionalProperties": false
    },
    "page_claim_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "account_pages_list_input": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "number",
          "minimum": 1,
          "maximum": 50,
          "description": "Maximum number of claimed pages to return."
        }
      },
      "additionalProperties": false
    },
    "account_pages_list_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pages": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "pageId": {
                "type": "string",
                "format": "uuid"
              },
              "slug": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "draft",
                  "published"
                ]
              },
              "isPublished": {
                "type": "boolean"
              },
              "previewUrl": {
                "type": "string"
              },
              "publishedUrl": {
                "type": "string"
              },
              "claimedAt": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "updatedAt": {
                "type": "string"
              }
            },
            "required": [
              "pageId",
              "slug",
              "title",
              "status",
              "isPublished",
              "previewUrl",
              "publishedUrl",
              "claimedAt",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "authRequired": {
          "type": "boolean",
          "description": "true when the session is an anonymous demo: it has no saved pages, so pages is empty. Not an error."
        },
        "authenticated": {
          "type": "boolean",
          "description": "false when no account is signed in to this chat (pages is then empty by definition); true for a signed-in account."
        },
        "nextStep": {
          "type": "string"
        }
      },
      "required": [
        "ok",
        "pages"
      ],
      "additionalProperties": false
    },
    "account_page_manage_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The claimed pageId to manage."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "account_page_manage_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_header_update_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "maxLength": 80,
          "description": "Visible display name in the page header."
        },
        "bio": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 280
            },
            {
              "type": "null"
            }
          ],
          "description": "Short bio under the display name. Pass null to clear it."
        },
        "verified": {
          "type": "boolean",
          "description": "Show a verified checkmark next to the display name."
        },
        "showQr": {
          "type": "boolean",
          "description": "Reserved: stored but not rendered yet, so no QR appears on the page. Do not promise a page QR; a save_contact block shows a scannable QR of the contact card."
        },
        "display": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "avatar",
                "photo_hero"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "Header style: photo_hero = large business-card top photo, avatar = small round profile photo. Pass null to clear it."
        },
        "label": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 80
            },
            {
              "type": "null"
            }
          ],
          "description": "Short role line near the name, e.g. \"Brand Designer \u00b7 Austin, TX\". Pass null to clear it."
        },
        "labelPosition": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "above_name",
                "below_name"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "photoUrl": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ],
          "description": "Header photo URL. Pass null to remove the current photo."
        },
        "photoAlt": {
          "type": "string",
          "maxLength": 160,
          "description": "Alt text for the header photo."
        },
        "photoObjectPosition": {
          "type": "string",
          "description": "CSS focal point for the photo_hero crop, e.g. \"50% 28%\"."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_header_update_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_theme_update_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "theme": {
          "type": "object",
          "description": "Partial theme patch. Provide only fields you want to change.",
          "properties": {
            "background": {
              "oneOf": [
                {
                  "type": "object",
                  "title": "solid",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "solid"
                      ]
                    },
                    "color": {
                      "type": "string",
                      "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
                    },
                    "filter": {
                      "type": "string",
                      "enum": [
                        "none",
                        "blur",
                        "dim"
                      ]
                    }
                  },
                  "required": [
                    "type",
                    "color"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "title": "gradient",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "gradient"
                      ]
                    },
                    "from": {
                      "type": "string",
                      "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
                    },
                    "to": {
                      "type": "string",
                      "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
                    },
                    "angle": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 360
                    },
                    "filter": {
                      "type": "string",
                      "enum": [
                        "none",
                        "blur",
                        "dim"
                      ]
                    }
                  },
                  "required": [
                    "type",
                    "from",
                    "to"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "title": "image",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "image"
                      ]
                    },
                    "src": {
                      "type": "string",
                      "description": "Background image URL."
                    },
                    "overlay": {
                      "type": "string",
                      "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
                    },
                    "filter": {
                      "type": "string",
                      "enum": [
                        "none",
                        "blur",
                        "dim"
                      ]
                    }
                  },
                  "required": [
                    "type",
                    "src"
                  ],
                  "additionalProperties": false
                }
              ],
              "description": "Page background. If supplied, include the background type and its required fields."
            },
            "text_color": {
              "type": "string",
              "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
            },
            "muted_text_color": {
              "type": "string",
              "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
            },
            "accent_color": {
              "type": "string",
              "description": "CSS color: hex, rgb()/rgba(), hsl()/hsla(), or named color."
            },
            "button": {
              "type": "object",
              "description": "Button style. When supplied, include variant, radius, and shadow.",
              "properties": {
                "variant": {
                  "type": "string",
                  "enum": [
                    "solid",
                    "outline",
                    "soft",
                    "surface"
                  ]
                },
                "radius": {
                  "type": "string",
                  "enum": [
                    "sharp",
                    "soft",
                    "pill"
                  ]
                },
                "shadow": {
                  "type": "string",
                  "enum": [
                    "none",
                    "soft",
                    "hard",
                    "lift"
                  ]
                }
              },
              "required": [
                "variant",
                "radius",
                "shadow"
              ],
              "additionalProperties": false
            },
            "font": {
              "type": "object",
              "description": "Font style. When supplied, include family and weight.",
              "properties": {
                "family": {
                  "type": "string",
                  "enum": [
                    "inter",
                    "geist",
                    "fraunces",
                    "space-grotesk",
                    "karla",
                    "bricolage-grotesque",
                    "newsreader",
                    "instrument-serif",
                    "archivo",
                    "hanken-grotesk"
                  ]
                },
                "weight": {
                  "type": "string",
                  "enum": [
                    "regular",
                    "medium",
                    "bold"
                  ]
                },
                "heading_family": {
                  "type": "string",
                  "enum": [
                    "inter",
                    "geist",
                    "fraunces",
                    "space-grotesk",
                    "karla",
                    "bricolage-grotesque",
                    "newsreader",
                    "instrument-serif",
                    "archivo",
                    "hanken-grotesk"
                  ],
                  "description": "Optional display font for the page name/headings, paired with family as the body font."
                },
                "heading_weight": {
                  "type": "string",
                  "enum": [
                    "regular",
                    "medium",
                    "bold"
                  ],
                  "description": "Heading weight. Defaults to bold."
                }
              },
              "required": [
                "family",
                "weight"
              ],
              "additionalProperties": false
            },
            "density": {
              "type": "string",
              "enum": [
                "compact",
                "comfortable",
                "roomy"
              ]
            },
            "icon_size": {
              "type": "string",
              "enum": [
                "sm",
                "md",
                "lg"
              ]
            }
          },
          "additionalProperties": false
        }
      },
      "required": [
        "pageId",
        "theme"
      ],
      "additionalProperties": false
    },
    "page_theme_update_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_meta_update_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "description": "Internal page title shown in editor results."
        },
        "slug": {
          "type": "string",
          "description": "Preferred public URL slug."
        },
        "seoTitle": {
          "type": "string",
          "description": "SEO <title> tag value."
        },
        "seoDescription": {
          "type": "string",
          "description": "SEO meta description value."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_meta_update_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_preview_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_preview_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_publish_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid",
          "description": "The pageId returned by page_create."
        },
        "editToken": {
          "type": "string",
          "description": "Required for anonymous demo pages. Use the editToken returned by page_create."
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_publish_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "page_unpublish_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        }
      },
      "required": [
        "pageId"
      ],
      "additionalProperties": false
    },
    "page_unpublish_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "block_update_input": {
      "type": "object",
      "description": "Patch one block. Choose the oneOf variant whose type matches the existing block, unless intentionally changing the block type.",
      "oneOf": [
        {
          "type": "object",
          "description": "Patch an existing block as link. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "link"
              ],
              "description": "Use this variant only for a link block."
            },
            "props": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "maxLength": 120
                },
                "url": {
                  "type": "string",
                  "maxLength": 2048,
                  "description": "Destination URL using http, https, mailto, tel, or sms."
                },
                "thumbnail": {
                  "type": "object",
                  "properties": {
                    "src": {
                      "type": "string",
                      "description": "Image URL or stored media URL."
                    },
                    "alt": {
                      "type": "string",
                      "description": "Alt text for accessibility."
                    },
                    "width": {
                      "type": "number"
                    },
                    "height": {
                      "type": "number"
                    },
                    "mediaAssetId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "variants": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "src"
                  ],
                  "additionalProperties": false
                },
                "icon": {
                  "type": "string",
                  "maxLength": 64
                },
                "highlight": {
                  "type": "boolean"
                },
                "width": {
                  "type": "string",
                  "enum": [
                    "full",
                    "half"
                  ],
                  "description": "half lets two consecutive half-width links render side by side as one row. Default full."
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as social_row. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "social_row"
              ],
              "description": "Use this variant only for a social_row block."
            },
            "props": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "maxItems": 16,
                  "items": {
                    "type": "object",
                    "properties": {
                      "platform": {
                        "type": "string",
                        "enum": [
                          "instagram",
                          "tiktok",
                          "youtube",
                          "x",
                          "facebook",
                          "linkedin",
                          "spotify",
                          "apple_music",
                          "soundcloud",
                          "github",
                          "pinterest",
                          "threads",
                          "twitch",
                          "discord",
                          "telegram",
                          "snapchat",
                          "vimeo",
                          "behance",
                          "dribbble",
                          "medium",
                          "substack",
                          "website",
                          "other",
                          "email",
                          "phone",
                          "whatsapp"
                        ]
                      },
                      "url": {
                        "type": "string",
                        "description": "For social platforms: a public http(s) profile URL. For contact platforms (email/phone/whatsapp): the bare email address or phone number \u2014 the page builds the mailto:/tel:/wa.me link."
                      },
                      "label": {
                        "type": "string",
                        "maxLength": 64
                      }
                    },
                    "required": [
                      "platform",
                      "url"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as whatsapp. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "whatsapp"
              ],
              "description": "Use this variant only for a whatsapp block."
            },
            "props": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string",
                  "maxLength": 32,
                  "description": "Public WhatsApp phone number."
                },
                "message": {
                  "type": "string",
                  "maxLength": 500,
                  "description": "Optional prefilled message."
                },
                "label": {
                  "type": "string",
                  "maxLength": 120
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as phone_call. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "phone_call"
              ],
              "description": "Use this variant only for a phone_call block."
            },
            "props": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string",
                  "maxLength": 32,
                  "description": "Public phone number."
                },
                "label": {
                  "type": "string",
                  "maxLength": 120
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as email_contact. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "email_contact"
              ],
              "description": "Use this variant only for a email_contact block."
            },
            "props": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string",
                  "description": "Public business email address."
                },
                "subject": {
                  "type": "string",
                  "maxLength": 160
                },
                "label": {
                  "type": "string",
                  "maxLength": 120
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as image. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "image"
              ],
              "description": "Use this variant only for a image block."
            },
            "props": {
              "type": "object",
              "properties": {
                "image": {
                  "type": "object",
                  "properties": {
                    "src": {
                      "type": "string",
                      "description": "Image URL or stored media URL."
                    },
                    "alt": {
                      "type": "string",
                      "description": "Alt text for accessibility."
                    },
                    "width": {
                      "type": "number"
                    },
                    "height": {
                      "type": "number"
                    },
                    "mediaAssetId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "variants": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "src"
                  ],
                  "additionalProperties": false
                },
                "layout": {
                  "type": "string",
                  "enum": [
                    "classic",
                    "wide",
                    "background"
                  ]
                },
                "caption": {
                  "type": "string",
                  "maxLength": 280
                },
                "link_url": {
                  "type": "string",
                  "maxLength": 2048
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as gallery. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "gallery"
              ],
              "description": "Use this variant only for a gallery block."
            },
            "props": {
              "type": "object",
              "properties": {
                "display": {
                  "type": "string",
                  "enum": [
                    "grid",
                    "carousel"
                  ]
                },
                "items": {
                  "type": "array",
                  "maxItems": 24,
                  "items": {
                    "type": "object",
                    "properties": {
                      "src": {
                        "type": "string",
                        "description": "Image URL or stored media URL."
                      },
                      "alt": {
                        "type": "string",
                        "description": "Alt text for accessibility."
                      },
                      "width": {
                        "type": "number"
                      },
                      "height": {
                        "type": "number"
                      },
                      "mediaAssetId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "variants": {
                        "type": "object",
                        "additionalProperties": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "src"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as video_embed. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "video_embed"
              ],
              "description": "Use this variant only for a video_embed block."
            },
            "props": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "youtube",
                    "vimeo",
                    "mp4"
                  ]
                },
                "video_id": {
                  "type": "string",
                  "maxLength": 2048,
                  "description": "Video id or URL, depending on provider."
                },
                "title": {
                  "type": "string",
                  "maxLength": 160
                },
                "thumbnail": {
                  "type": "object",
                  "properties": {
                    "src": {
                      "type": "string",
                      "description": "Image URL or stored media URL."
                    },
                    "alt": {
                      "type": "string",
                      "description": "Alt text for accessibility."
                    },
                    "width": {
                      "type": "number"
                    },
                    "height": {
                      "type": "number"
                    },
                    "mediaAssetId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "variants": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "src"
                  ],
                  "additionalProperties": false
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as text. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "text"
              ],
              "description": "Use this variant only for a text block."
            },
            "props": {
              "type": "object",
              "properties": {
                "heading": {
                  "type": "string",
                  "maxLength": 160
                },
                "body": {
                  "type": "string",
                  "maxLength": 2000
                },
                "items": {
                  "type": "array",
                  "maxItems": 12,
                  "items": {
                    "type": "string",
                    "maxLength": 280
                  }
                },
                "alignment": {
                  "type": "string",
                  "enum": [
                    "left",
                    "center"
                  ]
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as map_embed. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "map_embed"
              ],
              "description": "Use this variant only for a map_embed block."
            },
            "props": {
              "type": "object",
              "properties": {
                "address": {
                  "type": "string",
                  "maxLength": 400,
                  "description": "Public business address or service-area text."
                },
                "place_id": {
                  "type": "string",
                  "maxLength": 160
                },
                "lat": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90
                },
                "lng": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180
                },
                "label": {
                  "type": "string",
                  "maxLength": 160
                },
                "zoom": {
                  "type": "number",
                  "minimum": 1,
                  "maximum": 20
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as product_card. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "product_card"
              ],
              "description": "Use this variant only for a product_card block."
            },
            "props": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "maxLength": 160
                },
                "description": {
                  "type": "string",
                  "maxLength": 280
                },
                "price_text": {
                  "type": "string",
                  "maxLength": 40
                },
                "image": {
                  "type": "object",
                  "properties": {
                    "src": {
                      "type": "string",
                      "description": "Image URL or stored media URL."
                    },
                    "alt": {
                      "type": "string",
                      "description": "Alt text for accessibility."
                    },
                    "width": {
                      "type": "number"
                    },
                    "height": {
                      "type": "number"
                    },
                    "mediaAssetId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "variants": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "src"
                  ],
                  "additionalProperties": false
                },
                "buy_url": {
                  "type": "string",
                  "description": "Public http(s) purchase URL."
                },
                "cta_label": {
                  "type": "string",
                  "maxLength": 120
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as lead_form. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "lead_form"
              ],
              "description": "Use this variant only for a lead_form block."
            },
            "props": {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "contact",
                    "newsletter",
                    "booking_interest"
                  ]
                },
                "title": {
                  "type": "string",
                  "maxLength": 160
                },
                "description": {
                  "type": "string",
                  "maxLength": 280
                },
                "fields": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 5,
                  "items": {
                    "type": "string",
                    "enum": [
                      "name",
                      "email",
                      "phone",
                      "message",
                      "company"
                    ]
                  }
                },
                "field_labels": {
                  "type": "object",
                  "description": "Public labels/placeholders for form fields in the page's target language.",
                  "additionalProperties": {
                    "type": "string",
                    "maxLength": 120
                  }
                },
                "submit_label": {
                  "type": "string",
                  "maxLength": 120
                },
                "success_message": {
                  "type": "string",
                  "maxLength": 280
                },
                "consent_text": {
                  "type": "string",
                  "maxLength": 400
                },
                "destination_email": {
                  "type": "string",
                  "description": "Public/business lead recipient email."
                },
                "destination_webhook": {
                  "type": "string",
                  "description": "Public http(s) webhook URL."
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as reviews. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "reviews"
              ],
              "description": "Use this variant only for a reviews block."
            },
            "props": {
              "type": "object",
              "properties": {
                "display": {
                  "type": "string",
                  "enum": [
                    "carousel",
                    "stack"
                  ]
                },
                "items": {
                  "type": "array",
                  "maxItems": 12,
                  "items": {
                    "type": "object",
                    "properties": {
                      "author": {
                        "type": "string",
                        "maxLength": 64
                      },
                      "role": {
                        "type": "string",
                        "maxLength": 120
                      },
                      "body": {
                        "type": "string",
                        "maxLength": 280
                      },
                      "rating": {
                        "type": "number",
                        "minimum": 1,
                        "maximum": 5
                      },
                      "avatar": {
                        "type": "object",
                        "properties": {
                          "src": {
                            "type": "string",
                            "description": "Image URL or stored media URL."
                          },
                          "alt": {
                            "type": "string",
                            "description": "Alt text for accessibility."
                          },
                          "width": {
                            "type": "number"
                          },
                          "height": {
                            "type": "number"
                          },
                          "mediaAssetId": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "variants": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "src"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "author",
                      "body"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "description": "Patch an existing block as save_contact. Provide the block's current type unless intentionally changing it.",
          "properties": {
            "pageId": {
              "type": "string",
              "format": "uuid"
            },
            "editToken": {
              "type": "string"
            },
            "blockId": {
              "type": "string",
              "description": "The block id returned by block_add or page_get. Stable across reorders."
            },
            "type": {
              "type": "string",
              "enum": [
                "save_contact"
              ],
              "description": "Use this variant only for a save_contact block."
            },
            "props": {
              "type": "object",
              "properties": {
                "style": {
                  "type": "string",
                  "enum": [
                    "qr_card",
                    "button"
                  ],
                  "description": "qr_card renders a QR + caption footer; button renders a single save-contact button."
                },
                "title": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Short caption, e.g. \"Scan to save\"."
                },
                "subtitle": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Secondary caption, e.g. \"Adds my contact card\"."
                },
                "button_label": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Save button text, e.g. \"Save contact\"."
                }
              },
              "additionalProperties": false,
              "description": "Partial props patch for this block type. Include only fields you want to change."
            }
          },
          "required": [
            "pageId",
            "blockId",
            "type",
            "props"
          ],
          "additionalProperties": false
        }
      ]
    },
    "block_update_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "block_delete_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "blockId": {
          "type": "string"
        }
      },
      "required": [
        "pageId",
        "blockId"
      ],
      "additionalProperties": false
    },
    "block_delete_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    },
    "block_reorder_input": {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "editToken": {
          "type": "string"
        },
        "blockId": {
          "type": "string"
        },
        "toIndex": {
          "type": "number"
        }
      },
      "required": [
        "pageId",
        "blockId",
        "toIndex"
      ],
      "additionalProperties": false
    },
    "block_reorder_output": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "pageId": {
          "type": "string",
          "format": "uuid"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published"
          ]
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewUrl": {
          "type": "string"
        },
        "publishedUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "claimUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "editToken": {
          "type": [
            "string",
            "null"
          ]
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "isClaimed": {
          "type": "boolean"
        },
        "canPublish": {
          "type": "boolean"
        },
        "liveUpdateRequired": {
          "type": "boolean",
          "description": "True after an edit to an already-published page when the public live page still needs page_publish to reflect the latest revision."
        },
        "liveUpdateMessage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Plain-language instruction explaining that an edit to an already-published page is draft-only and must not be published until a later explicit user request."
        },
        "publishPolicy": {
          "type": [
            "string",
            "null"
          ],
          "description": "For edit tools on already-published pages, this is wait_for_separate_user_request to prevent same-turn publishing."
        },
        "missingFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "preview",
                  "publish",
                  "keep_editing",
                  "claim"
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "link",
                  "tool",
                  "chat"
                ]
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              },
              "arguments": {
                "type": "object",
                "additionalProperties": true
              },
              "prompt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "content": {
          "type": "object",
          "additionalProperties": true
        },
        "nextSteps": {
          "type": "array",
          "description": "Improvement hints. Only 'required' items block publishing (they mirror the publish guard); 'recommended' and 'optional' are suggestions to offer after the user has seen the preview, never prerequisites.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "priority": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "optional"
                ]
              },
              "message": {
                "type": "string"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "priority",
              "message"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "ok",
        "pageId",
        "slug",
        "title",
        "status",
        "isPublished",
        "previewUrl",
        "publishedUrl",
        "claimUrl",
        "editToken",
        "expiresAt",
        "isClaimed",
        "canPublish",
        "actions"
      ],
      "additionalProperties": true
    }
  }
}