Skip to content
background pattern

Developer documentation

Atlas Property Distress API

Analyze one property from an address or coordinates and receive a distress score, visible evidence, and imagery-quality metadata.

API v1 is synchronous: one request analyzes one property. Only a successful 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

POSThttps://api.atlasproptech.com/v1/property-distress/analyze

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"
}
FieldMeaning
analysis.scoreA 0–100 exterior-distress screening score. Higher indicates more visible distress.
analysis.signalsNormalized visible conditions contributing to the result.
analysis.reasoningA concise explanation of the visual evidence.
imagery.dateImage capture month in YYYY-MM format, or null if unavailable.
imagery.distance_mDistance from the panorama location to the property, in meters.
imagery.quality_scoreImage-quality score for review alongside the capture date and distance.
credits_usedCredits charged for this completed analysis.
api_versionResponse 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"
}
HTTPCodeMeaning
400INVALID_JSONThe request body is not valid JSON.
400INVALID_REQUESTThe body or property object is invalid, or exactly one locator was not supplied.
400INVALID_ADDRESSThe address is not a non-empty string of at most 500 characters.
400INVALID_COORDINATESCoordinates must be numeric, with latitude from -90 to 90 and longitude from -180 to 180.
401INVALID_API_KEYThe API key is missing or invalid.
402BILLING_REQUIREDAn active Atlas subscription and payment method are required.
403API_KEY_DISABLEDThe API key has been disabled or revoked.
422ADDRESS_NOT_FOUNDThe address could not be resolved.
422NO_PANORAMANo usable Street View panorama was found near the property.
422PANORAMA_TOO_OLDThe panorama is older than the API cutoff of January 2014.
422NO_VISIBLE_BUILDINGNo building was visible in the available imagery.
429RATE_LIMITEDThe request rate for this key was exceeded.
503GEOCODING_UNAVAILABLEAddress resolution is temporarily unavailable.
503ANALYSIS_UNAVAILABLEAn analysis dependency is temporarily unavailable.
504PROVIDER_TIMEOUTA 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.