Developer Documentation

Inflecto API

Programmatic access to convergence scores, infrastructure signals, and market data for U.S. metropolitan areas.

Base URL
https://inflecto.ai/api
Version
v1
Format
JSON
Request API Access

Authentication

All endpoints except /api/status require a Bearer token in the Authorization header.

bash
curl https://inflecto.ai/api/convergence \
  -H "Authorization: Bearer inflecto_live_abc123"

Rate Limits

PlanLimitNotes
Early accessUnmeteredCoordinate large backfills with the Inflecto team.
General availabilityTo be publishedFormal limits will be available before launch.
GET

/api/mcp

pro planread cost

Lists the read-only Inflecto MCP tools. Requires an API key on the Pro or Premium plan; OAuth connector tokens work only on /mcp.

Parameters

No parameters.

http
GET /api/mcp
Authorization: Bearer <key>
json
{"name":"inflecto-ai","tools":[...]}
POST

/mcp

pro planread cost

Add https://inflecto.ai/mcp as a custom connector in Claude (Streamable HTTP). Sign in to Inflecto and approve read-only access. OAuth uses your account plan and API credits. API-key clients can also use https://inflecto.ai/api/mcp/sse, the same server under its original path. Its get_location_brief tool resolves a US address to a scored metro, tier rank, recent signals, forecast, and county flood risk.

Parameters

No parameters.

http
Connector URL: https://inflecto.ai/mcp
Transport: Streamable HTTP
Authentication: OAuth 2.1 (automatic)
json
{"connection":"read-only MCP tools available after consent"}
POST

/api/mcp/sse

pro planread cost

The same Streamable HTTP MCP server as /mcp, under its original path, for clients that send an API key header (Claude Code, scripts). Despite the path name it is not the legacy SSE transport.

Parameters

No parameters.

http
POST /api/mcp/sse
Authorization: Bearer <key>
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/list"}
json
{"jsonrpc":"2.0","id":1,"result":{"tools":[...]}}
POST

/api/location/brief

pro planread cost

Resolve a one-line US address or coordinates to a metro brief. Returns distinct geocoded, not-found, and geocoder-failed outcomes; rural and unscored metros include county and state without a state-average fallback. Convergence tier is a relative rank bucket, not a probability.

Parameters

NameInTypeRequiredDescription
addressbodystringNoOne-line US address; provide this or lat and lng.
latbodynumberNoLatitude; provide with lng instead of address.
lngbodynumberNoLongitude; provide with lat instead of address.
http
POST /api/location/brief
Authorization: Bearer <key>
Content-Type: application/json

{"address":"1600 Pennsylvania Ave NW, Washington, DC 20500"}
json
{"geocode":"geocoded","coverage":"scored_metro","convergence":{"tier":{"value":"WATCH","source":"convergence_clusters","as_of":"2026-10-01"}},"forecast":{"value":null,"source":"forecast_snapshots","as_of":null,"reason":"No current forecast for this metro"}}
POST

/api/land/lookup

free planread cost

Customer API for parcel coordinates that resolves geography, returns signal context, and classifies buyer patterns when an owner entity is provided.

Parameters

NameInTypeRequiredDescription
latbodynumberYesLatitude in decimal degrees.
lngbodynumberYesLongitude in decimal degrees.
owner_entitybodystringNoEntity name; triggers buyer pattern classification when provided.
http
POST /api/land/lookup
Authorization: Bearer <key>
Content-Type: application/json

{
  "lat": 33.4484,
  "lng": -112.0740,
  "owner_entity": "MOXIAN INC"
}
json
{
  "success": true,
  "location": {
    "lat": 33.4484,
    "lng": -112.0740,
    "cbsa_code": 38060,
    "cbsa_name": "Phoenix-Mesa-Chandler, AZ",
    "resolution": "cbsa"
  },
  "signals": { "count": 12, "data": [] },
  "hold_signals": { "recommendation": "HOLD", "score": 72 },
  "buyer_pattern": {
    "classification": "hyperscaler_shell",
    "likely_parent": "Microsoft",
    "confidence": 0.87,
    "evidence": []
  }
}
POST

/api/calculator

free planread cost

Scoped return scenario calculator for a single metro and investment amount.

Parameters

