Interior Floor Area API
Get gross internal floor area for UK properties using EPC data and Ordnance Survey Buildings
Overview
The Interior Floor Area API returns the gross internal floor area of UK properties using a tiered data pipeline that selects the best available source automatically.
Data pipeline (best source returned first):
EPC (actual measured floor area)
If an Energy Performance Certificate exists with a measured total floor area, it is returned immediately. This is the most accurate source.
OS BuildingPart (per-dwelling geometry)
Individual dwelling footprint from Ordnance Survey BuildingPart collections. Represents the specific dwelling rather than the whole building.
OS Building (estimated, divided by dwelling count)
Whole-building footprint from OS Buildings, divided by the number of dwellings sharing the building. Calculation: (footprint ÷ dwelling count) × floors.
This API provides:
- Gross internal floor area in square metres and square feet
- Data source identifier showing which tier was used
- Building footprint area and floor count (when OS data is used)
- Property type and built form (when EPC data is available)
- UPRN (Unique Property Reference Number) for the matched address
- Confidence indicator based on data quality
- Dwelling count for terraced/semi-detached properties (when building is shared)
Data Sources
- EPC: Energy Performance Certificates (measured)
- OS BuildingPart: Per-dwelling geometry
- OS Building: Whole-building footprint (estimated)
- AddressBase: Exact address resolution by building number
- Coverage: England, Scotland, Wales
Key Features
- Look up by house number + postcode
- Standalone UPRN lookup supported
- Results in sqm and sqft
- Automatic best-source selection
- Per-dwelling estimation for terraces
- Confidence scoring
This API is ideal for:
- Property valuation tools requiring floor area estimates
- Estate agent platforms enriching property listings
- Investment analysis comparing price per square foot
- Planning and development feasibility assessments
- Insurance applications requiring building size data
Important Note
When EPC data is available, the returned floor area is actual measured data. When falling back to OS Building estimation, the area is calculated from external building footprint geometry divided by dwelling count and multiplied by floor count. For precise measurements, a professional survey is recommended.
Authentication
All requests to the Interior Floor Area 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/
Floor Area Lookup
/floor-area/lookup?house_number={house_number}&postcode={postcode}Get the gross internal floor area for a property identified by house number and postcode, or by UPRN.
Request Parameters
GET /floor-area/lookup
Query parameters for floor area lookup. Provide either house_number + postcode, or uprn on its own.
| Parameter | Required | Type | Description |
|---|---|---|---|
| house_number | Conditional | String | Building number or name (e.g., "10", "FLAT 2"). Required with postcode. |
| postcode | Conditional | String | UK postcode (e.g., "SW1A 2AA"). Required with house_number. |
| uprn | Conditional | String | Unique Property Reference Number. Can be used on its own as an alternative to house_number + postcode. |
| street | Optional | String | Street name to improve geocoding accuracy (e.g., "High Street"). |
Parameter Requirements: You must provide either house_number + postcode together, or uprn on its own.
Postcode Format: Accepts postcodes with or without spaces. Both "SW1A2AA" and "SW1A 2AA" are valid.
UPRN Lookup: When using uprn alone, the address and postcode are resolved automatically via OS AddressBase.
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
All API responses are returned in JSON format. The response fields vary depending on which data source was used.
{
"success": boolean,
"data": {
// Response data varies by data source
},
"error": {
"code": string,
"message": string
} // Only present if success is false
}EPC Response (measured floor area)
{
"success": true,
"data": {
"postcode": "EX1 2AB",
"address": "7, EXAMPLE ROAD, SHEFFIELD",
"uprn": "100050912345",
"grossInternalArea": 85,
"unit": "sqm",
"grossInternalAreaSqft": 914.93,
"dataSource": "EPC",
"confidence": "high",
"propertyType": "House",
"builtForm": "Mid-Terrace"
}
}OS BuildingPart Response (per-dwelling geometry)
{
"success": true,
"data": {
"postcode": "EX1 2AB",
"address": "7, EXAMPLE ROAD, EXAMPLETON, EX1 2AB",
"uprn": "100050912345",
"buildingFootprintArea": 42.5,
"numberOfFloors": 2,
"grossInternalArea": 85,
"unit": "sqm",
"grossInternalAreaSqft": 914.93,
"dataSource": "OS BuildingPart",
"confidence": "high"
}
}OS Building Response (estimated, shared building)
{
"success": true,
"data": {
"postcode": "EX1 2AB",
"address": "7, EXAMPLE ROAD, EXAMPLETON, EX1 2AB",
"uprn": "100050912345",
"buildingFootprintArea": 255,
"numberOfFloors": 2,
"grossInternalArea": 85,
"unit": "sqm",
"grossInternalAreaSqft": 914.93,
"dataSource": "OS Building (estimated)",
"confidence": "medium",
"dwellingCount": 6
}
}For shared buildings (terraces, semi-detached), the footprint is divided by the dwelling count before multiplying by floors.
Response Fields
| Field | Type | Description |
|---|---|---|
| postcode | String | Formatted UK postcode |
| address | String | Matched address from data source |
| uprn | String | Unique Property Reference Number |
| grossInternalArea | Number | Gross internal floor area in square metres |
| grossInternalAreaSqft | Number | Gross internal floor area in square feet |
| buildingFootprintArea | Number | External building footprint area in sqm. Present when dataSource is OS BuildingPart or OS Building. |
| numberOfFloors | Number | Number of floors above ground. Present when dataSource is OS BuildingPart or OS Building. |
| dataSource | String | "EPC" (measured), "OS BuildingPart" (per-dwelling), or "OS Building (estimated)" (whole-building divided by dwellings) |
| confidence | String | "high" for EPC or UPRN-matched data, "medium" when dwelling division is applied or no UPRN match |
| propertyType | String | null | EPC property type (e.g., "House", "Flat"). Only present when dataSource is EPC. |
| builtForm | String | null | EPC built form (e.g., "Mid-Terrace", "Detached"). Only present when dataSource is EPC. |
| dwellingCount | Number | Number of dwellings sharing the building footprint. Only present when dataSource is "OS Building (estimated)" and the count is greater than 1. |
Examples
Example 1: Lookup by House Number and Postcode
GET https://propertyinsights.co.uk/api/v1/floor-area/lookup?house_number=10&postcode=SW1A%202AA X-API-Key: your_api_key_here
{
"success": true,
"data": {
"postcode": "SW1A 2AA",
"address": "10, DOWNING STREET, LONDON, SW1A 2AA",
"uprn": "100023336956",
"grossInternalArea": 1148.78,
"unit": "sqm",
"grossInternalAreaSqft": 12365.5,
"dataSource": "EPC",
"confidence": "high",
"propertyType": "House",
"builtForm": "Detached"
}
}Returns measured floor area from EPC data when available
Example 2: Lookup by UPRN
GET https://propertyinsights.co.uk/api/v1/floor-area/lookup?uprn=100023336956 X-API-Key: your_api_key_here
{
"success": true,
"data": {
"postcode": "SW1A 2AA",
"address": "10, DOWNING STREET, LONDON, SW1A 2AA",
"uprn": "100023336956",
"grossInternalArea": 1148.78,
"unit": "sqm",
"grossInternalAreaSqft": 12365.5,
"dataSource": "EPC",
"confidence": "high",
"propertyType": "House",
"builtForm": "Detached"
}
}UPRN-only lookup resolves address and postcode automatically via OS AddressBase
Example 3: OS Building Estimation (terraced property)
GET https://propertyinsights.co.uk/api/v1/floor-area/lookup?house_number=7&postcode=S11%209AW X-API-Key: your_api_key_here
{
"success": true,
"data": {
"postcode": "EX1 2AB",
"address": "7, EXAMPLE ROAD, EXAMPLETON, EX1 2AB",
"uprn": "100050912345",
"buildingFootprintArea": 255,
"numberOfFloors": 2,
"grossInternalArea": 85,
"unit": "sqm",
"grossInternalAreaSqft": 914.93,
"dataSource": "OS Building (estimated)",
"confidence": "medium",
"dwellingCount": 6
}
}When the building is shared (e.g., a terrace row), the footprint is divided by the number of dwellings
Error Handling
The API uses standard HTTP response codes and returns detailed error information in JSON format. All errors follow a consistent structure to help you handle them appropriately in your application.
| HTTP Code | Error Code | Description |
|---|---|---|
| 400 | MISSING_PARAMS | house_number and postcode, or uprn parameter is required |
| 400 | INVALID_POSTCODE | Invalid UK postcode format |
| 404 | ADDRESS_NOT_FOUND | No matching address found for the given house number and postcode |
| 404 | BUILDING_NOT_FOUND | No building data found at this location |
| 404 | FLOOR_DATA_UNAVAILABLE | Building found but floor count data is not available |
| 502 | OS_API_ERROR | Upstream Ordnance Survey API service error |
| 401 | AUTHENTICATION_REQUIRED | Valid API key is required |
| 402 | INSUFFICIENT_CREDITS | Not enough API credits remaining to perform operation |
| 500 | DATABASE_ERROR | Error accessing database - please try again |
| 500 | INTERNAL_SERVER_ERROR | An unexpected error occurred |
Error Response Format
{
"success": false,
"error": {
"code": "BUILDING_NOT_FOUND",
"message": "No building data found at this location."
}
}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 | 5,000 | 100,000 |
| Enterprise | Custom | Custom | Custom |
When you exceed your rate limit, the API will return a 429 Too Many Requests response. Each response includes the following headers to help you track your usage:
X-RateLimit-Limit: [requests-per-minute limit] X-RateLimit-Remaining: [requests remaining in current window] X-RateLimit-Reset: [timestamp when limit resets]
Performance Note: Floor area lookups typically respond within 2-4 seconds as they involve multiple upstream API queries for address resolution and building data matching. EPC-sourced responses may be faster as fewer upstream calls are needed.
Need Help?
If you need assistance with implementation or have questions about the Interior Floor Area API, our support team is here to help.