House Price Index API
Access official UK House Price Index data with flexible filtering by property type, region, and time period
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
Endpoints
Base URL
https://propertyinsights.co.uk/api/v1/
Get House Price Index Data
/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
| Parameter | Required | Type | Description |
|---|---|---|---|
| region | Required | String | Local authority or region name (e.g., "manchester", "camden") |
| startDate | Optional | String | Start date in YYYY-MM format (default: 10 years ago) |
| endDate | Optional | String | End date in YYYY-MM format (default: latest available) |
| propertyType | Optional | String | Property type: "all", "detached", "semi-detached", "terraced", "flat" (default: "all") |
| saleType | Optional | String | Sale type: "all", "cash", "mortgage" (default: "all") |
| buyerType | Optional | String | Buyer type: "all", "first-time", "former-owner" (default: "all") |
| newBuild | Optional | String | Build status: "all", "new", "existing" (default: "all") |
| interval | Optional | String | Data interval: "monthly" or "annual" (default: "monthly") |
| metrics | Optional | String | Comma-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 header | Meaning |
|---|---|
| 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
| Field | Type | Description |
|---|---|---|
| success | Boolean | Request success status |
| region | String | Queried region name |
| dateRange | Object | Start and end dates of returned data |
| count | Number | Number of data points returned |
| data | Array | Array of HPI data points |
| refMonth | String | Reference month (YYYY-MM) |
| averagePrice | Number | Average property price in GBP |
| housePriceIndex | Number | House price index (base 100 in Jan 2015) |
| percentageChange | Number | Monthly percentage change |
| percentageAnnualChange | Number | Year-on-year percentage change |
| salesVolume | Number | Number 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 Code | Meaning | Description |
|---|---|---|
| 200 | OK | Request successful |
| 400 | Bad Request | Missing required parameters |
| 401 | Unauthorized | Invalid or missing API key |
| 402 | Payment Required | Insufficient credits |
| 404 | Not Found | No data found for specified region |
| 500 | Internal Server Error | Server 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:
| Plan | Requests per Minute | Requests per Day | Requests per Month |
|---|---|---|---|
| Basic | 10 | 500 | 5,000 |
| Standard | 30 | 2,000 | 30,000 |
| Premium | 100 | 10,000 | 150,000 |
| Enterprise | Custom | Custom | Custom |
Rate Limit Headers
Each API response includes rate limit information in the response headers:
X-RateLimit-Limit- Your rate limit ceiling for that given requestX-RateLimit-Remaining- Number of requests remaining in the current windowX-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.