Developer Reference

API Reference

Access location intelligence programmatically. 43 data sources. 8 signal groups. Enrichment, predictions, webhooks, and ML exports in one platform.

Base URLhttps://axiomlocus.io/api

Authentication

The API supports three authentication methods. Most endpoints work without authentication (rate-limited by IP, 5 requests/day). Authenticated users get higher limits and access to protected endpoints.

1. API Key (recommended for programmatic access)

Generate an API key from Settings. Keys are prefixed with al_ and can be passed via either header:

# Option A: Authorization header
curl "https://axiomlocus.io/api/score?lat=37.77&lng=-122.41" \
  -H "Authorization: Bearer al_your_key_here"

# Option B: X-API-Key header
curl "https://axiomlocus.io/api/score?lat=37.77&lng=-122.41" \
  -H "X-API-Key: al_your_key_here"

2. Session Cookie (browser use)

When signed in via the browser, your session cookie is sent automatically. No additional headers needed.

3. Anonymous

No credentials required. Rate-limited to 5 requests/day by IP address. Some endpoints return truncated data for anonymous users.

Rate Limits

Requests are rate-limited per day based on your plan. The remaining quota is returned in the X-RateLimit-Remaining response header.

PlanLookups / DayBulk ScoringPrice
Anonymous5No$0
Free100No$0
Pro5,000Yes$200/mo
Team25,000Yes$500/mo

When rate-limited, the API returns 429 Too Many Requests. See Pricing for full plan details.

Core Scoring
GET/api/score

Score a location across all 8 signal groups.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude of the location.
lngfloatYesLongitude of the location.
radiusfloatNo1.0Radius in km (max 10).
profilestringNogeneralScoring profile. One of: general, qsr, self_storage, retail, office.

Example Request

curl "https://axiomlocus.io/api/score?lat=37.7749&lng=-122.4194"

Example Response

{
  "composite": 78.4,
  "confidence": 0.92,
  "sourcesUsed": 36,
  "sourcesTotal": 43,
  "metro": "sf",
  "profile": "general",
  "groups": {
    "businessVitality": {
      "score": 82.1,
      "confidence": 1.0,
      "sourcesActive": 5,
      "sourcesTotal": 6,
      "subScores": [
        { "name": "Net Business Openings", "score": 71 },
        { "name": "Category Diversity", "score": 88 },
        { "name": "Rating Trajectory", "score": 79 }
      ]
    }
  }
}

Response Fields

FieldTypeDescription
compositefloatOverall score from 0 to 100.
confidencefloatData completeness ratio from 0.0 to 1.0.
sourcesUsedintNumber of data sources that returned data.
sourcesTotalintTotal possible data sources.
metrostringMetro slug where the location was resolved.
profilestringScoring profile used.
groupsobjectPer-signal-group breakdown with score, confidence, sourcesActive, sourcesTotal, and subScores.
POST/api/bulk-scoreAuth Required

Score up to 50 locations in a single request.

Request Body

FieldTypeRequiredDescription
locationsarrayYesArray of { lat, lng } objects. Maximum 50.
radiusfloatNoRadius in km (max 10). Applied to all locations.
profilestringNoScoring profile for all locations.
{
  "locations": [
    { "lat": 37.7749, "lng": -122.4194 },
    { "lat": 34.0522, "lng": -118.2437 }
  ],
  "radius": 1.0,
  "profile": "qsr"
}

Example Request

curl -X POST "https://axiomlocus.io/api/bulk-score" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"locations":[{"lat":37.77,"lng":-122.41},{"lat":34.05,"lng":-118.24}]}'

Example Response

{
  "results": [
    {
      "lat": 37.77,
      "lng": -122.41,
      "composite": 78.4,
      "confidence": 0.92,
      "groups": { "..." : "..." }
    },
    {
      "lat": 34.05,
      "lng": -118.24,
      "composite": 71.2,
      "confidence": 0.88,
      "groups": { "..." : "..." }
    }
  ]
}

Response Fields

FieldTypeDescription
resultsarrayArray of score objects, one per input location.
results[].compositefloatComposite score (0-100) for the location.
results[].confidencefloatData completeness ratio.
results[].groupsobjectSignal group breakdown.
Enrichment
GET/api/v1/enrichAuth Required

Enrich any US address with scores, nearby POIs, permits, demographics, and risk data in a single call.

