Quickstart

From sign-up to your first result in a few minutes.

1

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.

2

Look up a postcode

Pass any UK postcode — spaces are optional, case-insensitive.

curl
curl "https://zyfy.uk/v1/postcode/SW1A+2AA" \
  -H "X-Api-Key: YOUR_API_KEY"
Response
{
  "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.

3

Look up a vehicle

Pass any UK registration plate — spaces are optional, case-insensitive.

curl
curl https://zyfy.uk/v1/vehicle/AB12CDE \
  -H "X-Api-Key: YOUR_API_KEY"
Response
{
  "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.

Pending response
{
  "registration": "XY23ABC",
  "enrichmentPending": true,
  "summary": null,
  "signals": null,
  "checkedAt": "2026-05-17T10:22:31Z"
}
Node.js — retry loop
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');
}

Next steps