Quickstart
From sign-up to your first result in a few minutes.
Get your API key
Create a free account — no credit card required. Your API key is shown once on sign-up and available any time in your dashboard.
Keys are prefixed ea_live_. Keep it secret — it has access to your quota.
Look up a postcode
Pass any UK postcode — spaces are optional, case-insensitive.
curl "https://zyfy.uk/v1/postcode/SW1A+2AA" \
-H "X-Api-Key: YOUR_API_KEY"{
"postcode": "SW1A 2AA",
"adminDistrict": "City of Westminster",
"region": "London",
"ruralUrbanClassification": "urban",
"summary": {
"propertyRiskLevel": "low",
"liveabilityLevel": "medium",
"insuranceRiskLevel": "low"
},
"signals": {
"flood": { "riversSea": "very_low" },
"deprivation": { "imdDecile": 8 },
"crime": { "rateBand": "high" },
"property": { "averagePrice": 2847000 },
"broadband": { "gigabit": true },
"political": { "mpName": "Nickie Aiken", "mpParty": "Conservative" }
},
"scores": {
"propertyRiskScore": 0.22,
"liveabilityScore": 0.61
},
"checkedAt": "2026-05-17T10:22:31Z"
}summary.* — pre-computed conclusions: risk levels, liveability, investment outlook.
signals.* — grouped raw signals: flood, crime, property, broadband, environment, and more.
scores.* — composite 0–1 scores for property risk, liveability, and investment attractiveness.
Look up a vehicle
Pass any UK registration plate — spaces are optional, case-insensitive.
curl https://zyfy.uk/v1/vehicle/AB12CDE \
-H "X-Api-Key: YOUR_API_KEY"{
"registration": "AB12CDE",
"make": "VOLKSWAGEN",
"fuelType": "diesel",
"yearOfManufacture": 2012,
"summary": {
"buyRecommendation": "good",
"vehicleRiskLevel": "low",
"motRiskLevel": "low"
},
"signals": {
"euroEmissionStandard": "EURO 5",
"ulezCompliant": false,
"motStatus": "valid",
"motExpiryDate": "2026-11-14",
"odometerTrend": "consistent",
"motPassRate": 0.875
},
"enrichmentPending": false,
"checkedAt": "2026-05-17T10:22:31Z"
}summary.buyRecommendation — good, consider, caution, or avoid. Aggregates all risk signals.
signals.odometerTrend — consistent, high_mileage, low_mileage, possible_clocking, or insufficient_data.
signals.ulezCompliant — derived from DVLA euro emission standard and fuel type.
Handling enrichmentPending
If a registration is not yet in our database, the first response returns enrichmentPending: true with most fields null. The plate has been queued — retry after the Retry-After header value.
{
"registration": "XY23ABC",
"enrichmentPending": true,
"summary": null,
"signals": null,
"checkedAt": "2026-05-17T10:22:31Z"
}async function lookupVehicle(reg, maxAttempts = 5) {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
const res = await fetch(`https://zyfy.uk/v1/vehicle/${reg}`, {
headers: { 'X-Api-Key': process.env.ZYFY_API_KEY }
});
if (res.status === 429) {
const wait = parseInt(res.headers.get('Retry-After') || '5', 10);
await new Promise(r => setTimeout(r, wait * 1000));
continue;
}
const data = await res.json();
if (!data.enrichmentPending) return data;
const retryAfter = parseInt(res.headers.get('Retry-After') || '5', 10);
await new Promise(r => setTimeout(r, retryAfter * 1000));
}
throw new Error('Max attempts reached');
}