Docs
On this page
Docs/AVM/Request Schema

Build · AVM

Request Schema

This page describes Standard and Simple valuation requests. Request objects are strict: unknown or misspelled fields are rejected. Development requests use a dedicated schema: fabric, energy.construction_age_band, property.build_status, property.uprn and options.use_stored_data are not accepted. The API applies the fixed new-build specification internally.

Complete Request

json
{
  "request_reference": "customer-reference",
  "options": {
    "include_comparables": true,
    "include_context_metrics": true,
    "comparables_limit": 5,
    "use_stored_data": false
  },
  "property": {
    "valuation_date": "2026-09-08",
    "uprn": "100012345678",
    "postcode": "OX1 1AA",
    "type": "D",
    "subtype": "house_detached",
    "title_tenure": "leasehold",
    "build_status": "existing",
    "building_number_or_name": "14",
    "street": "Station Road"
  },
  "occupancy": {"status": "owner_occupied"},
  "size": {
    "floor_area_m2": 180,
    "bedrooms": 4,
    "living_rooms": 3,
    "storeys": 2
  },
  "land": {"plot_area_m2": 450},
  "energy": {
    "current_efficiency_score": 78,
    "potential_efficiency_score": 86,
    "consumption_kwh_m2_year": 115.5,
    "construction_age_band": "1983_1990",
    "extension_count": 2,
    "solar_pv_supply_percent": 20
  },
  "fabric": {
    "preset": "good",
    "roof_insulation": {
      "basis": "estimated",
      "estimated_level": "medium"
    },
    "wall_insulation": "insulated",
    "floor_insulation": "insulated",
    "glazing": "mostly_or_fully_double_glazed",
    "lighting": "efficient"
  },
  "lease": {
    "mode": "detailed",
    "start_date": "2020-01-01",
    "end_date": "2120-01-01"
  }
}

property, occupancy and size are required. Other sections are optional unless one of the conditional rules below applies.

Top-Level Fields

FieldTypeRequiredMeaning
request_referencestring/nullNoCustomer-defined reference, maximum 200 characters. It is separate from the server-generated execution and valuation identifiers.
optionsobject/nullNoResponse controls and stored-data policy.
propertyobjectYesDate, identity, form, legal tenure and build status.
occupancyobjectYesOccupier status, distinct from legal title.
sizeobjectYesFloor area, rooms and storeys.
landobject/nullNoTotal area within the property's title boundary.
energyobject/nullNoEPC-style performance and construction fields.
fabricobject/nullNoFabric preset and components.
leaseobject/nullConditionalRequired for leasehold; ignored for freehold.

Omitted and Null Values

Submitted values are schema-validated before business rules ignore fields that do not apply. For example, a freehold lease object must still have a valid shape, and a flat's supplied plot area must still be a valid positive number. Omit inapplicable fields rather than sending malformed placeholders.

For a nullable property field, omission and explicit null both mean that the customer has not supplied a value. Neither means zero, false or “unknown”. When stored data is enabled, the API may populate one of twelve eligible fields from the identified property record. A valid customer-supplied value takes precedence over stored values, subject to the documented conditional rules.

This does not apply to members of options: omit an option to use its default or inherited value. Boolean options and comparables_limit do not accept null. The whole options object may be omitted or null.

Options

FieldTypeDefaultEffect
include_comparablesbooleanfalseReturn comparable transactions.
include_context_metricsbooleanfalseReturn selected location metrics.
comparables_limitinteger3Return between 0 and 10 comparables; this does not change the valuation.
use_stored_databooleanfalsePopulate eligible blank fields from stored property data when available and authorised.

The schema also accepts include_confidence, include_prediction_interval and include_field_sources as booleans. They are not needed for a v3 integration: confidence, the available prediction range and input_resolution are standard parts of every successful valuation, including simple responses. Setting these options to false does not remove those fields. Setting include_field_sources to true does not add a separate field-source section to the public response.

include_feature_drivers is not an accepted customer API option, even when set to false. Do not include it in single requests, batch options or job options. Feature attribution is not returned by these endpoints.

Options controlling supporting evidence do not change the point estimate. Enabling use_stored_data may do so because it can add property information to the request.

In a batch or job, a property inherits each batch-level option unless it explicitly supplies its own value for that option. Explicit false and 0 are overrides, not missing values. If neither level supplies an option, the default above applies. See "Shared Options and Property Overrides" on the Batch Valuations and Asynchronous Jobs page for examples.

Property

FieldTypeRequiredRule
valuation_dateISO dateYesWithin 12 calendar months before/after the Europe/London request date.
uprndigit string/nullNo at submissionMaximum 20 digits. Existing properties require a verified UPRN before valuation; the API resolves it when omitted.
postcodestringYesValid postcode, normalised to uppercase and standard spacing.
typeenumYesD, S, T, F.
subtypeenumYesMust match broad type.
title_tenureenumYesfreehold, leasehold.
build_statusenum/nullNoexisting, new_build; omission means unknown.
building_number_or_namestringYes on existing-property endpointsRequired even when UPRN is supplied, because address and UPRN are verified as a pair; max 100.
streetstringYes on existing-property endpointsRequired even when UPRN is supplied; max 200.

Keep UPRNs as strings to avoid numeric precision loss. Use YYYY-MM-DD for dates and JSON numbers for numeric fields, not formatted strings such as "112 m2". The valuation date does not select an older release; see Versioning and Releases.

Type Matrix

