Before the first request
Create an API key and accept current terms as described in Authentication. Search and Enrich require the corresponding licensed credential grants. SetMIREYE_API_KEY in your environment; the examples
use curl, jq and uuidgen. Never put a credential in a URL or a shared response file.
On Free, a completed Search query costs $0.20, including a zero-match, limited or
partial result. Successful enrichment costs $0.02 per delivered parcel. The ceilings
below cover these rates; active-plan discounts can lower the charge. Read the
returned billing receipt and Pricing for the account’s rates.
Running all three requests below has a combined ceiling of $0.44. You can skip
the ordinary Search when choosing inline enrichment, or skip inline enrichment
when you only want to investigate one selected result separately.
Each new paid operation gets a new idempotency key. Keep that key and the exact
request body when recovering a lost response. The commands have no automatic
retry or pagination loop. Search and its inline enrichment share a 180-second
server budget; allow at least 210 seconds in the HTTP client or MCP host.
Choose names from the reference for the operation you are performing:
The Fetch catalog is not the complete Search or Enrich catalog. Search’s
apn
filter corresponds to the Enrich output parcelnumb; state corresponds to state2.
Preserve APN punctuation and leading zeros, and retain state/county context.
1. Find one candidate
Createsearch-request.json:
state or state2 selection:
eq with one two-letter code, or in with a nonempty list from the 50 states and
DC. A county, APN or polygon filter does not replace it. For example, an APN in
Maricopa County still needs state = AZ and county 04013; a polygon around Austin
still needs state = TX. GeoJSON positions use [longitude, latitude].
Generate a key once for this operation, then send the request:
analysis_point, and scalar
filter values under fields unless already represented at the top level. Here the
county FIPS is returned as fields.geoid, separately from the county name. Add public
Search or Enrich names in fields for other values at the same query price.
The first match found is not a ranked recommendation. limit: 1 bounds the
returned count, not the number of candidates that may need evaluation.
Inspect status and completion_reason before deciding what to do next:
completewithexhaustedmeans the loaded candidate set was exhausted, not that the source covers every real-world parcel.limitedmeans the page limit or an internal work ceiling stopped the search.partialmeans some work failed or timed out. Keep confirmed matches; an empty partial page does not prove that no qualifying parcels exist.
2. Optionally enrich the shortlist inline
For the complete current Enrich catalog on each returned parcel, createsearch-enriched-request.json:
fields: ["owner", "zoning"] instead.
enrich must be a JSON boolean. With enrich: true, the entire current Enrich
catalog is attempted regardless of fields. Basic fields selections never enable
per-parcel enrichment billing.
Inline enrichment reuses the exact selected parcel and its stored parcel lat/lon
without another lookup. Each match contains enriched_fields instead of fields;
read enriched_fields.owner.value, for example. Check overall status and
completion_reason, then preserve each compact field’s source, confidence, optional
unit and interpretation hints. The map can be sparse or empty even after a match.
Billing uses internal outcomes: at least one successful or valid no-data field counts
as one delivered enrichment, including partial work; invalid or all-failed enrichment
incurs no Enrich unit. No matches means no enrichment units. The public map’s size
cannot determine the charge.
3. Optionally investigate one selected parcel separately
Standalone Enrich accepts exactly one locator: an address or bothlat and
lng. It does not accept an APN or parcel ID as a locator. After reviewing the
one candidate in search-result.json, copy its actual analysis_point coordinates
into a small request. The following command refuses to continue without a usable
point and sends only lat and lng, not Search’s method property:
parcel_match.status first. Only matched returns fields; ambiguous,
no_match and unavailable return an empty fields map. Do not choose an ambiguous
candidate automatically. Review parcel_match.parcel, parcelnumb, state2 and
geoid against the selected Search result’s APN, address, state/county and source.
Keep the two responses separate until the identity is resolved.
Basic Search can explicitly request supported identifiers such as ll_uuid,
but an identifier is not a standalone Enrich locator. Compare returned authoritative
identifiers when available. Matching APNs or nearby coordinates alone cannot prove
that both calls selected the same parcel. APNs can repeat across jurisdictions. Inline enrichment avoids
this second-match uncertainty when the goal is to enrich the Search match itself.
Standalone Enrich samples the matched parcel’s stored centroid when available,
otherwise the input point (stored_parcel_centroid / input_fallback). Search
uses the unchanged stored parcel lat/lon with method parcel_stored_lat_lon, even
when that point is outside the polygon, so point-based values can differ even for
the same parcel. Search skips candidates with invalid stored coordinates and marks
the response partial. A point sample does not describe the whole boundary;
only fields explicitly defined as parcel calculations do that.
Read returned values without losing their meaning
Enrich fields form a flat map in Enrich preset order; shared fields appear once, followed by fields outside presets in catalog order. Preserve the returned order when presenting or exporting a complete result. Standalone Enrich,mireye_enrich, and Search enriched_fields use the same sparse
field projection. Each returned field
contains value, source, confidence, and interpretation_hints, plus unit
only when defined. Keep false and zero values. Failed fields are omitted, as are
null-valued fields outside a temporary 33-field allowlist. A retained null can
still mean a missing source attribute; do not assume it establishes absence.
Even a matched parcel can legitimately return fields: {}.
Standalone Enrich omits field source_url metadata, timestamps, vintage, TTL, notes,
field status, lifecycle and failure metadata, as well as top-level fetched_at
and partial_failures. Parcel identity, geocode quality, the analysis point,
parcel_match.status and billing remain available.
Search removes per-match field_status, enrichment, enrichment_status and
enrichment_error; it keeps one outer billing receipt and overall completion status.
Basic mode retains selected null values in fields. Full enrichment applies the
compact omission policy to enriched_fields. Neither a missing enriched key nor a
basic null is evidence of a negative finding. Fetch and Ask contracts are unchanged.
Standalone Enrich can combine fields with one preset by union. Omitting or
nulling both requests all 546 fields; an empty standalone fields list is invalid.
Enrich has no 50-field cap. This differs from both Search’s empty-list behavior
and Fetch’s explicit-field limit.
Continue or recover deliberately
Only request another page when more results are needed andnext_cursor is
non-null. Copy it as cursor while keeping filters, fields and enrich unchanged.
limit may change within 1–100. Each page is a new paid query with a new key and
its own cost ceiling. Cursors expire after one hour; changing enrichment mode or
selected fields requires restarting without the cursor.
A disconnected client does not cancel owned paid execution. Work keeps its
existing deadline, and saved results remain subject to current authorization,
dataset permissions and retention. Recovery does not add missing data or charge
again. Follow Errors for
capacity, authorization and recovery details.
Use the same workflow through hosted MCP
Connect through hosted MCP. Send the same Search or Enrich body insidereq, with idempotency_key as its sibling. For example:
mireye_search with this object. Use a unique key for new work and preserve
it for recovery; the displayed placeholder is not a reusable key for unrelated
queries. mireye_enrich uses the same wrapper for its locator and field selection.
The hosted client must allow at least 210 seconds for Search. OAuth credentials
belong to the MCP connection; do not substitute them for an HTTP API key.