NameInTypeRequiredDescription
cbsabodyintegerYes5-digit CBSA code used to load market context.
purchase_pricebodynumberYesInvestment or acquisition amount in dollars.
hold_yearsbodyintegerNoHold period. Default 5, max 15.
property_typebodystringNoProperty type override. Default industrial.
http
POST /api/calculator
Authorization: Bearer <key>
Content-Type: application/json

{
  "cbsa": 38060,
  "purchase_price": 250000,
  "hold_years": 5
}
json
{
  "cbsa_code": 38060,
  "investment_usd": 250000,
  "hold_years": 5,
  "projected_value": 337500,
  "roi_multiple": 1.35
}
GET

/api/land

free planread cost

Scoped land investment opportunities derived from convergence signals, annexations, rezonings, and adjacent activity.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNo5-digit CBSA code for metro-scoped results.
countyquerystringNoCounty filter. Requires state.
statequerystringNo2-letter state code.
typequerystringNoOpportunity type filter.
limitqueryintegerNoDefault 50, max 200.
http
GET /api/land?cbsa=38060&limit=25
Authorization: Bearer <key>
json
{
  "success": true,
  "count": 2,
  "opportunity_types": {},
  "data": []
}
GET

/api/blind-spots

free planread cost

Metro public-power and PUC blind-spot ranking built from convergence breadth and public-power share.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNoOptional single CBSA code.
min_breadthqueryintegerNoMinimum distinct signal families. Default 3.
min_blind_sharequerynumberNoMinimum PUC-blind customer share from 0 to 1.
limitqueryintegerNoDefault 50, max 200.
http
GET /api/blind-spots?cbsa=38060
Authorization: Bearer <key>
json
{
  "success": true,
  "count": 1,
  "metric_note": "blind_opportunity_score = convergence_breadth x puc_blind_share.",
  "data": []
}
GET

/api/convergence

free planaggregate cost

Infrastructure convergence scores for all metros. Tiers are percentile-based and hard-signal floored, but ALERT is capped to WATCH when severe policy risk is active (policy_impact_score <= -0.7).

Parameters

NameInTypeRequiredDescription
tierquerystringNoFilter by ALERT, WATCH, MONITOR, or BASELINE.
limitqueryintegerNoMaximum rows to return. Default 100, max 1000.
offsetqueryintegerNoPagination offset.
http
GET /api/convergence?tier=ALERT&limit=50
Authorization: Bearer <key>
json
{
  "data": [
    {
      "cbsa_code": 29700,
      "cbsa_name": "Laredo, TX",
      "tier": "ALERT",
      "convergence_score": 94.3,
      "tier_basis": "relative_percentile",
      "tier_note": "ALERT is top 10% of metros for this scoring period; convergence_score is absolute. Severe policy risk caps ALERT to WATCH.",
      "signal_count": 47,
      "distinct_signal_types": 6,
      "newest_signal_date": "2026-04-28"
    }
  ],
  "meta": { "total": 156, "limit": 50, "offset": 0 }
}
GET

/api/opportunities

free planread cost

Ranked investment opportunities by opportunity score.

Parameters

NameInTypeRequiredDescription
labelquerystringNoFilter by Strong Buy, Buy, Hold, Watch, or Sell.
min_yieldquerynumberNoMinimum gross yield percentage.
statequerystringNoFilter by 2-letter state code, such as AZ or TX.
min_signalsqueryintegerNoMinimum number of signal categories.
limitqueryintegerNoDefault 100, max 500.
http
GET /api/opportunities?label=Strong%20Buy&limit=25
Authorization: Bearer <key>
json
{
  "data": [
    {
      "cbsa_code": 29700,
      "cbsa_name": "Laredo, TX",
      "opportunity_score": 4.4,
      "opportunity_label": "Strong Buy",
      "convergence_tier": "ALERT",
      "median_home_price": 142000,
      "median_rent": 1180
    }
  ]
}
GET

/api/metro

free planaggregate cost