Parameters

NameTypeRequiredDefaultDescription
addressstringYesFull US street address to geocode and enrich.
radiusfloatNo1.0Search radius in km (max 10).
profilestringNogeneralScoring profile: general, qsr, self_storage, retail, office.
includestringNoallComma-separated sections: scores,pois,permits,demographics,risk. Use 'all' for everything.

Example Request

curl "https://axiomlocus.io/api/v1/enrich?address=123+Market+St+San+Francisco+CA" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{
  "address": "123 Market St, San Francisco, CA 94105",
  "lat": 37.7935,
  "lng": -122.3958,
  "metro": "sf",
  "scores": {
    "composite": 76.2,
    "confidence": 0.94,
    "groups": {
      "businessVitality": { "score": 82 },
      "populationMomentum": { "score": 71 },
      "demographics": { "score": 80 }
    }
  },
  "permits": {
    "total": 34,
    "total_value": 8200000,
    "recent": [
      { "id": "P-2025-5678", "type": "renovation", "value": 450000 }
    ]
  },
  "demographics": {
    "median_income": 112000,
    "population_density": 18200,
    "daytime_population_ratio": 3.4
  },
  "risk": {
    "flood_zone": false,
    "crime_index": 42,
    "air_quality_aqi": 38
  }
}

Response Fields

FieldTypeDescription
addressstringNormalized address string.
latfloatGeocoded latitude.
lngfloatGeocoded longitude.
scoresobjectFull scoring breakdown with composite and signal groups.
permitsobjectNearby building permits with value aggregation.
demographicsobjectCensus and ACS demographic data.
riskobjectEnvironmental and safety risk indicators.
Predictions
GET/api/lead-lagAuth Required

Survival curve analysis showing how one signal leads or lags another. Useful for predicting which neighborhoods will gentrify, decline, or see permit surges.

Parameters

NameTypeRequiredDefaultDescription
causestringYesLeading signal group (e.g. businessVitality, populationMomentum).
effectstringYesLagging signal group (e.g. developmentPipeline, economicStrength).
metrostringNoMetro slug filter. Omit for all metros.
lag_monthsintNo12Maximum lag window in months (1-24).

Example Request

curl "https://axiomlocus.io/api/lead-lag?cause=businessVitality&effect=developmentPipeline&metro=sf" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{
  "cause": "businessVitality",
  "effect": "developmentPipeline",
  "metro": "sf",
  "peak_lag_months": 6,
  "peak_correlation": 0.72,
  "survival_curve": [
    { "month": 0, "correlation": 0.12 },
    { "month": 3, "correlation": 0.45 },
    { "month": 6, "correlation": 0.72 },
    { "month": 9, "correlation": 0.58 },
    { "month": 12, "correlation": 0.31 }
  ],
  "interpretation": "Business vitality changes lead development pipeline activity by ~6 months in SF."
}

Response Fields

FieldTypeDescription
peak_lag_monthsintMonth offset where correlation is strongest.
peak_correlationfloatPearson correlation at peak lag (0-1).
survival_curvearrayMonthly correlation values over the lag window.
interpretationstringHuman-readable summary of the lead-lag relationship.
GET/api/permits/predictAuth Required

Sequence prediction for building permit activity at the H3 cell level. Uses historical permit patterns to forecast future issuance.

Parameters

NameTypeRequiredDefaultDescription
h3_indexstringYesH3 hex index at resolution 8.
horizonintNo6Forecast horizon in months (1-12).

Example Request

curl "https://axiomlocus.io/api/permits/predict?h3_index=882a100d63fffff&horizon=6" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{
  "h3_index": "882a100d63fffff",
  "historical_avg_monthly": 4.2,
  "forecast": [
    { "month": "2026-04", "predicted_permits": 5, "confidence": 0.85 },
    { "month": "2026-05", "predicted_permits": 6, "confidence": 0.78 },
    { "month": "2026-06", "predicted_permits": 4, "confidence": 0.71 },
    { "month": "2026-07", "predicted_permits": 7, "confidence": 0.65 },
    { "month": "2026-08", "predicted_permits": 5, "confidence": 0.59 },
    { "month": "2026-09", "predicted_permits": 4, "confidence": 0.52 }
  ],
  "trend": "increasing",
  "model": "arima_h3_v2"
}

Response Fields

