{
  "openapi": "3.0.3",
  "info": {
    "title": "Resi V1 API",
    "version": "1.0.0",
    "description": "The **delivery API**: pre-composed, render-ready payloads for a single property, plus the public write endpoints a property website or widget needs.\n\nReach for V1 when you are rendering one property's public presence. Reach for the [V2 management API](https://v2.getresi.com/api/v2) when you are managing data across an account.\n\n## Authentication\n\n**None.** Every V1 endpoint is public — these endpoints are called from property websites and public forms, where no secret can be held.\n\nTwo consequences worth being deliberate about:\n\n- **Anything on a property record is effectively public.** Internal notes, staging URLs, or unpublished content that lands in a V1 payload is readable by anyone holding the property id — and property ids appear in the page source of every Resi-built site.\n- **Only lead submission, tour booking, demand events, source observations, and cache purge accept writes.** Everything else is read-only; there is no way to modify a property through V1.\n\n## Addressing a property\n\nRecords are addressed by **UUID**. Every `/property/{property}` route takes a property UUID, and `/property/{property}/unit/{unit}` takes a unit UUID:\n\n```\nGET /api/v1/property/019dbc38-d49e-7310-95d4-711a5b7a4b40\n```\n\nA value that is not in UUID form is a `404`, the same as an unknown id.\n\n**Slug addressing lives on the portfolio routes.** Because these endpoints are unauthenticated, a slug in an unscoped path would let anyone walk every account's properties from a name read off a public website. So a portfolio site addresses its pages by slug under its own connection instead:\n\n```\nGET /api/v1/connection/{connection}/property/1520-gough-street\nGET /api/v1/connection/{connection}/property/1520-gough-street/floor-plans\n```\n\nThose routes resolve the slug against the properties attached to that connection, so a slug belonging to another portfolio is a `404` rather than someone else's property rendered on your domain. They accept slugs only — pass a UUID and you get a `404`.\n\nNote that a slug is editable and an id is not: if you cache by the path segment, a renamed property serves stale content until its cache entry expires or is purged. Cache by id when that matters.\n\n## Conventions\n\n- **V1 payload casing is mixed for legacy compatibility.** Follow each endpoint schema exactly; V2 payloads consistently use snake_case. Normalize at your boundary.\n- Most resource responses are wrapped in a `data` envelope. Legacy media, neighborhood, content-conditionals, website, widget, and lead-source configuration endpoints return an unwrapped object. There is no pagination.\n- Money is returned as a JSON **number**.\n- Timestamps are UTC ISO-8601.\n- Errors use `{\"error\": \"...\"}` on V1, where V2 uses `{\"message\": \"...\"}`. Validation failures use `{\"message\", \"errors\"}`. Parse defensively.\n- Responses may gain fields without a version bump. Deserialize permissively — an unrecognized key must never throw.\n\n## Rate limits\n\n| Endpoint | Limit | Keyed by |\n| --- | --- | --- |\n| `POST /demand-events` | 120/min | IP |\n| `POST /source-observations` | 240/min | IP |\n| `POST /cache/clear` | 30/min | Target property or portfolio id |\n| `POST /leads`, `POST /tour/*` | **none** | — |\n| All `GET` endpoints | **none** | — |\n\nLead and tour writes are unthrottled: set your own abuse controls in front of them.\n\n## Caching\n\n| Endpoints | Suggested TTL |\n| --- | --- |\n| `/units`, `/unit-types`, `/floor-plans` | 5–15 minutes |\n| `/property`, `/amenities`, `/fees`, `/buildings` | 1 hour |\n| `/galleries`, `/faqs`, `/reviews`, `/neighborhood`, `/content-groups`, `/panels` | 6–24 hours |\n| `/unit/{unit}/price-matrix` | 24 hours, per unit |\n| `/forms`, `/integrations` | 1 hour — but re-fetch `/forms` after a lead submission returns `404` |\n"
  },
  "servers": [
    {
      "url": "{baseUrl}",
      "description": "Resi API host",
      "variables": {
        "baseUrl": {
          "default": "https://v2.getresi.com",
          "enum": [
            "https://v2.getresi.com"
          ],
          "description": "V1 routes are served from the same host as V2."
        }
      }
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Property",
      "description": "The property profile, its amenities and its fees."
    },
    {
      "name": "Inventory",
      "description": "Units, floor plans, unit types, buildings, and lease-term pricing."
    },
    {
      "name": "Content",
      "description": "Marketing content: galleries, media, FAQs, reviews, announcements, content blocks, neighborhood."
    },
    {
      "name": "Configuration",
      "description": "Website, widget, group and integration configuration for the property."
    },
    {
      "name": "Leads",
      "description": "Form discovery, lead sources, and public lead submission."
    },
    {
      "name": "Tours",
      "description": "Live tour availability and booking, proxied to the property's tour provider."
    },
    {
      "name": "Analytics",
      "description": "Demand funnel events and traffic-source observations."
    },
    {
      "name": "Operations",
      "description": "Cache purge."
    },
    {
      "name": "Connections",
      "description": "Public delivery endpoints backed by portfolio and merged-property connections."
    }
  ],
  "paths": {
    "/api/v1/property/{property}": {
      "get": {
        "tags": [
          "Property"
        ],
        "operationId": "v1GetProperty",
        "summary": "Get a property",
        "description": "The property profile a website renders: contact details, urls, tags, media, the street address and coordinates, and the availability and rent rollups.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Property"
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/units": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "operationId": "v1GetPropertyUnits",
        "summary": "List units",
        "description": "Every unit on the property, denormalized with building and floor-plan context and a per-fee pricing breakdown.\n\nFilter before display: a unit is publicly marketable only when `unitAvailable` is true and `unitModel` and `unitGuestSuite` are false.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Unit"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property or group not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/floor-plans": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "operationId": "v1GetPropertyFloorPlans",
        "summary": "List floor plans",
        "description": "Floor plans with media, pricing rollups, and availability counts across the units that use them.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/FloorPlan"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property or group not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/unit-types": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "operationId": "v1GetPropertyUnitTypes",
        "summary": "List unit types",
        "description": "Floor plans grouped by bedroom count, with square-footage and pricing ranges rolled up. The usual source for a \"1 / 2 / 3 bedroom\" summary.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UnitType"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/buildings": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "operationId": "v1GetPropertyBuildings",
        "summary": "List buildings",
        "description": "Buildings on the property, each with a count of its available units.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Building"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property or group not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/amenities": {
      "get": {
        "tags": [
          "Property"
        ],
        "operationId": "v1GetPropertyAmenities",
        "summary": "List amenities",
        "description": "Enabled amenities attached to the property. Non-marketable amenities are also excluded unless the resolved display settings allow them.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Amenity"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/fees": {
      "get": {
        "tags": [
          "Property"
        ],
        "operationId": "v1GetPropertyFees",
        "summary": "Fee schedule",
        "description": "The property's **effective** fee schedule: property-scope assignments with their overrides applied, expired and future windows excluded, every requirement disclosed, and unit-type or floor-plan restrictions carried on each line rather than filtered (there is no unit in context to filter by). Replaced the raw catalog listing this path used to return, which ignored per-property assignment overrides and never checked effective windows.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "fees": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "description": "One resolved fee line. Same shape as the fee lines embedded in unit, floor-plan and unit-type payloads.",
                            "properties": {
                              "code": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string",
                                "nullable": true
                              },
                              "class": {
                                "type": "string"
                              },
                              "currency": {
                                "type": "string"
                              },
                              "requirement": {
                                "type": "string",
                                "description": "Mandatory | Optional | Conditional | Situational | Included. Only Mandatory lines enter the totals.",
                                "nullable": true
                              },
                              "frequency": {
                                "type": "string",
                                "nullable": true
                              },
                              "lifecycle": {
                                "type": "string",
                                "nullable": true
                              },
                              "basis": {
                                "type": "string",
                                "nullable": true
                              },
                              "refundability": {
                                "type": "string",
                                "nullable": true
                              },
                              "calculated_amount": {
                                "type": "number",
                                "nullable": true
                              },
                              "calculated_amount_max": {
                                "type": "number",
                                "nullable": true
                              },
                              "monthly_equivalent": {
                                "type": "number"
                              },
                              "monthly_equivalent_max": {
                                "type": "number"
                              },
                              "included_in_tmlp": {
                                "type": "boolean"
                              },
                              "is_variable": {
                                "type": "boolean",
                                "description": "No resolvable amount, so the line is disclosed but never totaled."
                              },
                              "term_restricted": {
                                "type": "boolean"
                              },
                              "source_scope": {
                                "type": "string",
                                "description": "UNIT | FLOOR_PLAN | PROPERTY."
                              },
                              "unit_types": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "type": "string"
                                },
                                "description": "Bedroom counts this fee is restricted to, disclosed rather than filtered because this schedule has no unit in context."
                              },
                              "floor_plans": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "type": "string"
                                },
                                "description": "Floor plans this fee is restricted to, by name, disclosed for the same reason."
                              },
                              "fee_id": {
                                "type": "string",
                                "format": "uuid"
                              }
                            },
                            "additionalProperties": false,
                            "required": [
                              "code",
                              "name",
                              "description",
                              "class",
                              "currency",
                              "requirement",
                              "frequency",
                              "lifecycle",
                              "basis",
                              "refundability",
                              "calculated_amount",
                              "calculated_amount_max",
                              "monthly_equivalent",
                              "monthly_equivalent_max",
                              "included_in_tmlp",
                              "is_variable",
                              "term_restricted",
                              "source_scope",
                              "unit_types",
                              "floor_plans",
                              "fee_id"
                            ]
                          }
                        },
                        "monthlyFeeTotal": {
                          "type": "number",
                          "nullable": true,
                          "description": "Monthly-equivalent total of the mandatory lines. Null when pricing display settings hide totals."
                        },
                        "monthlyFeeTotalMax": {
                          "type": "number",
                          "nullable": true,
                          "description": "The same total at the maximum price point; differs when percentage-of-base-rent fees are configured."
                        },
                        "upfrontFeeTotal": {
                          "type": "number",
                          "nullable": true,
                          "description": "One-time mandatory charges, never part of the monthly total."
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "fees",
                        "monthlyFeeTotal",
                        "monthlyFeeTotalMax",
                        "upfrontFeeTotal"
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/galleries": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyGalleries",
        "summary": "List galleries",
        "description": "Enabled property galleries with images, videos, and virtual tours.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Gallery"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/media": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyMedia",
        "summary": "Get property media",
        "description": "Legacy unwrapped media payload. Only the first gallery of each supported media type is used.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/faqs": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyFaqs",
        "summary": "List FAQs",
        "description": "FAQ entries attached to the property. The current model has no publication-status filter.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Faq"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/reviews": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyReviews",
        "summary": "List reviews",
        "description": "Published reviews. Confirm syndication rights with the client before re-displaying or marking these up as structured data — some review sources prohibit it.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Review"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/announcements": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyAnnouncements",
        "summary": "List announcements",
        "description": "Enabled announcements active at request time.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Announcement"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/content-groups": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyContentGroups",
        "summary": "List content blocks",
        "description": "Enabled content blocks (content groups) with enabled nested content items. Optionally filter the collection by comma-separated website connection keys.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          },
          {
            "$ref": "#/components/parameters/WebsiteConnectionKeysFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ContentBlock"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "The website_connection_keys parameter is not a string.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/content-conditionals": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyContentConditionals",
        "summary": "Get content conditionals",
        "description": "Flags indicating which content sections have renderable content, so a template can skip empty sections.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentConditionals"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/neighborhood": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyNeighborhood",
        "summary": "Get neighborhood",
        "description": "The property's address plus its neighborhood categories and places, shaped for a map view.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Neighborhood"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/panels": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyPanels",
        "summary": "List panels",
        "description": "Configured page panels/sections for the property's site.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Panel"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/property/{property}/lists": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyLists",
        "summary": "List lists",
        "description": "Configured lists for the property's site.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/List"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/property/{property}/website": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "operationId": "v1GetPropertyWebsite",
        "summary": "Get website configuration",
        "description": "Website configuration for the property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteConfiguration"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/property/{property}/widget": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "operationId": "v1GetPropertyWidget",
        "summary": "Get widget configuration",
        "description": "Embeddable widget configuration for the property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WidgetConfiguration"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/property/{property}/groups": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "operationId": "v1GetPropertyGroups",
        "summary": "List group sets",
        "description": "Account-wide and property-scoped group-set definitions available to the property, including their nested group trees.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GroupSet"
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/forms": {
      "get": {
        "tags": [
          "Leads"
        ],
        "operationId": "v1GetPropertyForms",
        "summary": "List forms",
        "description": "Enabled forms for the property, with field definitions and the CRM destinations each routes to.\n\nDiscover the `form_id` here rather than hardcoding it, and re-fetch when lead submission returns a `404`, which means the form no longer exists. A `422` is about the submitted values (email, `form_id`, dates), not the form.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Form"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/lead-sources": {
      "get": {
        "tags": [
          "Leads"
        ],
        "operationId": "v1GetPropertyLeadSources",
        "summary": "List lead sources",
        "description": "Lead sources configured on the property. Use a source's `code` as `resi_source_key` when submitting leads so your traffic is attributed.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSourcesResponse"
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/integrations": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "operationId": "v1GetPropertyIntegrations",
        "summary": "List integrations",
        "description": "Connections attached to the property, with secrets stripped. Tour-capable entries carry the `id` you pass as `connection_id` to the tour endpoints.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Integration"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/unit/{unit}/price-matrix": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "operationId": "v1GetUnitPriceMatrix",
        "summary": "Get a unit's lease-term price matrix",
        "description": "Term-by-term pricing for one unit, ordered by lease start date.\n\n**Two behaviors to design around.**\n\n1. *Live PMS fallback.* When Resi holds no stored matrix for the unit, it queries the property's PMS connection in real time and normalizes the result. That is materially slower than a database read and depends on the PMS being reachable. Set a generous client timeout; never call this in a loop across a portfolio.\n2. *An empty array is a legitimate answer.* No PMS connection, no matrix from the provider, or a unit without term pricing all return `[]`. Fall back to the unit's rent range rather than showing nothing.\n\nCall it lazily on unit detail and cache per unit per day.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          },
          {
            "$ref": "#/components/parameters/UnitPath"
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Return only the row for this lease start date (YYYY-MM-DD). Omit for all dates."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. May be an empty array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PriceMatrixRow"
                      }
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property (or unit) not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/leads": {
      "post": {
        "tags": [
          "Leads"
        ],
        "operationId": "v1CreateLead",
        "summary": "Submit a lead",
        "description": "Creates a lead in Resi and triggers the client's leasing workflow: email notifications per the form's settings, a push through the form's CRM connections, and a `lead_submitted` demand event.\n\n**The payload is intentionally open.** Only `form_id` and `email` are validated; every other key you send is stored on the lead and forwarded to the client's CRM. Send the full context you collected — `first_name`, `phone`, `bedrooms`, `pets`, `message` — as flat top-level keys. Do not nest.\n\n**Attribution.** `resi_source_key` is matched exactly against a lead source `code` on the property and is the reliable path; `resi_source_name` is a normalized display-name fallback. Without either, the lead is stored unattributed and your traffic is invisible in the client's reporting.\n\n**No idempotency and no rate limit.** A retried request creates a second lead. Deduplicate on your side before retrying, and put your own spam controls (CAPTCHA, honeypot, edge rate limit) in front of the form.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "form_id": {
                    "type": "string",
                    "description": "Required. The form this submission belongs to — discover it from GET /property/{property}/forms."
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Required."
                  },
                  "property_id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Defaults to the form's first property. Send it when a form spans several properties. An id outside the form's account is silently ignored and the default is used."
                  },
                  "move_in_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "tour_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "resi_source_key": {
                    "type": "string",
                    "nullable": true,
                    "description": "Lead source `code` to attribute this lead to."
                  },
                  "resi_source_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "Display-name fallback for attribution."
                  },
                  "first_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "last_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "phone": {
                    "type": "string",
                    "nullable": true
                  },
                  "message": {
                    "type": "string",
                    "nullable": true
                  },
                  "lead_source_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "Legacy display-name attribution alias for resi_source_name."
                  }
                },
                "required": [
                  "form_id",
                  "email"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Lead created. Render `message` to the renter — it is the form's configured success copy.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The form or property was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "$ref": "#/components/schemas/MessageError"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tour/get-availability": {
      "post": {
        "tags": [
          "Tours"
        ],
        "operationId": "v1GetTourAvailability",
        "summary": "Check tour availability",
        "description": "Queries the property’s configured tour provider live and returns available slots. Booking fields are published by GET /api/v1/property/{property}/integrations under tour_types[].schema.fields. Because this proxies to a third party, clients should handle 502 responses by falling back to the lead form.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TourGetAvailabilityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Available tour dates and time slots.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TourGetAvailabilityResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed, the property or connection is invalid, or the tour type is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationError"
                    }
                  ]
                }
              }
            }
          },
          "502": {
            "description": "The tour provider was unreachable or failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tour/reserve": {
      "post": {
        "tags": [
          "Tours"
        ],
        "operationId": "v1ReserveTour",
        "summary": "Reserve a tour",
        "description": "Books a slot with the property’s tour provider and creates a lead in Resi. Beyond the five base fields, required booking fields come from GET /api/v1/property/{property}/integrations under tour_types[].schema.fields. tour_date must be YYYY-MM-DD and tour_time must be 24-hour HH:MM. A 409 means the selected slot is no longer available.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TourReserveRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Tour reserved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Validation failed or the provider rejected the booking.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationError"
                    }
                  ]
                }
              }
            }
          },
          "502": {
            "description": "The tour provider was unreachable or failed. Retryable — but not immediately.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "The selected tour time is no longer available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/demand-events": {
      "post": {
        "tags": [
          "Analytics"
        ],
        "operationId": "v1CreateDemandEvent",
        "summary": "Record a demand event",
        "description": "Records renter behavior into Resi's demand funnel. If you render Resi data in your own UI, sending these gives the client attribution for the engagement you drive.\n\n**Only browser-ingestible types are accepted.** `lead_submitted`, `tour_reserved`, `tour_availability_checked` and `apply_intent_clicked` are recorded server-side by Resi when you call the lead and tour endpoints — sending them yourself double-counts the client's funnel.\n\nRate limit: 120 requests/minute per IP.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event_type": {
                    "type": "string",
                    "enum": [
                      "unit_viewed",
                      "floor_plan_viewed",
                      "price_matrix_loaded",
                      "lease_term_selected",
                      "move_in_date_changed",
                      "fee_breakdown_viewed",
                      "fee_calculator_opened",
                      "apply_clicked",
                      "tour_modal_opened",
                      "form_started",
                      "form_submitted"
                    ],
                    "description": "Awareness: unit_viewed, floor_plan_viewed, price_matrix_loaded. Consideration: lease_term_selected, move_in_date_changed, fee_breakdown_viewed, fee_calculator_opened. Intent: apply_clicked, tour_modal_opened, form_started. Conversion: form_submitted."
                  },
                  "property_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "occurred_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "form_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  },
                  "lead_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  },
                  "unit_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  },
                  "floor_plan_id": {
                    "type": "string",
                    "format": "uuid",
                    "nullable": true
                  },
                  "lead_source_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "lead_source_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_key": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_external_source_field": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_query": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_timestamp": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_method": {
                    "type": "string",
                    "nullable": true
                  },
                  "session_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "anonymous_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "move_in_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "start_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true
                  },
                  "lease_term_months": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 36,
                    "nullable": true
                  },
                  "term": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 36,
                    "nullable": true
                  },
                  "displayed_base_rent": {
                    "type": "integer",
                    "minimum": 0,
                    "nullable": true
                  },
                  "displayed_tmlp": {
                    "type": "integer",
                    "minimum": 0,
                    "nullable": true
                  },
                  "displayed_fee_total": {
                    "type": "integer",
                    "minimum": 0,
                    "nullable": true
                  },
                  "destination_url": {
                    "type": "string",
                    "nullable": true
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "additionalProperties": true
                  }
                },
                "required": [
                  "event_type",
                  "property_id"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Event recorded.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "event_type": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "example": "recorded"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. Honor the Retry-After header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/source-observations": {
      "post": {
        "tags": [
          "Analytics"
        ],
        "operationId": "v1CreateSourceObservation",
        "summary": "Record a source observation",
        "description": "Records the traffic-source signals present on a page view — landing URL, referrer, query parameters, click ids — so Resi can resolve them to a lead source. Typically emitted once per session by the Resi pixel.\n\nThe response reports how the observation resolved, which is the fastest way to verify your attribution setup is working.\n\nRate limit: 240 requests/minute per IP.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "property_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "occurred_at": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "session_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "anonymous_id": {
                    "type": "string",
                    "nullable": true
                  },
                  "landing_url": {
                    "type": "string",
                    "maxLength": 4096,
                    "nullable": true
                  },
                  "current_url": {
                    "type": "string",
                    "maxLength": 4096,
                    "nullable": true
                  },
                  "path": {
                    "type": "string",
                    "maxLength": 2048,
                    "nullable": true
                  },
                  "referrer": {
                    "type": "string",
                    "maxLength": 4096,
                    "nullable": true
                  },
                  "query_params": {
                    "type": "object",
                    "nullable": true,
                    "additionalProperties": true
                  },
                  "click_ids": {
                    "type": "object",
                    "nullable": true,
                    "additionalProperties": true,
                    "description": "e.g. gclid, fbclid, msclkid."
                  },
                  "external_source_field": {
                    "type": "string",
                    "nullable": true
                  },
                  "external_source_value": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_key": {
                    "type": "string",
                    "nullable": true
                  },
                  "resi_source_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "match_status": {
                    "type": "string",
                    "nullable": true
                  },
                  "metadata": {
                    "type": "object",
                    "nullable": true,
                    "additionalProperties": true
                  }
                },
                "required": [
                  "property_id"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Observation recorded, with how it resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "status": {
                      "type": "string",
                      "description": "Match status of the resolution."
                    },
                    "lead_source_id": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true
                    },
                    "resi_source_key": {
                      "type": "string",
                      "nullable": true
                    },
                    "resi_source_name": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. Honor the Retry-After header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/cache/clear": {
      "post": {
        "tags": [
          "Operations"
        ],
        "operationId": "v1ClearCache",
        "summary": "Purge the website cache for a property or portfolio",
        "description": "Purges the page cache of the website host connected to the target (Kinsta or WP Engine), and of any merged parent property's site. It does not reach any other CDN — wire your own revalidation alongside it.\n\nExactly one of `property_id` or `portfolio_id` is required; sending both is rejected.\n\nReturns `202` unconditionally, including when the target does not exist or has nothing clearable — it does not confirm that a purge occurred, and it deliberately does not disclose whether the id is real.\n\nRate limit: 30 requests/minute, keyed on the target id rather than the caller's IP.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "property_id"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "property_id": {
                        "type": "string",
                        "format": "uuid"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "portfolio_id"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "portfolio_id": {
                        "type": "string",
                        "format": "uuid"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "Accepted"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. Honor the Retry-After header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/property/{property}/instagram": {
      "get": {
        "tags": [
          "Content"
        ],
        "operationId": "v1GetPropertyInstagram",
        "summary": "List Instagram posts",
        "description": "Synced posts from the property’s enabled Instagram connection. Returns an empty collection when none is configured.",
        "parameters": [
          {
            "$ref": "#/components/parameters/PropertyPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Instagram posts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InstagramFeedPost"
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Property not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/parent-property": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetMergedParentProperty",
        "summary": "Get a merged parent property",
        "description": "Parent property profile with inventory rollups spanning the enabled parent and child properties.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Merged property profile.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MergedProperty"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection or valid merged parent property not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/floor-plans": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetMergedFloorPlans",
        "summary": "List merged floor plans",
        "description": "Inventory combined from the enabled merged parent and child properties.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Merged inventory.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MergedFloorPlan"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection, merged parent property, or group not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/units": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetMergedUnits",
        "summary": "List merged units",
        "description": "Inventory combined from the enabled merged parent and child properties.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Merged inventory.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MergedUnit"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection, merged parent property, or group not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/unit-types": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetMergedUnitTypes",
        "summary": "List merged unit types",
        "description": "Bedroom-count rollups across the enabled merged parent and child properties.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Merged unit types.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MergedUnitType"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection or valid merged parent property not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/properties": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioProperties",
        "summary": "List connection properties",
        "description": "Enabled properties attached to an enabled connection. Disabled properties are omitted, so this list agrees with the per-property portfolio routes, which 404 them. The current endpoint does not enforce a specific connection type.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Attached properties.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Property"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found or disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioProperty",
        "summary": "Get a property",
        "description": "The property profile a website renders: contact details, urls, tags, media, and — unlike the V2 property resource — the street address, coordinates and availability rollups. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Property"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/amenities": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyAmenities",
        "summary": "List amenities",
        "description": "Enabled amenities attached to the property. Non-marketable amenities are also excluded unless the resolved display settings allow them. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Amenity"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/fees": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyFees",
        "summary": "Fee schedule",
        "description": "The property's **effective** fee schedule: property-scope assignments with their overrides applied, expired and future windows excluded, every requirement disclosed, and unit-type or floor-plan restrictions carried on each line rather than filtered (there is no unit in context to filter by). Replaced the raw catalog listing this path used to return, which ignored per-property assignment overrides and never checked effective windows. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "fees": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "description": "One resolved fee line. Same shape as the fee lines embedded in unit, floor-plan and unit-type payloads.",
                            "properties": {
                              "code": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string",
                                "nullable": true
                              },
                              "class": {
                                "type": "string"
                              },
                              "currency": {
                                "type": "string"
                              },
                              "requirement": {
                                "type": "string",
                                "description": "Mandatory | Optional | Conditional | Situational | Included. Only Mandatory lines enter the totals.",
                                "nullable": true
                              },
                              "frequency": {
                                "type": "string",
                                "nullable": true
                              },
                              "lifecycle": {
                                "type": "string",
                                "nullable": true
                              },
                              "basis": {
                                "type": "string",
                                "nullable": true
                              },
                              "refundability": {
                                "type": "string",
                                "nullable": true
                              },
                              "calculated_amount": {
                                "type": "number",
                                "nullable": true
                              },
                              "calculated_amount_max": {
                                "type": "number",
                                "nullable": true
                              },
                              "monthly_equivalent": {
                                "type": "number"
                              },
                              "monthly_equivalent_max": {
                                "type": "number"
                              },
                              "included_in_tmlp": {
                                "type": "boolean"
                              },
                              "is_variable": {
                                "type": "boolean",
                                "description": "No resolvable amount, so the line is disclosed but never totaled."
                              },
                              "term_restricted": {
                                "type": "boolean"
                              },
                              "source_scope": {
                                "type": "string",
                                "description": "UNIT | FLOOR_PLAN | PROPERTY."
                              },
                              "unit_types": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "type": "string"
                                },
                                "description": "Bedroom counts this fee is restricted to, disclosed rather than filtered because this schedule has no unit in context."
                              },
                              "floor_plans": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "type": "string"
                                },
                                "description": "Floor plans this fee is restricted to, by name, disclosed for the same reason."
                              },
                              "fee_id": {
                                "type": "string",
                                "format": "uuid"
                              }
                            },
                            "additionalProperties": false,
                            "required": [
                              "code",
                              "name",
                              "description",
                              "class",
                              "currency",
                              "requirement",
                              "frequency",
                              "lifecycle",
                              "basis",
                              "refundability",
                              "calculated_amount",
                              "calculated_amount_max",
                              "monthly_equivalent",
                              "monthly_equivalent_max",
                              "included_in_tmlp",
                              "is_variable",
                              "term_restricted",
                              "source_scope",
                              "unit_types",
                              "floor_plans",
                              "fee_id"
                            ]
                          }
                        },
                        "monthlyFeeTotal": {
                          "type": "number",
                          "nullable": true,
                          "description": "Monthly-equivalent total of the mandatory lines. Null when pricing display settings hide totals."
                        },
                        "monthlyFeeTotalMax": {
                          "type": "number",
                          "nullable": true,
                          "description": "The same total at the maximum price point; differs when percentage-of-base-rent fees are configured."
                        },
                        "upfrontFeeTotal": {
                          "type": "number",
                          "nullable": true,
                          "description": "One-time mandatory charges, never part of the monthly total."
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "fees",
                        "monthlyFeeTotal",
                        "monthlyFeeTotalMax",
                        "upfrontFeeTotal"
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Property not found in this portfolio.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/floor-plans": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyFloorPlans",
        "summary": "List floor plans",
        "description": "Floor plans with media, pricing rollups, and availability counts across the units that use them. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/FloorPlan"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/galleries": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyGalleries",
        "summary": "List galleries",
        "description": "Enabled property galleries with images, videos, and virtual tours. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Gallery"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/media": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyMedia",
        "summary": "Get property media",
        "description": "Legacy unwrapped media payload. Only the first gallery of each supported media type is used. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/panels": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyPanels",
        "summary": "List panels",
        "description": "Configured page panels/sections for the property's site. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/connection/{connection}/property/{property}/units": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyUnits",
        "summary": "List units",
        "description": "Every unit on the property, denormalized with building and floor-plan context and a per-fee pricing breakdown.\n\nFilter before display: a unit is publicly marketable only when `unitAvailable` is true and `unitModel` and `unitGuestSuite` are false. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Unit"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/unit-types": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyUnitTypes",
        "summary": "List unit types",
        "description": "Floor plans grouped by bedroom count, with square-footage and pricing ranges rolled up. The usual source for a \"1 / 2 / 3 bedroom\" summary. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UnitType"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/website": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyWebsite",
        "summary": "Get website configuration",
        "description": "Website configuration for the property. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteConfiguration"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/connection/{connection}/property/{property}/buildings": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyBuildings",
        "summary": "List buildings",
        "description": "Buildings on the property, each with a count of its available units. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          },
          {
            "$ref": "#/components/parameters/GroupFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Building"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          },
          "422": {
            "description": "The group query parameter is not a UUID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/faqs": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyFaqs",
        "summary": "List FAQs",
        "description": "FAQ entries attached to the property. The current model has no publication-status filter. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Faq"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/reviews": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyReviews",
        "summary": "List reviews",
        "description": "Published reviews. Confirm syndication rights with the client before re-displaying or marking these up as structured data — some review sources prohibit it. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Review"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/announcements": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyAnnouncements",
        "summary": "List announcements",
        "description": "Enabled announcements active at request time. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Announcement"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/content-groups": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyContentGroups",
        "summary": "List content blocks",
        "description": "Enabled content blocks (content groups) with enabled nested content items. Optionally filter the collection by comma-separated website connection keys. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          },
          {
            "$ref": "#/components/parameters/WebsiteConnectionKeysFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ContentBlock"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "The website_connection_keys parameter is not a string.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/content-conditionals": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyContentConditionals",
        "summary": "Get content conditionals",
        "description": "Flags indicating which content sections have renderable content, so a template can skip empty sections. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentConditionals"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/neighborhood": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyNeighborhood",
        "summary": "Get neighborhood",
        "description": "The property's address plus its neighborhood categories and places, shaped for a map view. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Neighborhood"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/lists": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyLists",
        "summary": "List lists",
        "description": "Configured lists for the property's site. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/connection/{connection}/property/{property}/widget": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyWidget",
        "summary": "Get widget configuration",
        "description": "Embeddable widget configuration for the property. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WidgetConfiguration"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/v1/connection/{connection}/property/{property}/groups": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyGroups",
        "summary": "List group sets",
        "description": "Account-wide and property-scoped group-set definitions available to the property, including their nested group trees. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GroupSet"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/forms": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyForms",
        "summary": "List forms",
        "description": "Enabled forms for the property, with field definitions and the CRM destinations each routes to.\n\nDiscover the `form_id` here rather than hardcoding it, and re-fetch when lead submission returns a `404`, which means the form no longer exists. A `422` is about the submitted values (email, `form_id`, dates), not the form. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Form"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/lead-sources": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyLeadSources",
        "summary": "List lead sources",
        "description": "Lead sources configured on the property. Use a source's `code` as `resi_source_key` when submitting leads so your traffic is attributed. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSourcesResponse"
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/integrations": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyIntegrations",
        "summary": "List integrations",
        "description": "Connections attached to the property, with secrets stripped. Tour-capable entries carry the `id` you pass as `connection_id` to the tour endpoints. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Integration"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/unit/{unit}/price-matrix": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyUnitPriceMatrix",
        "summary": "Get a unit's lease-term price matrix",
        "description": "Term-by-term pricing for one unit, ordered by lease start date.\n\n**Two behaviors to design around.**\n\n1. *Live PMS fallback.* When Resi holds no stored matrix for the unit, it queries the property's PMS connection in real time and normalizes the result. That is materially slower than a database read and depends on the PMS being reachable. Set a generous client timeout; never call this in a loop across a portfolio.\n2. *An empty array is a legitimate answer.* No PMS connection, no matrix from the provider, or a unit without term pricing all return `[]`. Fall back to the unit's rent range rather than showing nothing.\n\nCall it lazily on unit detail and cache per unit per day. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property. `{unit}` is a slug too, resolved against the route property's units — unlike the unscoped route, a unit served through a merged connection is not reachable here.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioUnitSlugPath"
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Return only the row for this lease start date (YYYY-MM-DD). Omit for all dates."
          }
        ],
        "responses": {
          "200": {
            "description": "Success. May be an empty array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PriceMatrixRow"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio, is disabled, or does not own the unit.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/connection/{connection}/property/{property}/instagram": {
      "get": {
        "tags": [
          "Connections"
        ],
        "operationId": "v1GetPortfolioPropertyInstagram",
        "summary": "List Instagram posts",
        "description": "Synced posts from the property’s enabled Instagram connection. Returns an empty collection when none is configured. Scoped to the portfolio: `{property}` is a slug resolved against the properties attached to `{connection}`, so a slug outside this portfolio is a `404` rather than another site's property.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ConnectionPath"
          },
          {
            "$ref": "#/components/parameters/PortfolioPropertySlugPath"
          }
        ],
        "responses": {
          "200": {
            "description": "Instagram posts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InstagramFeedPost"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Connection not found, disabled, or not a portfolio website; or the property is not in this portfolio or is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "PropertyPath": {
        "name": "property",
        "in": "path",
        "required": true,
        "description": "Property UUID. This route is unauthenticated and unscoped, so it does not accept a slug — to address a property by slug, use `/api/v1/connection/{connection}/property/{property}`.",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "example": "019dbc38-d49e-7310-95d4-711a5b7a4b40"
      },
      "UnitPath": {
        "name": "unit",
        "in": "path",
        "required": true,
        "description": "Unit UUID. This route does not accept a slug. The unit must belong to the route property, or be served through a merged connection that property parents — anything else is a `404`.",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "example": "019dbc39-1a4c-7002-bb31-2f9e5a77c108"
      },
      "ConnectionPath": {
        "name": "connection",
        "in": "path",
        "required": true,
        "description": "Connection UUID.",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "GroupFilter": {
        "name": "group",
        "in": "query",
        "required": false,
        "description": "Group UUID. Matching includes descendants of the selected group.",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "WebsiteConnectionKeysFilter": {
        "name": "website_connection_keys",
        "in": "query",
        "required": false,
        "description": "Comma-separated website connection keys. Whitespace and duplicate values are ignored. When omitted, all enabled content blocks are returned; when present but empty, no content blocks are returned.",
        "schema": {
          "type": "string",
          "example": "hero,amenities"
        }
      },
      "PortfolioPropertySlugPath": {
        "name": "property",
        "in": "path",
        "required": true,
        "description": "Property slug, resolved against the properties attached to `{connection}`. A slug outside that portfolio is a `404`. Slug only — a UUID does not resolve here.",
        "schema": {
          "type": "string"
        },
        "example": "1520-gough-street"
      },
      "PortfolioUnitSlugPath": {
        "name": "unit",
        "in": "path",
        "required": true,
        "description": "Unit slug, resolved against the route property's units. A unit of any other property is a `404`. Slug only — a UUID does not resolve here.",
        "schema": {
          "type": "string"
        },
        "example": "1520-gough-street-204"
      }
    },
    "schemas": {
      "Image": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "thumb_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "Resized derivative. Generated on a queue — may 404 briefly after import. Fall back to full_url."
          },
          "full_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "caption": {
            "type": "string",
            "nullable": true
          },
          "alt_text": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string",
            "description": "Comma-separated rendering of tags."
          },
          "reference_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "Source URL this asset was imported from."
          },
          "title": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "A stored image asset.",
        "additionalProperties": false,
        "required": [
          "id",
          "thumb_url",
          "full_url",
          "caption",
          "alt_text",
          "tags",
          "tags_string",
          "reference_url",
          "title"
        ]
      },
      "Embed": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "provider": {
            "type": "string",
            "description": "Detected provider, e.g. youtube, vimeo, matterport."
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "settings": {
            "type": "object",
            "nullable": true,
            "additionalProperties": true
          },
          "image": {
            "type": "object",
            "nullable": true,
            "description": "Poster image, when one is attached.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Image"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string"
          }
        },
        "description": "An embedded video or virtual tour. The URL is referenced, never downloaded.",
        "additionalProperties": false,
        "required": [
          "id",
          "provider",
          "url",
          "title",
          "settings",
          "image",
          "tags",
          "tags_string"
        ]
      },
      "FeeBreakdownItem": {
        "type": "object",
        "required": [
          "fee_id",
          "code",
          "name",
          "description",
          "class",
          "calculated_amount",
          "is_variable",
          "currency",
          "frequency",
          "requirement"
        ],
        "properties": {
          "fee_id": {
            "type": "string",
            "format": "uuid"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "class": {
            "type": "string",
            "nullable": true
          },
          "calculated_amount": {
            "type": "number"
          },
          "is_variable": {
            "type": "boolean"
          },
          "currency": {
            "type": "string",
            "default": "USD"
          },
          "frequency": {
            "type": "string",
            "nullable": true
          },
          "requirement": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GroupMembership": {
        "type": "object",
        "required": [
          "id",
          "label",
          "slug",
          "set"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "set": {
            "$ref": "#/components/schemas/GroupMembershipSet"
          }
        },
        "additionalProperties": false
      },
      "PropertyRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "key": {
            "type": "string",
            "description": "Alias of id, retained for backward compatibility."
          },
          "slug": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "key",
          "slug"
        ]
      },
      "Property": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "slug": {
            "type": "string",
            "description": "Falls back to the id when no slug is set."
          },
          "key": {
            "type": "string",
            "description": "Alias of id, retained for backward compatibility."
          },
          "image": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "Property hero image, thumb derivative."
          },
          "imageFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "website": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "residentPortalUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "applicationUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "tourBookingUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "phoneNumbers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "Stored verbatim from the property settings; commonly `label` and `number`."
            }
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "socials": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "Stored verbatim from the property settings; commonly `platform` and `url`."
            }
          },
          "address": {
            "type": "string",
            "nullable": true,
            "description": "Formatted single-line address."
          },
          "street": {
            "type": "string",
            "nullable": true
          },
          "street2": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "zipcode": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "description": "Returns 0 when the property has no stored coordinate."
          },
          "longitude": {
            "type": "number",
            "description": "Returns 0 when the property has no stored coordinate."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string"
          },
          "unitsCount": {
            "type": "integer",
            "description": "Total units on the property."
          },
          "hasAvailability": {
            "type": "boolean"
          },
          "availableUnitsCount": {
            "type": "integer"
          },
          "minRent": {
            "type": "number",
            "nullable": true
          },
          "maxRent": {
            "type": "number",
            "nullable": true
          },
          "unitTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnitType"
            },
            "description": "Bed-count rollups for the property."
          },
          "minBaseRent": {
            "type": "number",
            "nullable": true
          },
          "maxBaseRent": {
            "type": "number",
            "nullable": true
          },
          "leasingSettings": {
            "$ref": "#/components/schemas/LeasingSettings"
          },
          "pricingDisplaySettings": {
            "$ref": "#/components/schemas/PricingDisplaySettings"
          },
          "displaySettings": {
            "$ref": "#/components/schemas/DisplaySettings"
          },
          "officeHours": {
            "$ref": "#/components/schemas/OfficeHoursSettings"
          },
          "petPolicy": {
            "$ref": "#/components/schemas/PetPolicySettings"
          },
          "averageRating": {
            "type": "number",
            "nullable": true
          },
          "totalReviewCount": {
            "type": "integer",
            "nullable": true
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupMembership"
            }
          }
        },
        "additionalProperties": false,
        "description": "Property profile shaped for website rendering. Note this payload carries the address, coordinates and availability rollups that the V2 property resource does not expose.",
        "required": [
          "id",
          "name",
          "description",
          "slug",
          "key",
          "image",
          "imageFull",
          "website",
          "residentPortalUrl",
          "applicationUrl",
          "tourBookingUrl",
          "phone",
          "phoneNumbers",
          "email",
          "socials",
          "address",
          "street",
          "street2",
          "city",
          "state",
          "zipcode",
          "country",
          "latitude",
          "longitude",
          "tags",
          "tags_string",
          "unitsCount",
          "hasAvailability",
          "availableUnitsCount",
          "minRent",
          "maxRent",
          "unitTypes",
          "minBaseRent",
          "maxBaseRent",
          "leasingSettings",
          "pricingDisplaySettings",
          "displaySettings",
          "officeHours",
          "petPolicy",
          "averageRating",
          "totalReviewCount",
          "groups"
        ]
      },
      "UnitType": {
        "type": "object",
        "properties": {
          "unitTypeName": {
            "type": "string",
            "description": "Display name, e.g. \"One Bedroom\"."
          },
          "unitTypeSlug": {
            "type": "string"
          },
          "bedrooms": {
            "type": "number"
          },
          "minSquareFeet": {
            "type": "integer",
            "nullable": true
          },
          "maxSquareFeet": {
            "type": "integer",
            "nullable": true
          },
          "minPriceAvailable": {
            "type": "number",
            "nullable": true
          },
          "maxPriceAvailable": {
            "type": "number",
            "nullable": true
          },
          "minBaseRent": {
            "type": "number",
            "nullable": true
          },
          "maxBaseRent": {
            "type": "number",
            "nullable": true
          },
          "minTmlp": {
            "type": "number",
            "nullable": true
          },
          "maxTmlp": {
            "type": "number",
            "nullable": true
          },
          "fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeBreakdownItem"
            }
          },
          "feeTotal": {
            "type": "number",
            "nullable": true
          },
          "feeTotalMax": {
            "type": "number",
            "nullable": true,
            "description": "Upper bound of the monthly fee total when any fee is variable."
          },
          "totalUnits": {
            "type": "integer"
          },
          "availableUnits": {
            "type": "integer"
          }
        },
        "description": "Floor plans grouped by bedroom count, with pricing rolled up.",
        "additionalProperties": false,
        "required": [
          "unitTypeName",
          "unitTypeSlug",
          "bedrooms",
          "minSquareFeet",
          "maxSquareFeet",
          "minPriceAvailable",
          "maxPriceAvailable",
          "minBaseRent",
          "maxBaseRent",
          "minTmlp",
          "maxTmlp",
          "fees",
          "feeTotal",
          "feeTotalMax",
          "totalUnits",
          "availableUnits"
        ]
      },
      "Unit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "permalink": {
            "type": "string",
            "nullable": true,
            "description": "Canonical public URL for the unit."
          },
          "unitNumber": {
            "type": "string",
            "nullable": true
          },
          "unitFloor": {
            "type": "string",
            "nullable": true,
            "description": "Floor label as stored; not guaranteed numeric."
          },
          "unitInteriorSquareFeet": {
            "type": "integer",
            "nullable": true
          },
          "unitExteriorSquareFeet": {
            "type": "integer",
            "nullable": true
          },
          "unitBedrooms": {
            "type": "number",
            "nullable": true
          },
          "unitBathrooms": {
            "type": "number",
            "nullable": true
          },
          "unitHandicapAccessible": {
            "type": "boolean",
            "nullable": true
          },
          "unitFurnished": {
            "type": "boolean",
            "nullable": true
          },
          "unitAffordability": {
            "type": "boolean",
            "nullable": true
          },
          "unitModel": {
            "type": "boolean",
            "nullable": true,
            "description": "Model apartment — not leasable. Exclude from listings."
          },
          "unitGuestSuite": {
            "type": "boolean",
            "nullable": true,
            "description": "Guest suite — not leasable. Exclude from listings."
          },
          "unitFeatures": {
            "type": "string",
            "nullable": true
          },
          "unitViewDirection": {
            "type": "string",
            "nullable": true
          },
          "unitViewImage": {
            "type": "string",
            "nullable": true,
            "description": "Always null in the current implementation."
          },
          "unitAvailable": {
            "type": "boolean",
            "nullable": true
          },
          "unitAvailableDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "nullable": true,
            "description": "Alias of unitMinTmlp — the marketed rent."
          },
          "unitMinBaseRent": {
            "type": "number",
            "nullable": true
          },
          "unitMaxBaseRent": {
            "type": "number",
            "nullable": true
          },
          "unitMinTmlp": {
            "type": "number",
            "nullable": true,
            "description": "Total Monthly Leasing Price: rent inclusive of bundled fees. This is the figure to display."
          },
          "unitMaxTmlp": {
            "type": "number",
            "nullable": true
          },
          "unitFees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeBreakdownItem"
            },
            "description": "Per-fee breakdown behind TMLP, computed by PricingCalculator."
          },
          "unitFeeTotal": {
            "type": "number",
            "nullable": true
          },
          "unitFeeTotalMax": {
            "type": "number",
            "nullable": true,
            "description": "Upper bound of the monthly fee total when any fee is variable."
          },
          "unitDeposit": {
            "type": "number",
            "nullable": true
          },
          "unitPmsId": {
            "type": "string",
            "nullable": true,
            "description": "The unit's id in the source PMS (reference_id)."
          },
          "unitExternalIds": {
            "description": "The unit's ids in third-party systems, keyed by the integration's camel-case `key` from /integrations (e.g. `sightMap`). Serialises as an empty JSON array when there are none.",
            "anyOf": [
              {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              {
                "type": "array",
                "maxItems": 0
              }
            ]
          },
          "unitSpecials": {
            "type": "string",
            "nullable": true
          },
          "unitAmenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Amenity"
            }
          },
          "unitPdf": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "unitTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "unitTagsString": {
            "type": "string"
          },
          "unitPhotos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "unitVirtualTours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "unitVideos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "unitTourLink": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "unitQuoteLink": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "unitApplicationLink": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "buildingName": {
            "type": "string",
            "nullable": true
          },
          "buildingType": {
            "type": "string",
            "nullable": true,
            "description": "Always null in the current implementation."
          },
          "buildingCode": {
            "type": "string",
            "nullable": true
          },
          "buildingId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "buildingNumber": {
            "type": "string",
            "nullable": true
          },
          "buildingImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "buildingImageFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanName": {
            "type": "string",
            "nullable": true
          },
          "floorPlanType": {
            "type": "string",
            "nullable": true
          },
          "floorPlanTypeName": {
            "type": "string",
            "nullable": true
          },
          "floorPlanCode": {
            "type": "string",
            "nullable": true
          },
          "floorPlanId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "floorPlanImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanImageFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanShoeboxImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanShoeboxFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanLocationImage": {
            "type": "string",
            "nullable": true,
            "description": "Always null in the current implementation."
          },
          "floorPlanLocationFull": {
            "type": "string",
            "nullable": true,
            "description": "Always null in the current implementation."
          },
          "floorPlanPdf": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "featured": {
            "type": "boolean",
            "nullable": true
          },
          "listIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Always empty in the current implementation."
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupMembership"
            },
            "description": "Direct group memberships. Empty array when the relation is not eager loaded."
          },
          "derivedGroups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupMembership"
            },
            "description": "Direct memberships plus those cascaded down from the unit's floor plan, building and property."
          },
          "property": {
            "$ref": "#/components/schemas/PropertyRef"
          }
        },
        "additionalProperties": false,
        "description": "A unit, denormalized with its building and floor-plan context for direct rendering.",
        "required": [
          "id",
          "slug",
          "permalink",
          "unitNumber",
          "unitFloor",
          "unitInteriorSquareFeet",
          "unitExteriorSquareFeet",
          "unitBedrooms",
          "unitBathrooms",
          "unitHandicapAccessible",
          "unitFurnished",
          "unitAffordability",
          "unitModel",
          "unitGuestSuite",
          "unitFeatures",
          "unitViewDirection",
          "unitViewImage",
          "unitAvailable",
          "unitAvailableDate",
          "unitPrice",
          "unitMinBaseRent",
          "unitMaxBaseRent",
          "unitMinTmlp",
          "unitMaxTmlp",
          "unitFees",
          "unitFeeTotal",
          "unitFeeTotalMax",
          "unitDeposit",
          "unitPmsId",
          "unitExternalIds",
          "unitSpecials",
          "unitAmenities",
          "unitPdf",
          "unitTags",
          "unitTagsString",
          "unitPhotos",
          "unitVirtualTours",
          "unitVideos",
          "unitTourLink",
          "unitQuoteLink",
          "unitApplicationLink",
          "buildingName",
          "buildingType",
          "buildingCode",
          "buildingId",
          "buildingNumber",
          "buildingImage",
          "buildingImageFull",
          "floorPlanName",
          "floorPlanType",
          "floorPlanTypeName",
          "floorPlanCode",
          "floorPlanId",
          "floorPlanImage",
          "floorPlanImageFull",
          "floorPlanShoeboxImage",
          "floorPlanShoeboxFull",
          "floorPlanLocationImage",
          "floorPlanLocationFull",
          "floorPlanPdf",
          "featured",
          "listIds",
          "groups",
          "derivedGroups",
          "property"
        ]
      },
      "FloorPlan": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "permalink": {
            "type": "string",
            "nullable": true
          },
          "floorPlanName": {
            "type": "string",
            "nullable": true
          },
          "floorPlanCode": {
            "type": "string",
            "nullable": true
          },
          "floorPlanType": {
            "type": "string",
            "nullable": true
          },
          "floorPlanTypeName": {
            "type": "string",
            "nullable": true
          },
          "floorPlanDescription": {
            "type": "string",
            "nullable": true
          },
          "floorPlanBedrooms": {
            "type": "number",
            "nullable": true
          },
          "floorPlanBathrooms": {
            "type": "number",
            "nullable": true
          },
          "floorPlanInteriorSquareFeet": {
            "type": "integer",
            "nullable": true
          },
          "floorPlanInteriorSquareFeetMax": {
            "type": "integer",
            "nullable": true
          },
          "floorPlanRentMin": {
            "type": "number",
            "nullable": true
          },
          "floorPlanRentMax": {
            "type": "number",
            "nullable": true
          },
          "floorPlanBaseRentMin": {
            "type": "number",
            "nullable": true
          },
          "floorPlanBaseRentMax": {
            "type": "number",
            "nullable": true
          },
          "floorPlanTmlpMin": {
            "type": "number",
            "nullable": true
          },
          "floorPlanTmlpMax": {
            "type": "number",
            "nullable": true
          },
          "floorPlanFees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeBreakdownItem"
            }
          },
          "floorPlanFeeTotal": {
            "type": "number",
            "nullable": true
          },
          "floorPlanFeeTotalMax": {
            "type": "number",
            "nullable": true,
            "description": "Upper bound of the monthly fee total when any fee is variable."
          },
          "floorPlanEarliestAvailableDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "floorPlanHasSpecials": {
            "type": "boolean",
            "nullable": true
          },
          "floorPlanPmsId": {
            "type": "string",
            "nullable": true
          },
          "floorPlanSortOrder": {
            "type": "integer",
            "description": "Database sort_order set by drag-to-reorder in the app; the order the feed is served in."
          },
          "floorPlanImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanImageFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanShoeboxImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanShoeboxFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanLocationImage": {
            "type": "string",
            "nullable": true
          },
          "floorPlanLocationFull": {
            "type": "string",
            "nullable": true
          },
          "floorPlanPdf": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanMediaUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "floorPlanPhotos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "floorPlanVirtualTours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "floorPlanVideos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "unitsAvailable": {
            "type": "boolean",
            "description": "True when any unit is available OR coming soon. Mirrors unitsAvailableOrComingSoon by design, for V1 compatibility."
          },
          "numberUnitsAvailable": {
            "type": "integer",
            "description": "Count of units available OR coming soon. Mirrors numberUnitsAvailableOrComingSoon by design, for V1 compatibility."
          },
          "unitsComingSoon": {
            "type": "boolean"
          },
          "numberUnitsComingSoon": {
            "type": "integer"
          },
          "unitsAvailableOrComingSoon": {
            "type": "boolean"
          },
          "numberUnitsAvailableOrComingSoon": {
            "type": "integer"
          },
          "featured": {
            "type": "boolean",
            "nullable": true
          },
          "floorPlanTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "floorPlanTagsString": {
            "type": "string"
          },
          "buildingName": {
            "type": "string",
            "nullable": true,
            "description": "Always null — a floor plan can span buildings. Use the buildings array."
          },
          "buildingType": {
            "type": "string",
            "nullable": true
          },
          "buildingCode": {
            "type": "string",
            "nullable": true
          },
          "buildingId": {
            "type": "string",
            "nullable": true
          },
          "buildingImage": {
            "type": "string",
            "nullable": true
          },
          "buildingImageFull": {
            "type": "string",
            "nullable": true
          },
          "buildings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "buildingNumber": {
                  "type": "string",
                  "nullable": true
                },
                "buildingCode": {
                  "type": "string",
                  "nullable": true
                },
                "buildingName": {
                  "type": "string",
                  "nullable": true
                },
                "buildingType": {
                  "type": "string",
                  "nullable": true
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "buildingNumber",
                "buildingCode",
                "buildingName",
                "buildingType"
              ]
            },
            "description": "Distinct buildings containing a showable unit of this floor plan."
          },
          "incentiveIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Always empty in the current implementation."
          },
          "listIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Always empty in the current implementation."
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupMembership"
            }
          },
          "property": {
            "$ref": "#/components/schemas/PropertyRef"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "slug",
          "permalink",
          "floorPlanName",
          "floorPlanCode",
          "floorPlanType",
          "floorPlanTypeName",
          "floorPlanDescription",
          "floorPlanBedrooms",
          "floorPlanBathrooms",
          "floorPlanInteriorSquareFeet",
          "floorPlanInteriorSquareFeetMax",
          "floorPlanRentMin",
          "floorPlanRentMax",
          "floorPlanBaseRentMin",
          "floorPlanBaseRentMax",
          "floorPlanTmlpMin",
          "floorPlanTmlpMax",
          "floorPlanFees",
          "floorPlanFeeTotal",
          "floorPlanFeeTotalMax",
          "floorPlanEarliestAvailableDate",
          "floorPlanHasSpecials",
          "floorPlanPmsId",
          "floorPlanSortOrder",
          "floorPlanImage",
          "floorPlanImageFull",
          "floorPlanShoeboxImage",
          "floorPlanShoeboxFull",
          "floorPlanLocationImage",
          "floorPlanLocationFull",
          "floorPlanPdf",
          "floorPlanMediaUrl",
          "floorPlanPhotos",
          "floorPlanVirtualTours",
          "floorPlanVideos",
          "unitsAvailable",
          "numberUnitsAvailable",
          "unitsComingSoon",
          "numberUnitsComingSoon",
          "unitsAvailableOrComingSoon",
          "numberUnitsAvailableOrComingSoon",
          "featured",
          "floorPlanTags",
          "floorPlanTagsString",
          "buildingName",
          "buildingType",
          "buildingCode",
          "buildingId",
          "buildingImage",
          "buildingImageFull",
          "buildings",
          "incentiveIds",
          "listIds",
          "groups",
          "property"
        ]
      },
      "Building": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "buildingNumber": {
            "type": "string",
            "nullable": true
          },
          "buildingCode": {
            "type": "string",
            "nullable": true
          },
          "buildingName": {
            "type": "string",
            "nullable": true
          },
          "buildingType": {
            "type": "string",
            "nullable": true
          },
          "buildingImage": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "buildingImageFull": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "unitsAvailable": {
            "type": "boolean"
          },
          "numberUnitsAvailable": {
            "type": "integer"
          },
          "buildingTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "buildingTagsString": {
            "type": "string"
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupMembership"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "buildingNumber",
          "buildingCode",
          "buildingName",
          "buildingType",
          "buildingImage",
          "buildingImageFull",
          "unitsAvailable",
          "numberUnitsAvailable",
          "buildingTags",
          "buildingTagsString",
          "groups"
        ]
      },
      "Amenity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "is_property_marketable": {
            "type": "boolean",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string"
          },
          "reference_id": {
            "type": "string",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "virtual_tours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "videos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "is_property_marketable",
          "code",
          "description",
          "type",
          "tags",
          "tags_string",
          "reference_id",
          "images",
          "virtual_tours",
          "videos"
        ]
      },
      "Gallery": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "internal_title": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "text": {
            "type": "string",
            "nullable": true
          },
          "elements_key": {
            "type": "string",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "videos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "virtual_tours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "internal_title",
          "type",
          "title",
          "text",
          "elements_key",
          "images",
          "videos",
          "virtual_tours"
        ]
      },
      "Faq": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "nullable": true
          },
          "answer": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "question",
          "answer",
          "tags",
          "tags_string"
        ]
      },
      "Review": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "source": {
            "type": "string"
          },
          "reviewer_name": {
            "type": "string",
            "nullable": true
          },
          "reviewer_photo_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "review_text": {
            "type": "string",
            "nullable": true
          },
          "rating": {
            "type": "number",
            "nullable": true
          },
          "review_date": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "source",
          "reviewer_name",
          "reviewer_photo_url",
          "review_text",
          "rating",
          "review_date"
        ]
      },
      "Announcement": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "hideText": {
            "type": "boolean",
            "description": "Deprecated — always false. No equivalent exists in V2."
          },
          "image": {
            "type": "object",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Image"
              }
            ]
          },
          "details": {
            "type": "string",
            "nullable": true
          },
          "disclaimer": {
            "type": "string",
            "nullable": true
          },
          "link": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "linkText": {
            "type": "string",
            "nullable": true
          },
          "link2": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "link2Text": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "hideText",
          "image",
          "details",
          "disclaimer",
          "link",
          "linkText",
          "link2",
          "link2Text"
        ]
      },
      "ContentBlock": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "media_type": {
            "type": "string",
            "nullable": true
          },
          "internal_title": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "subtitle": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "link_primary_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "link_primary_text": {
            "type": "string",
            "nullable": true
          },
          "link_secondary_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "link_secondary_text": {
            "type": "string",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "videos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "virtual_tours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Embed"
            }
          },
          "background_image": {
            "type": "object",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Image"
              }
            ]
          },
          "elements_key": {
            "type": "string",
            "nullable": true
          },
          "content_items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "description": "A configured content block (content group). Treat an unrecognized `type` as a no-op rather than an error — new types ship without a version bump.",
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "media_type",
          "internal_title",
          "title",
          "subtitle",
          "description",
          "link_primary_url",
          "link_primary_text",
          "link_secondary_url",
          "link_secondary_text",
          "images",
          "videos",
          "virtual_tours",
          "background_image",
          "elements_key",
          "content_items"
        ]
      },
      "NeighborhoodPlace": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "lat": {
            "type": "number",
            "nullable": true
          },
          "lng": {
            "type": "number",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "rating": {
            "type": "string",
            "nullable": true,
            "description": "Decimal rating serialised as a string, e.g. \"4.7\"."
          },
          "website": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "googleMapsUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "driveTime": {
            "type": "string",
            "nullable": true
          },
          "walkTime": {
            "type": "string",
            "nullable": true
          },
          "bikeTime": {
            "type": "string",
            "nullable": true
          },
          "transitTime": {
            "type": "string",
            "nullable": true
          },
          "placeId": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "address",
          "lat",
          "lng",
          "category",
          "color",
          "rating",
          "website",
          "googleMapsUrl",
          "driveTime",
          "walkTime",
          "bikeTime",
          "transitTime",
          "placeId"
        ]
      },
      "Neighborhood": {
        "type": "object",
        "properties": {
          "apartmentName": {
            "type": "string"
          },
          "apartmentAddress": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string",
                "nullable": true
              },
              "address2": {
                "type": "string",
                "nullable": true
              },
              "city": {
                "type": "string",
                "nullable": true
              },
              "state": {
                "type": "string",
                "nullable": true
              },
              "zipCode": {
                "type": "string",
                "nullable": true
              },
              "lat": {
                "type": "number",
                "nullable": true
              },
              "lng": {
                "type": "number",
                "nullable": true
              }
            },
            "additionalProperties": false,
            "required": [
              "address",
              "address2",
              "city",
              "state",
              "zipCode",
              "lat",
              "lng"
            ]
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "label": {
                  "type": "string",
                  "nullable": true
                },
                "color": {
                  "type": "string",
                  "nullable": true
                },
                "types": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true
                },
                "active": {
                  "type": "boolean",
                  "description": "True when at least one place on this property uses the category."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "label",
                "color",
                "types",
                "active"
              ]
            }
          },
          "places": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NeighborhoodPlace"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "apartmentName",
          "apartmentAddress",
          "categories",
          "places"
        ]
      },
      "Media": {
        "type": "object",
        "properties": {
          "photos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaEntry"
            }
          },
          "panoramas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaEntry"
            }
          },
          "videos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaEntry"
            }
          },
          "virtualTours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaEntry"
            }
          }
        },
        "description": "Property media grouped by gallery type. Sourced from the property's galleries — a missing gallery yields an empty array.",
        "additionalProperties": false,
        "required": [
          "photos",
          "panoramas",
          "videos",
          "virtualTours"
        ]
      },
      "MediaEntry": {
        "type": "object",
        "properties": {
          "thumb": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "full": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "altText": {
            "type": "string",
            "nullable": true
          },
          "caption": {
            "type": "string",
            "nullable": true
          },
          "mediaUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "Present on videos and virtualTours only; thumb/full/title/altText/caption are null for those."
          },
          "tags": {
            "type": "string",
            "description": "Comma-separated."
          }
        },
        "additionalProperties": false,
        "required": [
          "thumb",
          "full",
          "title",
          "altText",
          "caption",
          "mediaUrl",
          "tags"
        ]
      },
      "Form": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Field definitions. Render your form from these rather than hardcoding — clients change forms without notifying integrators."
          },
          "tour_types": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "nullable": true
          },
          "settings": {
            "type": "object",
            "properties": {
              "disclaimer": {
                "type": "string"
              },
              "redirect_url": {
                "type": "string"
              },
              "success_message": {
                "type": "string",
                "description": "Render this to the renter after a successful submission."
              },
              "submit_button_label": {
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "disclaimer",
              "redirect_url",
              "success_message",
              "submit_button_label"
            ]
          },
          "elements_key": {
            "type": "string",
            "nullable": true
          },
          "connections": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "connection_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "connection_name": {
                  "type": "string",
                  "nullable": true
                }
              },
              "additionalProperties": false,
              "required": [
                "connection_id",
                "connection_name"
              ]
            },
            "description": "CRM destinations this form routes to for the requested property."
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "type",
          "fields",
          "tour_types",
          "settings",
          "elements_key",
          "connections"
        ]
      },
      "Integration": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "description": "Connection type key, e.g. yardi, entrata."
          },
          "key": {
            "type": "string",
            "description": "camelCase form of type."
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "e.g. pms, crm, tour."
          },
          "enabled": {
            "type": "boolean"
          },
          "settings": {
            "description": "Per-property settings, with secrets stripped. Serialises as an empty JSON array when there are none.",
            "anyOf": [
              {
                "type": "object",
                "additionalProperties": true
              },
              {
                "type": "array",
                "maxItems": 0
              }
            ]
          },
          "tour_types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationTourType"
            },
            "description": "Enabled tour types and booking fields. Empty for non-tour connections."
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "key",
          "name",
          "category",
          "enabled",
          "settings",
          "tour_types"
        ]
      },
      "PriceMatrixRow": {
        "type": "object",
        "required": [
          "id",
          "unit_id",
          "start_date",
          "best_rent",
          "next_best_rent",
          "rents"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "unit_id": {
            "type": "string",
            "format": "uuid"
          },
          "start_date": {
            "type": "string",
            "format": "date"
          },
          "best_rent": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PriceMatrixRentOption"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "next_best_rent": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PriceMatrixRentOption"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "rents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceMatrixRentOption"
            }
          }
        },
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "V1 error message. Note V1 uses `error` where V2 uses `message`."
          }
        },
        "required": [
          "error"
        ]
      },
      "ValidationError": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "message",
          "errors"
        ]
      },
      "MessageError": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "GroupMembershipSet": {
        "type": "object",
        "required": [
          "id",
          "name",
          "objectType"
        ],
        "properties": {
          "id": {
            "type": "string",
            "nullable": true,
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "objectType": {
            "type": "string",
            "enum": [
              "property",
              "building",
              "floor_plan",
              "unit"
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Group": {
        "type": "object",
        "required": [
          "id",
          "label",
          "slug",
          "description",
          "color",
          "sortOrder",
          "children"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Group"
            }
          }
        },
        "additionalProperties": false
      },
      "GroupSet": {
        "type": "object",
        "required": [
          "id",
          "name",
          "key",
          "objectType",
          "allowsMultipleMembership",
          "propertyId",
          "groups"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "key": {
            "type": "string",
            "description": "Stable key for filtering, derived from the name."
          },
          "objectType": {
            "type": "string",
            "enum": [
              "property",
              "building",
              "floor_plan",
              "unit"
            ]
          },
          "allowsMultipleMembership": {
            "type": "boolean"
          },
          "propertyId": {
            "type": "string",
            "nullable": true,
            "format": "uuid"
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Group"
            }
          }
        },
        "additionalProperties": false
      },
      "PriceMatrixRentOption": {
        "type": "object",
        "required": [
          "term_key",
          "months",
          "label",
          "rent"
        ],
        "properties": {
          "term_key": {
            "type": "string",
            "example": "rent_12"
          },
          "months": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24
          },
          "label": {
            "type": "string",
            "example": "12 months"
          },
          "rent": {
            "type": "number"
          }
        },
        "additionalProperties": false
      },
      "OfficeHour": {
        "type": "object",
        "required": [
          "day",
          "time"
        ],
        "properties": {
          "day": {
            "type": "string"
          },
          "time": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "LeasingSettings": {
        "type": "object",
        "required": [
          "applicant_hold_period_days",
          "availability_window_days"
        ],
        "properties": {
          "applicant_hold_period_days": {
            "type": "integer"
          },
          "availability_window_days": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      },
      "PricingDisplaySettings": {
        "type": "object",
        "properties": {
          "hidden_price_label": {
            "type": "string"
          },
          "no_availability_price_label": {
            "type": "string"
          },
          "no_price_label": {
            "type": "string"
          },
          "hide_all_pricing": {
            "type": "boolean"
          },
          "hide_price_when_no_availability": {
            "type": "boolean"
          },
          "pricing_display_mode": {
            "type": "string"
          },
          "tmlp_label": {
            "type": "string"
          },
          "show_fee_breakdown": {
            "type": "boolean"
          },
          "fee_breakdown_behavior": {
            "type": "string"
          },
          "pricing_disclaimer_text": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "hidden_price_label",
          "no_availability_price_label",
          "no_price_label",
          "hide_all_pricing",
          "hide_price_when_no_availability",
          "pricing_display_mode",
          "tmlp_label",
          "show_fee_breakdown",
          "fee_breakdown_behavior",
          "pricing_disclaimer_text"
        ]
      },
      "DisplaySettings": {
        "type": "object",
        "description": "Display settings, as in effect: the property's own value for each key it sets, the account's for every other.",
        "properties": {
          "prepend_building_number_to_unit_number": {
            "type": "boolean",
            "description": "Unit numbers are served prefixed with their building number (e.g. `5-204`)."
          },
          "show_non_marketable_amenities": {
            "type": "boolean",
            "description": "Unit amenities include those not marked as marketable at the property."
          },
          "hide_available_units": {
            "type": "boolean",
            "description": "Hide the available units list, whatever the actual availability."
          }
        },
        "additionalProperties": false,
        "required": [
          "prepend_building_number_to_unit_number",
          "show_non_marketable_amenities",
          "hide_available_units"
        ]
      },
      "OfficeHoursSettings": {
        "type": "object",
        "required": [
          "hours",
          "display_heading",
          "disclaimer"
        ],
        "properties": {
          "hours": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfficeHour"
            }
          },
          "display_heading": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "PetPolicySettings": {
        "type": "object",
        "required": [
          "description",
          "restrictions"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "restrictions": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ContentConditionals": {
        "type": "object",
        "required": [
          "contentActive"
        ],
        "properties": {
          "contentActive": {
            "type": "object",
            "required": [
              "websiteForm",
              "widgetForm",
              "floorPlans",
              "featuredFloorPlans",
              "units",
              "featuredUnits",
              "images",
              "panoramas",
              "videos",
              "officeHours",
              "neighborhood",
              "faqs",
              "announcements",
              "virtualTours"
            ],
            "properties": {
              "websiteForm": {
                "type": "boolean"
              },
              "widgetForm": {
                "type": "boolean"
              },
              "floorPlans": {
                "type": "boolean"
              },
              "featuredFloorPlans": {
                "type": "boolean"
              },
              "units": {
                "type": "boolean"
              },
              "featuredUnits": {
                "type": "boolean"
              },
              "images": {
                "type": "boolean"
              },
              "panoramas": {
                "type": "boolean"
              },
              "videos": {
                "type": "boolean"
              },
              "officeHours": {
                "type": "boolean"
              },
              "neighborhood": {
                "type": "boolean"
              },
              "faqs": {
                "type": "boolean"
              },
              "announcements": {
                "type": "boolean"
              },
              "virtualTours": {
                "type": "boolean",
                "enum": [
                  false
                ]
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "WebsiteFormField": {
        "type": "object",
        "required": [
          "label",
          "value",
          "selected",
          "valid"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "selected": {
            "type": "boolean"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "FormIntegration": {
        "type": "object",
        "required": [
          "name",
          "id",
          "category",
          "supportsLeadCreation",
          "supportsAppointmentCreation"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "description": "The connection_property id."
          },
          "category": {
            "type": "string"
          },
          "supportsLeadCreation": {
            "type": "boolean"
          },
          "supportsAppointmentCreation": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "WebsiteForm": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebsiteFormField"
            }
          },
          "buttonText": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string"
          },
          "redirect": {
            "type": "string"
          },
          "confirmation": {
            "type": "string"
          },
          "limitMoveInDate": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "fields",
          "buttonText",
          "disclaimer",
          "redirect",
          "confirmation",
          "limitMoveInDate"
        ],
        "description": "A website form without integrations; the shape of `waitlistForm`."
      },
      "WebsitePrimaryForm": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebsiteFormField"
            }
          },
          "buttonText": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string"
          },
          "redirect": {
            "type": "string"
          },
          "confirmation": {
            "type": "string"
          },
          "limitMoveInDate": {
            "type": "string",
            "nullable": true
          },
          "integrations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormIntegration"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "fields",
          "buttonText",
          "disclaimer",
          "redirect",
          "confirmation",
          "limitMoveInDate",
          "integrations"
        ],
        "description": "The primary website form. Identical to WebsiteForm plus `integrations`, which only the primary form carries."
      },
      "WebsiteConfiguration": {
        "type": "object",
        "required": [
          "primaryForm",
          "waitlistForm",
          "settings"
        ],
        "properties": {
          "primaryForm": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsitePrimaryForm"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "waitlistForm": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteForm"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "settings": {
            "type": "object",
            "required": [
              "accountId",
              "apartmentId"
            ],
            "properties": {
              "accountId": {
                "type": "string",
                "format": "uuid"
              },
              "apartmentId": {
                "type": "string",
                "format": "uuid"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "WidgetPrimaryForm": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true,
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebsiteFormField"
            }
          },
          "integrations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormIntegration"
            }
          },
          "buttonText": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string",
            "nullable": true
          },
          "redirect": {
            "type": "string",
            "nullable": true
          },
          "confirmation": {
            "type": "string",
            "nullable": true
          },
          "limitMoveInDate": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "fields",
          "integrations",
          "buttonText",
          "disclaimer",
          "redirect",
          "confirmation",
          "limitMoveInDate"
        ]
      },
      "WidgetConfiguration": {
        "type": "object",
        "required": [
          "active",
          "campaign",
          "popups",
          "secondaryForm",
          "externalFormUrl",
          "primaryForm",
          "info",
          "leasing",
          "settings",
          "scripts"
        ],
        "properties": {
          "active": {
            "type": "boolean",
            "enum": [
              false
            ]
          },
          "campaign": {
            "type": "object",
            "additionalProperties": true
          },
          "popups": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "secondaryForm": {
            "type": "array",
            "maxItems": 0
          },
          "externalFormUrl": {
            "type": "string",
            "nullable": true
          },
          "primaryForm": {
            "$ref": "#/components/schemas/WidgetPrimaryForm"
          },
          "info": {
            "type": "object",
            "additionalProperties": true
          },
          "leasing": {
            "type": "object",
            "additionalProperties": true
          },
          "settings": {
            "type": "object",
            "additionalProperties": true
          },
          "scripts": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "LeadSourceEntry": {
        "type": "object",
        "required": [
          "id",
          "property_id",
          "name",
          "code",
          "external_source_key",
          "source",
          "phone",
          "email"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "property_id": {
            "type": "string",
            "nullable": true,
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "external_source_key": {
            "type": "string",
            "nullable": true
          },
          "source": {
            "type": "string"
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SourceRuleCondition": {
        "type": "object",
        "required": [
          "type",
          "parameter",
          "pattern",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "parameter": {
            "type": "string",
            "nullable": true
          },
          "pattern": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SourceResolutionRule": {
        "type": "object",
        "required": [
          "id",
          "type",
          "parameter",
          "pattern",
          "value",
          "condition_operator",
          "conditions",
          "priority",
          "lead_source_id",
          "source",
          "external_source_key",
          "phone"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "type": {
            "type": "string"
          },
          "parameter": {
            "type": "string",
            "nullable": true
          },
          "pattern": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          },
          "condition_operator": {
            "type": "string",
            "enum": [
              "all",
              "any"
            ]
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SourceRuleCondition"
            }
          },
          "priority": {
            "type": "integer"
          },
          "lead_source_id": {
            "type": "integer",
            "nullable": true
          },
          "source": {
            "type": "string",
            "nullable": true
          },
          "external_source_key": {
            "type": "string",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LeadSourcesResponse": {
        "type": "object",
        "required": [
          "propertyId",
          "fallbackPhone",
          "fallbackEmail",
          "externalSourceField",
          "sources",
          "resolution"
        ],
        "properties": {
          "propertyId": {
            "type": "string",
            "format": "uuid"
          },
          "fallbackPhone": {
            "type": "string"
          },
          "fallbackEmail": {
            "type": "string"
          },
          "externalSourceField": {
            "type": "string"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LeadSourceEntry"
            }
          },
          "resolution": {
            "type": "object",
            "required": [
              "sourceObservationEndpoint",
              "clickIdParams",
              "rules"
            ],
            "properties": {
              "sourceObservationEndpoint": {
                "type": "string"
              },
              "clickIdParams": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "gclid",
                    "gbraid",
                    "wbraid",
                    "msclkid",
                    "fbclid",
                    "ttclid"
                  ]
                }
              },
              "rules": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SourceResolutionRule"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "InstagramFeedMedia": {
        "type": "object",
        "required": [
          "type",
          "url",
          "thumbnail_url"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video"
            ]
          },
          "url": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          },
          "thumbnail_url": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          }
        },
        "additionalProperties": false
      },
      "InstagramFeedPost": {
        "type": "object",
        "required": [
          "type",
          "caption",
          "hashtags",
          "permalink",
          "posted_at",
          "media"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "reel",
              "carousel"
            ]
          },
          "caption": {
            "type": "string",
            "nullable": true
          },
          "hashtags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "permalink": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          },
          "posted_at": {
            "type": "string",
            "nullable": true,
            "format": "date-time"
          },
          "media": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InstagramFeedMedia"
            }
          }
        },
        "additionalProperties": false
      },
      "MergedChildSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "key": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "image": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          },
          "imageFull": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          },
          "website": {
            "type": "string",
            "nullable": true,
            "format": "uri"
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "street": {
            "type": "string",
            "nullable": true
          },
          "street2": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "zipcode": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "nullable": true
          },
          "longitude": {
            "type": "number",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags_string": {
            "type": "string"
          }
        }
      },
      "MergedProperty": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Property"
          },
          {
            "type": "object",
            "properties": {
              "properties": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MergedChildSummary"
                }
              },
              "unitTypes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MergedUnitType"
                }
              }
            }
          }
        ]
      },
      "MergedFloorPlan": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FloorPlan"
          },
          {
            "type": "object",
            "properties": {
              "propertyId": {
                "type": "string",
                "format": "uuid"
              },
              "permalink": {
                "type": "string",
                "nullable": true,
                "format": "uri"
              }
            }
          }
        ]
      },
      "MergedUnit": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Unit"
          },
          {
            "type": "object",
            "properties": {
              "propertyId": {
                "type": "string",
                "format": "uuid"
              },
              "permalink": {
                "type": "string",
                "nullable": true,
                "format": "uri"
              }
            }
          }
        ]
      },
      "MergedUnitType": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UnitType"
          },
          {
            "type": "object",
            "properties": {
              "propertyIds": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        ]
      },
      "TourAvailabilitySlot": {
        "type": "object",
        "required": [
          "start",
          "end"
        ],
        "properties": {
          "start": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
            "description": "24-hour HH:MM in the day’s timezone."
          },
          "end": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
            "description": "24-hour HH:MM in the day’s timezone."
          }
        }
      },
      "TourAvailabilityDay": {
        "type": "object",
        "required": [
          "date",
          "timezone",
          "slots"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone for this day’s slots."
          },
          "slots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TourAvailabilitySlot"
            }
          }
        }
      },
      "TourGetAvailabilityRequest": {
        "type": "object",
        "required": [
          "connection_id",
          "property_id",
          "tour_type"
        ],
        "properties": {
          "connection_id": {
            "type": "string",
            "format": "uuid"
          },
          "property_id": {
            "type": "string",
            "format": "uuid"
          },
          "tour_type": {
            "type": "string",
            "enum": [
              "in_person_tour",
              "virtual_tour",
              "self_guided_tour"
            ]
          }
        }
      },
      "TourGetAvailabilityResponse": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "availability"
            ],
            "properties": {
              "availability": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TourAvailabilityDay"
                }
              }
            }
          }
        }
      },
      "TourReserveRequest": {
        "type": "object",
        "required": [
          "connection_id",
          "property_id",
          "tour_type",
          "tour_date",
          "tour_time"
        ],
        "properties": {
          "connection_id": {
            "type": "string",
            "format": "uuid"
          },
          "property_id": {
            "type": "string",
            "format": "uuid"
          },
          "tour_type": {
            "type": "string",
            "enum": [
              "in_person_tour",
              "virtual_tour",
              "self_guided_tour"
            ]
          },
          "tour_date": {
            "type": "string",
            "format": "date"
          },
          "tour_time": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
            "description": "Strict 24-hour HH:MM."
          },
          "resi_source_key": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": true,
        "description": "Additional keys are validated against the selected integration’s tour_types[].schema.fields definition."
      },
      "TourFieldData": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "width": {
            "type": "string",
            "enum": [
              "full",
              "half"
            ]
          },
          "placeholder": {
            "type": "string"
          },
          "minimum_date": {
            "type": "string",
            "nullable": true
          },
          "multiline": {
            "type": "boolean"
          },
          "rules": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "label",
          "required",
          "width",
          "placeholder",
          "minimum_date",
          "multiline",
          "rules"
        ]
      },
      "TourField": {
        "type": "object",
        "required": [
          "type",
          "name",
          "data"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]*$",
            "description": "Submission key when it differs from the field type."
          },
          "data": {
            "$ref": "#/components/schemas/TourFieldData"
          }
        },
        "additionalProperties": false
      },
      "IntegrationTourType": {
        "type": "object",
        "required": [
          "type",
          "label",
          "redirect_url",
          "schema"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "in_person_tour",
              "virtual_tour",
              "self_guided_tour"
            ]
          },
          "label": {
            "type": "string"
          },
          "redirect_url": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "schema": {
            "type": "object",
            "required": [
              "fields"
            ],
            "properties": {
              "fields": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TourField"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "Panel": {
        "type": "object",
        "description": "Legacy panel block: a content group flattened to its first enabled item.",
        "properties": {
          "blockId": {
            "type": "string",
            "format": "uuid"
          },
          "internalTitle": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "meta": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "string",
            "nullable": true
          },
          "link": {
            "type": "string",
            "nullable": true
          },
          "linkText": {
            "type": "string",
            "nullable": true
          },
          "linkTitle": {
            "type": "string",
            "nullable": true
          },
          "image": {
            "type": "string",
            "nullable": true
          },
          "imageFull": {
            "type": "string",
            "nullable": true
          },
          "imageAlt": {
            "type": "string",
            "nullable": true
          },
          "imageFocalPoint": {
            "type": "string",
            "description": "Always empty; kept for the legacy theme."
          },
          "panelHandle": {
            "type": "string",
            "nullable": true
          },
          "panelId": {
            "type": "string",
            "description": "Always empty; kept for the legacy theme."
          },
          "classes": {
            "type": "string",
            "description": "Always empty; kept for the legacy theme."
          },
          "attributes": {
            "type": "string",
            "description": "Always empty; kept for the legacy theme."
          }
        },
        "additionalProperties": false,
        "required": [
          "blockId",
          "internalTitle",
          "title",
          "meta",
          "content",
          "link",
          "linkText",
          "linkTitle",
          "image",
          "imageFull",
          "imageAlt",
          "imageFocalPoint",
          "panelHandle",
          "panelId",
          "classes",
          "attributes"
        ]
      },
      "ListItem": {
        "type": "object",
        "properties": {
          "col1": {
            "type": "string",
            "nullable": true
          },
          "col2": {
            "type": "string"
          },
          "col3": {
            "type": "boolean"
          },
          "item": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string"
          },
          "synced": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "col1",
          "col2",
          "col3",
          "item",
          "key",
          "synced"
        ]
      },
      "List": {
        "type": "object",
        "description": "Legacy list block: a content group rendered as an amenity list.",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "enum": [
              "Amenity List"
            ]
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "internalTitle": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "listItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ListItem"
            }
          },
          "listFloorPlans": {
            "type": "array",
            "items": {},
            "description": "Always empty; kept for the legacy theme."
          },
          "listUnits": {
            "type": "array",
            "items": {},
            "description": "Always empty; kept for the legacy theme."
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "title",
          "internalTitle",
          "description",
          "listItems",
          "listFloorPlans",
          "listUnits"
        ]
      }
    }
  }
}
