Developer Docs

LondonIQ API

Three APIs. All London postcodes. Postcode data with 40+ sections (liveability, crime, transport, planning and more), Material Information (Parts A, B & C — Trading Standards compliant), and Planning History (applications within 250m, 1994–present).

Getting started

Email api@londoniq.co.uk to request an API key. We reply within one business day. Pass your key in every request via the X-API-Key header.

curl https://api.londoniq.co.uk/api/v1/postcode/E1%206RF \
  -H "X-API-Key: liq_your_key_here"
Make all API calls server-side. Do not expose your key in client-side JavaScript or public repositories.

Base URL

https://api.londoniq.co.uk

HTTPS only. All responses are JSON. Successful responses are wrapped in a data key. Errors return an error key with a message.

Endpoints

GET/api/v1/postcode/:postcode

Full data for a single London postcode. URL-encode spaces (e.g. E1%206RF). Returns a single JSON object with the following top-level sections:

scorespropertytransportcrimeenvironmentschoolshealthconnectivityamenitiesplanningbuildingsproperty_taxground_stabilitydeprivationdemographicshousinginvestmentwalkabilityparkingcyclingroad_safetybusinesspoliticsenergyclimateaffordabilityrental_marketinsurance_riskcommute_hubsliquidityfuture_outlookbenchmarksheadlinearea_profiledata_qualitydata_freshness
curl https://api.londoniq.co.uk/api/v1/postcode/CR2%200QE \
  -H "X-API-Key: liq_your_key_here"