FieldTypeDescription
historical_avg_monthlyfloatAverage monthly permits over the last 12 months.
forecastarrayMonthly predictions with confidence intervals.
forecast[].predicted_permitsintPredicted permit count for the month.
forecast[].confidencefloatModel confidence (0-1), decreases with horizon.
trendstringOverall trend direction: increasing, stable, or decreasing.
Analytics
GET/api/permits/hotspots

H3-aggregated building permit hotspots for a metro, ranked by permit density and total estimated cost.

Parameters

NameTypeRequiredDefaultDescription
metro_slugstringYesMetro slug (e.g. sf, nyc, chi, la).
daysintNo90Lookback period in days.
limitintNo25Max hotspot cells to return.

Example Request

curl "https://axiomlocus.io/api/permits/hotspots?metro_slug=sf&days=90&limit=10"

Example Response

{
  "metro": "sf",
  "days": 90,
  "hotspots": [
    {
      "h3_index": "882a100d63fffff",
      "center_lat": 37.7749,
      "center_lng": -122.4194,
      "permit_count": 47,
      "total_value": 12500000,
      "avg_value": 265957,
      "top_type": "new_construction"
    },
    {
      "h3_index": "882a100d65fffff",
      "center_lat": 37.7851,
      "center_lng": -122.4094,
      "permit_count": 32,
      "total_value": 8700000,
      "avg_value": 271875,
      "top_type": "renovation"
    }
  ]
}

Response Fields

FieldTypeDescription
hotspotsarrayH3 cells ranked by permit activity.
hotspots[].permit_countintTotal permits in the lookback window.
hotspots[].total_valuefloatSum of estimated costs.
hotspots[].top_typestringMost common permit type in this cell.
GET/api/crime/hotspots

Crime incident hotspots aggregated by H3 cell for a metro area.

Parameters

NameTypeRequiredDefaultDescription
metro_slugstringYesMetro slug.
daysintNo90Lookback period in days.
categorystringNoFilter by crime category: property, violent, other.
limitintNo25Max cells to return.

Example Request

curl "https://axiomlocus.io/api/crime/hotspots?metro_slug=sf&days=30&category=property"

Example Response

{
  "metro": "sf",
  "days": 30,
  "total_incidents": 1243,
  "hotspots": [
    {
      "h3_index": "882a100d63fffff",
      "incident_count": 89,
      "top_category": "property",
      "per_capita_rate": 12.4,
      "trend": "declining"
    }
  ]
}

Response Fields

FieldTypeDescription
total_incidentsintTotal incidents across all cells in the lookback window.
hotspots[].incident_countintNumber of incidents in this H3 cell.
hotspots[].per_capita_ratefloatIncidents per 1,000 residents.
hotspots[].trendstringTrend vs prior period: increasing, stable, declining.
GET/api/commuter-flows

LEHD Origin-Destination commuter flow data for a Census tract. Shows where workers live and where residents work.

Parameters

NameTypeRequiredDefaultDescription
tractstringYesCensus tract GEOID (11 digits).
directionstringNobothinbound (workers coming in), outbound (residents leaving), or both.
limitintNo20Top N connected tracts to return.

Example Request

curl "https://axiomlocus.io/api/commuter-flows?tract=06075010800&direction=inbound&limit=10"

Example Response

{
  "tract": "06075010800",
  "inbound": {
    "total_workers": 14200,
    "flows": [
      { "origin_tract": "06081611100", "workers": 890, "pct": 6.3, "origin_name": "Daly City" },
      { "origin_tract": "06001402100", "workers": 720, "pct": 5.1, "origin_name": "Oakland" }
    ]
  },
  "outbound": {
    "total_residents_working": 3400,
    "flows": [
      { "dest_tract": "06075017902", "workers": 210, "pct": 6.2, "dest_name": "SoMa" }
    ]
  }
}

Response Fields

FieldTypeDescription
inbound.total_workersintTotal workers commuting into this tract.
inbound.flowsarrayTop origin tracts with worker counts.
outbound.total_residents_workingintTotal residents who commute out.
outbound.flowsarrayTop destination tracts.
Location Data
GET/api/pois

Nearby points of interest with ratings and photos.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.
radiusfloatNo0.5Radius in km (max 10).
limitintNo50Max results to return (max 200).

Example Request

curl "https://axiomlocus.io/api/pois?lat=37.7749&lng=-122.4194&radius=0.5"

