200 analyzed response consumes credits.Quickstart
Create a key in the Atlas developer console, then send your first address:
curl https://api.atlasproptech.com/v1/property-distress/analyze \
-H "x-api-key: $ATLAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"property": {"address": "123 Main St, Tampa, FL"}}' Authentication
Send your API key in the x-api-key header. Keys are shown only once when created. Keep them on your server, never expose them in browser or mobile-app code, and revoke a key immediately if it is disclosed.
x-api-keyRequired. Your Atlas API key.Create an analysis
Provide exactly one locator: a complete postal address or a latitude/longitude pair. Supplying both returns a 400.
Address
{
"property": {
"address": "123 Main St, Tampa, FL"
}
} Coordinates
{
"property": {
"coordinates": {
"lat": 27.9506,
"lng": -82.4572
}
}
} JavaScript example
const response = await fetch("https://api.atlasproptech.com/v1/property-distress/analyze", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ATLAS_API_KEY
},
body: JSON.stringify({
property: { address: "123 Main St, Tampa, FL" }
})
});
const analysis = await response.json(); Python example
import os
import requests
response = requests.post(
"https://api.atlasproptech.com/v1/property-distress/analyze",
headers={
"x-api-key": os.environ["ATLAS_API_KEY"],
},
json={"property": {"address": "123 Main St, Tampa, FL"}},
timeout=30,
)
response.raise_for_status()
analysis = response.json() Successful response
Illustrative response generated through the service with mocked imagery inputs. This is not an assessment of the example address.
{
"id": "31bdb62f-6a19-4a22-91d6-d43f05c2869b",
"status": "analyzed",
"location": {
"address": "123 Main St, Tampa, FL",
"coordinates": {
"lat": 27.9506,
"lng": -82.4572
}
},
"analysis": {
"score": 85,
"signals": [
"boarded windows",
"sagging roof"
],
"reasoning": "Boarded windows and a sagging roof are visible."
},
"imagery": {
"date": "2026-03",
"distance_m": 12.4,
"quality_score": 91.2
},
"credits_used": 1,
"api_version": "2026-08-20"
} | Field | Meaning |
|---|---|
| analysis.score | A 0–100 exterior-distress screening score. Higher indicates more visible distress. |
| analysis.signals | Normalized visible conditions contributing to the result. |
| analysis.reasoning | A concise explanation of the visual evidence. |
| imagery.date | Image capture month in YYYY-MM format, or null if unavailable. |
| imagery.distance_m | Distance from the panorama location to the property, in meters. |
| imagery.quality_score | Image-quality score for review alongside the capture date and distance. |
| credits_used | Credits charged for this completed analysis. |
| api_version | Response contract version. Current value: 2026-08-20. |
Test requests
The two free locators below return a synthetic analysis without calling imagery or model providers. Authentication, subscription checks, and the rate limit still apply. Use them to check your key and response handling. Each response contains "test": true, "credits_used": 0, and a randomly generated score. These requests are not stored and do not test real imagery analysis or credit billing.
{"property":{"address":"123 Test St, Atlantis, ZZ 00000"}} {"property":{"coordinates":{"lat":0,"lng":0}}} Use the address as shown; letter case does not matter. The coordinate form is exactly latitude 0 and longitude 0. Keep synthetic results out of your production lead queue.
Errors
Service errors use the format below. The id field is included when a request ID is available. All error responses use zero credits, but error bodies do not include credits_used.
{
"error": {
"code": "NO_PANORAMA",
"message": "No Street View panorama was found near this property."
},
"id": "31bdb62f-6a19-4a22-91d6-d43f05c2869b"
} | HTTP | Code | Meaning |
|---|---|---|
| 400 | INVALID_JSON | The request body is not valid JSON. |
| 400 | INVALID_REQUEST | The body or property object is invalid, or exactly one locator was not supplied. |
| 400 | INVALID_ADDRESS | The address is not a non-empty string of at most 500 characters. |
| 400 | INVALID_COORDINATES | Coordinates must be numeric, with latitude from -90 to 90 and longitude from -180 to 180. |
| 401 | INVALID_API_KEY | The API key is missing or invalid. |
| 402 | BILLING_REQUIRED | An active Atlas subscription and payment method are required. |
| 403 | API_KEY_DISABLED | The API key has been disabled or revoked. |
| 422 | ADDRESS_NOT_FOUND | The address could not be resolved. |
| 422 | NO_PANORAMA | No usable Street View panorama was found near the property. |
| 422 | PANORAMA_TOO_OLD | The panorama is older than the API cutoff of January 2014. |
| 422 | NO_VISIBLE_BUILDING | No building was visible in the available imagery. |
| 429 | RATE_LIMITED | The request rate for this key was exceeded. |
| 503 | GEOCODING_UNAVAILABLE | Address resolution is temporarily unavailable. |
| 503 | ANALYSIS_UNAVAILABLE | An analysis dependency is temporarily unavailable. |
| 504 | PROVIDER_TIMEOUT | A provider did not respond before the request deadline. |
The gateway can reject a request before it reaches the service. Gateway validation errors return 400 with message and an error string, rather than error.code. Gateway throttling can also return a plain message. Check the HTTP status first, then read error.code when it is available.
For any 422, mark the lead for manual review. Missing evidence is not a zero distress score. Correct 400 requests and resolve 401, 402, or 403 account errors before retrying.
Billing and limits
The API requires an active Base ($39/month) or Boss ($99/month) subscription. Explore, the pay-as-you-go plan with no monthly fee, does not include API access. Each completed real analysis uses one shared Atlas credit, the same as a property in an area search or an analyzed CSV row. All error responses use zero credits, including missing imagery, old panoramas, and invisible buildings. There is no separate monthly request quota; usage draws from your plan's credits and applicable overage billing.
The default limit is 5 requests per second per key, with a burst of 10. The per-key counter uses one-second windows: a burst of 10 can span a window boundary, but 10 requests in the same window can return 429. Pace requests and retry transient 429, 503, and 504 responses with exponential backoff. Honor Retry-After when present.
Using the result responsibly
Atlas analyzes visible exterior signals in available imagery. Results are intended for property screening and workflow prioritization. They are not an appraisal, inspection, code-compliance determination, or guarantee of a property’s condition or ownership circumstances.