200Response — all sections (abbreviated)click to expand
{
  "data": {
    "postcode": "CR2 0QE",
    "borough": "Croydon",
    "ward": "Purley Oaks & Riddlesdown",
    "latitude": 51.3455, "longitude": -0.0993,
    "area_character": "Inner Suburb",

    "scores": {
      "liveability_score": 66,
      "transport_score": 32,
      "safety_score": 95,
      "environment_score": 65,
      "amenity_score": 64,
      "property_score": 77,
      "investment_score": 34,
      "score_percentile": 41.8
    },

    "property": {
      "median_price": 592000,
      "price_1yr_change": -8.4,
      "price_5yr_change": 2.1,
      "avg_price_per_sqm": 5116.68,
      "avg_price_per_sqft": 475.35,
      "avg_floor_area_m2": 115.7,
      "median_construction_age": "1930-1949",
      "new_build_pct": 0.0,
      "leasehold_pct": 0.0,
      "avg_epc_score": 55,
      "most_common_walls": "Solid brick, as built, no insulation (assumed)",
      "most_common_heating_fuel": "mains gas (not community)",
      "market_momentum": "Falling",
      "low_sample_warning": true,
      "price_history": [
        { "quarter": "2016-Q3", "median": 440000 },
        { "quarter": "2025-Q1", "median": 563500 }
      ],
      "lha_1bed_rate": 950,
      "lha_2bed_rate": 1200,
      "lha_3bed_rate": 1500,
      "lha_4bed_rate": 1950
    },

    "transport": {
      "ptal_score": "2", "ptal_numeric": 2,
      "nearest_rail_name": "Purley Oaks",
      "nearest_rail_distance_m": 173,
      "nearest_rail_services_per_hour": 2,
      "nearest_rail_london_terminus": "London Bridge",
      "rail_journey_time_mins": 21,
      "bus_routes_count": 1,
      "bus_stops_400m": 3,
      "journey_mins_zone1": 51,
      "journey_mins_canary_wharf": 56,
      "journey_mins_heathrow": 98,
      "night_tube_accessible": false,
      "nearby_stations": [ { "name": "Purley Oaks", "lines": ["National Rail"], "distance_m": 173 } ]
    },

    "crime": {
      "crime_rate_per_1000": 27.12,
      "crime_band": "MEDIUM",
      "crime_vs_borough_pct": 4.5,
      "crime_trend": "WORSENING",
      "crime_trend_pct": 141.2,
      "crime_by_type": { "violence": 12, "theft": 1, "burglary": 4, "vehicle": 15, "asb": 5 }
    },

    "environment": {
      "no2_annual_mean": 18.0, "pm25_annual_mean": 9.0,
      "air_quality_band": "GOOD",
      "flood_risk_zone": "ZONE_1", "flood_risk_label": "Low",
      "surface_water_flood_risk": "Medium",
      "green_space_pct": 6.5,
      "noise_band": "VERY HIGH", "dominant_noise_source": "rail",
      "rail_noise_lden": 65.0,
      "radon_risk_band": "moderate",
      "in_ulez": true, "ulez_daily_charge_gbp": 12.5,
      "in_congestion_charge_zone": false,
      "in_green_belt": false, "in_aonb": false
    },

    "schools": {
      "nearest_primary_name": "Purley Oaks Primary School",
      "nearest_primary_ofsted": "Good",
      "nearest_primary_distance_m": 875,
      "nearest_primary_ks2_score": 103.4,
      "nearest_secondary_name": "Harris Academy Purley",
      "nearest_secondary_ofsted": "Good",
      "nearest_secondary_distance_m": 1054,
      "nearest_secondary_progress8": 0.29,
      "schools_within_1km": 6,
      "ofsted_good_or_outstanding_pct": 100.0,
      "childcare": { "nearest_childcare_name": "Purley Nursery School", "nearest_childcare_distance_m": 1106 }
    },

    "health": {
      "nearest_gp_name": "PARKSIDE GROUP PRACTICE",
      "nearest_gp_distance_m": 573,
      "nearest_gp_cqc_rating": "Good",
      "gp_recommend_pct": 79.1,
      "nearest_hospital_name": "Purley War Memorial Hospital",
      "nearest_hospital_distance_m": 1214,
      "nearest_ae_name": "CROYDON HEALTH SERVICES NHS TRUST",
      "nearest_ae_distance_m": 4898,
      "nearest_ae_4hr_compliance_pct": 71.3,
      "cqc_dentist_1km": 5
    },

    "connectivity": {
      "broadband": {
        "avg_download_mbps": 500.0,
        "superfast_coverage_pct": 100.0,
        "ultrafast_coverage_pct": 100.0,
        "full_fibre_coverage_pct": 100.0,
        "gigabit_coverage_pct": 100.0,
        "providers": ["BT", "Sky", "TalkTalk", "Vodafone", "Virgin Media"]
      },
      "mobile": {
        "operators": ["EE", "O2", "Vodafone", "Three"],
        "coverage": { "outdoor_4g_pct": 100.0, "outdoor_5g_pct": 99.96 }
      }
    },

    "planning": {
      "in_conservation_area": false,
      "in_article4_area": false,
      "listed_buildings_within_800m": 1,
      "live_planning_apps_within_800m": 1,
      "development_activity_level": "low",
      "development_pressure_score": 25,
      "historic_landfill_within_400m": 1,
      "in_opportunity_area": false,
      "in_green_belt": false,
      "cil_rate_residential": 110,
      "housing_pipeline": {
        "homes_approved_800m": 0,
        "homes_under_construction_800m": 0,
        "homes_completed_last_3yr_800m": 105,
        "pipeline_pressure": "NONE"
      },
      "roadworks_active_200m": 0
    },

    "buildings": {
      "dominant_type": "Semi-detached",
      "street_profile": { "semi_pct": 89.1, "terraced_pct": 10.9, "flat_pct": 0.0, "sample_size": 55 }
    },

    "property_tax": {
      "ct_median_band": "D",
      "ct_annual_gbp": 2083,
      "ct_monthly_gbp": 174,
      "ct_band_distribution": { "C": 26.6, "D": 20.3, "E": 32.8, "F": 17.2 }
    },

    "ground_stability": {
      "geology_type": "SAND AND GRAVEL",
      "shrink_swell_score": 1,
      "subsidence_risk_score": 1,
      "landslide_count_2km": 0,
      "running_sand_risk": 3
    },

    "deprivation": {
      "imd_decile": 9, "imd_label": "low deprivation",
      "population_estimate": 1512,
      "median_income": 48600,
      "claimant_rate_pct": 3.0
    },

    "demographics": {
      "employed_pct": 66.0, "degree_pct": 50.1,
      "owned_pct": 70.7, "private_rent_pct": 22.8,
      "managerial_professional_pct": 49.2,
      "ethnicity_profile": { "white_british": 51.9, "asian": 14.9, "black": 13.4 }
    },

    "investment": {
      "investment_score": 34, "investment_band": "Weak",
      "avg_monthly_rent": 1250,
      "gross_yield_pct": 2.53, "yield_band": "low",
      "gentrification_score": 22,
      "buyer_demand_band": "Below Average",
      "market_heat_band": "Balanced"
    },

    "affordability": {
      "median_household_income": 48600,
      "estimated_mortgage_payment_pcm": 2961,
      "affordability_ratio": 12.2,
      "affordability_band": "Unaffordable",
      "stamp_duty_gbp": 17100,
      "stamp_duty_ftb_gbp": 8350,
      "stamp_duty_additional_gbp": 34860,
      "mortgage_rate_2yr_fixed_pct": 4.58,
      "mortgage_rate_5yr_fixed_pct": 4.32
    },

    "insurance_risk": {
      "flood_risk": "Low", "subsidence_risk": "Low",
      "claim_risk_score": 5,
      "insurance_cost_band": "Standard",
      "rebuild_cost_estimate_gbp": 289250,
      "rebuild_cost_per_sqm": 2500
    },

    "commute_hubs": {
      "london_bridge": 46, "victoria": 50,
      "canary_wharf": 59, "city": 57,
      "best_hub": "london_bridge", "best_hub_mins": 46
    },

    "amenities": {
      "restaurants_800m": 13, "cafes_800m": 4,
      "parks_1km": 25, "gyms_1km": 2,
      "pharmacies_800m": 1, "libraries_1km": 0,
      "sports_facilities_1km": 13,
      "hygiene_avg_rating": 4.3
    },

    "walkability":     { "walkability_score": 44, "prow_total_500m": 9 },
    "parking":         { "car_parks_800m": 4, "ev_chargers_800m": 1, "nearest_car_park_m": 403 },
    "cycling":         { "santander_docks_800m": 0, "nearest_dock_m": 8055 },
    "road_safety":     { "road_safety_score": 100.0, "accidents_5yr": 0, "ksi_5yr": 0 },
    "business":        { "active_businesses": 8, "industry_diversity": 8 },

    "politics": {
      "mp_name": "Chris Philp", "mp_party": "Conservative",
      "parliamentary_constituency": "Croydon South",
      "ward_majority_party": "Conservative and Unionist Party",
      "ward_turnout_pct": 39.0
    },

    "energy": {
      "solar_kwh_per_kwp_yr": 851.9,
      "heat_pump_suitable": true,
      "epc_upgrade_cost_band": "Medium"
    },

    "climate": {
      "sunshine_hours_per_year": 1530,
      "annual_rainfall_mm": 595,
      "avg_summer_temp_c": 22.9,
      "avg_winter_temp_c": 3.0
    },

    "headline": {
      "overall_rating": "Good",
      "buyer_suitability": "Excellent",
      "investment_outlook": "Neutral",
      "risk_level": "Medium",
      "confidence_score": 100
    },

    "liquidity": {
      "sales_velocity_score": 12,
      "market_activity_level": "Low",
      "days_to_sell_estimate": 100
    },

    "future_outlook": {
      "development_pressure": "Low",
      "price_growth_potential": "Low",
      "new_supply_risk": "Low"
    },

    "benchmarks": {
      "crime_vs_london_pct": -58.3,
      "price_vs_london_pct": 13.8,
      "income_vs_london_pct": 15.7
    },

    "rental_market": {
      "demand_level": "Medium",
      "void_risk": "Medium",
      "tenant_profile": "Mixed owner / renter"
    },

    "data_quality": { "confidence_score": 95, "pillars_populated": 12, "reliability": "High" },
    "last_updated": "2026-05-19T05:24:33+00:00"
  }
}

