AZ / Market desk
Loading workspace
Assembling the latest view.
Checking the requested surface and preparing its current state.
AZ / Market desk
Loading workspace
Assembling the latest view.
Checking the requested surface and preparing its current state.
API INSTRUCTIONS
Create a key, keep it on your server, and call the endpoint that matches the data you need.
01
Sign in to the dashboard. New accounts receive 25 one-time Sandbox credits; no card is required.
The full key appears once. Put it in a server-side environment variable such as AZDM_API_KEY. Never expose it in browser code, source control, URLs, logs, or public chat.
Send the key as a Bearer token and include a unique Idempotency-Key header.
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'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();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()02
Base URL: https://azdealmap.com/api/v1
| Endpoint | What it returns | Supported filters | Credit cost |
|---|---|---|---|
GET /live-deals | Active off-market deals with asking price and address details. | limit (1–100), cursor, zip, city, status, min_price, max_price, updated_since (RFC 3339). Price values are integer cents. | 1 credit per deal record returned |
GET /properties/search | Find properties by address prefix, ZIP, or city. | address (3+ characters), zip, city; one is required. limit (1–25), cursor. | 1 credit per property record returned |
GET /properties/{property_id} | Pull details for one known property ID. | property_id in the path. | 1 credit per property |
GET /properties/{property_id}/events | Pull dated deal marketing and asking-price history for one property. | property_id in the path; from and to RFC 3339 timestamps required; limit (1–100), cursor. Date range may not exceed 366 days. | 2 credits per marketing event returned |
GET /markets/{zip} | Pull the latest available market stats for one ZIP. | Five-digit zip in the path; optional as_of RFC 3339 timestamp. | 5 credits per ZIP snapshot |
GET /usage | Check usage and credits charged to your account. | limit (1–100), cursor. | Free |
GET /health | Check whether the API is ready. | None. No API key required. | Free |
A record means one returned row or resource, not one HTTP request. Eligible repeat retrievals within 24 hours are not charged again. Errors and empty results cost zero.
03
Use only the filters you need. Asking-price filters are in cents. For a daily incremental pull, save the request start time, pass it as updated_since on the next run, and follow every returned cursor before advancing the saved time. Credits remain per returned resource under the same 24-hour dedupe contract.
# Two active deals in ZIP 85004
curl 'https://azdealmap.com/api/v1/live-deals?zip=85004&limit=2' \
-H 'Authorization: Bearer YOUR_SERVER_SIDE_API_KEY' \
-H 'Idempotency-Key: zip-85004-001'
# Daily incremental pull (RFC 3339)
curl 'https://azdealmap.com/api/v1/live-deals?updated_since=2026-08-05T09%3A00%3A00Z&limit=100' \
-H 'Authorization: Bearer YOUR_SERVER_SIDE_API_KEY' \
-H 'Idempotency-Key: daily-2026-08-06-page-1'
# Phoenix deals with asking prices from $150,000 to $350,000
curl 'https://azdealmap.com/api/v1/live-deals?city=Phoenix&min_price=15000000&max_price=35000000&limit=25' \
-H 'Authorization: Bearer YOUR_SERVER_SIDE_API_KEY' \
-H 'Idempotency-Key: phoenix-price-001'04
Eligible repeat retrievals of the same resource and representation within 24 hours are not charged again. At the 24-hour boundary, it can be charged again. Errors and empty results cost zero.
Results default to 25 records and generally allow up to 100; property search allows up to 25. Use the returned cursor for the next page. Sandbox allows 10 requests per minute; paid accounts allow 60. “Active” means active at the latest successful observation and does not guarantee a deal is still available.
Clearly labeled example data — not a current private or live deal.
{
"data": [{
"deal_id": "deal_example_7f3a91",
"property_id": "prop_example_28bc04",
"street_address": "123 Example Desert Rd",
"city": "Sample City",
"state": "AZ",
"zip": "85000",
"status": "Active",
"ask_cents": 24500000,
"observed_at": "2026-08-01T15:30:00.000Z"
}],
"meta": {
"request_id": "00000000-0000-4000-8000-000000000000",
"as_of": "2026-08-01T15:31:00.000Z",
"next_cursor": null,
"has_more": false,
"credits_charged": 1,
"credits_remaining": 24
}
}Copy the compact Google Apps Script example. It reads the key from Script Properties, prompts for city, ZIP, and limit, calls the review API, and writes a clean deal table. The base URL is one clearly marked line to replace for production later.
05
Read the AZ Deal Map OpenAPI contract at https://azdealmap.com/developers/openapi.json and help me make a server-side API request. Read the key from the AZDM_API_KEY environment variable. Never put the key in client-side code, source control, logs, URLs, or public chat. Use a unique Idempotency-Key header and only supported parameters.The API is an Arizona-focused view of currently marketed wholesale deals, matched property facts, dated marketing events, and aggregate ZIP snapshots. It is designed for monitoring and workflow integration. It is not MLS, title, ownership, appraisal, closed-sale, or availability truth, and an active status means active at the latest successful observation.
Responses include meta.as_of. Deal and property resources expose observation, source-update, and sync timestamps when available; market snapshots include their own as_of and source-freshness fields. The service refuses to serve required datasets beyond its freshness thresholds: 48 hours for live deals and 168 hours for property, event, and market datasets.
Successful responses use {"data":[...],"meta":{...}}. Metadata contains a request ID, as-of time, cursor state, and credit totals. Public IDs identify API resources; source contacts, message bodies, private links, photos, and internal source identities are not projected.
When meta.has_more is true, pass meta.next_cursor unchanged as the next request’s cursor. Cursors are opaque and endpoint-bound. Finish all pages before advancing an incremental-sync timestamp.
A property_id represents the API’s conservative match for a property, not a legal parcel or ownership assertion. Keep records separate when identity is uncertain; do not merge solely because street text looks similar.
Errors return {"error":{"code":"...","message":"...","request_id":"..."}} and cost zero credits. Common statuses are 400 for unsupported filters or headers, 401 for an invalid key, 403 for key scope or account access, 402 for insufficient credits or a spending limit, 404 when data is not found, 409 for an idempotency conflict, 429 for a rate limit, and 503 when serving data is unavailable. A 429 response includes a Retry-After header.
Deal records show marketing activity, not title or ownership records, verified sales, MLS data, appraisals, or a guarantee that a deal remains available. Accuracy and freshness vary by source. Access does not permit resale, republication, lead-list creation, model training, archive reconstruction, or redistribution. Normal API pagination is not a license or mechanism for an archive dump. Full archive exports require a separate license.
API keys belong only in server-side secrets or environment variables. Never place one in browser JavaScript, a mobile binary, source control, URLs, analytics, logs, screenshots, or prompts. Rotate a key from the dashboard if it may have been exposed.