Example Response

{
  "pois": [
    {
      "id": "abc123",
      "name": "Blue Bottle Coffee",
      "primary_type": "cafe",
      "rating": 4.5,
      "review_count": 342,
      "photo_reference": "Aap_uE...",
      "distance_m": 120
    }
  ]
}

Response Fields

FieldTypeDescription
poisarrayArray of nearby point-of-interest objects.
pois[].idstringUnique POI identifier.
pois[].namestringBusiness name.
pois[].primary_typestringBusiness type category.
pois[].ratingfloatAverage rating (0-5).
pois[].review_countintTotal number of reviews.
pois[].photo_referencestringPhoto reference for use with /api/places-photo.
pois[].distance_mfloatDistance from query point in meters.
GET/api/permits

Building permits near a location with value aggregation.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.
radiusfloatNo1.0Radius in km (max 10).

Example Request

curl "https://axiomlocus.io/api/permits?lat=37.7749&lng=-122.4194"

Example Response

{
  "total_permits": 47,
  "total_value": 12500000,
  "by_type": {
    "new_construction": 12,
    "renovation": 28,
    "demolition": 7
  },
  "permits": [
    {
      "id": "P-2025-1234",
      "permit_type": "new_construction",
      "status": "issued",
      "address": "123 Market St",
      "estimated_cost": 2500000,
      "issue_date": "2025-11-15"
    }
  ]
}

Response Fields

FieldTypeDescription
total_permitsintTotal number of permits in the radius.
total_valuefloatSum of estimated_cost across all permits.
by_typeobjectPermit count grouped by type.
permitsarrayUp to 10 most recent permit records.
GET/api/traffic

Real-time traffic flow data.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.

Example Request

curl "https://axiomlocus.io/api/traffic?lat=37.7749&lng=-122.4194"

Example Response

{
  "current_speed": 28,
  "free_flow_speed": 45,
  "congestion_ratio": 0.62,
  "congestion_level": "moderate",
  "road_category": "arterial"
}

Response Fields

FieldTypeDescription
current_speedintCurrent speed in mph.
free_flow_speedintFree-flow speed in mph (no traffic).
congestion_ratiofloatRatio of current to free-flow speed (0-1).
congestion_levelstringHuman-readable congestion level.
road_categorystringRoad type classification.
GET/api/jobs

Local job market data.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.

Example Request

curl "https://axiomlocus.io/api/jobs?lat=37.7749&lng=-122.4194"

Example Response

{
  "total_postings": 1243,
  "avg_salary": 95000,
  "top_categories": [
    { "name": "IT Jobs", "count": 412 },
    { "name": "Engineering", "count": 198 }
  ],
  "top_companies": [
    { "name": "Salesforce", "count": 87 },
    { "name": "Google", "count": 64 }
  ]
}

Response Fields

FieldTypeDescription
total_postingsintTotal active job postings near this location.
avg_salaryfloatAverage listed salary in USD.
top_categoriesarrayTop job categories by count.
top_companiesarrayTop hiring companies by posting count.
GET/api/cells

H3 heatmap cells for a metro area.

Parameters

NameTypeRequiredDefaultDescription
metrostringNosfMetro slug (e.g. sf, nyc, la, chi, mia, atx).

Example Request

curl "https://axiomlocus.io/api/cells?metro=sf"

Example Response

{
  "cells": [
    {
      "h3_index": "882a100d63fffff",
      "priority": 0.85,
      "center_lat": 37.7749,
      "center_lng": -122.4194
    }
  ]
}

Response Fields

FieldTypeDescription
cellsarrayArray of H3 hexagonal cells.
cells[].h3_indexstringH3 hex index at resolution 8.
cells[].priorityfloatPriority score for heatmap rendering (0-1).
cells[].center_latfloatLatitude of the hex center.
cells[].center_lngfloatLongitude of the hex center.
Data
GET/api/ports

Container and cargo volume data for US ports. Includes TEU throughput, year-over-year trends, and vessel calls.

Parameters

NameTypeRequiredDefaultDescription
port_slugstringYesPort slug (e.g. la-lb, savannah, houston, newark, oakland).
monthsintNo12Months of historical data.

Example Request

curl "https://axiomlocus.io/api/ports?port_slug=la-lb&months=6"

Example Response

