Property Valuation API v2

Model-based valuations for properties in England and Wales, with an 80% range, a confidence score and the sales behind each estimate

REST API
England and Wales
API Key Authentication
1 Credit Per API Call

What it returns

Send an address and postcode, or a UPRN, and get an estimate from a model trained on Land Registry sales. Each response includes:

  • An estimate and an 80% range: low and high are set so that about 8 in 10 sale prices fall between them.
  • A confidence score from 20 to 95. Higher means the model expects a smaller error for this property.
  • Drivers: the features that moved this estimate most, with a readable label and their effect.
  • Prior sales of the same property from the Land Registry, one entry per sale date.
  • Comparables: the nearby sales the model looked at, with distance, size and price.
  • Warnings when an input was weak, for example when no floor area was found.

On 61,577 England and Wales sales from July and August 2026 held out from training, the median absolute error was 7.5% and 62% of valuations were within 10% of the price paid.

Indicative estimates

Valuations are generated by a model and are estimates. For lending or legal purposes, also get a RICS surveyor report.

Authentication

All requests to the Property Valuation API v2 require authentication using an API key. You can obtain your API key from your PropertyInsights dashboard after subscribing to an API plan.

Include your API key in the request header as follows:

X-API-Key: your_api_key_here

Security Warning

Never expose your API key in client-side code. Always make API calls from your server-side application to protect your credentials.

Request

GET
https://propertyinsights.co.uk/api/v2/property/valuation

This route lives under /api/v2. The v1 route at /api/v1/property/valuation uses the same model for its recommended value and keeps the v1 response shape. Provide uprn on its own, or both postcode and address.

ParameterRequiredTypeDescription
postcodeWith addressStringFull postcode in England or Wales, for example ZZ1 1ZZ.
addressWith postcodeStringHouse number or name and street, for example 1 Example Road. Up to 200 characters.
uprnOn its ownStringUnique Property Reference Number, 1 to 12 digits. Do not send it with postcode or address.
propertyTypeOptionalStringD, S, T or F, or detached, semi-detached, terraced or flat. Overrides the type from the last sale or EPC.

Valuing a property that has been extended, converted or renovated since its last EPC? The EPC can describe the property as it was. Pass propertyType to set the type the model should use, for example a building that has been split into flats. Floor area still comes from the latest EPC.

Request examples

curl -X GET "https://propertyinsights.co.uk/api/v2/property/valuation?postcode=ZZ1%201ZZ&address=1%20Example%20Road" \
  -H "x-api-key: YOUR_API_KEY"

By UPRN:

GET https://propertyinsights.co.uk/api/v2/property/valuation?uprn=900000000001

The TypeScript and Python SDKs do not cover v2 yet. Call it over HTTP as in the request examples above, with your key in the x-api-key header.

Billing details in the response

Successful chargeable JSON responses include a top-level billing object. The endpoint examples on this page focus on the endpoint-specific data, so this repeated block may not be shown in every example.

"billing": {
  "mode": "prepaid",
  "creditsCharged": 1,
  "creditsRemaining": 1999,
  "creditsRefreshAt": "2026-08-14T09:30:00.000Z"
}
Field or headerMeaning
billing.creditsCharged
X-Credits-Charged
Credits charged by this call. Failed and non-chargeable calls return 0 in the header.
billing.creditsRemaining
X-Credits-Remaining
The credit balance after the call.
billing.creditsRefreshAt
X-Credits-Refresh-At
The next monthly credit refresh as an ISO 8601 timestamp. Trial and non-renewing balances return null and omit the header.

All authenticated API-key calls expose the billing headers, including validation errors and zero-credit status or management requests. Only successful chargeable JSON responses add the billing object to the response body.

When credits run out

If your balance is lower than the cost of a request, the API returns HTTP 402 and charges nothing. The error includes the credits needed, your balance and a link to change plan.

{
  "statusCode": 402,
  "statusMessage": "Payment Required",
  "data": {
    "success": false,
    "error": {
      "code": "INSUFFICIENT_CREDITS",
      "message": "This request costs 35 API credits. Upgrade your plan or wait for your monthly refresh: https://propertyinsights.co.uk/billing",
      "required": 35,
      "available": 12,
      "upgradeUrl": "https://propertyinsights.co.uk/billing"
    }
  }
}

Response

