Postcode-level water quality data for any UK address. Single endpoint. Under 200ms. Free to start.
# Request GET https://mytapwater-api.blumsomlimited.workers.dev/lookup?postcode=SW1A1AA X-API-Key: mtw_live_demo00000000000000000000000000 # Response { "postcode": "SW1A 1AA", "zone": { "name": "Lambeth South", "water_company": "Thames Water" }, "quality": { "score": 62, "score_label": "Fair" }, "parameters": { "hardness": { "value": 320, "classification": "Very Hard" }, "nitrate": { "value": 18.4, "status": "pass" }, "pfas_notice": true }, "compliance": { "active_notices": 8, "overall_compliance": "improvement_required" } }
Built on official DWI annual compliance data and covering every water company in England, Wales and Scotland.
From property platforms to insurance underwriting — water quality data that fits your product.
Add water quality data to property listings and area guides. Hardness classification, PFAS status and supply zone for every UK address.
Include water quality in property search reports. PFAS notices, lead levels, and DWI enforcement status as structured data.
Price hard water risk and PFAS exposure into home insurance models. Zone-level compliance and contaminant data via a single endpoint.
Personalise filter recommendations and health guidance by location. Full parameter set with legal limits, trend data, and actionable scoring.
No contracts, no credit card required for the free tier. Paid tiers available immediately.
Your API key will be emailed within 24 hours of payment.
Your API key will be emailed within 24 hours of payment.
Pass your API key using either method:
X-API-Key: mtw_live_your_key_here
GET /lookup?postcode=SW1A1AA&api_key=mtw_live_your_key_here
| Parameter | Type | Required | Description |
|---|---|---|---|
postcode | string | Yes | UK postcode, with or without space. Case insensitive. |
api_key | string | Cond. | API key — required if not passing via X-API-Key header. |
| Field | Type | Description |
|---|---|---|
postcode | string | Normalised postcode with space |
zone.name | string | Water supply zone name |
zone.water_company | string | Water company name |
quality.score | integer | Overall quality score 0–100 |
quality.score_label | string | Excellent / Good / Fair / Poor |
parameters.hardness.value | number | Hardness in mg/l CaCO₃ |
parameters.hardness.classification | string | Soft / Moderately Hard / Hard / Very Hard |
parameters.nitrate.value | number | Nitrate mean in mg/l (legal limit: 50) |
parameters.lead_mean.value | number | Lead mean in µg/l (legal limit: 10) |
parameters.chlorine_mean.value | number | Chlorine mean in mg/l |
parameters.fluoride.value | number | Fluoride mean in mg/l |
parameters.ph.value | number | pH mean |
compliance.pfas_notice | boolean | Active DWI PFAS enforcement notice |
compliance.active_notices | integer | Total active DWI improvement notices |
recommendations.filter_type | string | Recommended filter type |
meta.data_year | integer | Year of underlying compliance data |
| Code | Meaning |
|---|---|
| 200 | Success |
| 401 | Invalid or missing API key |
| 404 | Postcode not found in any supply zone |
| 429 | Monthly rate limit exceeded |
| 500 | Server error |
const response = await fetch( 'https://mytapwater-api.blumsomlimited.workers.dev/lookup?postcode=SW1A1AA', { headers: { 'X-API-Key': 'your_api_key_here' } } ); const data = await response.json(); console.log(data.parameters.hardness.classification); // "Very Hard" console.log(data.compliance.pfas_notice); // true/false console.log(data.quality.score); // 0–100
import requests response = requests.get( 'https://mytapwater-api.blumsomlimited.workers.dev/lookup', params={'postcode': 'SW1A1AA'}, headers={'X-API-Key': 'your_api_key_here'} ) data = response.json() print(data['parameters']['hardness']['classification']) # Very Hard print(data['compliance']['pfas_notice']) # True/False
$response = file_get_contents( 'https://mytapwater-api.blumsomlimited.workers.dev/lookup?postcode=SW1A1AA', false, stream_context_create(['http' => ['header' => 'X-API-Key: your_api_key_here']]) ); $data = json_decode($response, true); echo $data['parameters']['hardness']['classification']; // Very Hard
Your key will be emailed instantly. No credit card required.