{
  "port_slug": "la-lb",
  "port_name": "Port of Los Angeles / Long Beach",
  "latest_teu": 892000,
  "yoy_change_pct": 8.4,
  "monthly": [
    { "month": "2026-03", "teu": 892000, "vessel_calls": 142 },
    { "month": "2026-02", "teu": 845000, "vessel_calls": 138 },
    { "month": "2026-01", "teu": 801000, "vessel_calls": 131 }
  ]
}

Response Fields

FieldTypeDescription
latest_teuintMost recent month's TEU (twenty-foot equivalent unit) volume.
yoy_change_pctfloatYear-over-year percentage change.
monthlyarrayMonthly volume breakdown.
monthly[].vessel_callsintNumber of vessel arrivals that month.
GET/api/construction

Satellite-detected construction activity in a metro. Uses change detection on Sentinel-2 imagery to identify active sites.

Parameters

NameTypeRequiredDefaultDescription
metro_slugstringYesMetro slug.
daysintNo30Lookback window in days.
min_area_sqftintNo5000Minimum detected site area in sq ft.

Example Request

curl "https://axiomlocus.io/api/construction?metro_slug=austin&days=60"

Example Response

{
  "metro": "austin",
  "days": 60,
  "total_detections": 34,
  "detections": [
    {
      "h3_index": "882a107a0bfffff",
      "center_lat": 30.2672,
      "center_lng": -97.7431,
      "estimated_area_sqft": 45000,
      "confidence": 0.91,
      "first_detected": "2026-02-15",
      "last_detected": "2026-03-28",
      "nearest_permit_id": "P-2025-9876"
    }
  ]
}

Response Fields

FieldTypeDescription
total_detectionsintNumber of detected active construction sites.
detections[].estimated_area_sqftintEstimated site footprint in square feet.
detections[].confidencefloatDetection confidence score (0-1).
detections[].nearest_permit_idstringCross-referenced building permit if matched.
Discovery & Intelligence
GET/api/discover

Filter locations by score thresholds across all metros.

Parameters

NameTypeRequiredDefaultDescription
metrostringNoMetro slug filter.
compositeMinintNoMinimum composite score.
businessMinintNoMinimum Business Vitality.
safetyMinintNoMinimum Safety score.
limitintNo50Max results.

Example Request

curl "https://axiomlocus.io/api/discover?metro=sf&compositeMin=60&safetyMin=50"

Response

Returns ranked locations matching all filter criteria.

{ "total": 12, "results": [{ "h3_index": "...", "metro_slug": "sf", "location_name": "Mission District", "composite": 74 }] }

Response Fields

FieldTypeDescription
totalnumberNumber of matching locations
results[].compositenumberComposite score 0-100
results[].location_namestringNeighborhood name
GET/api/nearby

Everything we know near a location — permits, POIs, schools, clinical trials, FDA events, zoning.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.

Example Request

curl "https://axiomlocus.io/api/nearby?lat=37.7749&lng=-122.4194"

Response

Cross-source facility intelligence query.

{ "summary": { "permits": 45, "pois": 120, "schools": 3, "clinical_trials": 8 }, "recent": { ... } }

Response Fields

FieldTypeDescription
summaryobjectCount of records per data type within ~1km
recentobjectRecent records from each data type
GET/api/schools

Nearby school quality ratings (1-10 scale).

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.
radiusfloatNo2Radius in miles.
limitintNo10Max results.

Example Request

curl "https://axiomlocus.io/api/schools?lat=37.7749&lng=-122.4194&radius=1"

Response

Uses SchoolDigger when API key is set, falls back to NCES-derived scores.

{ "total": 5, "schools": [{ "name": "Lincoln Elementary", "rating": 8, "enrollment": 450 }] }

Response Fields

FieldTypeDescription
schools[].ratingnumberQuality score 1-10
schools[].enrollmentnumberStudent enrollment
GET/api/life-sciences

Clinical trials and FDA enforcement data by state or sponsor.

Parameters

NameTypeRequiredDefaultDescription
statestringNoUS state name.
sponsorstringNoSponsor name (partial match).
typestringNoallFilter: trials, fda, or all.
limitintNo50Max results.

Example Request

curl "https://axiomlocus.io/api/life-sciences?state=Massachusetts&type=trials&limit=10"

Response

Part of the life sciences vertical overlay.

{ "trials": { "total": 10, "data": [{ "nct_id": "NCT05754281", "sponsor": "Joslin Diabetes Center" }] } }

Response Fields

FieldTypeDescription
trials.data[].nct_idstringClinicalTrials.gov trial ID
trials.data[].sponsorstringLead sponsor organization
GET/api/zoning

Zoning district rules — allowed uses, height limits, FAR, setbacks.

Parameters

NameTypeRequiredDefaultDescription
metrostringYesMetro slug.
codestringNoSpecific district code.
categorystringNoFilter: residential, commercial, industrial, mixed_use.

Example Request

curl "https://axiomlocus.io/api/zoning?metro=denver&category=commercial"

Response

Requires zoning data to be loaded via the zoning AI parser.

{ "metro": "denver", "total": 8, "districts": [{ "district_code": "C-MX-5", "max_height_ft": 65, "max_far": 3.0 }] }

Response Fields

FieldTypeDescription
districts[].district_codestringZoning designation code
districts[].max_height_ftnumberMaximum building height in feet
districts[].max_farnumberFloor area ratio
GET/api/exportAuth Required

Export scored location data as CSV or JSON. Requires Pro or Team plan.

Parameters

NameTypeRequiredDefaultDescription
metrostringNoMetro slug filter.
formatstringNocsvcsv or json.
limitintNo1000Max rows (5000 max).

Example Request

curl "https://axiomlocus.io/api/export?metro=sf&format=csv" -H "X-API-Key: al_xxx"

Response

Returns a downloadable CSV file. Requires authenticated Pro/Team user.

h3_index,metro_slug,location_name,composite,...
88283082e7fffff,sf,Mission District,74,...
ML Exports
GET/api/exports/croissantAuth Required

ML-ready dataset metadata in Croissant (schema.org/Dataset) format for use with TensorFlow Datasets, Hugging Face, and other ML frameworks.

Parameters

NameTypeRequiredDefaultDescription
datasetstringYesDataset name: scores, permits, pois, crime, demographics.
metrostringNoMetro slug filter.

Example Request

curl "https://axiomlocus.io/api/exports/croissant?dataset=scores&metro=sf" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "axiom-locus-scores-sf",
  "description": "Location intelligence scores for San Francisco metro area",
  "license": "https://axiomlocus.io/terms",
  "distribution": [
    {
      "@type": "DataDownload",
      "encodingFormat": "application/jsonl",
      "contentUrl": "https://axiomlocus.io/api/exports/training-data?dataset=scores&metro=sf&format=jsonl"
    }
  ],
  "variableMeasured": [
    { "name": "composite", "description": "Overall score 0-100" },
    { "name": "businessVitality", "description": "Business vitality signal 0-100" }
  ]
}

Response Fields

FieldTypeDescription
@typestringAlways 'Dataset' (schema.org).
distributionarrayAvailable download formats and URLs.
variableMeasuredarrayFeature descriptions for ML consumption.
GET/api/exports/training-dataAuth Required

Download training data in JSONL or CSV format for ML pipelines. Each row is one H3 cell with all features.

Parameters

NameTypeRequiredDefaultDescription
datasetstringYesDataset name: scores, permits, pois, crime, demographics.
formatstringNojsonlOutput format: jsonl or csv.
metrostringNoMetro slug filter.
limitintNo10000Max rows (50,000 max for Team plan).
sincestringNoOnly records updated since this ISO date.

Example Request

curl "https://axiomlocus.io/api/exports/training-data?dataset=scores&format=jsonl&metro=sf&limit=1000" \
  -H "Authorization: Bearer al_your_key_here" -o training.jsonl

Response

Returns newline-delimited JSON (JSONL). Each line is one complete JSON object. Use -o to save to file.

{"h3_index": "882a100d63fffff","metro": "sf","composite": 76.2,"businessVitality": 82,"populationMomentum": 71,"demographics": 80,"economicStrength": 74,"developmentPipeline": 78,"accessibility": 69,"safety": 65,"amenity": 72}
{"h3_index": "882a100d65fffff","metro": "sf","composite": 71.8,"businessVitality": 75,"populationMomentum": 68,"demographics": 77,"economicStrength": 70,"developmentPipeline": 72,"accessibility": 65,"safety": 62,"amenity": 69}

Response Fields

FieldTypeDescription
h3_indexstringH3 cell identifier at resolution 8.
compositefloatOverall composite score.
[signal_group]floatIndividual signal group scores (8 total).
Monitoring
GET/api/monitorsAuth Required

List your monitored locations.

Example Request

curl "https://axiomlocus.io/api/monitors" \
  -H "Authorization: Bearer YOUR_TOKEN"

Example Response

{
  "monitors": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Mission District HQ",
      "lat": 37.7599,
      "lng": -122.4148,
      "created_at": "2025-12-01T08: 00: 00Z"
    }
  ]
}

Response Fields

FieldTypeDescription
monitorsarrayArray of monitored location objects.
monitors[].iduuidUnique monitor identifier.
monitors[].namestringUser-provided location name.
monitors[].latfloatLatitude.
monitors[].lngfloatLongitude.
POST/api/monitorsAuth Required

Add a new monitored location.

Request Body

FieldTypeRequiredDescription
namestringYesA name for this monitored location.
latfloatYesLatitude.
lngfloatYesLongitude.
{
  "name": "Mission District HQ",
  "lat": 37.7599,
  "lng": -122.4148
}

Example Request

curl -X POST "https://axiomlocus.io/api/monitors" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"name":"Mission District HQ","lat":37.7599,"lng":-122.4148}'

Example Response

{
  "monitor": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Mission District HQ",
    "lat": 37.7599,
    "lng": -122.4148,
    "user_id": "...",
    "created_at": "2025-12-01T08: 00: 00Z"
  }
}

Response Fields

FieldTypeDescription
monitorobjectThe newly created monitor object.
DELETE/api/monitorsAuth Required

Remove a monitored location.

Parameters

NameTypeRequiredDefaultDescription
iduuidYesThe monitor ID to delete.

Example Request

curl -X DELETE "https://axiomlocus.io/api/monitors?id=550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer YOUR_TOKEN"

Example Response

{
  "success": true
}

Response Fields

FieldTypeDescription
successbooleanWhether the deletion succeeded.
GET/api/alerts/historyAuth Required

View alert history for your monitored locations.

Example Request

curl "https://axiomlocus.io/api/alerts/history" \
  -H "Authorization: Bearer YOUR_TOKEN"

Example Response

{
  "alerts": [
    {
      "id": "a1b2c3d4",
      "monitor_id": "550e8400-...",
      "type": "score_change",
      "message": "Composite score dropped from 78 to 65",
      "created_at": "2025-12-15T14: 30: 00Z"
    }
  ]
}

Response Fields

FieldTypeDescription
alertsarrayArray of alert history objects.
alerts[].typestringAlert type (score_change, source_change, etc.).
alerts[].messagestringHuman-readable alert description.
Webhooks
POST/api/v1/webhooksAuth Required

Register a webhook to receive real-time notifications when scores change, new permits are filed, or monitored locations trigger alerts.

Request Body

FieldTypeRequiredDescription
urlstringYesHTTPS endpoint to receive webhook POST requests.
eventsarrayYesEvents to subscribe to: score.changed, permit.filed, alert.triggered, monitor.report.
secretstringNoSigning secret for HMAC-SHA256 payload verification.
{
  "url": "https://your-app.com/hooks/axiom",
  "events": ["score.changed", "permit.filed", "alert.triggered"],
  "secret": "whsec_your_signing_secret"
}

Example Request

curl -X POST "https://axiomlocus.io/api/v1/webhooks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{"url":"https://your-app.com/hooks/axiom","events":["score.changed","permit.filed"]}'

Example Response

{
  "webhook": {
    "id": "wh_abc123def456",
    "url": "https://your-app.com/hooks/axiom",
    "events": ["score.changed", "permit.filed"],
    "active": true,
    "created_at": "2026-03-31T12: 00: 00Z"
  }
}

Response Fields

FieldTypeDescription
webhook.idstringUnique webhook identifier (prefixed wh_).
webhook.eventsarraySubscribed event types.
webhook.activebooleanWhether the webhook is currently active.
GET/api/v1/webhooksAuth Required

List all registered webhooks for your account.

Example Request

curl "https://axiomlocus.io/api/v1/webhooks" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{
  "webhooks": [
    {
      "id": "wh_abc123def456",
      "url": "https://your-app.com/hooks/axiom",
      "events": ["score.changed", "permit.filed"],
      "active": true,
      "created_at": "2026-03-31T12: 00: 00Z",
      "last_delivery": "2026-03-31T14: 22: 00Z",
      "delivery_success_rate": 0.98
    }
  ]
}

