GET /api/discover
Filter locations by score thresholds across all metros.
Query parameters
Example
POST /api/cells/similar
Find the nearest look-alike cells to a given H3 cell by driver-profile or satellite-image signature. Unlike the same-metro “Comparable cells” section of the Explorer — which ranks by absolute composite-score distance within one metro — this endpoint ranks by shape similarity (cosine nearest-neighbor over a per-cell vector) and can look across every scored metro. Use it when you want to answer “where else does a place like this exist?”
Two similarity bases are supported today, plus a blend of the two:
Request body
Example
Availability.
score mode is live: feature_vec is refreshed automatically as cells re-score. satellite and blend are gated on the AlphaEarth Earth Engine backfill — until embeddings exist, requests in those modes will return found: false with reason: "no_satellite_embedding". Score mode is the correct default for production use today.GET /api/nearby
Everything we know near a location — permits, POIs, schools, clinical trials, FDA events, zoning.
Query parameters
Example
GET /api/metro-tier-distribution
Count of scored cells in each safety tier bucket for a given signal across a metro. Powers the tier-mix bar on the Explorer Intelligence Rail so you can see at a glance whether a metro is mostly safe or mostly elevated, without leaving the page.
Buckets follow the standard composite score breakpoints: Prime ≥80, Strong 60–79, Solid 40–59, Watch 20–39, Elevated <20. Cells with a null value for the requested signal are excluded.
Query parameters
Example
The same endpoint backs distribution bars for any signal group — pass a different
signal to render a development-pipeline mix, business-vitality mix, or composite mix without a separate route.
GET /api/score-trends
Historical score trends for a metro or specific H3 cell. Pass metro for a metro-wide aggregate trend or h3_index for a per-cell time-series with all eight signal-group sub-scores. Exactly one of the two is required.
The endpoint reads from the score_history table that the Railway scorer snapshots once per day, so a fresh row appears for every (h3_index, profile, snapshot_date) covered by that day’s scorer pass. Cells the scorer didn’t touch on a given day will be absent from the time-series for that date.
Query parameters
Metro aggregate example
Per-cell example
GET /api/top-movers
Discover the cells whose composite score has changed the most over a 7-, 30-, 90-, or 180-day window. Each row reports the latest composite, the prior-window composite, and the delta between them, so you can surface neighborhoods that are heating up (or cooling off) without manually diffing snapshots from /api/score-trends.
Deltas are computed against the freshest snapshot in score_history at or before the lookback boundary, not a fixed calendar date. This means partial scorer coverage on any given day does not bias the leaderboard — cells without a baseline snapshot inside the window are simply excluded. The same RPC powers the metro-overview “movement” rail in the Explorer and the standalone /movers page in the dashboard.
Query parameters
Example
Daily snapshots accumulate from the moment a cell is first scored, so newer metros may return an empty
movers array on longer windows until enough history has built up. Use a shorter window (days=7) to surface activity earlier.GET /api/schools
Nearby school quality ratings (1-10 scale).
Query parameters
Example
GET /api/life-sciences
Clinical trials and FDA enforcement data by state or sponsor.
Query parameters
Example
GET /api/zoning
Zoning district rules — allowed uses, height limits, FAR, setbacks.
Query parameters
Example
GET /api/port-risk
Surface upstream port disruption affecting a Locus metro’s economic catchment. Twenty-two metros are mapped to their primary and secondary ports by trucking corridor (e.g. phoenix → Long Beach via I-10, atlanta → Savannah via I-16). When an inbound port shows elevated wait times in Overwatch, the row appears here with a risk_level of watch, elevated, or severe, derived from p90 wait, median wait, and trend direction. Returns an empty risks array when no upstream port is currently disrupted — the PortRiskBadge on cell-detail panels uses that signal to hide itself.
Use this to flag CRE locations whose tenants depend on container imports (industrial, logistics, big-box retail) before a soft port closure shows up in occupancy or rent comps.
Query parameters
Example
GET /api/export
Requires Bearer token.
bulk_export entitlement).
Query parameters
Portfolio export (
saved=true)
Set saved=true to export only the cells the authenticated user has saved into their portfolio (their monitored_locations). This is the intended workflow for analysts who track a curated set of cells across metros and want a CSV/JSON snapshot of just those rows rather than a full-metro or platform-wide pull.
- The filter is applied as an
INover the caller’s savedh3_indexlist, so the result respects ordering bycomposite(descending) and thelimitcap. - It composes with
metro— combiningsaved=true&metro=sfreturns only saved cells inside SF. - If the user has no saved cells, the endpoint short-circuits to an empty payload (
200 OK) without scanningcell_scores. CSV responses return an empty body; JSON responses return{ "total": 0, "data": [] }. - The download filename is tagged
saved(e.g.axiom-locus-saved-2026-04-29.csv) instead of the metro slug orall, so portfolio exports are easy to identify on disk.
GET /api/bids
Search federal and government procurement opportunities sourced from SAM.gov. Filter by state, keyword, or NAICS code to find relevant contracts.
Query parameters
Example