Changed
- Field selection is deep: ask for
address.displayAddressand you get anaddressobject 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,marketStatusand the fullepctree 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 inattributes, 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,dataandhas_moreon every list response stay required, and component names in the spec are unchanged, so regenerating does not rename a single model.
Affected endpoints
- POST/v1/property/query
- GET/v1/property/{locationIds}
- GET/v1/property/propertyId/{propertyIds}
- GET/v1/property/sources/{sourceIds}
- POST/v1/property/properties/by-slugs
- POST/v1/listings/query/advanced
- POST/v1/transactions/query
- GET/v1/transactions/{id}
- GET/v1/transactions/by-uprn/{uprn}
- POST/v1/buildings/query
- GET/v1/buildings/{buildingId}
- POST/v1/buildings/by-ids
- GET/v1/buildings/by-point
- GET/v1/buildings/by-uprn/{uprn}
- POST/v1/sites/query
- GET/v1/sites/{siteId}
- POST/v1/sites/by-ids
- GET/v1/sites/by-property/{locationId}
- GET/v1/sites/by-point