Response format
Every JSON response from the Prop AI Deals API is wrapped in a consistent envelope. Errors share the same shape across all endpoints, and metadata about the request (latency, usage, request ID) lives inmeta.
Envelope
| Field | Type | Description |
|---|---|---|
data | object | Endpoint-specific payload — varies per endpoint. See the endpoint reference. |
meta.request_id | string | Unique ID for this request. Include in support tickets. |
meta.timestamp | number | Unix epoch (seconds, with millisecond precision) when the response was finalised. |
meta.latency_ms | number | Server-side processing time in milliseconds. |
meta.usage.monthly_used | integer | Requests consumed this billing period after this call. |
meta.usage.monthly_limit | integer | Soft cap for the billing period. |
meta.usage.request_cost | integer | What this single request consumed (1 for most, 5 for AI). |
Thedatafield always contains the actual response. Always readbody.data, neverbodydirectly.
Errors share the same envelope
Errors omitdata and meta, returning only an error object:
Headers
Every response includes:| Header | Description |
|---|---|
X-Request-ID | Same value as meta.request_id |
X-RateLimit-Limit | Per-second cap for this key |
X-RateLimit-Remaining | Per-second budget left in the current window |
X-Request-Cost | Cost of this request (1 or 5) |
X-Monthly-Usage | Requests used this billing period |
X-Monthly-Limit | Soft cap for the billing period |
Pagination
List endpoints (GET /api/v1/properties, GET /api/v1/spatial/search/*, etc.) return paginated results.
Offset pagination (default)
Usepage and limit query parameters:
| Param | Type | Default | Max | Description |
|---|---|---|---|---|
page | integer | 1 | — | 1-indexed page number |
limit | integer | 20 | 100 | Items per page |
Cursor pagination (large result sets)
For result sets above ~10,000 items, offset pagination becomes slow. Use cursor pagination instead:has_more is false, you’ve reached the end.
Timestamps
All timestamps are returned as ISO 8601 strings in UTC:Money values
Prices are returned as integers (pounds, no pence) in the*_numeric fields. The string price field is a formatted display string (“£450,000”) and should never be parsed for calculations.
Coordinates
Latitude and longitude are returned as floats in WGS84 (EPSG:4326) — the same projection used by Google Maps, Mapbox, and Leaflet:Field availability
Not every property has every field populated. Optional fields can benull. Always check before accessing nested properties: