{"openapi":"3.1.0","info":{"title":"Restar API","description":"\n## Restar Real Estate Intelligence API\n\nAdvanced real estate market analytics for investors and analysts.\n\n### Key Features\n- **Market Analytics**: 97 metrics across state, metro, county, and ZIP levels\n- **Investment Scoring**: Composite investment, health, appreciation, cash flow scores\n- **Market Intelligence**: Regime classification, trend analysis, migration data\n- **Deal Analysis**: Buy & Hold, BRRRR, and Fix & Flip financial modeling\n- **AI Narratives**: GPT-4o-mini market summaries with graceful fallback\n\n### Authentication\nAll endpoints require a JWT Bearer token except `/api/health` and `/api/examples`.\nObtain a token via `POST /api/auth/token`.\n\n```\nAuthorization: Bearer <your_access_token>\n```\n\n### Rate Limits\n- General: 100 req/min per IP\n- AI Narratives: 10 req/min per user\n- ETL Triggers: 5 req/min (admin only)\n\n### Data Sources\nZillow Research, Redfin Data Center, U.S. Census Bureau, FRED, BLS, FHFA, HUD, IRS SOI, FEMA NRI\n\n### Geography Types\n| Type | Description | Example |\n|------|-------------|---------|\n| `state` | U.S. State | California |\n| `metro` | Core-Based Statistical Area | Los Angeles-Long Beach-Anaheim |\n| `county` | County or County Equivalent | Los Angeles County |\n| `zip` | ZIP Code Tabulation Area | 90210 |\n    ","contact":{"name":"Restar Support","url":"https://restar.io/"},"license":{"name":"Proprietary"},"version":"0.1.0"},"paths":{"/api/public-data/{metric_slug}.csv":{"get":{"tags":["public-data"],"summary":"Public CSV snapshot of a free research dataset","description":"Serve one metric x geo_type snapshot as CSV, with attribution in-band.\n\nReturns 404 for anything not explicitly published — not 403 — because the\nset of public datasets is itself public information and a 403 would only\nadvertise that something exists behind it.","operationId":"public_metric_csv_api_public_data__metric_slug__csv_get","parameters":[{"name":"metric_slug","in":"path","required":true,"schema":{"type":"string","title":"Metric Slug"}},{"name":"geo_type","in":"query","required":false,"schema":{"type":"string","description":"state or county.","default":"state","title":"Geo Type"},"description":"state or county."}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public-data/":{"get":{"tags":["public-data"],"summary":"List the published public datasets","description":"Index of what is downloadable, so the set is discoverable without guessing.","operationId":"list_public_datasets_api_public_data__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array","title":"Response List Public Datasets Api Public Data  Get"}}}}}}},"/api/public-data":{"get":{"tags":["public-data"],"summary":"List the published public datasets","description":"Index of what is downloadable, so the set is discoverable without guessing.","operationId":"list_public_datasets_api_public_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array","title":"Response List Public Datasets Api Public Data Get"}}}}}}},"/api/v1/markets":{"get":{"tags":["v1"],"summary":"List markets","description":"Paginated list of geographies. Filter by ``geo_type`` and ``state``.","operationId":"list_markets_api_v1_markets_get","parameters":[{"name":"geo_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"state | metro | county | zip","title":"Geo Type"},"description":"state | metro | county | zip"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"2-letter state abbreviation","title":"State"},"description":"2-letter state abbreviation"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Page number (1-indexed).","default":1,"title":"Page"},"description":"Page number (1-indexed)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of items per page.","default":20,"title":"Page Size"},"description":"Number of items per page."},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedMarketsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/markets/search":{"get":{"tags":["v1"],"summary":"Typeahead search","operationId":"search_markets_api_v1_markets_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"title":"Q"}},{"name":"geo_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MarketSummary"},"title":"Response Search Markets Api V1 Markets Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/markets/{geography_id}":{"get":{"tags":["v1"],"summary":"Market detail","operationId":"get_market_api_v1_markets__geography_id__get","parameters":[{"name":"geography_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Geography Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/markets/{geography_id}/metrics":{"get":{"tags":["v1"],"summary":"All metrics for this market","operationId":"get_market_metrics_api_v1_markets__geography_id__metrics_get","parameters":[{"name":"geography_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Geography Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketMetricsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/markets/{geography_id}/timeseries":{"get":{"tags":["v1"],"summary":"Time series for a metric","operationId":"get_market_timeseries_api_v1_markets__geography_id__timeseries_get","parameters":[{"name":"geography_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Geography Id"}},{"name":"metric","in":"query","required":true,"schema":{"type":"string","description":"Metric slug, e.g. ``median_home_value``","title":"Metric"},"description":"Metric slug, e.g. ``median_home_value``"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":600,"minimum":1,"default":240,"title":"Limit"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeSeriesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/metrics":{"get":{"tags":["v1"],"summary":"List metrics","operationId":"list_metrics_api_v1_metrics_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MetricSummary"},"title":"Response List Metrics Api V1 Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/metrics/{slug}":{"get":{"tags":["v1"],"summary":"Metric detail","operationId":"get_metric_api_v1_metrics__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/metrics/{slug}/top":{"get":{"tags":["v1"],"summary":"Top markets by metric","operationId":"top_markets_api_v1_metrics__slug__top_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":10,"title":"N"}},{"name":"geo_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo Type"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Direction"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopMarketsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/scores/{geography_id}":{"get":{"tags":["v1"],"summary":"Composite scores for a market","operationId":"composite_scores_api_v1_scores__geography_id__get","parameters":[{"name":"geography_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Geography Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompositeScoresOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/v1/scores/{geography_id}/explain":{"get":{"tags":["v1"],"summary":"Per-metric breakdown of a composite score","operationId":"explain_score_api_v1_scores__geography_id__explain_get","parameters":[{"name":"geography_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Geography Id"}},{"name":"score_type","in":"query","required":false,"schema":{"type":"string","description":"forecast | investor | lt_growth","default":"forecast","title":"Score Type"},"description":"forecast | investor | lt_growth"},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreExplainOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/health":{"get":{"tags":["system"],"summary":"Health check","description":"Returns application health status, version, and deployment environment. No authentication required.","operationId":"health_check_api_health_get","responses":{"200":{"description":"Application is healthy and ready to serve requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Application is unhealthy (database or dependency failure)"}}}}},"components":{"schemas":{"CompositeScoresOut":{"properties":{"geography_id":{"type":"string","format":"uuid","title":"Geography Id"},"name":{"type":"string","title":"Name"},"geo_type":{"type":"string","title":"Geo Type"},"appreciation_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Appreciation Score"},"investment_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Investment Score"},"market_health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Health Score"}},"type":"object","required":["geography_id","name","geo_type"],"title":"CompositeScoresOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"},"version":{"type":"string","title":"Version"},"environment":{"type":"string","title":"Environment"}},"type":"object","required":["version","environment"],"title":"HealthResponse","description":"Application health-check payload.","example":{"environment":"production","status":"ok","version":"1.0.0"}},"MarketDetailOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"geo_type":{"type":"string","title":"Geo Type"},"name":{"type":"string","title":"Name"},"fips_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fips Code"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"state_abbr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Abbr"},"population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population"},"centroid_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Centroid Lat"},"centroid_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Centroid Lng"},"metric_count":{"type":"integer","title":"Metric Count","default":0}},"type":"object","required":["id","geo_type","name"],"title":"MarketDetailOut"},"MarketMetricValue":{"properties":{"metric_slug":{"type":"string","title":"Metric Slug"},"metric_name":{"type":"string","title":"Metric Name"},"category":{"type":"string","title":"Category"},"unit":{"type":"string","title":"Unit"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"yoy_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Yoy Change"},"percentile_rank":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentile Rank"},"as_of":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"As Of"}},"type":"object","required":["metric_slug","metric_name","category","unit"],"title":"MarketMetricValue"},"MarketMetricsOut":{"properties":{"geography_id":{"type":"string","format":"uuid","title":"Geography Id"},"items":{"items":{"$ref":"#/components/schemas/MarketMetricValue"},"type":"array","title":"Items"},"withheld":{"items":{"$ref":"#/components/schemas/WithheldSeries"},"type":"array","title":"Withheld","default":[]}},"type":"object","required":["geography_id","items"],"title":"MarketMetricsOut"},"MarketSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"geo_type":{"type":"string","title":"Geo Type"},"name":{"type":"string","title":"Name"},"fips_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fips Code"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"state_abbr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Abbr"},"population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population"}},"type":"object","required":["id","geo_type","name"],"title":"MarketSummary"},"MetricDetail":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"unit":{"type":"string","title":"Unit"},"source":{"type":"string","title":"Source"},"format_pattern":{"type":"string","title":"Format Pattern"},"available_geo_types":{"items":{"type":"string"},"type":"array","title":"Available Geo Types"},"is_higher_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Higher Better"},"is_premium":{"type":"boolean","title":"Is Premium","default":false},"redistributable":{"type":"boolean","title":"Redistributable","default":true},"licence_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licence Note"},"description":{"type":"string","title":"Description"},"update_frequency":{"type":"string","title":"Update Frequency"}},"type":"object","required":["slug","name","category","unit","source","format_pattern","available_geo_types","description","update_frequency"],"title":"MetricDetail"},"MetricSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"unit":{"type":"string","title":"Unit"},"source":{"type":"string","title":"Source"},"format_pattern":{"type":"string","title":"Format Pattern"},"available_geo_types":{"items":{"type":"string"},"type":"array","title":"Available Geo Types"},"is_higher_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Higher Better"},"is_premium":{"type":"boolean","title":"Is Premium","default":false},"redistributable":{"type":"boolean","title":"Redistributable","default":true},"licence_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licence Note"}},"type":"object","required":["slug","name","category","unit","source","format_pattern","available_geo_types"],"title":"MetricSummary"},"PaginatedMarketsOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MarketSummary"},"type":"array","title":"Items"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","page","page_size","total"],"title":"PaginatedMarketsOut"},"ScoreExplainOut":{"properties":{"geography_id":{"type":"string","format":"uuid","title":"Geography Id"},"score_type":{"type":"string","title":"Score Type"},"base":{"type":"number","title":"Base","default":50.0},"total_contribution":{"type":"number","title":"Total Contribution"},"weights_effective_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Weights Effective From"},"contributors":{"items":{"$ref":"#/components/schemas/api__routes__v1__scores__ScoreContributor"},"type":"array","title":"Contributors"}},"type":"object","required":["geography_id","score_type","total_contribution","contributors"],"title":"ScoreExplainOut"},"TimeSeriesOut":{"properties":{"geography_id":{"type":"string","format":"uuid","title":"Geography Id"},"metric":{"type":"string","title":"Metric"},"data":{"items":{"$ref":"#/components/schemas/api__routes__v1__markets__TimeSeriesPoint"},"type":"array","title":"Data"}},"type":"object","required":["geography_id","metric","data"],"title":"TimeSeriesOut"},"TopMarketsOut":{"properties":{"metric_slug":{"type":"string","title":"Metric Slug"},"geo_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo Type"},"items":{"items":{"$ref":"#/components/schemas/api__routes__v1__metrics__TopMarketEntry"},"type":"array","title":"Items"}},"type":"object","required":["metric_slug","items"],"title":"TopMarketsOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WithheldSeries":{"properties":{"metric":{"type":"string","title":"Metric"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"reason":{"type":"string","title":"Reason"},"message":{"type":"string","title":"Message"}},"type":"object","required":["metric","reason","message"],"title":"WithheldSeries","description":"A series omitted from the response for upstream-licence reasons."},"api__routes__v1__markets__TimeSeriesPoint":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"value":{"type":"number","title":"Value"},"yoy_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Yoy Change"}},"type":"object","required":["date","value"],"title":"TimeSeriesPoint"},"api__routes__v1__metrics__TopMarketEntry":{"properties":{"geography_id":{"type":"string","format":"uuid","title":"Geography Id"},"name":{"type":"string","title":"Name"},"geo_type":{"type":"string","title":"Geo Type"},"state_abbr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Abbr"},"value":{"type":"number","title":"Value"},"percentile_rank":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentile Rank"},"as_of":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"As Of"}},"type":"object","required":["geography_id","name","geo_type","value"],"title":"TopMarketEntry"},"api__routes__v1__scores__ScoreContributor":{"properties":{"metric_slug":{"type":"string","title":"Metric Slug"},"metric_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Name"},"raw_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Raw Value"},"raw_value_withheld":{"type":"boolean","title":"Raw Value Withheld","default":false},"percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentile"},"weight":{"type":"number","title":"Weight"},"contribution_pts":{"type":"number","title":"Contribution Pts"},"higher_is_better":{"type":"boolean","title":"Higher Is Better"}},"type":"object","required":["metric_slug","weight","contribution_pts","higher_is_better"],"title":"ScoreContributor"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}},"ApiKeyBearer":{"type":"http","scheme":"bearer","description":"Restar API key, sent as `Authorization: Bearer <key>`. Keys are issued from the dashboard and begin with `pp_`. A key carries the full access of the account that owns it."}}},"tags":[{"name":"auth","description":"Authentication and user management — register, login, token refresh."},{"name":"market-data","description":"Core analytics endpoints: choropleth map data, time series, snapshots, rankings, and side-by-side comparisons."},{"name":"geographies","description":"Search geographies by name or FIPS code, fetch detail and GeoJSON boundaries."},{"name":"scoring","description":"Composite investment scores (0-100) and market regime classification (hot / warm / neutral / cool / cold)."},{"name":"narratives","description":"AI-generated plain-English market summaries powered by GPT-4o-mini, with graceful fallback to rule-based text."},{"name":"screener","description":"Filter geographies by any combination of metrics and operators to find matching markets."},{"name":"watchlist","description":"Save and manage a personal watchlist of geographies with optional notes."},{"name":"deals","description":"Financial modeling tools: Buy & Hold, BRRRR, and Fix & Flip deal analyzers."},{"name":"properties","description":"Property-level search, detail, ownership records, transaction history, and comps."},{"name":"migration","description":"IRS SOI migration flow data — inbound/outbound household and AGI flows between counties."},{"name":"notifications","description":"Manage alert rules and in-app notifications triggered by metric thresholds."},{"name":"billing","description":"Stripe-powered subscription management: plans, checkout, portal, and webhook handling."},{"name":"reports","description":"Generate and download PDF market reports for any geography."},{"name":"exports","description":"Export market data as CSV or XLSX for offline analysis."},{"name":"cre","description":"Commercial real estate analytics: property search, rent comps, cap rate data (in progress)."},{"name":"etl","description":"ETL pipeline management — trigger runs, check status (admin only)."},{"name":"admin","description":"Platform administration — user management, tier overrides, system stats."},{"name":"system","description":"Health check, system info, and API usage examples."}],"servers":[{"url":"https://api.restar.io","description":"Production"}]}