Response Fields

FieldTypeDescription
webhooksarrayAll registered webhook objects.
webhooks[].delivery_success_ratefloatSuccess rate of recent deliveries (0-1).
webhooks[].last_deliverystringTimestamp of last delivery attempt.
DELETE/api/v1/webhooksAuth Required

Delete a webhook registration.

Parameters

NameTypeRequiredDefaultDescription
idstringYesWebhook ID (prefixed wh_).

Example Request

curl -X DELETE "https://axiomlocus.io/api/v1/webhooks?id=wh_abc123def456" \
  -H "Authorization: Bearer al_your_key_here"

Example Response

{ "success": true }

Response Fields

FieldTypeDescription
successbooleanWhether the webhook was successfully deleted.
Integrations
POST/api/v1/integrations/salesforceAuth Required

Push enriched location data to Salesforce CRM. Creates or updates custom objects with scores, permits, and demographics.

Request Body

FieldTypeRequiredDescription
actionstringYesAction: sync, test_connection, or list_objects.
object_typestringNoSalesforce custom object type.
recordsarrayNoArray of location records to sync (required for sync action).
{
  "action": "sync",
  "object_type": "Location__c",
  "records": [
    {
      "address": "123 Market St, San Francisco, CA",
      "lat": 37.7935,
      "lng": -122.3958
    }
  ]
}

Example Request

curl -X POST "https://axiomlocus.io/api/v1/integrations/salesforce" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{"action":"test_connection"}'

Response

Requires Salesforce OAuth connection configured in Settings.

{
  "connected": true,
  "org_id": "00D5f000000XXXX",
  "user": "sam@axiomlocus.io",
  "available_objects": ["Location__c", "Account", "Lead"]
}

Response Fields

FieldTypeDescription
connectedbooleanWhether the Salesforce connection is active.
org_idstringSalesforce org identifier.
POST/api/v1/keysAuth Required

Create and manage API keys programmatically. Keys are prefixed with al_ and can be scoped to specific endpoints.

Request Body

FieldTypeRequiredDescription
actionstringYesAction: create, list, or revoke.
namestringNoHuman-readable key name (required for create).
scopesarrayNoEndpoint scopes. Omit for full access.
key_idstringNoKey ID to revoke (required for revoke action).
{
  "action": "create",
  "name": "Production Key",
  "scopes": ["score", "enrich", "permits"]
}

Example Request

curl -X POST "https://axiomlocus.io/api/v1/keys" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer al_your_key_here" \
  -d '{"action":"create","name":"Production Key","scopes":["score","enrich"]}'

Response

The full token is only returned on creation. Store it securely.

{
  "key": {
    "id": "key_abc123",
    "name": "Production Key",
    "token": "al_live_abc123def456ghi789",
    "scopes": ["score", "enrich"],
    "created_at": "2026-03-31T12: 00: 00Z"
  }
}

Response Fields

FieldTypeDescription
key.idstringKey identifier for management operations.
key.tokenstringFull API key (only shown once on creation).
key.scopesarrayEndpoint scopes this key can access.
Reports
GET/api/reportAuth Required

Generate a branded PDF location report.

Parameters

NameTypeRequiredDefaultDescription
latfloatYesLatitude.
lngfloatYesLongitude.
namestringNoLocation ReportReport title / location name.
profilestringNogeneralScoring profile.
clientstringNoClientClient name for the report header.

Example Request

curl "https://axiomlocus.io/api/report?lat=37.7749&lng=-122.4194&name=Mission+District" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -o report.pdf

Response

Returns a PDF binary. Use -o to save to a file.

# Binary PDF response
Content-Type: application/pdf
Content-Disposition: attachment; filename="axiom-locus-report-mission-district.pdf"
GET/api/places-photo

Proxy for business photos.

Parameters

NameTypeRequiredDefaultDescription
refstringYesPhoto reference string from POI data.
wintNo100Image width in pixels.

Example Request

curl "https://axiomlocus.io/api/places-photo?ref=Aap_uE...&w=200" -o photo.jpg

Response

Returns a JPEG image binary.

# Binary JPEG response
Content-Type: image/jpeg
Interactive

Try It

Enter coordinates to see a live response from the scoring API. Rate limits apply.