ProximityVerifyResponseWrapper
data object
UUID of the persisted verification record. Empty for early-exit results (INVALID_FORMAT, ADDRESS_NOT_FOUND).
Possible values: [NEAR, FAR, ADDRESS_NOT_FOUND, INVALID_FORMAT]
True iff result == NEAR AND confidence >= 0.60.
0.0–1.0. Computed from the rubric, then capped by accuracy and spoof_risk.
declared_address object
proximity object
Haversine distance in meters between device and resolved address.
Echoed from request — caller can log input quality.
True iff gps_accuracy_m <= 100. Null when accuracy was not provided.
tiers object
confidence_factors object
Boolean inputs to the confidence rubric. Each true factor contributes its documented weight. Surfaced in the response so callers can audit why a score was what it was.
integrity object
Possible values: [LOW, MEDIUM, HIGH]
Names of failed/suspicious checks. Possible values: mock_location_detected, gps_accuracy_insufficient, altitude_zero, speed_inconsistent, location_stale, ip_location_mismatch, timezone_mismatch.
checks object
Per-check verdict. Each value is one of: PASS | FAIL | DEGRADED | SUSPICIOUS | STALE | VERY_STALE | MISMATCH | NOT_PROVIDED.
NOT_PROVIDED in v1; planned for v2 alongside IPIntelligence wiring.
fraud_check object
Real-time fraud detection analysis result
Whether the transaction was blocked (risk_score >= 0.8)
falseCumulative risk score from all detected signals
Possible values: >= 0 and <= 1
0.25Risk classification based on score thresholds
Possible values: [low, medium, high, critical]
lowsignals object[]
Individual fraud signals detected
Signal type identifier
Possible values: [velocity_abuse, velocity_suspicious, impossible_travel, suspicious_travel, bulk_fraud, new_customer, manual_entry, off_hours]
new_customerSignal severity level
Possible values: [low, medium, high, critical]
lowHuman-readable explanation of the signal
First verification for this customerContribution to total risk score
0.1Human-readable action recommendation
Approve transactionTrue when one or more fraud sub-checks (velocity, IP/device bulk, synthetic-identity) could not run — e.g. a transient DB error — so risk_score reflects fewer signals than usual. These sub-checks fail open rather than blocking the verification, so this is what makes that visible instead of a degraded check looking clean.
falseWhich sub-checks were skipped, when degraded is true.
Possible values: [velocity, ip_velocity, device_velocity, synthetic_identity]
[]certificate object
Short reference embedded in the proximity response so callers know where to fetch and verify the full certificate.
Public verification endpoint (no auth required).
Full signed certificate JSON (auth required).
PDF certificate with embedded QR code (auth required).
JWK Set used to verify the signature.
retention object
Retention duration and legal basis, surfaced in the response so compliance teams can audit the data lifecycle without a separate documentation lookup.
provenance object
A normalized summary of what confidence_factors/integrity already compute in detail. source is always device_gps here — a spoofed or low-accuracy fix is still categorically a device-reported claim, just one confidence (reused from the top-level field, not recomputed) and integrity.spoof_risk already score as untrustworthy.
device_gps: a live GPS/network/fused fix reported by a device
at request time. geocoded_text: inferred purely from
parsing/matching text or grid math, no real-world confirmation.
third_party_match: matched against an external dataset (OSM,
Google Open Buildings, GhanaPostGPS's own registry) without
independent confirmation on the ground. user_confirmed:
explicitly entered/confirmed by the address owner. agent_verified:
independently confirmed by a human or a real event — a field
agent's manual promotion, a signed proof-of-delivery — the
strongest tier.
Possible values: [device_gps, geocoded_text, third_party_match, user_confirmed, agent_verified]
agent_verifiedThe upstream/system that produced the point (e.g. "ghanapostgps", "osm", "google_open_buildings", "customer_app"), separate from source's trust tier.
ghanapostgpsA physical measurement (GPS accuracy, computed drift, snap distance) — independent of confidence.
Trust score, 0.0–1.0.
Possible values: >= 0 and <= 1
0.85meta object
Unique request identifier
c86825f0-d8ca-4ae1-8226-514cc48e05c0Whether the response was served from cache
falseServer-side processing time
1.802457582sReverse-geocode responses only. Distance in metres from the queried coordinate to the nearest edge of the resolved GhanaPostGPS grid cell. Omitted when the upstream response carried no cell bounds.
1.42Reverse-geocode responses only. True when boundary_distance_m is small enough that an ordinary GPS fix's jitter could plausibly have resolved to the neighbouring cell's code instead — the documented cause of the same property getting different GhanaPostGPS codes depending on where you stand.
false{
"success": true,
"data": {
"verification_id": "string",
"result": "NEAR",
"verified": true,
"confidence": 0,
"declared_address": {
"gps_code": "string",
"exists": true,
"lat": 0,
"lng": 0,
"region": "string",
"district": "string",
"area": "string",
"quality_score": 0
},
"proximity": {
"device_distance_m": 0,
"gps_accuracy_m": 0,
"accuracy_sufficient": true,
"tiers": {
"within_50m": true,
"within_100m": true,
"within_500m": true,
"within_1km": true
}
},
"confidence_factors": {
"address_exists": true,
"device_within_1km": true,
"device_within_500m": true,
"device_within_100m": true,
"device_within_50m": true,
"gps_accuracy_provided": true,
"gps_accuracy_under_25m": true,
"gps_accuracy_under_10m": true,
"mock_location_off": true,
"provider_is_hardware": true,
"location_fix_fresh": true,
"altitude_non_zero": true,
"no_fraud_signals": true
},
"integrity": {
"spoof_risk": "LOW",
"flags": [
"string"
],
"checks": {
"mock_location": "string",
"gps_accuracy": "string",
"altitude_plausible": "string",
"speed_consistent": "string",
"location_freshness": "string",
"ip_location_match": "string",
"timezone_match": "string"
}
},
"fraud_check": {
"blocked": false,
"risk_score": 0.25,
"risk_level": "low",
"signals": [
{
"type": "new_customer",
"severity": "low",
"description": "First verification for this customer",
"score": 0.1
}
],
"recommendation": "Approve transaction",
"degraded": false,
"degraded_checks": []
},
"certificate": {
"id": "string",
"verification_url": "string",
"json_url": "string",
"pdf_url": "string",
"jwks_url": "string",
"issued_at": "string"
},
"retention": {
"verification_stored": true,
"retention_period": "string",
"data_retained": [
"string"
],
"retention_legal_basis": "string"
},
"provenance": {
"source": "agent_verified",
"provider": "ghanapostgps",
"accuracy_meters": 0,
"confidence": 0.85,
"verified_at": "2024-07-29T15:51:28.071Z"
},
"timestamp": "2024-07-29T15:51:28.071Z"
},
"meta": {
"request_id": "c86825f0-d8ca-4ae1-8226-514cc48e05c0",
"cached": false,
"latency": "1.802457582s",
"boundary_distance_m": 1.42,
"near_grid_boundary": false
}
}