Key fields reference

SectionFieldTypeDescription
scoresliveability_scoreint 0–100Composite liveability score, percentile-ranked across London
scoresscore_percentilefloatPercentile rank vs all London postcodes (100 = best)
scoresinvestment_scoreint 0–100Price growth potential + demand signal
propertymedian_priceint | nullMedian sold price (GBP). Null if fewer than 5 sales in 24 months
propertyprice_1yr_changefloat | null% price change over 12 months
propertyavg_price_per_sqmfloat | nullAverage price per m² (GBP)
propertymarket_momentumstringRising / Stable / Falling
propertyprice_historyarrayQuarterly median prices { quarter, median }
propertylha_1bed_rate … 4bed_rateintLocal Housing Allowance rates (£/month) by bedroom count
propertymedian_construction_agestringE.g. "1930–1949"
propertymost_common_walls / heating / roofstringEPC-derived construction characteristics
transportptal_numericfloat 1–6TfL Public Transport Accessibility Level
transportjourney_mins_zone1intMinutes to Zone 1 (peak, public transport)
transportjourney_mins_canary_wharfintMinutes to Canary Wharf
transportnight_tube_accessiblebool | nullNight Tube within walking distance
crimecrime_rate_per_1000floatRecorded crimes per 1,000 residents/year
crimecrime_bandstringLOW / MEDIUM / HIGH / VERY HIGH
crimecrime_trendstringIMPROVING / STABLE / WORSENING
crimecrime_vs_borough_pctfloat% difference vs borough average (negative = safer)
environmentair_quality_bandstringGOOD / MODERATE / POOR / VERY POOR
environmentnoise_bandstringLOW / MEDIUM / HIGH / VERY HIGH
environmentdominant_noise_sourcestringroad / rail / air / none
environmentin_ulezboolWhether postcode is inside the ULEZ boundary
environmentradon_risk_bandstringlow / moderate / high
schoolsnearest_primary_ofstedstringOfsted rating: Outstanding / Good / Requires Improvement / Inadequate
schoolsnearest_secondary_progress8floatProgress 8 score for nearest secondary
schoolsofsted_good_or_outstanding_pctfloat% of schools within 1km rated Good or Outstanding
healthnearest_gp_cqc_ratingstringCQC rating: Outstanding / Good / Requires Improvement / Inadequate
healthnearest_ae_4hr_compliance_pctfloat% of A&E patients seen within 4 hours
healthgp_recommend_pctfloat% of patients who would recommend the GP
connectivitybroadband.full_fibre_coverage_pctfloat% of premises with full fibre availability
connectivitybroadband.gigabit_coverage_pctfloat% of premises with gigabit broadband
connectivitymobile.coverage.outdoor_5g_pctfloat% 5G outdoor coverage
planningin_conservation_areaboolWhether postcode is in a conservation area
planningin_article4_areaboolArticle 4 direction applies (restricts permitted development)
planninglive_planning_apps_within_800mintActive planning applications within 800m
planningcil_rate_residentialintCommunity Infrastructure Levy rate (£/m²)
planninghousing_pipeline.homes_approved_800mintNew homes with planning permission within 800m
planningin_opportunity_areaboolGLA Opportunity Area (regeneration zone)
buildingsdominant_typestringE.g. "Semi-detached", "Purpose-built flat"
buildingsstreet_profileobjectBreakdown of property types on the street (%)
property_taxct_median_bandstringMost common council tax band (A–H)
property_taxct_annual_gbpintAnnual council tax for median band (GBP)
property_taxct_band_distributionobject% of local properties in each band
ground_stabilityshrink_swell_scoreint 1–5Clay shrink-swell risk (1 = low, 5 = very high)
ground_stabilitysubsidence_risk_scoreint 1–5Subsidence risk score
ground_stabilityrunning_sand_riskint 1–5Running sand risk
deprivationimd_decileint 1–10Index of Multiple Deprivation decile (1 = most deprived)
deprivationmedian_incomeintEstimated median household income (GBP/year)
investmentgross_yield_pctfloatEstimated gross rental yield (%)
investmentgentrification_scoreint 0–100Gentrification trajectory score
investmentbuyer_demand_bandstringAbove Average / Average / Below Average
affordabilityaffordability_ratiofloatHouse price / median income ratio
affordabilitystamp_duty_gbpintStamp duty for median-priced property (2025/26 rates)
affordabilitystamp_duty_ftb_gbpintStamp duty for first-time buyers
affordabilitymortgage_rate_2yr_fixed_pctfloatBank of England average 2yr fixed rate
insurance_riskrebuild_cost_estimate_gbpintBCIS rebuild cost estimate (for buildings insurance)
insurance_riskinsurance_cost_bandstringStandard / Above Standard / High
commute_hubslondon_bridgeintMinutes to London Bridge (public transport)
commute_hubsbest_hubstringFastest accessible London hub
politicsmp_name / mp_partystringLocal MP name and party
politicsward_majority_partystringControlling party in the ward
energysolar_kwh_per_kwp_yrfloatSolar energy potential (kWh/kWp/year)
energyheat_pump_suitableboolWhether the area is suitable for air/ground source heat pumps
climatesunshine_hours_per_yearintAnnual sunshine hours (Met Office 1991–2020 averages)
benchmarkscrime_vs_london_pctfloat% vs London average crime rate (negative = safer)
benchmarksprice_vs_london_pctfloat% vs London median house price
data_qualityconfidence_scoreint 0–100How complete the data is for this postcode (100 = all sections populated)
Property price fields (median_price, price_1yr_change, etc.) may be null when fewer than 5 sales occurred in the last 24 months. Always check property.low_sample_warning before using price data.
GET/api/v1/postcode/:postcode/material-info

