House Price Index API

Access official UK House Price Index data with flexible filtering by property type, region, and time period

REST API
JSON Responses
API Key Authentication
1 Credit Per API Call

Overview

The House Price Index (HPI) API provides access to official UK government house price statistics from the Land Registry. Track historical house price trends, percentage changes, sales volumes, and indices across different regions and property types.

This API provides:

  • Monthly and annual house price index data
  • Average prices by property type (detached, semi-detached, terraced, flat/maisonette)
  • Average prices by sale type (cash, mortgage)
  • Average prices by buyer type (first-time buyer, former owner-occupier)
  • Average prices by build status (new build, existing property)
  • Percentage change (monthly and year-on-year)
  • Sales volume data
  • Historical data from 1995 (England/Wales), 2004 (Scotland), 2005 (Northern Ireland)

This API is ideal for:

  • Property market analysts tracking regional trends
  • Economists researching housing market dynamics
  • Financial institutions assessing market conditions
  • Property developers evaluating investment opportunities
  • Real estate platforms displaying market insights
  • Academic researchers studying housing economics

Data Source

This API uses official data from the UK Land Registry's House Price Index, ensuring accuracy and reliability. The HPI is based on registered property transactions and is widely recognized as the authoritative source for UK house price statistics.

Authentication

All requests to the House Price Index API 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.

Endpoints

Base URL

https://propertyinsights.co.uk/api/v1/

Get House Price Index Data

GET
/hpi

Returns house price index data for a specified region with flexible filtering options. Query by property type, sale type, buyer type, time period, and more.

Request Parameters

ParameterRequiredTypeDescription
regionRequiredStringLocal authority or region name (e.g., "manchester", "camden")
startDateOptionalStringStart date in YYYY-MM format (default: 10 years ago)
endDateOptionalStringEnd date in YYYY-MM format (default: latest available)
propertyTypeOptionalStringProperty type: "all", "detached", "semi-detached", "terraced", "flat" (default: "all")
saleTypeOptionalStringSale type: "all", "cash", "mortgage" (default: "all")
buyerTypeOptionalStringBuyer type: "all", "first-time", "former-owner" (default: "all")
newBuildOptionalStringBuild status: "all", "new", "existing" (default: "all")
intervalOptionalStringData interval: "monthly" or "annual" (default: "monthly")
metricsOptionalStringComma-separated metrics: "price,index,change,annualChange,volume" (default: all except volume)

Region Names

Region names should match UK local authority names. The API accepts region names with spaces - they will be automatically normalized to lowercase with hyphens.

Examples of valid regions:

  • England: manchester, birmingham, liverpool, leeds, city-of-london, brighton-and-hove, camden
  • Scotland: aberdeen-city, edinburgh-city-of, glasgow-city
  • Wales: cardiff, swansea, newport
  • National/Regional: england, scotland, wales, united-kingdom, england-and-wales
  • Regions: north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

The API covers all 441 UK local authorities. For a complete list, refer to the Land Registry HPI browser.

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.

Response Format

The API returns a JSON object containing the requested house price index data with metadata about the query.

Success Response (200 OK)

{
  "success": true,
  "region": "manchester",
  "dateRange": {
    "start": "2020-01",
    "end": "2024-12"
  },
  "interval": "monthly",
  "filters": {
    "propertyType": "all",
    "saleType": "all",
    "buyerType": "all",
    "newBuild": "all"
  },
  "count": 60,
  "data": [
    {
      "refMonth": "2020-01",
      "averagePrice": 185000,
      "housePriceIndex": 128.5,
      "percentageChange": 0.8,
      "percentageAnnualChange": 3.2
    },
    {
      "refMonth": "2020-02",
      "averagePrice": 187500,
      "housePriceIndex": 130.1,
      "percentageChange": 1.4,
      "percentageAnnualChange": 3.8
    }
  ]
}

Response Fields