TypeSubtypes
Dhouse_detached, bungalow_detached
Shouse_semi_detached, bungalow_semi_detached
Thouse_mid_terrace, house_end_terrace, bungalow_mid_terrace, bungalow_end_terrace
Fflat, maisonette

Mismatched type and subtype combinations are rejected.

Occupancy

occupancy.status is required and accepts owner_occupied, private_rented or social_rented. It describes occupation, not legal title.

Size

FieldDomainRules
floor_area_m2positive numberRequired. The automated range is 25..500 for houses and bungalows and 25..250 for flats and maisonettes. Valid values outside these ranges are referred for manual valuation rather than clipped.
bedroomsinteger 0..10Required. Houses/bungalows require at least one.
living_roomsinteger 0..8Required. Houses/bungalows require at least one.
storeysnumber 1..5Required for an ordinary house; optional and retained as unit levels for flats/maisonettes; derived as one for bungalows.

A flat or maisonette may have zero bedrooms, provided the combined number of bedrooms and living rooms is at least one. Unusual room-to-area combinations may be referred for manual valuation. Bungalows are treated as having one above-ground storey; any other valid supplied value is ignored and reported in the response.

Land

land.plot_area_m2 is optional and accepts a positive number. The automated range is 25..2,500; a valid value outside that range is referred for manual valuation rather than clipped. Enter the total area within the title boundary, including the building footprint, rather than the garden area alone.

Plot is ignored for flats. For a house it cannot be smaller than:

text
floor_area_m2 / storeys

Bungalows use one storey.

Energy

FieldDomain
current_efficiency_scoreinteger 1..100
potential_efficiency_scoreinteger 1..100, not below current when both supplied
consumption_kwh_m2_yearnumber 0..2,000
construction_age_bandenum below
extension_countinteger 0..4; ignored for flats
solar_pv_supply_percentnumber 0..100

Age bands:

text
before_1900        1900_1929       1930_1949
1950_1966          1967_1975       1976_1982
1983_1990          1991_1995       1996_2002
2003_2006          2007_2011       2012_2021
2022_onwards

When property.build_status=new_build, the API applies construction_age_band=2022_onwards. The response records whether this value was added or replaced a submitted value. On existing-property endpoints, this does not force a fabric preset: supply the property's actual fabric attributes. Development endpoints instead apply both the newest construction-age band and their fixed modern specification.

Fabric

FieldValues
presetpoor, good, high_spec
wall_insulationnone, partially_insulated, insulated, mixed_or_varied
floor_insulationnone, insulated, mixed_or_varied
glazingsingle_glazed, partially_double_glazed, mostly_or_fully_double_glazed, triple_or_secondary_glazed, mixed_or_varied
lightinginefficient, efficient, mixed_or_varied

If a fabric component is unknown, omit it. unknown is not a valid public enum.

Presets and Overrides

A preset supplies defaults for omitted components. Explicit component values take precedence.

PresetRoofWallsFloorGlazingLighting
poornone/assumed nonenonenonesingleinefficient
goodhighinsulatedinsulatedmostly/fully doubleefficient
high_spechighinsulatedinsulatedtriple/secondaryefficient

Once the component values have been resolved, the preset does not apply a separate blanket adjustment.

Roof Insulation

No insulation:

json
{"basis": "none"}

Measured:

json
{"basis": "measured", "depth_mm": 150}

Allowed depths are 25, 50, 75, 100, 150, 200, 250, 300, 350, 400. Represent zero as basis=none.

Estimated:

json
{"basis": "estimated", "estimated_level": "medium"}
LevelInterpretationAPI value
lowapproximately 25-50 mm37.5 mm midpoint
mediumapproximately 75-150 mm112.5 mm midpoint
highapproximately 200 mm or morewell-insulated category

Mixed:

json
{"basis": "mixed_or_varied"}

For measured, supply depth_mm only. For estimated, supply estimated_level only. Do not include either detail field when the basis is none or mixed_or_varied.

Lease

Leasehold requires one mode.

Simple:

json
{"mode": "simple", "years_remaining": 83.5}

Detailed:

json
{
  "mode": "detailed",
  "start_date": "2020-01-01",
  "end_date": "2120-01-01"
}
  • Simple requires years remaining and forbids dates.
  • Detailed requires both dates and forbids years remaining.
  • Remaining and full term must not exceed 9,999 years.
  • Start cannot be after valuation date.
  • End must be after valuation and start dates.
  • Detailed mode derives remaining and full term.
  • A successfully valued detailed-leasehold response returns the calculated lease.years_remaining used for the valuation. Rejection before lease validation may prevent this field from being returned.
  • Lease details supplied for a freehold property are ignored and listed in input_resolution.

Detailed remaining years are the number of calendar days from the valuation date to the lease end date divided by 365.2425. The response's lease.years_remaining is rounded to six decimal places. Simple mode uses the supplied number, which may include decimals.

Conditional Rules

ConditionBehaviour
Existing propertyBuilding, street and postcode are required; a supplied or resolved UPRN must be verified against that address before valuation.
LeaseholdLease object required.
FreeholdThe lease object is ignored and listed in input_resolution.
Flat or maisonettePlot area and extension count are ignored; unit-level storeys are retained; the maximum automated floor area is 250 m2.
BungalowStoreys derived as one.
House plot suppliedDerived footprint check applies.
RoomsBoth counts are required; property-form minimums and room-to-area checks apply.
Development endpointSite latitude and longitude are required instead of UPRN. New-build status, the newest construction-age band and typical modern fabric are applied automatically; stored-property inheritance is disabled.