Skip to main content

Response Format

Every API endpoint — success or error — returns the same three top-level keys:

{
"data": { ... },
"meta": { ... },
"error": null
}
FieldAlways presentDescription
dataYesThe endpoint-specific payload. null on error.
metaYesRequest metadata: timing, query echo, pagination, credits.
errorYesnull on success. Contains code and message on failure.

This means every client can always rely on the same three top-level keys, regardless of which endpoint was called.


Success response

{
"data": {
"location_info": {
"formatted_address": "123 Ocean Dr, Miami Beach, FL 33139",
"city": "Miami Beach",
"state_code": "FL",
"latitude": 25.77,
"longitude": -80.13
},
"fema_flood_zone": {
"fld_zone": "AE",
"sfha": true,
"static_bfe": 8.0,
"user_label": "High Risk"
}
},
"meta": {
"compute_ms": 464,
"query": {
"address": "123 Ocean Dr, Miami Beach, FL",
"latitude": 25.77,
"longitude": -80.13
},
"api_version": "v1.0.0",
"request_id": "9f39f105...",
"response_timestamp": "2026-04-15T20:59:46Z",
"credits": {
"charged": 10,
"remaining": 990,
"pool": "api",
"breakdown": {
"base": 10,
"variable": 0,
"description": "flood_zone: 10 credits"
}
}
},
"error": null
}

meta fields

Every response includes meta with at minimum:

FieldPresentDescription
compute_msAlwaysServer-side processing time in milliseconds
queryAlwaysEcho of resolved query parameters (lat/lon after geocoding)
api_versionAlwaysAPI version string
request_idAlwaysUnique request identifier — include in support tickets
response_timestampAlwaysISO-8601 UTC timestamp
creditsAlwaysCredit usage for this request (see Credits & Pricing)

Pagination fields (list endpoints only)

Endpoints that return lists (e.g., /v1/crime-data) include additional meta fields:

FieldDescription
countNumber of records returned in this page
truncatedtrue if more records exist beyond this page
next_cursorOpaque string — pass as cursor param to get the next page. null if last page.
"meta": {
"compute_ms": 84,
"query": { "lat": 40.03, "lon": -76.31, "radius_mi": 5.0 },
"count": 50,
"truncated": true,
"next_cursor": "eyJvZmZzZXQiOiA1MH0=",
"credits": { "charged": 10, "remaining": 960 }
}

query echo

The query object always uses resolved values — latitude and longitude after geocoding, normalized dates. Field names match request parameter names:

"query": {
"address": "470 Manor St, Lancaster, PA 17603",
"latitude": 40.0358,
"longitude": -76.3140,
"radius_mi": 5.0,
"start_date": "2024-01-01",
"end_date": "2024-12-31"
}

credits block

Every response includes credit usage information in meta.credits:

"credits": {
"charged": 45,
"remaining": 955,
"pool": "api",
"breakdown": {
"base": 40,
"variable": 5,
"description": "Property valuation: 40 base + 5 comps"
}
}
FieldDescription
chargedTotal API credits deducted for this request
remainingCredits left in your monthly pool
poolAlways "api" for REST API calls
breakdown.baseFixed cost component
breakdown.variableVariable cost (comps, incidents, keys)
breakdown.descriptionHuman-readable cost explanation

Failed requests (4xx, 5xx) always return "charged": 0.


Error response

All errors use the same envelope. data is null, error contains a machine-readable code and human-readable message:

{
"data": null,
"meta": {},
"error": {
"code": "MISSING_LOCATION",
"message": "Must provide either address or both latitude and longitude"
}
}

Error codes

HTTP StatusCodeWhen
400MISSING_LOCATIONNo address or coordinates provided
400INVALID_PARAMSInvalid parameter value (radius, date, etc.)
400PARAMETER_CAP_EXCEEDEDParameter exceeds your plan limit
401MISSING_API_KEYNo X-API-Key header
401AUTH_FAILEDInvalid API key
402INSUFFICIENT_CREDITSNot enough credits for this request
404NOT_FOUNDResource not found (e.g., batch job ID)
422VALIDATION_ERRORRequest body validation failed
429RATE_LIMITEDToo many requests — check Retry-After header
500INTERNAL_ERRORServer error — include request_id in support tickets

Insufficient credits error

The 402 response includes extra context in meta:

{
"data": null,
"meta": {
"credits_remaining": 5,
"estimated_cost": 40
},
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request requires ~40 credits but you have 5 remaining."
}
}

Endpoint-specific data shapes

Each endpoint returns different fields inside data:

Endpointdata contains
/v1/flood-zonelocation_info, fema_flood_zone
/v1/fire-risklocation_info, fire_risk
/v1/storm-surgelocation_info, storm_surge
/v1/sinkhole-risklocation_info, sinkhole_risk
/v1/natural-hazardslocation_info, natural_hazards
/v1/census-datalocation_info, census_geoids, acs_data
/v1/crime-datacrimes, summary, location_info
/v1/socioeconomic-datalocation_info, census_geoids, socioeconomic, natural_hazards
/v1/avm/propertyaddress_info, valuation (incl. fsd + confidence), comparables
/v1/avm/rentaladdress_info, valuation (incl. fsd + confidence), comparables
/v1/avm/multifamilyaddress_info, valuation (incl. fsd + confidence), comparables
/v1/comprehensiveaddress_info + requested service data
/v1/avm/batch/* (202)job_id, status, avm_type, total, status_url
/v1/avm/batch/{job_id}job_id, status, results, progress_pct

See the API Reference for full field documentation per endpoint.


AVM accuracy fields (FSD & confidence)

All AVM endpoints (/v1/avm/property, /v1/avm/rental, /v1/avm/multifamily) include accuracy metrics inside data.valuation:

"valuation": {
"fsd": 0.3806,
"confidence": {
"fsd": 0.3806,
"model_region": "csp",
"last_trained_at": "2026-03-18T03:01:23+00:00",
"metrics": {
"mape": 19.466,
"mdape": 10.65,
"mae": 33637.25,
"rmse": 53954.33,
"r2": 0.87,
"pct_within_5": 26.27,
"pct_within_10": 47.79,
"pct_within_15": 62.96,
"pct_within_20": 72.66
},
"per_model": { "xgboost": { ... }, "lightgbm": { ... }, "catboost": { ... } }
},
"properties": [ ... ]
}

FSD (Forecast Standard Deviation) is the industry-standard AVM accuracy metric. Lower is better. See the Property Valuation Confidence guide for full field reference.

If the property is in a region without trained models, fsd and confidence are absent from the response.