Trading Standards–compliant Material Information for a postcode, structured as Parts A, B and C. Covers council tax, tenure, flood risk, planning restrictions, ground stability, radon, noise, broadband and mobile.

curl https://api.londoniq.co.uk/api/v1/postcode/E1%206AN/material-info \
  -H "X-API-Key: liq_your_key_here"
200Response (abbreviated)click to expand
{
  "data": {
    "postcode": "E1 6AN",
    "borough": "Tower Hamlets",
    "mi_completion_pct": 92,
    "report_version": "MI-v2.1",

    "part_a": {
      "council_tax": { "band": "C", "annual_gbp": 1456, "data_note": null },
      "tenure_indicators": {
        "leasehold_pct_recent_sales": 72.0,
        "owned_pct_census": 31.2,
        "private_rent_pct_census": 44.1,
        "tenure_confirmation_required": false
      },
      "property_type": {
        "dominant_type": "Purpose-built flat",
        "street_profile": { "flat_pct": 88.4, "semi_pct": 0.0, "terraced_pct": 11.6, "detached_pct": 0.0, "sample_size": 43 }
      },
      "price_indicators": {
        "median_price_24m": 485000,
        "avg_flat_price": 462000,
        "price_1yr_change_pct": -2.1
      }
    },

    "part_b": {
      "flood_risk": { "zone": "zone_1", "label": "Low", "surface_water_risk": "Medium" },
      "planning_restrictions": {
        "in_conservation_area": false,
        "in_article4_area": true,
        "article4_area_name": "Whitechapel Article 4 Area",
        "live_planning_apps_800m": 8,
        "planning_apps_last_12m": 14,
        "planning_apps_approved_pct": 71.0,
        "planning_apps_refused_pct": 14.0,
        "development_activity_level": "moderate"
      },
      "rights_of_way": { "prow_within_500m": 0, "footpaths_within_500m": 0 },
      "building_safety": { "available": false, "note": "No EWS1 data held for this postcode" },
      "restrictive_covenants": { "available": false, "note": "Requires title register search" }
    },

    "part_c": {
      "ground_stability": {
        "geology_type": "RIVER TERRACE GRAVEL",
        "shrink_swell_risk": "low",
        "subsidence_risk_score": 1,
        "landslide_count_2km": 0
      },
      "radon": { "risk_band": "low", "affected_homes_pct": 1.0, "action_level_exceeded": false },
      "noise": { "band": "HIGH", "dominant_source": "road", "road_lden_db": 72.1, "rail_lden_db": null, "aircraft_lden_db": null },
      "broadband_and_utilities": { "avg_download_mbps": 500.0, "full_fibre_coverage_pct": 98.0, "gigabit_coverage_pct": 96.0 },
      "mobile_coverage": { "outdoor_4g_pct": 100.0, "outdoor_5g_pct": 98.2 }
    },

    "limitations": ["Restrictive covenants require title register search"],
    "generated_at": "2026-05-27T09:00:00Z"
  }
}

