Skip to main content
An AI agent knows the internet. It does not know the ground. Ask a frontier model how much power it can get at a specific parcel, what the county will let you build there, or whether the wetland on the north edge kills the site, and it will estimate. Mireye answers — from the authoritative record, with the source, the URL, the fetch timestamp, and a confidence bucket attached to every value. That is the whole company: the infrastructure layer agents call when the question is about a real place.

Four things behind one API

Mireye is not a map, a GIS tool, or a data reseller. Four distinct capabilities ship behind the same auth, the same catalog, and the same provenance model.

Data

Free public facts at a location. Public agencies (USGS, NOAA, EPA, EIA), transparent open data (OpenStreetMap/OpenInfraMap, Overture), and licensed parcel sources — normalized to one schema. POST /v1/fetch

Enrichment

Resolve one parcel from an address or coordinate, then return its selected attributes and calculations with field-level provenance. POST /v1/enrich

Tools

Computation over locations, not lookups at one: drive-time matrices, nearest-candidate search, proximity screens, labor sheds. POST /v1/proximity

Coverage on demand

The catalog is not fixed. Ask for a field that doesn’t exist and a genuine gap becomes a queued build that lands for every caller after you. POST /v1/field-requests
For natural-language questions, POST /v1/ask selects fields from the Fetch catalog, fetches them in parallel, and writes an answer with inline citations. The MCP server exposes dedicated tools for Search, Enrich, Fetch, questions, proximity calculations, and coverage requests to Claude, Cursor, and custom agents.

The catalog is mostly infrastructure

These counts track the catalog build in this repository. The deployed API is the authoritative list — read it from GET /v1/meta/fields, which is public and unauthenticated.
  • Fields: 315 across 7 layers (terrain, land cover, built environment, utilities, parcels, climate, hazards). Full catalog at GET /v1/meta/fields.
  • Presets: 15 use-case bundles (terrain, flood_risk, wildfire_underwrite, land_cover, site_selection, building_lookup, points_of_interest, utilities, boundaries, solar_siting, wind_siting, storage_siting, data_center_siting, grid_interconnect, natural_hazard).
The largest layer is not maps. It is utilities and grid — substations, transmission voltage class, interconnection context, water service areas, wastewater plant capacity, fiber. That is the layer that decides whether something can actually get built, and it is the layer nobody had normalized. Check the split yourself — the catalog endpoint is public, no token:

What we won’t do

No black-box scores

No proprietary risk score, no “AI-derived” number dressed as data. Every value traces to a record you can re-fetch and verify.

Absence is an answer

Where the record doesn’t exist, you get absent with the reason — not a plausible guess. Source failures surface in partial_failures with a retryable flag.
An agent that gets a confident wrong number about a place makes a worse decision than an agent that gets told the data isn’t there. We optimize for the second.

Coverage

/v1/ask, /v1/fetch, and their MCP tools are United States only. Primary bounds are lat ∈ [18, 72], lng ∈ [-180, -65]; the Western Aleutians additionally accept lat ∈ [51, 54], lng ∈ [172, 180). Out-of-bounds requests return 400 coord_out_of_bounds. Drive-time tools in /v1/proximity additionally cover Canada; other endpoint pages document their own locator coverage.

Start here

Quickstart

First cited answer in five minutes. curl and jq, no SDK.

MCP install

One command to give Claude Code or Cursor the physical world.

Pricing in dollars

What each call costs, and how to quote a job before you run it.

API reference

Every endpoint, with try-it panels.

Find parcels by requirements

POST /v1/search finds the first parcels meeting all supplied stored parcel and Fetch filters. Include a state or state2 filter with eq for one two-letter US state code or in for a nonempty list (50 states and DC); ne alone is insufficient. Acreage, county, situs city, and a polygon can further narrow the search. Check status and completion_reason to distinguish an exhausted search from one stopped by a result limit, work limit, timeout, or failure. Each response includes next_cursor to continue when more parcels are known; page size defaults to 10 and can be set from 1 to 100 on every request. Continue with the same filters, fields and enrichment mode; cursors expire after one hour. Each page is a separate paid Search operation. Reuse that page’s idempotency key for retries. Basic Search returns scalar filter values plus explicitly requested public Search or Enrich extras in fields, excluding duplicate top-level identity values. Extras are included in the query price. Set enrich: true to attempt the complete current Enrich catalog regardless of fields, returning compact enriched_fields instead. Both modes reuse the selected parcel’s stored parcel lat/lon unchanged. On Free, Search costs $0.20 per query plus $0.02 per successfully enriched delivered parcel when full enrichment is enabled; paid-plan discounts apply. Both modes share the 180-second Search budget; allow at least 210 seconds on the client. See Search for examples, dollar ceilings, failures and pagination. Use POST /v1/enrich to investigate a shortlisted parcel separately. Pass its address or stored analysis_point, select a few fields or a preset, then confirm parcel_match.parcel identifies the intended property. Search and Enrich have their own Search field reference and Enrich field reference; /v1/meta/fields describes the Fetch catalog.