Quickstart
Quickstart
Section titled “Quickstart”Base URL: https://api.plantedmoney.ai. Reads need no key in the public beta; the limit is 30 calls/min per IP (auth). Full schema: /api/openapi.json.
1. Is it up, and how fresh
Section titled “1. Is it up, and how fresh”curl https://api.plantedmoney.ai/api/healthReturns ok plus binding checks (d1, kv), last_run (kind, finished, found, new_count), active_listings, and stale_model_rows (rows scored by an older model version). Listings refresh daily at 13:00 UTC; if last_run is older than ~24 h, the run failed.
2. Tract intelligence (the free tier)
Section titled “2. Tract intelligence (the free tier)”curl https://api.plantedmoney.ai/api/tracts/chicagoReturns {vintage, count, tracts[]} — 1,492 Cook + Lake census tracts with every metric behind the map: flip/BRRRR scores, effective tax, reassessment shock, Section-8 gap, and the rest (data sources has definitions and vintages). Cached 1 h.
3. Listings and score eligibility
Section titled “3. Listings and score eligibility”curl https://api.plantedmoney.ai/api/listings/chicagoUp to 200 active listings, deduped by address — from the licensed RentCast feed plus an interim unofficial Redfin feed (attributions); licensed MLS access is planned. deal_score: null means unscored (no valuation basis) — never a fake 0. Valuation, investor-target and motivation fields may be null when their evidence gates do not pass; each row carries model_version and reason/provenance fields.
4. Underwrite a point
Section titled “4. Underwrite a point”curl "https://api.plantedmoney.ai/api/underwrite?lat=41.9243&lon=-87.7169&price=500000&units=2"That is a Logan Square 2-flat at $500k. The response is one valuation object:
tract— geoid, muni, flip/BRRRR scores, effective tax, SAFMR 2BR, reassessment statusarv_source—"real comps (N sales, conf C)"when live comps clear the gates (similarity ≥ 0.45, ≥ 4 comps, dispersion ≤ 45%, confidence ≥ 55), else"tract heuristic"comp_arv— base/conservative/aggressive plus the comps used; absent when the gates refuserisk— separate 0–100 score, band, and flags with reasonsunderwrite— ARV, both offers, DSCR,economics_factor, and the full assumptions blockread— a one-sentence verdict
This exact point is the audit probe that returned ARV $1.37M before the 2026-07 comp guards; today a mixed-condition comp set gets refused (“insufficient comps”) instead of averaged. Every response also carries the disclosure verbatim:
Automated valuation model — not an appraisal. ARV = renovated-comp evidence (Tier 1), a neighborhood-premium estimate (Tier 2), or suppressed (Tier 3) — the method + confidence + range are on every response. value_as_is is the dated/distressed stratum (never blended into ARV). Four strategy scores (flip/BRRRR/hold/house-hack) are hard-gated against their own economics (INV-4) then ranked to a per-strategy inventory percentile; tract scores are location context only. Not for tenant screening or credit decisions (FCRA).
Per-segment error and suppression rates are published at /api/metrics/scorecard.
Prefer MCP?
Section titled “Prefer MCP?”The same engine is exposed as six tools for Claude or any MCP client — connect via MCP.
Machine-readable
Section titled “Machine-readable”Every contract behind this page ships as JSON, generated from the same source the engine runs — point tooling at these instead of scraping the prose:
- OpenAPI:
/api/openapi.json— every REST endpoint, request/response schemas, error shapes. - MCP manifest:
/mcp/v2/manifest— the live tool catalog, v2 names, with deprecated aliases markeddeprecated:true+replacement. - Valuation contract:
/api/spec/valuation-contract.json— the tiers, gates, and fields behind every ARV. - Scoring contract:
/api/spec/scoring-contract.json— factor weights, coverage damping, and the economics gate. - Constants registry:
/api/spec/constants-registry.json— every hand-set number in the pricing/underwriting path, versioned with an owner. - Model release registry:
/api/model-registry— the current champion, immutable artifact digest, promotion-gate summary, and rollback pointer. - Error taxonomy:
/api/spec/error-taxonomy.json— the closed set of codes documented on error taxonomy.
The public app’s optional analytics endpoint is intentionally not a general event API. It accepts only explicit analytics-v1 consent, a closed coarse taxonomy, and a short tab session; DNT/GPC opt out before parsing. Operator-only beta funnel aggregates are available at GET /api/admin/analytics?days=14 with WRITE_SECRET.
Deprecation policy. Renamed fields and tools keep working under their old name — the MCP v2
rename (search_deals, underwrite, comps → search_investment_inventory,
deep_underwrite_asset, get_comps) shipped its old names as aliases, not breaking changes.
Removal is never silent: it ships with a changelog entry and at least
90 days’ notice after that entry, never before.