Key fields reference

PartFieldTypeDescription
A — council_taxbandstring | nullCouncil tax band (A–H)
A — council_taxannual_gbpint | nullAnnual council tax charge (GBP)
A — tenure_indicatorsleasehold_pct_recent_salesfloat | null% of sales in last 24 months that were leasehold
A — tenure_indicatorstenure_confirmation_requiredboolTrue when exact tenure cannot be confirmed from data — agent must verify
A — property_typedominant_typestring | nullMost common property type on the street
A — price_indicatorsmedian_price_24mint | nullMedian sold price over last 24 months
A — price_indicatorsprice_1yr_change_pctfloat | null% price change over 12 months
B — flood_riskzonestringzone_1 (low) / zone_2 (medium) / zone_3 (high)
B — flood_risksurface_water_riskstringLow / Medium / High / Very High
B — planning_restrictionsin_conservation_areabool | nullWhether postcode is in a conservation area
B — planning_restrictionsin_article4_areabool | nullArticle 4 direction applies (restricts permitted development)
B — planning_restrictionslive_planning_apps_800mint | nullActive planning applications within 800m
B — planning_restrictionsplanning_apps_approved_pctfloat | null% approval rate for decided applications nearby
B — rights_of_wayprow_within_500mint | nullPublic rights of way within 500m
C — ground_stabilityshrink_swell_riskstring | nulllow / moderate / high / very_high
C — ground_stabilitysubsidence_risk_scoreint | nullSubsidence risk 1–5 (1 = lowest)
C — radonrisk_bandstring | nulllow / moderate / high
C — radonaction_level_exceededbool | nullTrue when radon exceeds the 200 Bq/m³ action level
C — noisebandstring | nullLOW / MEDIUM / HIGH / VERY HIGH
C — noiseroad_lden_db / rail_lden_db / aircraft_lden_dbfloat | nullDay-evening-night noise level (dB) by source
C — broadbandfull_fibre_coverage_pctfloat | null% of premises with full fibre availability
C — mobile_coverageoutdoor_5g_pctfloat | null% outdoor 5G coverage
rootmi_completion_pctintData completeness score (100 = all sections populated)
rootlimitationsstring[]Fields that require further verification (e.g. title searches)
GET/api/v1/postcode/:postcode/planning-history