{
  "success": true,
  "data": {
    "property": {
      "uprn": 900000000001,
      "address": "1 EXAMPLE ROAD",
      "postcode": "ZZ1 1ZZ",
      "propertyType": "T",
      "tenure": "F",
      "floorAreaSqm": 92,
      "bedroomsEstimated": 3,
      "addressMatched": true,
      "epcInspectionDate": "2022-04-11"
    },
    "valuation": {
      "value": 312000,
      "low": 284000,
      "high": 341000,
      "coverage": 0.8,
      "confidence": 78,
      "valuationDate": "2026-11-08",
      "modelVersion": "20261108-1935-serve83",
      "hpiMonth": "2026-09"
    },
    "drivers": [
      { "feature": "knn10_ppsqm_12m", "label": "Nearest sales price per m2", "value": 3350, "effect": 0.064 },
      { "feature": "floor_area", "label": "Floor area", "value": 92, "effect": 0.041 },
      { "feature": "prior_price_indexed", "label": "Prior sale, indexed", "value": 296500, "effect": -0.022 }
    ],
    "priorSales": [
      { "date": "2017-06-30", "price": 215000, "newBuild": false }
    ],
    "comparables": [
      { "address": "3 EXAMPLE ROAD", "postcode": "ZZ1 1ZZ", "price": 305000, "date": "2026-03-20", "propertyType": "T", "floorAreaSqm": 88, "distanceM": 0 },
      { "address": "28 EXAMPLE ROAD", "postcode": "ZZ1 2ZZ", "price": 322500, "date": "2025-11-07", "propertyType": "T", "floorAreaSqm": 95, "distanceM": 140 },
      { "address": "7 SAMPLE STREET", "postcode": "ZZ1 3ZZ", "price": 298000, "date": "2025-08-15", "propertyType": "T", "floorAreaSqm": 86, "distanceM": 310 }
    ],
    "warnings": []
  }
}

property

The property that was valued. propertyType is D, S, T or F. tenure is F (freehold) or L (leasehold). addressMatched is false when only the postcode could be matched, in which case the model uses postcode-level inputs.

valuation

  • value: the estimate in pounds.
  • low and high: the 80% range. coverage is always 0.8.
  • confidence: 20 to 95.
  • valuationDate: the date of the estimate. hpiMonth: the HPI month used.
  • modelVersion: the model that produced the estimate. Store it if you compare estimates over time.

drivers

The features with the largest effect on this estimate, largest first. value is the input the model saw. effect is the change it made as a fraction, so 0.064 raised the estimate by about 6.4% and -0.022 lowered it by about 2.2%.

priorSales

Earlier Land Registry sales of the same property, newest first, with one entry per sale date. Empty when none were found.

comparables

Nearby sales of the same property type that the model used, nearest first. distanceM is the distance in metres between the centre of the property's postcode and the centre of the sale's postcode, so sales in the same postcode show 0.

warnings

WarningMeaning
ADDRESS_NOT_MATCHEDThe address was not found at the postcode, so the model uses postcode-level inputs.
NO_FLOOR_AREANo EPC floor area was found. Expect a wider range.
FEW_COMPARABLESFewer than five recent sales were found nearby.
HPI_OLDER_THAN_3_MONTHSThe latest HPI month is more than three months before the estimate date.
PROPERTY_TYPE_UNKNOWNNo property type was found. Pass propertyType to set one.

How the model works

  • Gradient-boosted trees trained on Land Registry sales since 2010.
  • 83 features covering the property (type, tenure, EPC floor area and rating, prior sales), nearby sales per square metre, street and postcode prices, and the area (deprivation, Census and location).
  • Features are built point in time: each training sale only sees data that existed before it was sold, which is how the model sees a request today.
  • The 80% range is calibrated on 2026 sales. Confidence comes from a second model that predicts the expected error for each property.
  • Data is as of the latest Land Registry month. hpiMonth shows the HPI month used.
  • England and Wales only. Scottish and Northern Irish postcodes return UNSUPPORTED_NATION.

Errors

Errors return { "success": false, "error": { "code", "message" } }, except the 404 for a missing key, which has no error code. No credits are charged for an error.

StatusCodeMeaning
400MISSING_LOOKUP, CONFLICTING_LOOKUP_FIELDS, INVALID_UPRN, INVALID_ADDRESS, INVALID_POSTCODE, INVALID_PROPERTY_TYPEThe input is missing or not valid. Send uprn, or postcode and address, but not both.
401INVALID_API_KEYThe API key is not valid.
402INSUFFICIENT_CREDITSNot enough credits for this call.
403SUBSCRIPTION_INACTIVEThe API subscription is not active.
404Not FoundNo x-api-key header was sent.
404POSTCODE_NOT_FOUNDNo location was found for the postcode or UPRN.
404UNSUPPORTED_NATIONThe property is outside England and Wales.
500AVM_FEATURES_FAILEDThe model inputs could not be prepared.
503AVM_UNAVAILABLEThe model service is busy or down. Retry after the number of seconds in the Retry-After header.
503AVM_FEATURES_TIMEOUTThe model inputs took too long to prepare. Retry after the number of seconds in the Retry-After header.
503HPI_UNAVAILABLEHouse price index data is not available for this area.
503AVM_NOT_CONFIGUREDThe model service is not set up. Contact support if this persists.

v1 or v2

Both versions use the same valuation model. v1 keeps its original response fields, adds HPI and comparables breakdowns and EPC details, accepts planned extensions and renovation uplift, and falls back to those methods when the model cannot value a property. v2 returns the model result on its own, accepts a UPRN, and returns a 404 outside England and Wales.

Both cost 1 credit per call. Existing v1 integrations keep working. Use v2 for a lean response or UPRN lookups, and v1 when you need extension scenarios or the per-method breakdowns.

Need help?

Questions about the model or an integration? Our support team can help.

Contact Support