Developer Documentation
Inflecto API
Programmatic access to convergence scores, infrastructure signals, and market data for U.S. metropolitan areas.
https://inflecto.ai/api
v1
JSON
Authentication
All endpoints except /api/status require a Bearer token in the Authorization header.
curl https://inflecto.ai/api/convergence \ -H "Authorization: Bearer inflecto_live_abc123"
Rate Limits
| Plan | Limit | Notes |
|---|---|---|
| Early access | Unmetered | Coordinate large backfills with the Inflecto team. |
| General availability | To be published | Formal limits will be available before launch. |
/api/mcp
pro planread costLists 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.
GET /api/mcp Authorization: Bearer <key>
{"name":"inflecto-ai","tools":[...]}/mcp
pro planread costAdd 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.
Connector URL: https://inflecto.ai/mcp Transport: Streamable HTTP Authentication: OAuth 2.1 (automatic)
{"connection":"read-only MCP tools available after consent"}/api/mcp/sse
pro planread costThe 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.
POST /api/mcp/sse
Authorization: Bearer <key>
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/list"}{"jsonrpc":"2.0","id":1,"result":{"tools":[...]}}/api/location/brief
pro planread costResolve 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | body | string | No | One-line US address; provide this or lat and lng. |
| lat | body | number | No | Latitude; provide with lng instead of address. |
| lng | body | number | No | Longitude; provide with lat instead of address. |
POST /api/location/brief
Authorization: Bearer <key>
Content-Type: application/json
{"address":"1600 Pennsylvania Ave NW, Washington, DC 20500"}{"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"}}/api/land/lookup
free planread costCustomer API for parcel coordinates that resolves geography, returns signal context, and classifies buyer patterns when an owner entity is provided.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| lat | body | number | Yes | Latitude in decimal degrees. |
| lng | body | number | Yes | Longitude in decimal degrees. |
| owner_entity | body | string | No | Entity name; triggers buyer pattern classification when provided. |
POST /api/land/lookup
Authorization: Bearer <key>
Content-Type: application/json
{
"lat": 33.4484,
"lng": -112.0740,
"owner_entity": "MOXIAN INC"
}{
"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": []
}
}/api/calculator
free planread costScoped return scenario calculator for a single metro and investment amount.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | body | integer | Yes | 5-digit CBSA code used to load market context. |
| purchase_price | body | number | Yes | Investment or acquisition amount in dollars. |
| hold_years | body | integer | No | Hold period. Default 5, max 15. |
| property_type | body | string | No | Property type override. Default industrial. |
POST /api/calculator
Authorization: Bearer <key>
Content-Type: application/json
{
"cbsa": 38060,
"purchase_price": 250000,
"hold_years": 5
}{
"cbsa_code": 38060,
"investment_usd": 250000,
"hold_years": 5,
"projected_value": 337500,
"roi_multiple": 1.35
}/api/land
free planread costScoped land investment opportunities derived from convergence signals, annexations, rezonings, and adjacent activity.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | 5-digit CBSA code for metro-scoped results. |
| county | query | string | No | County filter. Requires state. |
| state | query | string | No | 2-letter state code. |
| type | query | string | No | Opportunity type filter. |
| limit | query | integer | No | Default 50, max 200. |
GET /api/land?cbsa=38060&limit=25 Authorization: Bearer <key>
{
"success": true,
"count": 2,
"opportunity_types": {},
"data": []
}/api/blind-spots
free planread costMetro public-power and PUC blind-spot ranking built from convergence breadth and public-power share.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | Optional single CBSA code. |
| min_breadth | query | integer | No | Minimum distinct signal families. Default 3. |
| min_blind_share | query | number | No | Minimum PUC-blind customer share from 0 to 1. |
| limit | query | integer | No | Default 50, max 200. |
GET /api/blind-spots?cbsa=38060 Authorization: Bearer <key>
{
"success": true,
"count": 1,
"metric_note": "blind_opportunity_score = convergence_breadth x puc_blind_share.",
"data": []
}/api/convergence
free planaggregate costInfrastructure 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| tier | query | string | No | Filter by ALERT, WATCH, MONITOR, or BASELINE. |
| limit | query | integer | No | Maximum rows to return. Default 100, max 1000. |
| offset | query | integer | No | Pagination offset. |
GET /api/convergence?tier=ALERT&limit=50 Authorization: Bearer <key>
{
"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 }
}/api/opportunities
free planread costRanked investment opportunities by opportunity score.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| label | query | string | No | Filter by Strong Buy, Buy, Hold, Watch, or Sell. |
| min_yield | query | number | No | Minimum gross yield percentage. |
| state | query | string | No | Filter by 2-letter state code, such as AZ or TX. |
| min_signals | query | integer | No | Minimum number of signal categories. |
| limit | query | integer | No | Default 100, max 500. |
GET /api/opportunities?label=Strong%20Buy&limit=25 Authorization: Bearer <key>
{
"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
}
]
}/api/metro
free planaggregate costComplete 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | Yes | CBSA code, such as 29700 for Laredo, TX. |
GET /api/metro?cbsa=29700 Authorization: Bearer <key>
{
"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": []
}/api/supply-monitor
free planread costTarget-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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | CBSA code. Required unless zip is provided. |
| zip | query | string | No | 5-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. |
GET /api/supply-monitor?cbsa=33740 Authorization: Bearer <key> GET /api/supply-monitor?zip=71203 Authorization: Bearer <key>
{
"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 }
}/api/timeline
free planread cost48-month signal convergence timeline for a metro.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | Yes | CBSA code. |
GET /api/timeline?cbsa=29700 Authorization: Bearer <key>
{
"cbsa_code": 29700,
"timeline": [
{ "month": "2026-04", "signal_count": 14, "signal_types": ["state_puc_cpcn"] }
]
}/api/scores
free planread costComposite and opportunity scores for all metros.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| period | query | string | No | Scoring period, for example 2026-05. Defaults to latest. |
| limit | query | integer | No | Default 918, max 1000. |
GET /api/scores?limit=50 Authorization: Bearer <key>
{
"success": true,
"scoringPeriod": "2026-05",
"data": [
{ "cbsa_code": 29700, "score": 4.1, "score_label": "Hot" }
]
}/api/signals/search
free planread costUnified signal search across the ingestion pipeline.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | No | Full-text keyword. |
| cbsa | query | integer | No | Filter to a metro. |
| signal_type | query | string | No | Filter by signal type. |
| from | query | date | No | ISO 8601 start date. |
| to | query | date | No | ISO 8601 end date. |
| limit | query | integer | No | Default 50, max 200. |
GET /api/signals/search?q=substation&cbsa=29700 Authorization: Bearer <key>
{
"data": [
{ "signal_type": "state_puc_cpcn", "title": "Transmission filing", "date": "2026-04-28" }
]
}/api/heatmap
free planaggregate costGeoJSON-style convergence data for map visualization, with filtering by tier, score, and result count.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| tier | query | string | No | Filter by ALERT, WATCH, MONITOR, or BASELINE. |
| min_score | query | integer | No | Minimum convergence score from 0 to 100. |
| limit | query | integer | No | Maximum number of results. Default 200. |
GET /api/heatmap?tier=ALERT&limit=100 Authorization: Bearer <key>
{
"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
}
}
]
}/api/impact
free planread costProjected 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | CBSA code. Returns projected impact for a metro based on detected signals. |
| zip | query | string | No | 5-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. |
| type | query | string | No | Project type, such as data_center_hyperscale. Returns multiplier data for that type. |
| v0 | query | number | No | Anchor value (today's property/portfolio value) to compound in the forecast. Defaults to the metro's current median price when omitted. |
| purchase_price | query | number | No | Positive 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. |
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>
{
"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, ... */ ]
}/api/forecast/history
free planread costActual-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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | CBSA code. Required unless zip is provided. |
| zip | query | string | No | 5-digit ZIP code, resolved to its primary county and CBSA. Required unless cbsa is provided. |
GET /api/forecast/history?cbsa=33740 Authorization: Bearer <key> GET /api/forecast/history?zip=71203 Authorization: Bearer <key>
{
"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 */ ]
}
}/api/properties/search
pro planread costProperty records with owner cross-reference and LLC entity match detection. Useful for identifying hyperscaler land assembly and shell-company acquisition patterns. Owner names, owner type, and LLC matches require Premium.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa_code | query | integer | No | Filter to a CBSA metro. |
| city | query | string | No | Case-insensitive partial match on city name. |
| state | query | string | No | 2-letter state code, such as TX or AZ. |
| property_type | query | string | No | Comma-separated list, e.g. 'Single Family,Land'. |
| lot_size_min | query | integer | No | Minimum lot size in square feet. |
| lot_size_max | query | integer | No | Maximum lot size in square feet. |
| sale_days_back | query | integer | No | Max age of last_sale_date in days. Default 180. |
| owner_type | query | string | No | LLC, Individual, or Corporate. |
| llc_match_only | query | boolean | No | 'true' to return only records with a detected LLC entity match. |
GET /api/properties/search?cbsa_code=18140&owner_type=LLC&llc_match_only=true Authorization: Bearer <key>
{
"results": [
{
"address": "4821 W Desert Cove Ave",
"city": "Phoenix",
"state": "AZ",
"property_type": "Land",
"lot_size": 217800,
"last_sale_price": 3200000,
"last_sale_date": "2025-11-14"
}
],
"count": 1,
"redacted_fields": ["owner_names", "owner_type", "llc_match"],
"redacted_reason": "requires premium"
}/api/opportunities/feed
free planread costDecision-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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| state | query | string | No | Comma-separated lifecycle states, such as accelerating,confirmed_nda. |
| cbsa | query | integer | No | Filter to a metro. |
| limit | query | integer | No | Default 50, max 200. |
| transitions | query | boolean | No | '1' to include recent lifecycle-state transitions. |
GET /api/opportunities/feed?state=accelerating&limit=25&transitions=1 Authorization: Bearer <key>
{
"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 }
}/api/thesis
free planread costLatest generated investment thesis document for a metro — structured evidence blocks plus a live convergence snapshot for drift comparison against the frozen thesis numbers.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | Yes | CBSA code. |
| format | query | string | No | 'json' (default) for structured evidence blocks, or 'brief' for a markdown memo. |
GET /api/thesis?cbsa=26900&format=json Authorization: Bearer <key>
{
"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" }
}/api/thesis/generate
pro plangeneration costGenerate 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | body | integer | No | CBSA code. Required unless lat and lng are provided. |
| lat | body | number | No | Latitude used with lng when cbsa is omitted. |
| lng | body | number | No | Longitude used with lat when cbsa is omitted. |
| cbsaName | body | string | No | Optional metro name for the generated document. |
POST /api/thesis/generate
Authorization: Bearer <key>
Content-Type: application/json
{ "cbsa": 26900 }{
"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"
}/api/thesis/video
premium plangeneration costReturn a cached thesis video or queue an on-demand render for the latest thesis document in one metro.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | body | integer | Yes | CBSA code with an existing thesis document. |
| ctaUrl | body | string | No | HTTPS call-to-action URL embedded in the render. |
POST /api/thesis/video
Authorization: Bearer <key>
Content-Type: application/json
{ "cbsa": 26900, "ctaUrl": "https://inflecto.ai" }{
"status": "queued",
"propsHash": "...",
"hint": "Render worker picks this up; poll GET /api/thesis/video?cbsa=…"
}/api/flood-zone
free planread costPer-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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| lat | query | number | With lng | Latitude −90 to 90; mutually exclusive with address. |
| lng | query | number | With lat | Longitude −180 to 180. |
| address | query | string | Without lat/lng | Nonempty US street address; only Census Exact matches resolve to FEMA. |
GET /api/flood-zone?lat=29.9511&lng=-90.0715 Authorization: Bearer <consumer-key>
{
"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" }]
}/api/flood-zone/batch
free planread costResolve 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| items | body | array | Yes | 1–50 objects: {id,lat,lng} or {id,address}; id must be a unique nonempty string. |
POST /api/flood-zone/batch
Authorization: Bearer <consumer-key>
Content-Type: application/json
{"items":[{"id":"property-1","lat":29.9511,"lng":-90.0715}]}{"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"}]}/api/macro
free planread costUnified 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| series | query | string | No | Series id, such as MORTGAGE30US. Returns its time series (newest-first). |
| asOf | query | date | No | With series: nearest prior observation on or before this date (YYYY-MM-DD). |
| from | query | date | No | With series: range start (YYYY-MM-DD). |
| to | query | date | No | With series: range end (YYYY-MM-DD). |
| latest | query | boolean | No | 'true' returns the latest value for every series (a macro snapshot). |
| limit | query | integer | No | With series: max observations returned. |
GET /api/macro?series=MORTGAGE30US&asOf=2021-06-15 Authorization: Bearer <key> GET /api/macro?latest=true Authorization: Bearer <key>
{
"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" } ]
}/api/distress/list
free planread costRecent code-enforcement violations as lead candidates, scoped to ONE county or CBSA per request (never bulk — anti-extraction posture).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| cbsa | query | integer | No | CBSA code. Required unless county+state is provided. |
| county | query | string | No | County name. Required with state unless cbsa is provided. |
| state | query | string | No | 2-letter state code. Required with county unless cbsa is provided. |
| category | query | string | No | Filter by violation category. |
| status | query | string | No | Filter by violation status. |
| days | query | integer | No | Lookback window in days. Default 90, max 365. |
| limit | query | integer | No | Default 200, max 500. |
GET /api/distress/list?cbsa=33740&days=180 Authorization: Bearer <key>
{
"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" } ]
}/api/assessor-offices
free planread costCounty assessor office directory with office contact, parcel search URLs, and APN deep-link patterns for property research.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| fips | query | string | No | Single 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. |
| state | query | string | No | 2-letter state code. Returns all counties in that state. Required unless fips is provided. |
| county | query | string | No | County name, matched case-insensitively as a partial string. Must be used with state. Returns up to 5 matches. |
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>
{
"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"
}/api/status
free planread costPlatform 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.
GET /api/status Authorization: Bearer <key>
{
"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 soonTyped API client for metro intelligence and signal search.
Python
Coming soonNotebook and data-pipeline client for market screening.
MCP Server
Private betaTool interface for querying Inflecto from AI workflows.
Webhooks
Coming soonTier-change and custom alert delivery for partner systems.