Vepler logo
v3.3.0

Attribute selection now matches the published response schema at every depth

Every endpoint that supports field selection now describes each response field as optional at every nesting level, so any subset of fields you request validates against the published spec.

Changed

  • Field selection is deep: ask for address.displayAddress and you get an address object holding just that key. The published schema now says so, marking every response field optional at every nesting level, so a narrow projection validates against the spec exactly as the API returns it.
  • All five property read endpoints (POST /v1/property/query, GET /v1/property/{locationIds}, GET /v1/property/propertyId/{propertyIds}, GET /v1/property/sources/{sourceIds} and POST /v1/property/properties/by-slugs) document nested blocks such as address, marketStatus and the full epc tree as optional throughout.
  • The same rule applies to the resource models behind POST /v1/listings/query/advanced and POST /v1/transactions/query, so a sparse fieldset on either endpoint parses cleanly.
  • Buildings reads leave heavy fields (footprint, parts, addresses) out unless you name them in attributes, and site boundaries are opt-in the same way. POST /v1/buildings/query, GET /v1/buildings/{buildingId}, POST /v1/sites/query and GET /v1/sites/{siteId} now describe that default shape precisely.
  • Regenerate your SDK from the published spec to pick this up: generated models carry the optionality the API actually returns, so a projected 200 deserialises straight into a typed model. In strictly typed languages those fields arrive optional, so narrow them before use.
  • Response validation is unchanged where it counts. Wrong types, out-of-range enum values and malformed list envelopes still fail: object, data and has_more on every list response stay required, and component names in the spec are unchanged, so regenerating does not rename a single model.