Developer reference
About The Lot REST API
One endpoint. Any U.S. address. 100+ property risk checks returned as structured JSON — ready to embed in your app, CRM, or workflow.
Overview
The About The Lot API returns a full property risk report for any U.S. address. Each response includes a structured risks array with 100+ individual checks covering natural hazards, environmental risk, neighborhood quality, schools, broadband, commute, noise, and more.
Authentication is done via an API key sent in the x-api-key request header. Keys are provisioned through a paid subscription — get an API key →
Endpoint
GET /api/report?address=<url-encoded-address>
The address query parameter must be a URL-encoded U.S. street address including city and state. Full addresses (with ZIP) return the most accurate results.
Response shape
A successful 200 OK response is a JSON object:
{
"address": {
"input": "123 Main St, Austin TX 78701",
"formatted": "123 Main Street, Austin, TX 78701",
"lat": 30.2672,
"lng": -97.7431
},
"risks": [
{
"id": "flood_zone",
"label": "Flood Zone",
"level": "low",
"headline": "Outside the 100-year flood plain",
"detail": "FEMA designates this parcel Zone X — minimal flood hazard.",
"source": "FEMA National Flood Hazard Layer",
"sourceUrl": "https://msc.fema.gov/"
}
// ... 86+ more checks
]
}RiskResult fields
| Field | Type | Description |
|---|---|---|
id | string | Stable machine-readable identifier for the check |
label | string | Human-readable check name |
level | "low" | "moderate" | "high" | "unknown" | Risk severity |
headline | string | One-sentence summary suitable for display |
detail | string | Full explanation with supporting data |
source | string | Name of the authoritative data source |
sourceUrl | string? | URL of the source (optional) |
Rate limits
Each API key has a monthly report limit based on its subscription tier. Limits reset on the first of each calendar month. Unused reports do not roll over.
| Plan | Price | Reports / month |
|---|---|---|
| Solo | $29/mo | 100 |
| Team | $99/mo | 500 |
| Office | $249/mo | 2,000 |
| Enterprise | Custom | Unlimited |
Error responses
All errors return JSON with a error string field. The HTTP status code indicates the error category.
401 Unauthorized Missing or invalid API key.
{ "error": "Invalid or missing API key." }422 Unprocessable Entity The address could not be geocoded or was not recognized.
{ "error": "Address could not be resolved. Provide a full U.S. street address." }429 Too Many Requests Monthly report limit for your plan has been reached.
{ "error": "Monthly report limit reached. Upgrade your plan or wait for the limit to reset." }500 Internal Server Error An unexpected server-side error occurred.
{ "error": "An unexpected error occurred. Please try again." }Code examples
JavaScript (fetch)
const address = "123 Main St, Austin TX 78701";
const res = await fetch(
`https://aboutthelot.com/api/report?address=${encodeURIComponent(address)}`,
{
headers: {
"x-api-key": "atl_your_key_here",
},
}
);
if (!res.ok) {
const { error } = await res.json();
throw new Error(error);
}
const { address: resolved, risks } = await res.json();
console.log(resolved.formatted);
console.log(risks.length, "checks returned");curl
curl -G "https://aboutthelot.com/api/report" \ --data-urlencode "address=123 Main St, Austin TX 78701" \ -H "x-api-key: atl_your_key_here"
Python
import requests
from urllib.parse import urlencode
address = "123 Main St, Austin TX 78701"
url = "https://aboutthelot.com/api/report?" + urlencode({"address": address})
res = requests.get(url, headers={"x-api-key": "atl_your_key_here"})
res.raise_for_status()
data = res.json()
print(data["address"]["formatted"])
print(len(data["risks"]), "checks returned")PHP
<?php $address = "123 Main St, Austin TX 78701"; $url = "https://aboutthelot.com/api/report?" . http_build_query(["address" => $address]); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: atl_your_key_here"]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); echo $data["address"]["formatted"] . "\n"; echo count($data["risks"]) . " checks returned\n";
Ruby
require "net/http"
require "json"
require "uri"
address = "123 Main St, Austin TX 78701"
uri = URI("https://aboutthelot.com/api/report")
uri.query = URI.encode_www_form(address: address)
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "atl_your_key_here"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
data = JSON.parse(res.body)
puts data["address"]["formatted"]
puts "#{data['risks'].length} checks returned"Go
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
address := "123 Main St, Austin TX 78701"
endpoint := "https://aboutthelot.com/api/report?address=" + url.QueryEscape(address)
req, _ := http.NewRequest("GET", endpoint, nil)
req.Header.Set("x-api-key", "atl_your_key_here")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
addr := data["address"].(map[string]any)
risks := data["risks"].([]any)
fmt.Println(addr["formatted"])
fmt.Println(len(risks), "checks returned")
}Get an API key
Subscribe to any paid plan on the realtors page. Your API key is shown on the confirmation page immediately after checkout — copy it somewhere safe. Keys are prefixed atl_. Need to rotate your key? Contact us.
Questions? Contact us →