Planning applications within a configurable radius of the postcode, sourced from council planning portals, 1994–present. Use the radius_m query parameter to control search radius (default 250m, max 1000m).

curl "https://api.londoniq.co.uk/api/v1/postcode/E1%206AN/planning-history?radius_m=250" \
  -H "X-API-Key: liq_your_key_here"

Query parameters

ParameterTypeDefaultDescription
radius_mint250Search radius in metres (max 1000)
200Response (abbreviated)click to expand
{
  "data": {
    "location": "E1 6AN",
    "radius_m": 250,
    "total_matched": 47,
    "returned": 20,
    "applications": [
      {
        "ref": "PA/24/01234",
        "description": "Change of use from offices to 12 residential units",
        "status": "Decided",
        "decision": "Approved",
        "decision_date": "2024-09-12",
        "submitted_date": "2024-03-01",
        "application_type": "Full",
        "development_type": "Change of use",
        "address": "14 Commercial Street, London E1 6AN",
        "borough": "Tower Hamlets",
        "appeal_status": null,
        "appeal_decision": null,
        "url": "https://development.towerhamlets.gov.uk/online-applications/..."
      }
    ]
  }
}

Key fields reference

FieldTypeDescription
total_matchedintTotal applications in the database within radius (may exceed returned)
returnedintNumber of applications in this response (max 20 per call)
applications[].refstring | nullCouncil reference number
applications[].descriptionstring | nullProposal description as submitted
applications[].decisionstring | nullApproved / Refused / Withdrawn / Pending
applications[].decision_datestring | nullISO 8601 date of decision
applications[].application_typestring | nullFull / Householder / Prior Approval / etc.
applications[].appeal_statusstring | nullPresent only if an appeal was lodged
applications[].urlstring | nullDirect link to the application on the council planning portal