Complete metro deep-dive with signals, market data, scores, projected_impact, signal_sequence (lifecycle stage), playbook (which step of the land to power to regulatory to construction to market siting playbook the market is currently on), and baseline_returns (the area's typical buy-box cash-on-cash, cap rate, 1%-rule and monthly cash flow with LOCALIZED property tax + insurance — the cash-flow floor before any infrastructure catalyst). The case_studies block, also available from the focused /api/case-studies route, contains verified records only and exposes public_summary instead of internal notes.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerYesCBSA code, such as 29700 for Laredo, TX.
http
GET /api/metro?cbsa=29700
Authorization: Bearer <key>
json
{
  "cbsa_code": 29700,
  "cbsa_name": "Laredo, TX",
  "convergence": { "tier": "ALERT", "score": 94.3, "signal_count": 47 },
  "tier_context": {
    "tier_basis": "relative_percentile",
    "explanation": "ALERT = top 10%, WATCH = top 25%, MONITOR = top 50%; convergence score is absolute. Severe policy risk caps ALERT to WATCH."
  },
  "tier_history": [
    { "scoring_period": "2026-04", "previous_tier": "WATCH", "new_tier": "ALERT" }
  ],
  "projected_impact": {
    "rent_growth_range": [8, 14],
    "hpi_growth_range": [12, 18],
    "horizon_months": 24
  },
  "case_studies": [
    {
      "project_name": "Verified infrastructure project",
      "verified": true,
      "public_summary": "Public evidence summary."
    }
  ],
  "signal_sequence": { "current_stage": "permitting", "next_stage": "construction" },
  "playbook": {
    "current_step": "power",
    "next_step": "regulatory",
    "progress_pct": 40,
    "sequence_intact": true,
    "narrative": "Land Control, Power Procurement steps are active; currently at Power Procurement. Next expected: Regulatory & Permitting."
  },
  "market": {
    "opportunity_score": 4.4,
    "opportunity_label": "Strong Buy",
    "policy_impact_score": 0,
    "risk_downgrade_multiplier": 1,
    "risk_flags": []
  },
  "signals": []
}
GET

/api/supply-monitor

free planread cost

Target-scoped new-construction oversupply monitor: a green/yellow/red light on the supply-pressure signal (trailing-24mo multifamily permits vs. ACS renter stock), plus a single-family permit trend (trailing 24mo vs. prior 24mo) and a forward rent-softening projection. Set up an alert on a specific metro or ZIP to catch overbuilding risk before it shows up in rents.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNoCBSA code. Required unless zip is provided.
zipquerystringNo5-digit ZIP code, resolved to its CBSA. Required unless cbsa is provided. Inherits the metro's light/tier and projection when the ZIP has no rent history of its own.
http
GET /api/supply-monitor?cbsa=33740
Authorization: Bearer <key>

GET /api/supply-monitor?zip=71203
Authorization: Bearer <key>
json
{
  "success": true,
  "cbsa_code": 33740,
  "cbsa_name": "Monroe, LA",
  "resolved_from_zip": "71203",
  "computed_through": "2026-04-01",
  "light": "green",
  "tier": "tight",
  "message": "Permit volume is low relative to renter demand — no oversupply risk detected.",
  "multifamily": { "trailing_mf_permits": 5, "renter_stock": 32254, "supply_pressure": 0.000155, "supply_percentile": 35 },
  "single_family": { "trailing_sf_permits": 878, "prior_sf_permits": 690, "sf_trend_pct": 27.2, "sf_trend_direction": "rising" },
  "projected_rel_rent_24mo_pct": 0.853,
  "zip": { "zip": "71203", "tier": "tight", "light": "green", "zip_rent_yoy_pct": null, "metro_rent_yoy_pct": 16.15, "projected_rel_rent_24mo_pct": 0.853 }
}
GET

/api/timeline

free planread cost

48-month signal convergence timeline for a metro.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerYesCBSA code.
http
GET /api/timeline?cbsa=29700
Authorization: Bearer <key>
json
{
  "cbsa_code": 29700,
  "timeline": [
    { "month": "2026-04", "signal_count": 14, "signal_types": ["state_puc_cpcn"] }
  ]
}
GET

/api/scores

free planread cost

Composite and opportunity scores for all metros.

Parameters

NameInTypeRequiredDescription
periodquerystringNoScoring period, for example 2026-05. Defaults to latest.
limitqueryintegerNoDefault 918, max 1000.
http
GET /api/scores?limit=50
Authorization: Bearer <key>
json
{
  "success": true,
  "scoringPeriod": "2026-05",
  "data": [
    { "cbsa_code": 29700, "score": 4.1, "score_label": "Hot" }
  ]
}
GET

/api/heatmap

free planaggregate cost

GeoJSON-style convergence data for map visualization, with filtering by tier, score, and result count.

Parameters

NameInTypeRequiredDescription
tierquerystringNoFilter by ALERT, WATCH, MONITOR, or BASELINE.
min_scorequeryintegerNoMinimum convergence score from 0 to 100.
limitqueryintegerNoMaximum number of results. Default 200.
http
GET /api/heatmap?tier=ALERT&limit=100
Authorization: Bearer <key>
json
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": { "type": "Point", "coordinates": [-99.5075, 27.5036] },
      "properties": {
        "cbsa_code": 29700,
        "cbsa_name": "Laredo, TX",
        "tier": "ALERT",
        "convergence_score": 94.3
      }
    }
  ]
}
GET

