Interior Floor Area API

Get gross internal floor area for UK properties using EPC data and Ordnance Survey Buildings

REST API
JSON Responses
API Key Authentication
EPC + OS Data
35 credits per completed lookup

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):

1

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.

2

OS BuildingPart (per-dwelling geometry)

Individual dwelling footprint from Ordnance Survey BuildingPart collections. Represents the specific dwelling rather than the whole building.

3

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

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/

Floor Area Lookup

GET
/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.

ParameterRequiredTypeDescription
house_numberConditionalStringBuilding number or name (e.g., "10", "FLAT 2"). Required with postcode.
postcodeConditionalStringUK postcode (e.g., "SW1A 2AA"). Required with house_number.
uprnConditionalStringUnique Property Reference Number. Can be used on its own as an alternative to house_number + postcode.
streetOptionalStringStreet 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 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

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

FieldTypeDescription
postcodeStringFormatted UK postcode
addressStringMatched address from data source
uprnStringUnique Property Reference Number
grossInternalAreaNumberGross internal floor area in square metres
grossInternalAreaSqftNumberGross internal floor area in square feet
buildingFootprintAreaNumberExternal building footprint area in sqm. Present when dataSource is OS BuildingPart or OS Building.
numberOfFloorsNumberNumber of floors above ground. Present when dataSource is OS BuildingPart or OS Building.
dataSourceString"EPC" (measured), "OS BuildingPart" (per-dwelling), or "OS Building (estimated)" (whole-building divided by dwellings)
confidenceString"high" for EPC or UPRN-matched data, "medium" when dwelling division is applied or no UPRN match
propertyTypeString | nullEPC property type (e.g., "House", "Flat"). Only present when dataSource is EPC.
builtFormString | nullEPC built form (e.g., "Mid-Terrace", "Detached"). Only present when dataSource is EPC.
dwellingCountNumberNumber 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 CodeError CodeDescription
400MISSING_PARAMShouse_number and postcode, or uprn parameter is required
400INVALID_POSTCODEInvalid UK postcode format
404ADDRESS_NOT_FOUNDNo matching address found for the given house number and postcode
404BUILDING_NOT_FOUNDNo building data found at this location
404FLOOR_DATA_UNAVAILABLEBuilding found but floor count data is not available
502OS_API_ERRORUpstream Ordnance Survey API service error
401AUTHENTICATION_REQUIREDValid API key is required
402INSUFFICIENT_CREDITSNot enough API credits remaining to perform operation
500DATABASE_ERRORError accessing database - please try again
500INTERNAL_SERVER_ERRORAn 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:

PlanRequests per MinuteRequests per DayRequests per Month
Basic105005,000
Standard302,00030,000
Premium1005,000100,000
EnterpriseCustomCustomCustom

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.