Examples
Common patterns and real-world use cases. Each example assumes you have a zyfy(path) helper that handles auth and rate limiting — see the client libraries page for that wrapper.
Sign-up fraud prevention
IPBlock Tor, Spamhaus-listed, and high-risk IPs at sign-up. Challenge anonymisers without hard-blocking legitimate VPN users.
// Sign-up fraud check — block Tor, VPN, and Spamhaus at the door
const res = await zyfy('ip/' + userIp);
if (res.shouldBlock) {
return { allowed: false, reason: 'blocked_ip' };
}
if (res.isAnonymizer) {
// Tor / VPN / iCloud Relay — challenge but don't hard block
return { allowed: true, requireChallenge: true };
}
if (res.threatLevel === 'high' || res.threatLevel === 'critical') {
return { allowed: true, flagForReview: true };
}Property risk assessment
PostcodePull flood risk, crime, radon, and a pre-computed composite score for mortgage underwriting or insurance pricing.
// Property risk assessment — mortgage / insurance underwriting
const res = await zyfy('postcode/' + encodeURIComponent(postcode));
const risk = {
floodRisk: res.floodRiskRiversSea, // "very_low" | "low" | "medium" | "high"
crimeRateBand: res.crimeRateBand, // "very_low" … "very_high"
propertyRiskScore: res.propertyRiskScore, // 0.0–1.0
propertyRiskLevel: res.propertyRiskLevel, // "low" | "medium" | "high"
radonPotential: res.radonPotential,
isFloodZone: res.floodRiskRiversSea === 'high' || res.floodRiskRiversSea === 'medium',
};
// For insurance pricing — use propertyRiskScore directly as an input to your model
// For mortgage decisions — insuranceRiskLevel gives a quick three-band signal
console.log(res.insuranceRiskLevel); // "low" | "medium" | "high"Used car purchase check
VehicleCheck odometer integrity, MOT risk, outstanding recalls, and ULEZ compliance before buying a used vehicle.
// Used car purchase check — odometer integrity + MOT risk
const res = await zyfy('vehicle/' + reg);
if (res.enrichmentPending) {
// New plate — retry after Retry-After seconds
return { status: 'pending' };
}
const warnings = [];
if (res.odometerTrend === 'possible_clocking') {
warnings.push('Odometer readings are inconsistent — possible clocking');
}
if (res.buyRecommendation === 'avoid') {
warnings.push('High risk vehicle — avoid purchase');
}
if (res.hasOutstandingRecall) {
warnings.push('Outstanding safety recall');
}
if (res.motStatus === 'expired') {
warnings.push('MOT has expired');
}
return {
registration: res.registration,
make: res.make,
ulezCompliant: res.ulezCompliant,
motRiskLevel: res.motRiskLevel,
conditionBand: res.conditionBand,
buyRecommendation: res.buyRecommendation,
warnings,
};FATF jurisdiction screening
IPBlock or flag connections from FATF blacklisted and grey list jurisdictions for AML / compliance workflows.
// Geo-compliance — block FATF blacklisted jurisdictions
const res = await zyfy('ip/' + userIp);
// isFatfBlacklisted = North Korea, Iran, Myanmar
if (res.isFatfBlacklisted) {
return { blocked: true, reason: 'sanctions_jurisdiction' };
}
// isHighRiskCountry = FATF grey list
if (res.isHighRiskCountry) {
return { blocked: false, requireEnhancedDueDiligence: true };
}Location intelligence
PostcodeSurface liveability, air quality, green space, and local MP data for relocation tools or rental platforms.
// Location intelligence for relocation or lifestyle decisions
const res = await zyfy('postcode/' + encodeURIComponent(postcode));
return {
liveabilityScore: res.liveabilityScore, // 0.0–1.0 — higher = more liveable
liveabilityLevel: res.liveabilityLevel, // "low" | "medium" | "high"
airQuality: res.airQualityBand, // "very_low" | "low" | "moderate" | "high"
greenSpace: res.greenSpaceProximityMetres, // metres to nearest park
crimeRateBand: res.crimeRateBand,
mpName: res.mpName,
mpParty: res.mpParty,
epcRating: res.epcAverageRating, // typical energy efficiency of local homes
};Fleet compliance check
VehicleCheck MOT status and ULEZ compliance across a fleet in parallel. Surface vehicles with imminent or expired MOTs.
// Fleet compliance check — MOT and ULEZ status across multiple vehicles
const regs = ['AB12CDE', 'XY23FGH', 'PQ34JKL'];
const results = await Promise.all(
regs.map(reg => zyfy('vehicle/' + reg))
);
const issues = results.flatMap(v => {
const flags = [];
if (v.motStatus === 'expired') flags.push({ reg: v.registration, issue: 'MOT expired' });
if (!v.ulezCompliant) flags.push({ reg: v.registration, issue: 'Not ULEZ compliant' });
if (v.imminentMot) flags.push({ reg: v.registration, issue: 'MOT due within 30 days' });
return flags;
});