/api/impact

free planread cost

Projected real estate returns by infrastructure project type, plus a forward forecast — V0 compounded along a decomposed annual growth path (g_local) with supply, rates, catalyst proximity, and mean-reversion components. ZIP requests prefer ZIP-grain price/rent inputs (`zip_median_price`, `zip_zori`) and fall back to metro inputs when ZIP data is thin. A caller-supplied purchase_price changes only localized_costs.propertyTaxAnnual. insuranceAnnual is never scaled by price: insurance_basis is state_average_premium (NAIC state average) or state_average_x_fio_county_relativity_2022 (that average times the county 2022 premium relativity from U.S. Treasury FIO ZIP data, capped 0.5x-3x; insurance_grain is then county), and insurance_basis_note says which; the four return metrics remain area-market baselines. Catalyst matched project types include source_notes plus structured case_evidence from the historical case corpus when backing cases exist.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNoCBSA code. Returns projected impact for a metro based on detected signals.
zipquerystringNo5-digit ZIP code, resolved to its CBSA. Returns the metro projection plus matched_appreciation for catalyst markets and a baseline forecast for covered baseline metros.
typequerystringNoProject type, such as data_center_hyperscale. Returns multiplier data for that type.
v0querynumberNoAnchor value (today's property/portfolio value) to compound in the forecast. Defaults to the metro's current median price when omitted.
purchase_pricequerynumberNoPositive caller purchase price in dollars. Used only for localized_costs.propertyTaxAnnual; invalid or omitted values fall back to the area median. Insurance and gross_yield_pct, cap_rate_pct, cash_on_cash_pct, and monthly_cash_flow always use the area median.
http
GET /api/impact?cbsa=29700
Authorization: Bearer <key>

GET /api/impact?zip=71203&purchase_price=200000
Authorization: Bearer <key>

GET /api/impact?type=data_center_hyperscale
Authorization: Bearer <key>
json
{
  "success": true,
  "cbsa_code": 33740,
  "resolved_from_zip": "71203",
  "matched_appreciation": {
    "annual_hpi_rate": 0.12,
    "hpi_growth_range": [18, 30],
    "horizon_months": 24,
    "confidence": "moderate",
    "tier": "ALERT",
    "matched_project_types": [
      {
        "project_type": "data_center_hyperscale",
        "display_name": "Hyperscale Data Center",
        "evidence_weight": 4.5,
        "rent_growth_pct": 18,
        "hpi_growth_pct": 30,
        "source_notes": "Historical multiplier note from infrastructure_impact_multipliers.",
        "case_evidence": {
          "project_type": "data_center_hyperscale",
          "case_count": 2,
          "median_lead_days": 428,
          "lead_days_range": [251, 605],
          "strongest_cases": [
            { "name": "Comparable project", "cbsa_code": 33740, "lead_days": 605, "detail_url": "https://example.com/evidence" }
          ],
          "basis": "case_corpus",
          "match_basis": "metro"
        }
      }
    ]
  },
  "market": {
    "grain": "zip",
    "inputs": {
      "grain": "zip",
      "price_source": "zip_median_price",
      "rent_source": "zip_zori",
      "price_zip": "71203",
      "rent_zip": "71203",
      "zip_price_n_sales": 14,
      "zip_price_window": { "start": "2024-05-31", "end": "2026-05-31" },
      "zip_rent_observation_date": "2026-05-31"
    },
    "current_price": 184500,
    "current_rent": 1512,
    "current_yield": 9.83
  },
  "forecast": {
    "basis": "catalyst",
    "v0": 312000,
    "v0_source": "market_price",
    "horizon_years": 5,
    "baseline_annual_rate": 0.011,
    "longrun_annual_rate": 0.032,
    "catalyst_proximity": {
      "subject_zip": "71203",
      "subject_grain": "zip",
      "nearest_catalyst": { "source": "interconnection_queue:county", "lat": 32.41316, "lng": -91.74835 },
      "distance_km": 31.5,
      "multiplier": 0.498
    },
    "path": [
      { "year": 1, "g_local": 0.142, "components": { "baseline": 0.011, "catalyst": 0.143, "rates": -0.014, "supply": 0.002, "meanReversion": 0 }, "value_mid": 356304, "value_low": 317111, "value_high": 395497, "confidence": "high" }
      /* ... one entry per year; band widens and confidence decays with horizon ... */
    ]
  },
  "forecast_null_reason": null,
  "baseline_returns": {
    "inputs": {
      "purchase_price": 184500,
      "price_source": "zip_median_price"
    },
    "gross_yield_pct": 9.83,
    "cap_rate_pct": 4.12,
    "cash_on_cash_pct": 0.62,
    "monthly_cash_flow": 112,
    "localized_costs": {
      "grain": "county",
      "geo_id": "22073",
      "tax_grain": "county",
      "tax_geo_id": "22073",
      "insurance_grain": "state",
      "insurance_geo_id": "LA",
      "source": "census_acs_B25103_B25077; census_acs_B25103_B25077_state_rollup; NAIC Homeowners Report",
      "propertyTaxAnnual": 1110,
      "taxRatePct": 0.5552,
      "insuranceAnnual": 2800,
      "insuranceBase": 2800,
      "insurance_basis": "state_average_premium",
      "insurance_basis_note": "NAIC state-average annual homeowners premium. Not adjusted for this property's price, size or local hazard exposure.",
      "purchase_price": 200000,
      "price_source": "caller_supplied",
      "baseline_price": 184500,
      "baseline_price_source": "zip_median_price"
    }
  },
  "baseline_returns_null_reason": null /* one of no_price_data | no_rent_data | no_mortgage_rate | no_area_cost_factors_for_geography when baseline_returns is null */,
  "appreciation": {
    "basis": "catalyst",
    "annual_rate_yr1": 0.142,
    "baseline_annual_rate": 0.011,
    "catalyst_annual_rate_yr1": 0.143,
    "longrun_annual_rate": 0.032
  },
  "projections": [ /* per project_type: projected_price_yr1, price_increase_3yr_total_pct, ... */ ]
}
GET

/api/forecast/history

free planread cost

Actual-vs-estimated forecast history for a metro: realized HPI rebased to the forecast anchor, current forecast path, prior vintages, and matured-vintage accuracy metrics.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNoCBSA code. Required unless zip is provided.
zipquerystringNo5-digit ZIP code, resolved to its primary county and CBSA. Required unless cbsa is provided.
http
GET /api/forecast/history?cbsa=33740
Authorization: Bearer <key>

GET /api/forecast/history?zip=71203
Authorization: Bearer <key>
json
{
  "success": true,
  "cbsa_code": 33740,
  "resolved_from_zip": "71203",
  "actual": [
    { "date": "2024-01-01", "value": 286420 },
    { "date": "2024-04-01", "value": 289110 }
  ],
  "current_forecast": [
    { "year": 1, "g_local": 0.261, "components": { "baseline": 0.011, "catalyst": 0.25, "rates": 0, "supply": 0, "meanReversion": 0 }, "value_mid": 393432, "value_low": 350154, "value_high": 436710, "confidence": "high" }
  ],
  "vintages": [
    { "as_of_date": "2024-06-01", "is_backtest": true, "path": [ /* ForecastYear[] */ ] }
  ],
  "accuracy": {
    "mape": 8.42,
    "hit_rate": 0.75,
    "matured_count": 12
  },
  "catalyst_rent_accuracy": {
    "accuracy_score": 0.82,
    "matured_count": 3,
    "outlier_count": 1,
    "latest": {
      "as_of_date": "2025-05-31",
      "target_date": "2026-05-31",
      "predicted_rent_lift_pct": 34.5,
      "realized_rent_change_pct": 18.2,
      "error_pct_points": 16.3,
      "candidate_cause": "location_too_coarse"
    },
    "outliers": [ /* reviewable catalyst-rent divergences */ ]
  }
}
GET

/api/opportunities/feed

free planread cost

Decision-first opportunity feed with lifecycle state, rent projections, and recent state transitions — the data behind the Today page delta feed. signals_truncated: true means signal_count is a lower bound (a source hit its per-metro cap or failed to load); null means the row predates that flag.

Parameters

NameInTypeRequiredDescription
statequerystringNoComma-separated lifecycle states, such as accelerating,confirmed_nda.
cbsaqueryintegerNoFilter to a metro.
limitqueryintegerNoDefault 50, max 200.
transitionsquerybooleanNo'1' to include recent lifecycle-state transitions.
http
GET /api/opportunities/feed?state=accelerating&limit=25&transitions=1
Authorization: Bearer <key>
json
{
  "opportunities": [
    { "id": "...", "slug": "monroe-la-millhaven", "name": "Millhaven", "cbsa_code": 33740, "lifecycle_state": "accelerating", "velocity_30d": 4.2, "signal_count": 2000, "signals_truncated": true }
  ],
  "transitions": [ { "opportunity_id": "...", "from_state": "confirmed_nda", "to_state": "accelerating", "transitioned_at": "2026-05-20" } ],
  "counts": { "accelerating": 12, "confirmed_nda": 8 }
}
GET

/api/thesis

free planread cost

Latest generated investment thesis document for a metro — structured evidence blocks plus a live convergence snapshot for drift comparison against the frozen thesis numbers.

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerYesCBSA code.
formatquerystringNo'json' (default) for structured evidence blocks, or 'brief' for a markdown memo.
http
GET /api/thesis?cbsa=26900&format=json
Authorization: Bearer <key>
json
{
  "id": "...",
  "status": "published",
  "generated_at": "2026-05-01T00:00:00Z",
  "document": { "summary": "...", "evidence": [] },
  "live": { "score": 94.3, "tier": "ALERT", "signalCount": 47, "categoryCount": 6, "scoringPeriod": "2026-05" }
}
POST

/api/thesis/generate

pro plangeneration cost

Generate or reuse a cited investment thesis document for one metro. A fresh synthesis can take several minutes and consumes model tokens; documents generated within the last seven days are reused.

Parameters

NameInTypeRequiredDescription
cbsabodyintegerNoCBSA code. Required unless lat and lng are provided.
latbodynumberNoLatitude used with lng when cbsa is omitted.
lngbodynumberNoLongitude used with lat when cbsa is omitted.
cbsaNamebodystringNoOptional metro name for the generated document.
http
POST /api/thesis/generate
Authorization: Bearer <key>
Content-Type: application/json

{ "cbsa": 26900 }
json
{
  "id": "...",
  "cbsa": 26900,
  "reused": true,
  "generated_at": "2026-05-01T00:00:00Z",
  "hint": "GET /api/thesis?cbsa=… for the document; pass force=true to regenerate"
}
POST

/api/thesis/video

premium plangeneration cost

Return a cached thesis video or queue an on-demand render for the latest thesis document in one metro.

Parameters

NameInTypeRequiredDescription
cbsabodyintegerYesCBSA code with an existing thesis document.
ctaUrlbodystringNoHTTPS call-to-action URL embedded in the render.
http
POST /api/thesis/video
Authorization: Bearer <key>
Content-Type: application/json

{ "cbsa": 26900, "ctaUrl": "https://inflecto.ai" }
json
{
  "status": "queued",
  "propsHash": "...",
  "hint": "Render worker picks this up; poll GET /api/thesis/video?cbsa=…"
}
GET

/api/flood-zone

free planread cost

Per-property FEMA NFHL lookup. Supply coordinates or an address (Census geocoded; only Exact is confident). Valid requests return HTTP 200 with state known, unknown, or error; invalid inputs return 400. Reasons: outside_nfhl_coverage, unmapped_area, geocode_failed, geocode_low_confidence, fema_service_unavailable; known has reason null. Unknown/error zone and SFHA are null; Zone D has SFHA null. FEMA sentinels are null. Point cache lasts 30 days; errors are never cached. Tractic and Hyperion should use their own consumer keys, not INFLECTO_API_KEY.

Parameters

NameInTypeRequiredDescription
latquerynumberWith lngLatitude −90 to 90; mutually exclusive with address.
lngquerynumberWith latLongitude −180 to 180.
addressquerystringWithout lat/lngNonempty US street address; only Census Exact matches resolve to FEMA.
http
GET /api/flood-zone?lat=29.9511&lng=-90.0715
Authorization: Bearer <consumer-key>
json
{
  "success": true,
  "data": {
    "state": "known", "reason": null, "flood_zone": "AE", "zone_subtype": null,
    "sfha": true, "base_flood_elevation_ft": null,
    "firm_panel": null, "panel_effective_date": null, "panel_preliminary_date": null,
    "dfirm_id": null, "source_cit": null,
    "geocode": { "lat": 29.9511, "lng": -90.0715, "source": "caller", "match_quality": null },
    "near_boundary": false, "source": "FEMA NFHL", "nfhl_layer": 28,
    "nfhl_data_as_of": null, "fetched_at": "2026-10-21T00:00:00.000Z", "cached": false
  },
  "attribution": [{ "source": "FEMA NFHL", "notice": "Source: FEMA National Flood Hazard Layer", "url": "https://www.fema.gov/flood-maps/national-flood-hazard-layer" }]
}
POST

/api/flood-zone/batch

free planread cost

Resolve 1–50 properties in input order. Each item has the same data shape, states and reasons as GET /api/flood-zone, plus its id. Unique nonempty string ids and valid items are required; validation errors return 400. All valid batches return 200, isolating upstream failures per item. Shared concurrency cap 4 for point lookups and geocoding; cache checked first, identical points deduplicated. At the 50-second deadline unfinished items become error/fema_service_unavailable. Counts summarize known, unknown, error. Includes FEMA courtesy attribution.

Parameters

NameInTypeRequiredDescription
itemsbodyarrayYes1–50 objects: {id,lat,lng} or {id,address}; id must be a unique nonempty string.
http
POST /api/flood-zone/batch
Authorization: Bearer <consumer-key>
Content-Type: application/json

{"items":[{"id":"property-1","lat":29.9511,"lng":-90.0715}]}
json
{"success":true,"data":{"items":[{"id":"property-1","state":"error","reason":"fema_service_unavailable","flood_zone":null,"sfha":null,"geocode":{"lat":29.9511,"lng":-90.0715,"source":"caller","match_quality":null}}],"counts":{"known":0,"unknown":0,"error":1}},"attribution":[{"source":"FEMA NFHL","notice":"Source: FEMA National Flood Hazard Layer","url":"https://www.fema.gov/flood-maps/national-flood-hazard-layer"}]}
GET

/api/macro

free planread cost

Unified national economic series API (FRED, Freddie Mac PMMS, BLS) — a single authed, cached read surface. No params returns the full series catalog; ?series= returns a time series or as-of value, with `provider` (fred, freddie_pmms or bls) naming who published it; an unknown id returns 404 unknown_series; ?latest=true returns a snapshot of every series.

Parameters

NameInTypeRequiredDescription
seriesquerystringNoSeries id, such as MORTGAGE30US. Returns its time series (newest-first).
asOfquerydateNoWith series: nearest prior observation on or before this date (YYYY-MM-DD).
fromquerydateNoWith series: range start (YYYY-MM-DD).
toquerydateNoWith series: range end (YYYY-MM-DD).
latestquerybooleanNo'true' returns the latest value for every series (a macro snapshot).
limitqueryintegerNoWith series: max observations returned.
http
GET /api/macro?series=MORTGAGE30US&asOf=2021-06-15
Authorization: Bearer <key>

GET /api/macro?latest=true
Authorization: Bearer <key>
json
{
  "success": true,
  "series_id": "MORTGAGE30US",
  "provider": "freddie_pmms",
  "as_of": "2021-06-15",
  "data": { "series_id": "MORTGAGE30US", "series_name": "30-Year Fixed Mortgage Rate", "observation_date": "2021-06-10", "value": 2.96, "unit": "percent", "frequency": "weekly" },
  "attribution": [ { "source": "Freddie Mac, Primary Mortgage Market Survey", "notice": "Source: Freddie Mac, Primary Mortgage Market Survey. Values are reproduced unaltered.", "url": "https://www.freddiemac.com/pmms" } ]
}
GET

/api/distress/list

free planread cost

Recent code-enforcement violations as lead candidates, scoped to ONE county or CBSA per request (never bulk — anti-extraction posture).

Parameters

NameInTypeRequiredDescription
cbsaqueryintegerNoCBSA code. Required unless county+state is provided.
countyquerystringNoCounty name. Required with state unless cbsa is provided.
statequerystringNo2-letter state code. Required with county unless cbsa is provided.
categoryquerystringNoFilter by violation category.
statusquerystringNoFilter by violation status.
daysqueryintegerNoLookback window in days. Default 90, max 365.
limitqueryintegerNoDefault 200, max 500.
http
GET /api/distress/list?cbsa=33740&days=180
Authorization: Bearer <key>
json
{
  "success": true,
  "scope": { "cbsa_code": 33740 },
  "since": "2025-11-30",
  "count": 14,
  "data": [ { "address": "123 Main St", "violation_category": "vacant_structure", "status": "open", "reported_date": "2026-04-10" } ]
}
GET

/api/assessor-offices

free planread cost

County assessor office directory with office contact, parcel search URLs, and APN deep-link patterns for property research.

Parameters

NameInTypeRequiredDescription
fipsquerystringNoSingle FIPS code, or a comma-separated list of up to 50 FIPS codes. Returns one record for a single FIPS or batch results for multiple FIPS codes.
statequerystringNo2-letter state code. Returns all counties in that state. Required unless fips is provided.
countyquerystringNoCounty name, matched case-insensitively as a partial string. Must be used with state. Returns up to 5 matches.
http
GET /api/assessor-offices?fips=04013
Authorization: Bearer <key>

GET /api/assessor-offices?state=AZ
Authorization: Bearer <key>

GET /api/assessor-offices?county=Maricopa&state=AZ
Authorization: Bearer <key>
json
{
  "fips_code": "04013",
  "county_name": "Maricopa",
  "state": "AZ",
  "assessor_name": "Maricopa County Assessor",
  "website_url": "https://mcassessor.maricopa.gov",
  "search_url": "https://mcassessor.maricopa.gov/mcs.php",
  "url_pattern": "https://mcassessor.maricopa.gov/mcs.php?q={apn}",
  "parcel_id_label": "APN",
  "has_deep_link": true,
  "has_homestead_link": false,
  "has_address_search": false,
  "status": "active"
}
GET

/api/status

free planread cost

Platform health, pipeline freshness, scoring timestamp, and which states currently have LLC formation coverage (llcCoverage: states with new data in the last 30 days vs. history only).

Parameters

No parameters.

http
GET /api/status
Authorization: Bearer <key>
json
{
  "success": true,
  "system": { "health": "degraded", "summary": { "ok": 72, "warning": 6, "stale": 9, "error": 3 } },
  "scoring": { "period": "2026-09", "computedAt": "2026-09-15T03:00:00Z" },
  "llcCoverage": {
    "available": true,
    "staleDays": 30,
    "refreshedAt": "2026-09-15T08:17:00Z",
    "currentStates": ["CO", "CT", "FL", "NY", "TX"],
    "notCurrentStates": [
      { "state": "NE", "lastNewRowsAt": null, "newestFormationDate": null }
    ]
  }
}

SDKs & Integrations

Official client libraries and integration tooling are in private preview. Join the early access list to get notified when packages and webhook delivery are available.

TypeScript / JavaScript

Coming soon

Typed API client for metro intelligence and signal search.

Python

Coming soon

Notebook and data-pipeline client for market screening.

MCP Server

Private beta

Tool interface for querying Inflecto from AI workflows.

Webhooks

Coming soon

Tier-change and custom alert delivery for partner systems.