FieldTypeDescription
successBooleanRequest success status
regionStringQueried region name
dateRangeObjectStart and end dates of returned data
countNumberNumber of data points returned
dataArrayArray of HPI data points
refMonthStringReference month (YYYY-MM)
averagePriceNumberAverage property price in GBP
housePriceIndexNumberHouse price index (base 100 in Jan 2015)
percentageChangeNumberMonthly percentage change
percentageAnnualChangeNumberYear-on-year percentage change
salesVolumeNumberNumber of sales (if metrics includes "volume")

Code Examples

cURL

curl -X GET "https://propertyinsights.co.uk/api/v1/hpi?region=manchester&startDate=2020-01&endDate=2024-12&propertyType=all&interval=monthly" \
  -H "x-api-key: YOUR_API_KEY"

JavaScript (Fetch)

const apiKey = 'YOUR_API_KEY';
const region = 'manchester';
const params = new URLSearchParams({
  region: region,
  startDate: '2020-01',
  endDate: '2024-12',
  propertyType: 'detached',
  interval: 'annual'
});

fetch(`https://propertyinsights.co.uk/api/v1/hpi?${params}`, {
  headers: {
    'x-api-key': apiKey
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Python

import requests

api_key = "YOUR_API_KEY"
url = "https://propertyinsights.co.uk/api/v1/hpi"

params = {
    "region": "manchester",
    "startDate": "2020-01",
    "endDate": "2024-12",
    "propertyType": "all",
    "interval": "monthly"
}

headers = {
    "x-api-key": api_key
}

response = requests.get(url, params=params, headers=headers)
data = response.json()
print(data)

Common Use Cases

1. Annual House Price Trends for Detached Properties

/api/v1/hpi?region=manchester&propertyType=detached&interval=annual&startDate=2015-01

2. First-Time Buyer Market Analysis

/api/v1/hpi?region=london&buyerType=first-time&startDate=2020-01

3. New Build vs Existing Property Comparison

/api/v1/hpi?region=bristol&newBuild=new&interval=annual
/api/v1/hpi?region=bristol&newBuild=existing&interval=annual

4. Cash vs Mortgage Sales Trends

/api/v1/hpi?region=birmingham&saleType=cash&startDate=2022-01
/api/v1/hpi?region=birmingham&saleType=mortgage&startDate=2022-01

Error Handling

The API uses standard HTTP status codes to indicate success or failure.

Status CodeMeaningDescription
200OKRequest successful
400Bad RequestMissing required parameters
401UnauthorizedInvalid or missing API key
402Payment RequiredInsufficient credits
404Not FoundNo data found for specified region
500Internal Server ErrorServer error occurred

Error Response Example

{
  "statusCode": 404,
  "statusMessage": "No data found for region: invalid-region"
}

Rate Limits

API requests are subject to rate limiting based on your subscription plan. The current limits are:

PlanRequests per MinuteRequests per DayRequests per Month
Basic105005,000
Standard302,00030,000
Premium10010,000150,000
EnterpriseCustomCustomCustom

Rate Limit Headers

Each API response includes rate limit information in the response headers:

  • X-RateLimit-Limit - Your rate limit ceiling for that given request
  • X-RateLimit-Remaining - Number of requests remaining in the current window
  • X-RateLimit-Reset - Time at which the current rate limit window resets (Unix timestamp)

Rate Limit Exceeded (429)

If you exceed your rate limit, the API will return a 429 Too Many Requests status code. Implement exponential backoff in your application to handle rate limit errors gracefully.

Best Practices

  • Cache responses: HPI data is updated monthly. Cache responses for at least 24 hours to reduce API calls and costs.
  • Request only needed metrics: Use the metrics parameter to limit the response to only the data you need.
  • Use annual intervals for long-term trends: When analyzing multi-year trends, use interval=annual to reduce data volume.
  • Handle errors gracefully: Always implement error handling for invalid regions or insufficient credits.