Response format

All responses use a consistent envelope. Errors always include a machine-readable code field for programmatic handling.

StatusMeaningBody
200Success{ "data": { ... } }
401Missing or invalid API key{ "error": { "code": "unauthorized", "message": "..." } }
404Resource not found{ "error": { "code": "not_found", "message": "..." } }
429Rate limit exceeded{ "error": { "code": "rate_limit_exceeded", "message": "..." } } + Retry-After header
502Upstream timeout or error{ "error": { "code": "upstream_error", "message": "..." } }

Error codes

CodeHTTP statusWhen it occurs
unauthorized401X-API-Key header is missing or does not match any active key
not_found404Postcode, district, or borough not found in our dataset
rate_limit_exceeded429More than 120 requests in the current 60-second window
upstream_error502The LondonIQ data service timed out or returned an error

When you receive a 429, read the Retry-After header for the number of seconds to wait before retrying.

Rate limits & usage

Limits are applied per API key: 120 requests per 60-second window. Every response includes the following headers:

HeaderDescription
X-RateLimit-LimitMax requests allowed per 60-second window (120)
X-RateLimit-RemainingRequests remaining in the current window
X-Usage-This-MonthTotal calls made this calendar month across all endpoints
Retry-AfterSeconds to wait before retrying (only present on 429 responses)

Quickstart

Node.js

const res = await fetch(
  'https://api.londoniq.co.uk/api/v1/postcode/CR2%200QE',
  { headers: { 'X-API-Key': process.env.LONDONIQ_API_KEY } }
)
const { data } = await res.json()

// Scores
console.log(data.scores.liveability_score)         // 66
console.log(data.scores.safety_score)              // 95
console.log(data.scores.transport_score)           // 32

// Property
console.log(data.property.median_price)            // 592000
console.log(data.property.market_momentum)         // "Falling"

// Planning
console.log(data.planning.in_conservation_area)    // false
console.log(data.planning.cil_rate_residential)    // 110

// Affordability
console.log(data.affordability.stamp_duty_gbp)     // 17100
console.log(data.affordability.affordability_band) // "Unaffordable"

// Infrastructure
console.log(data.health.nearest_gp_cqc_rating)    // "Good"
console.log(data.connectivity.broadband.gigabit_coverage_pct) // 100

Python

import requests, os

r = requests.get(
    'https://api.londoniq.co.uk/api/v1/postcode/CR2%200QE',
    headers={'X-API-Key': os.environ['LONDONIQ_API_KEY']}
)
data = r.json()['data']

print(data['scores']['liveability_score'])          # 66
print(data['planning']['in_conservation_area'])     # False
print(data['property_tax']['ct_annual_gbp'])        # 2083
print(data['commute_hubs']['best_hub'])             # "london_bridge"
print(data['commute_hubs']['best_hub_mins'])        # 46

PHP

$postcode = urlencode('CR2 0QE');
$ch = curl_init("https://api.londoniq.co.uk/api/v1/postcode/{$postcode}");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER    => ['X-API-Key: ' . getenv('LONDONIQ_API_KEY')],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true)['data'];

echo $data['scores']['liveability_score'];          // 66
echo $data['planning']['in_conservation_area'];     // false
echo $data['property']['median_price'];             // 592000

Versioning & uptime

The API is versioned in the URL (/api/v1/). We never make breaking changes to an existing version. When a new version is released, the previous version remains supported for a minimum of 12 months with advance notice of deprecation.

Breaking changes include removing fields, changing field types, or changing authentication behaviour. Additive changes (new fields, new endpoints) are non-breaking and may be shipped without notice.

TopicCommitment
Uptime target99.9% monthly
Planned maintenance noticeAt least 24 hours in advance via api@londoniq.co.uk
Incident contactapi@londoniq.co.uk — subject line [URGENT]
Deprecation noticeMinimum 12 months before removing a version
Status pagestatus.londoniq.co.uk

Ready to get started?

Email us to request your key. We reply within one business day.

Request API accessView pricing