AZDealMap.com®Built for Arizona Real Estate Investors

DOCUMENTATION

Build with the AZ Deal Map API

Base URL: https://azdealmap.com/api/v1. The OpenAPI JSON and OpenAPI YAML are stable representations of one contract.

Quickstart

  1. Sign in to the dashboard. A new account receives one 25-credit Sandbox grant; no card is required.
  2. Create a key. Its plaintext appears once—store it in a server-side secret manager, never browser code, source control, URLs, analytics, or logs.
  3. Make a bounded request with a unique Idempotency-Key.
curl 'https://azdealmap.com/api/v1/live-deals?zip=85004&limit=2' \
+  -H 'Authorization: Bearer YOUR_SERVER_SIDE_API_KEY' \
+  -H 'Idempotency-Key: demo-request-001'

JavaScript

const response = await fetch("https://azdealmap.com/api/v1/live-deals?zip=85004&limit=2", {
  headers: { Authorization: `Bearer ${process.env.AZDM_API_KEY}`, "Idempotency-Key": crypto.randomUUID() }
});
if (!response.ok) throw new Error(`AZDM ${response.status}`);
const { data, meta } = await response.json();

Python

import os, uuid, requests
r = requests.get("https://azdealmap.com/api/v1/live-deals", params={"zip":"85004","limit":2}, headers={"Authorization":f"Bearer {os.environ['AZDM_API_KEY']}", "Idempotency-Key":str(uuid.uuid4())}, timeout=10)
r.raise_for_status()
data = r.json()

Sandbox

Sandbox accounts are restricted to synthetic/fixed sanitized sample data using the production response schema and normal metering. Samples contain no real exact locations, APNs, source identities, contacts, links, photos, free text, credentials, or production responses. Sandbox data is not evidence of a current offer and cannot be used to enumerate the archive.

Credits, dedupe, and limits

Credits are based on resources returned, multiplied by endpoint weight—not requests. The same account, billing class, resource, and representation is free again within 24 hours of first billing. At the exact 24-hour boundary it becomes billable. Empty results and errors cost zero. Cursor pagination defaults to 25 and caps at 100 (property search: 25); cursors are opaque and expire after 24 hours.

Initial limits are Sandbox 10 requests/minute and paid accounts 60/minute; 429 includes Retry-After. Live data fails closed after 48 hours without a successful sync; other serving data after seven days. “Live” means active at the latest successful observation—not guaranteed availability.

Errors

Errors use {"error":{"code":"...","message":"...","request_id":"..."}}. Common statuses: 400 invalid filters/idempotency, 401 key failure, 403 scope/account, 402 credits/limit, 404 not found, 409 idempotency conflict, 429 rate limit, and 503 stale/unavailable data. Errors never consume credits.

Endpoint reference

GET /api/v1/health

No authentication; readiness only.

GET /api/v1/live-deals

Scope live:read. Optional ZIP, city, status, price bounds. 1 credit/deal.

GET /api/v1/properties/search

Scope properties:read. Address prefix, ZIP, or city required; max 25. 1 credit/property.

GET /api/v1/properties/{property_id}

Scope properties:read. 1 credit/property.

GET /api/v1/properties/{property_id}/events

Scope events:read. Required RFC 3339 from/to, at most 366 days. 2 credits/event.

GET /api/v1/markets/{zip}

Scope markets:read. Cohorts under five suppressed. 5 credits/bundle.

GET /api/v1/usage

Scope usage:read. Account-only; 0 credits.

Data and license boundaries

Records are marketing observations, not title or ownership records, verified transactions, MLS data, appraisals, or availability guarantees. Accuracy and freshness vary by source. Access is for an approved internal purpose; it does not permit resale, republication, lead-list creation, model training, source/archive reconstruction, or redistribution. Retention, caching, attribution, and deletion follow the customer license. Query-based archive access is capped; full archive exports require a separate contract license.