{"openapi":"3.1.0","info":{"title":"Multifamily Real Estate Deals Feed","version":"1.0.0","description":"Deal-level US multifamily records for AI agents. Paid endpoints use x402 (USDC on Base).","contact":{"email":"seanepage@gmail.com"}},"servers":[{"url":"https://hermes-storefront.onrender.com"}],"paths":{"/api/meta":{"get":{"summary":"Free discovery metadata","security":[],"responses":{"200":{"description":"Coverage, freshness, pricing, schema notes"}}}},"/api/deals":{"get":{"summary":"Full active deals feed (x402, $0.05/call)","description":"Optional query filters (AND-combined) return only the matching slice at the same per-call price.","parameters":[{"name":"state","in":"query","schema":{"type":"string"},"description":"Two-letter state, e.g. OH"},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"min_price","in":"query","schema":{"type":"number"}},{"name":"max_price","in":"query","schema":{"type":"number"}},{"name":"min_cap","in":"query","schema":{"type":"number"},"description":"Minimum advertised cap rate %"},{"name":"min_units","in":"query","schema":{"type":"integer"}},{"name":"max_units","in":"query","schema":{"type":"integer"}},{"name":"min_score","in":"query","schema":{"type":"integer"},"description":"Minimum composite deal_score (0-100)"},{"name":"status","in":"query","schema":{"type":"string","enum":["Hot","Warm","Pass"]}}],"responses":{"200":{"description":"Active records (deal_score-ranked) with typed underwriting + intelligence fields"},"402":{"description":"Payment required (x402 v2, USDC on Base)"}}}},"/api/deals/hot":{"get":{"summary":"Hot deals only (x402, $0.02/call)","responses":{"200":{"description":"Deals with 8.5%+ advertised cap and computed DSCR"},"402":{"description":"Payment required (x402 v2, USDC on Base)"}}}},"/api/signals":{"get":{"summary":"County tax-delinquency distress signals (x402, $0.03/call)","description":"Off-market lead sourcing: county tax-delinquent property records with owner name, parcel id, delinquent amount, and the public-record source URL for every row. Rows with a street address are mail-ready (has_address=true); the rest carry address_status=pending_parcel_lookup while enrichment drains.","parameters":[{"name":"county","in":"query","schema":{"type":"string"},"description":"Substring match, e.g. Hamilton or Montgomery"},{"name":"signal_type","in":"query","schema":{"type":"string"},"description":"e.g. tax_delinquent"},{"name":"min_amount","in":"query","schema":{"type":"number"},"description":"Minimum delinquent amount in USD"},{"name":"has_address","in":"query","schema":{"type":"boolean"},"description":"true = only rows with a street address"}],"responses":{"200":{"description":"Signal records, amount-ranked, with typed address_status and schema notes"},"402":{"description":"Payment required (x402 v2, USDC on Base)"}}}},"/api/deals/{id}/report":{"get":{"summary":"Premium per-property report (x402, $1.50/call)","description":"One decision-ready report for a single deal: underwriting (claimed vs HUD), DSCR, matched county distress signals with source URLs, three-path scoring, and a target-cap suggested offer range. A bad id (400) or unknown deal (404) is not billed. GET /api/meta returns a worked example URL with a live deal id (example_report).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deal UUID — the 'id' field of any record from GET /api/deals. Do not send the literal '{id}'."}],"responses":{"200":{"description":"Full report"},"400":{"description":"Invalid id (not billed)"},"402":{"description":"Payment required (x402 v2, USDC on Base)"},"404":{"description":"Unknown deal (not billed)"}}}}}}