{
  "openapi": "3.1.0",
  "info": {
    "title": "AI Property Research Public Surface",
    "version": "1.0.0",
    "description": "Public web surface for AI Property Research. Programmatic data access requires authentication via Lovable Cloud (Supabase). The endpoints below describe the public, agent-discoverable surface.",
    "contact": { "name": "AI Property Research", "url": "https://aipropertyresearch.com.au/contact" },
    "license": { "name": "Proprietary" }
  },
  "servers": [
    { "url": "https://aipropertyresearch.com.au", "description": "Production" }
  ],
  "paths": {
    "/": {
      "get": {
        "summary": "Homepage",
        "responses": { "200": { "description": "HTML homepage" } }
      }
    },
    "/sitemap.xml": {
      "get": {
        "summary": "Sitemap of all crawlable URLs",
        "responses": { "200": { "description": "XML sitemap" } }
      }
    },
    "/state/{stateSlug}": {
      "get": {
        "summary": "State profile page",
        "parameters": [
          { "name": "stateSlug", "in": "path", "required": true, "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "HTML state profile" } }
      }
    },
    "/city/{citySlug}": {
      "get": {
        "summary": "City profile page",
        "parameters": [
          { "name": "citySlug", "in": "path", "required": true, "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "HTML city profile" } }
      }
    },
    "/{stateSlug}/{citySlug}/{suburbSlug}": {
      "get": {
        "summary": "Suburb landing page",
        "parameters": [
          { "name": "stateSlug", "in": "path", "required": true, "schema": { "type": "string" } },
          { "name": "citySlug", "in": "path", "required": true, "schema": { "type": "string" } },
          { "name": "suburbSlug", "in": "path", "required": true, "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "HTML suburb profile" } }
      }
    },
    "/blog": {
      "get": {
        "summary": "Blog index",
        "responses": { "200": { "description": "HTML blog list" } }
      }
    },
    "/blog/{slug}": {
      "get": {
        "summary": "Blog post",
        "parameters": [
          { "name": "slug", "in": "path", "required": true, "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "HTML blog post" } }
      }
    }
  }
}
