ThinAir Geo
Server Details
Location & routing intelligence for AI agents — geocoding, truck routing, traffic, weather, and place search.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 78.2% over 77 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 19 tools
The set has many tools, but descriptions carefully distinguish overlapping functions: geocode vs geocode_structured (free-text vs fielded input), map_match vs trace_attributes (route line vs per-segment attributes), and explore vs search_places (region discovery vs category POI search). A few pairs (e.g. geocode and geocode_structured, or locate and reverse_geocode) could still be confused by an agent skimming descriptions, but the boundaries are mostly clear.
All tool names use consistent snake_case with no mixed casing or chaotic patterns. The only minor deviation is that some names are noun-only (directions, traffic, weather, isochrone, quota) while others follow verb_noun (geocode, reverse_geocode, search_places), but this is predictable and readable across the set.
With 19 tools covering geocoding, routing, place search, map matching, traffic, weather, account quota, and key handling, the count is slightly heavy but well within reason for a full-featured geospatial API. Each tool appears to earn its place, and there is no obvious redundancy that bloats the surface.
The surface covers the core geospatial lifecycle: forward/reverse/structured/batch geocoding, named intersections, POI search, routing, distance matrices, isochrones, map matching, trace attributes, road snapping, geofence containment, traffic, weather, and account/quota management. Minor gaps exist (e.g. no batch reverse geocoding, route optimization, or saved-place CRUD), but agents can work around them for most stated purposes.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
issue_api_key9 fields changed- removed
Output schema / properties / api_keyRemoved value: -{ - "description": "One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text. Save this key now. It is shown once. ThinAir authenticates using a hash of the key. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics.", - "type": "string" -} - added
Output schema / properties / console_urlAdded value: +{ + "description": "Link to the signed-in ThinAir Geo console, where the owner creates an API key and sees it once in their own browser. This tool never returns a key.", + "type": "string" +} - removed
Output schema / properties / credential_returned_onceRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / instructionsAdded value: +{ + "description": "How to create the key in the console and send it (Authorization: Bearer). Surface to the user as written.", + "type": "string" +} - removed
Output schema / properties / key_idRemoved value: -{ - "description": "Non-secret fingerprint of the issued key. Safe to log and surface in UI.", - "type": "string" -} - removed
Output schema / properties / previous_keys_retire_atRemoved value: -{ - "description": "ISO 8601 instant when the previous keys stop working (one hour after this mint). Present only when previous_keys_retiring > 0. Update anything still using them before this time.", - "type": "string" -} - removed
Output schema / properties / previous_keys_retiringRemoved value: -{ - "description": "How many previously-live keys this mint scheduled to retire. issue_api_key rotates: after the grace window the returned key is the only live key on the account. 0 means there was nothing else.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / usageRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / userRemoved value: -{ - "type": "string" -}
1 tool update
- Changed
issue_api_key1 field changed- changed
Output schema / properties / api_key / descriptionPrevious value: -"One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text — save it immediately. The server stores only sha-256 of the secret; once this response is lost, the key is unrecoverable and must be rotated. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics."New value: +"One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text. Save this key now. It is shown once. ThinAir authenticates using a hash of the key. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics."
1 tool update
- Changed
locate4 fields changed- changed
Output schema / properties / meta / additionalPropertiesPrevious value: -{}New value: +true - added
Output schema / properties / meta / propertiesAdded value: +{ + "degraded": { + "description": "Present and true only when `road_status` is `unavailable`: the road part of the answer is missing; the rest is real.", + "type": "boolean" + } +} - added
Output schema / properties / retryableAdded value: +{ + "description": "Present and true only when `road_status` is `unavailable`: the same call may succeed shortly.", + "type": "boolean" +} - added
Output schema / properties / road_statusAdded value: +{ + "description": "Why `road` is what it is. `matched`: a routable road was found. `no_road_nearby`: the lookup answered and found no routable road near the point for this travel profile. `unavailable`: the road lookup could not be answered right now; this says nothing about the point, `retryable` is true, and the timezone and any requested elevation are still looked up separately.", + "enum": [ + "matched", + "no_road_nearby", + "unavailable" + ], + "type": "string" +}
1 tool update
- Changed
reverse_geocode1 field changed- changed
Input schema / properties / size / descriptionPrevious value: -"Number of nearby candidates (default 3, max 40)"New value: +"Number of nearby candidates (default 5, max 40)"
1 tool update
- Changed
directions5 fields changed- changed
Output schema / properties / traffic_provenance / properties / freshness_seconds / descriptionPrevious value: -"Age, in seconds, of the oldest traffic observation behind this response. Null when the traffic provider did not report an observation age."New value: +"DEPRECATED since 2026-09-24, always null — same reason as `source_as_of`. See `retrieval_age_seconds` for the acquisition age ThinAir CAN report honestly. Will be removed in /v2." - changed
Output schema / properties / traffic_provenance / properties / outcome / descriptionPrevious value: -"Neutral, stable reason code for what happened to traffic evidence on this request. `TRAFFIC_DISABLED`: no traffic evidence was sought. `PROVIDER_DISABLED`: evidence was sought but the traffic backend was not configured. `QUOTA_EXHAUSTED`: the traffic backend's spend allotment was exhausted. `NO_SEGMENT_MATCH`: the backend answered but no sample matched a live road segment. `INSUFFICIENT_COVERAGE`: the backend reported no sensor coverage for the sampled area. `STALE_EVIDENCE`: an adjustment was computed, but the oldest observation behind it is older than this response is willing to call current. `UPSTREAM_ERROR`: a configured backend or network failure prevented reading all requested traffic evidence. `APPLIED`: an adjustment was computed and reached this response; inspect the nullable freshness and source-time fields to determine whether its observation age is known. Material failure codes take precedence over `APPLIED` when only partial evidence adjusted the duration; `duration_influenced` remains true in that case."New value: +"Neutral, stable reason code for what happened to traffic evidence on this request. `TRAFFIC_DISABLED`: no traffic evidence was sought. `PROVIDER_DISABLED`: evidence was sought but the traffic backend was not configured. `QUOTA_EXHAUSTED`: the traffic backend's spend allotment was exhausted. `NO_SEGMENT_MATCH`: the backend answered but no sample matched a live road segment. `INSUFFICIENT_COVERAGE`: the backend reported no sensor coverage for the sampled area. `STALE_EVIDENCE`: an adjustment was computed, but the evidence behind it was fetched more than 30 minutes ago because the provider could not refresh it. `UPSTREAM_ERROR`: a configured backend or network failure prevented reading all requested traffic evidence. `APPLIED`: an adjustment was computed and reached this response; inspect `retrieved_at` / `retrieval_age_seconds` to see how old the evidence behind it is (acquisition age — this traffic source reports no observation time, see those fields' own descriptions). Material failure codes take precedence over `APPLIED` when only partial evidence adjusted the duration; `duration_influenced` remains true in that case." - changed
Output schema / properties / traffic_provenance / properties / retrieval_age_seconds / descriptionPrevious value: -"Age, in seconds, of the oldest retrieved traffic tile bytes used by this response. This is cache/acquisition age, not traffic-observation freshness. Null for point traffic or when tile cache metadata is unavailable."New value: +"Age, in seconds, of `retrieved_at` — how long ago ThinAir fetched the traffic evidence behind this response (point or tile). This is acquisition/cache age, not traffic-observation freshness. Null under the same condition as `retrieved_at`." - changed
Output schema / properties / traffic_provenance / properties / retrieved_at / descriptionPrevious value: -"ISO 8601 time when the oldest traffic tile bytes used by this response were retrieved or cached. This is acquisition metadata, not the time the traffic was observed. Null for point traffic or when tile cache metadata is unavailable."New value: +"ISO 8601 time when ThinAir fetched the traffic evidence behind this response (point or tile). This is acquisition metadata, not the time the traffic was observed — the traffic source reports no observation time (see `source_as_of`). Null when no consulted sample's acquisition time was determinable." - changed
Output schema / properties / traffic_provenance / properties / source_as_of / descriptionPrevious value: -"ISO 8601 time at which the traffic observations behind this response were made. Null when the traffic provider did not report an observation time."New value: +"DEPRECATED since 2026-09-24, always null. The traffic source provides no observation timestamp, so this field can never be filled honestly. See `retrieved_at` for when ThinAir fetched the traffic evidence (not when it was observed). Will be removed in /v2."
2 tool updates
- Changed
map_match4 fields changed- added
Input schema / properties / breakage_distance_mAdded value: +{ + "description": "Maximum gap, in meters, between consecutive fixes before the trace is split into separate sections (100–20000). Increase for sparsely-reported GPS, such as fleet units reporting every several minutes on a highway. Optional — omitted uses the default.", + "maximum": 20000, + "minimum": 100, + "type": "integer" +} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -{}New value: +true - added
Output schema / properties / meta / propertiesAdded value: +{ + "breakage_distance_m": { + "description": "Echoes the breakage_distance_m the caller requested, for confirmation — present only when the caller set it. This is the value SENT to the matcher, not a claim about what it did with it.", + "type": "integer" + }, + "point_count": { + "type": "integer" + }, + "upstream_ms": { + "type": "number" + } +} - added
Output schema / properties / meta / requiredAdded value: +[ + "upstream_ms", + "point_count" +]
- Changed
trace_attributes4 fields changed- added
Input schema / properties / breakage_distance_mAdded value: +{ + "description": "Maximum gap, in meters, between consecutive fixes before the trace is split into separate sections (100–20000). Increase for sparsely-reported GPS, such as fleet units reporting every several minutes on a highway. Optional — omitted uses the default.", + "maximum": 20000, + "minimum": 100, + "type": "integer" +} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -{}New value: +true - added
Output schema / properties / meta / propertiesAdded value: +{ + "breakage_distance_m": { + "description": "Echoes the breakage_distance_m the caller requested, for confirmation — present only when the caller set it. This is the value SENT to the matcher, not a claim about what it did with it.", + "type": "integer" + }, + "point_count": { + "type": "integer" + }, + "upstream_ms": { + "type": "number" + } +} - added
Output schema / properties / meta / requiredAdded value: +[ + "upstream_ms", + "point_count" +]
2 tool updates
- Changed
distance_matrix2 fields changed- added
Output schema / properties / duration_basisAdded value: +{ + "const": "static_road_speeds", + "description": "How matrix durations were computed. `static_road_speeds` (the only value today): durations come from the road network's own speed data — posted limits and road-class defaults — never from historical or live traffic. Use `directions` for a traffic-adjusted ETA between two specific points.", + "type": "string" +} - added
Output schema / properties / traffic_appliedAdded value: +{ + "const": false, + "description": "Whether live or historical traffic influenced any matrix duration. Always false today — see `duration_basis`.", + "type": "boolean" +}
- Changed
map_match4 fields changed- changed
Output schema / properties / confidence / descriptionPrevious value: -"0–1: fraction of input GPS points within the snap tolerance of the matched route"New value: +"0–1: fraction of input GPS points within the snap tolerance of the matched route. A distance heuristic: it ignores point order and which parallel roadway was matched. For the matcher's own per-point result use `match_status` / `coverage`." - added
Output schema / properties / coverageAdded value: +{ + "additionalProperties": true, + "description": "Per-point coverage of the trace from the matcher's own per-point status — independent of the distance-based `confidence`. Every key is always present.", + "properties": { + "interpolated_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Input points the matcher placed on the road network by interpolating between matched neighbours; counted as covered. null when unavailable." + }, + "matched_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Input points the matcher placed on the road network directly. null when unavailable." + }, + "point_count": { + "description": "Number of input GPS points", + "type": "integer" + }, + "ratio": { + "description": "0–1: (matched_count + interpolated_count) / point_count, rounded down to 3 decimals so a partial trace never reads 1. null when unavailable.", + "type": [ + "number", + "null" + ] + }, + "route_sections": { + "description": "Number of disjoint sections the match broke into (1 = continuous). When greater than 1, the returned geometry, distance and duration cover only the FIRST section — split the trace at the break and match the parts separately.", + "type": "integer" + }, + "unavailable_reason": { + "anyOf": [ + { + "enum": [ + "upstream_error", + "timeout", + "no_point_status", + "point_count_mismatch", + "unknown_point_type" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Why the per-point counts and `match_status` are null: `upstream_error` (the per-point check failed), `timeout` (it did not answer in time), `no_point_status` (it answered without per-point results), `point_count_mismatch` (its results did not line up one-to-one with the input points), `unknown_point_type` (it reported a status this API does not recognise). null when coverage is available." + }, + "unmatched_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Input points the matcher could not place on the road network. null when unavailable." + }, + "unmatched_ranges": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "end_index": { + "description": "0-based index of the last unmatched input point in this run (inclusive)", + "type": "integer" + }, + "point_count": { + "description": "Number of input points in this run", + "type": "integer" + }, + "start_index": { + "description": "0-based index of the first unmatched input point in this run", + "type": "integer" + } + }, + "required": [ + "start_index", + "end_index", + "point_count" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Contiguous runs of unmatched input points, as 0-based inclusive index ranges into `shape`, in trace order. Empty when every point was covered; null when unavailable." + } + }, + "required": [ + "point_count", + "matched_count", + "interpolated_count", + "unmatched_count", + "ratio", + "unmatched_ranges", + "route_sections", + "unavailable_reason" + ], + "type": "object" +} - added
Output schema / properties / match_statusAdded value: +{ + "anyOf": [ + { + "enum": [ + "full", + "partial", + "none" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Whole-trace match status from the matcher's own per-point results. `full`: every input point was matched or interpolated onto the road network AND the match is one continuous section. `none`: no input point was matched or interpolated. `partial`: anything else — some points unmatched, or the match broke into more than one section. null when the per-point check could not be completed; `coverage.unavailable_reason` says why. Gate on this field, not on `matched`." +} - added
Output schema / properties / matched / descriptionAdded value: +"True when a route was returned for the trace. It does NOT mean the whole trace matched — use `match_status`."
1 tool update
- Changed
search_places8 fields changed- added
Input schema / properties / center / properties / lat / $refAdded value: +"#/properties/lat" - removed
Input schema / properties / center / properties / lat / maximumRemoved value: -90 - removed
Input schema / properties / center / properties / lat / minimumRemoved value: --90 - removed
Input schema / properties / center / properties / lat / typeRemoved value: -"number" - added
Input schema / properties / center / properties / lon / $refAdded value: +"#/properties/lon" - removed
Input schema / properties / center / properties / lon / maximumRemoved value: -180 - removed
Input schema / properties / center / properties / lon / minimumRemoved value: --180 - removed
Input schema / properties / center / properties / lon / typeRemoved value: -"number"
1 tool update
- Changed
weather1 field changed- added
Output schema / properties / alerts_errorAdded value: +{ + "type": "string" +}
4 tool updates
- Changed
geocode1 field changed- changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 read from the selected result's own postal-code field. While origin enforcement is active this field is emitted ONLY when the engine stamped the value as coming from the address record itself (`source_record` provenance); a value inherited from a parent area, or a result cached before that evidence existed, is omitted rather than emitted without provenance — so an absent ZIP under enforcement means \"not proven for this record\", not \"no such ZIP\". Provenance describes only WHERE the value came from. It is not a postal operator check of any kind — no certification, no address-quality rating, and no statement about whether mail would arrive — so a syntactically correct, correctly-sourced value can still be wrong for the address. Also omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
- Changed
geocode_structured1 field changed- changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 read from the selected result's own postal-code field. While origin enforcement is active this field is emitted ONLY when the engine stamped the value as coming from the address record itself (`source_record` provenance); a value inherited from a parent area, or a result cached before that evidence existed, is omitted rather than emitted without provenance — so an absent ZIP under enforcement means \"not proven for this record\", not \"no such ZIP\". Provenance describes only WHERE the value came from. It is not a postal operator check of any kind — no certification, no address-quality rating, and no statement about whether mail would arrive — so a syntactically correct, correctly-sourced value can still be wrong for the address. Also omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
- Changed
resolve_intersection1 field changed- changed
Output schema / properties / feature / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "address_components": { - "additionalProperties": false, - "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", - "properties": { - "country_code": { - "type": "string" - }, - "house_number": { - "type": "string" - }, - "locality": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "region_code": { - "type": "string" - }, - "region_name": { - "type": "string" - }, - "street": { - "type": "string" - }, - "unit": { - "type": "string" - } - }, - "type": "object" - }, - "address_evidence": { - "additionalProperties": false, - "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", - "properties": { - "house_number": { - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "locality": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "postal_code": { - "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "region": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "street": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - } - }, - "required": [ - "house_number", - "street", - "locality", - "region", - "postal_code" - ], - "type": "object" - }, - "address_line1": { - "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", - "type": "string" - }, - "address_line2": { - "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", - "type": "string" - }, - "confidence": { - "type": "number" - }, - "confidence_scope": { - "const": "query_to_candidate", - "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", - "type": "string" - }, - "cross_street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "cross_street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "formatted_address": { - "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", - "type": "string" - }, - "id": { - "type": "string" - }, - "intersection_precision": { - "enum": [ - "geometric_crossing", - "tangent_intersection", - "centroid_cluster", - "approximate" - ], - "type": "string" - }, - "intersection_type": { - "enum": [ - "corner", - "interchange" - ], - "type": "string" - }, - "label": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "layer": { - "type": "string" - }, - "lon": { - "type": "number" - }, - "method": { - "type": "string" - }, - "name": { - "type": "string" - }, - "place_type": { - "type": "string" - }, - "postal_code": { - "description": "An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", - "pattern": "^[0-9]{5}$", - "type": "string" - }, - "postal_input_match": { - "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", - "enum": [ - "match", - "conflict", - "unavailable" - ], - "type": "string" - }, - "street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "address_components": { + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "region_name": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "address_evidence": { + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" + }, + "address_line1": { + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" + }, + "address_line2": { + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" + }, + "confidence": { + "type": "number" + }, + "confidence_scope": { + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" + }, + "cross_street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "cross_street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "formatted_address": { + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" + }, + "id": { + "type": "string" + }, + "intersection_precision": { + "enum": [ + "geometric_crossing", + "tangent_intersection", + "centroid_cluster", + "approximate" + ], + "type": "string" + }, + "intersection_type": { + "enum": [ + "corner", + "interchange" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "layer": { + "type": "string" + }, + "lon": { + "type": "number" + }, + "method": { + "type": "string" + }, + "name": { + "type": "string" + }, + "place_type": { + "type": "string" + }, + "postal_code": { + "description": "An eligible US ZIP5 read from the selected result's own postal-code field. While origin enforcement is active this field is emitted ONLY when the engine stamped the value as coming from the address record itself (`source_record` provenance); a value inherited from a parent area, or a result cached before that evidence existed, is omitted rather than emitted without provenance — so an absent ZIP under enforcement means \"not proven for this record\", not \"no such ZIP\". Provenance describes only WHERE the value came from. It is not a postal operator check of any kind — no certification, no address-quality rating, and no statement about whether mail would arrive — so a syntactically correct, correctly-sourced value can still be wrong for the address. Also omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" + }, + "postal_input_match": { + "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", + "enum": [ + "match", + "conflict", + "unavailable" + ], + "type": "string" + }, + "street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
reverse_geocode1 field changed- changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 read from the selected result's own postal-code field. While origin enforcement is active this field is emitted ONLY when the engine stamped the value as coming from the address record itself (`source_record` provenance); a value inherited from a parent area, or a result cached before that evidence existed, is omitted rather than emitted without provenance — so an absent ZIP under enforcement means \"not proven for this record\", not \"no such ZIP\". Provenance describes only WHERE the value came from. It is not a postal operator check of any kind — no certification, no address-quality rating, and no statement about whether mail would arrive — so a syntactically correct, correctly-sourced value can still be wrong for the address. Also omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
4 tool updates
- Changed
geocode2 fields changed- added
Output schema / properties / items / items / properties / address_components / properties / region_nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / postal_input_matchAdded value: +{ + "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", + "enum": [ + "match", + "conflict", + "unavailable" + ], + "type": "string" +}
- Changed
geocode_structured2 fields changed- added
Output schema / properties / items / items / properties / address_components / properties / region_nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / postal_input_matchAdded value: +{ + "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", + "enum": [ + "match", + "conflict", + "unavailable" + ], + "type": "string" +}
- Changed
resolve_intersection1 field changed- changed
Output schema / properties / feature / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "address_components": { - "additionalProperties": false, - "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", - "properties": { - "country_code": { - "type": "string" - }, - "house_number": { - "type": "string" - }, - "locality": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "region_code": { - "type": "string" - }, - "street": { - "type": "string" - }, - "unit": { - "type": "string" - } - }, - "type": "object" - }, - "address_evidence": { - "additionalProperties": false, - "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", - "properties": { - "house_number": { - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "locality": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "postal_code": { - "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "region": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "street": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - } - }, - "required": [ - "house_number", - "street", - "locality", - "region", - "postal_code" - ], - "type": "object" - }, - "address_line1": { - "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", - "type": "string" - }, - "address_line2": { - "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", - "type": "string" - }, - "confidence": { - "type": "number" - }, - "confidence_scope": { - "const": "query_to_candidate", - "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", - "type": "string" - }, - "cross_street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "cross_street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "formatted_address": { - "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", - "type": "string" - }, - "id": { - "type": "string" - }, - "intersection_precision": { - "enum": [ - "geometric_crossing", - "tangent_intersection", - "centroid_cluster", - "approximate" - ], - "type": "string" - }, - "intersection_type": { - "enum": [ - "corner", - "interchange" - ], - "type": "string" - }, - "label": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "layer": { - "type": "string" - }, - "lon": { - "type": "number" - }, - "method": { - "type": "string" - }, - "name": { - "type": "string" - }, - "place_type": { - "type": "string" - }, - "postal_code": { - "description": "An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", - "pattern": "^[0-9]{5}$", - "type": "string" - }, - "street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "address_components": { + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "region_name": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "address_evidence": { + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" + }, + "address_line1": { + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" + }, + "address_line2": { + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" + }, + "confidence": { + "type": "number" + }, + "confidence_scope": { + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" + }, + "cross_street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "cross_street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "formatted_address": { + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" + }, + "id": { + "type": "string" + }, + "intersection_precision": { + "enum": [ + "geometric_crossing", + "tangent_intersection", + "centroid_cluster", + "approximate" + ], + "type": "string" + }, + "intersection_type": { + "enum": [ + "corner", + "interchange" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "layer": { + "type": "string" + }, + "lon": { + "type": "number" + }, + "method": { + "type": "string" + }, + "name": { + "type": "string" + }, + "place_type": { + "type": "string" + }, + "postal_code": { + "description": "An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" + }, + "postal_input_match": { + "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", + "enum": [ + "match", + "conflict", + "unavailable" + ], + "type": "string" + }, + "street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
reverse_geocode2 fields changed- added
Output schema / properties / items / items / properties / address_components / properties / region_nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / postal_input_matchAdded value: +{ + "description": "STRUCTURED GEOCODING ONLY (`geocode_structured` / `POST /v1/search/structured`); absent from free-text geocoding. Whether the postcode YOU SUBMITTED agrees with this candidate's own postcode — `match` (same five-digit value), `conflict` (they differ), `unavailable` (no comparison was possible). This compares two values already in hand: no lookup, no external reference, and your query text is never parsed to find one. `conflict` does NOT say which side is wrong — your input may name a neighbouring area, the candidate may be a near-miss, or the record's own value may be stale; treat it as a prompt to ask a human, never as a correction to apply automatically. The candidate side counts only when its postcode came from the address record itself; one inherited from a parent area yields `unavailable` rather than a misleading verdict. `unavailable` also covers: nothing submitted, a submitted value not readable as a US five-digit code, and results cached before this field existed.", + "enum": [ + "match", + "conflict", + "unavailable" + ], + "type": "string" +}
4 tool updates
- Changed
geocode5 fields changed- added
Output schema / properties / items / items / properties / address_componentsAdded value: +{ + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / items / items / properties / address_line1Added value: +{ + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" +} - added
Output schema / properties / items / items / properties / address_line2Added value: +{ + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" +} - added
Output schema / properties / items / items / properties / formatted_addressAdded value: +{ + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" +} - changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
- Changed
geocode_structured5 fields changed- added
Output schema / properties / items / items / properties / address_componentsAdded value: +{ + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / items / items / properties / address_line1Added value: +{ + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" +} - added
Output schema / properties / items / items / properties / address_line2Added value: +{ + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" +} - added
Output schema / properties / items / items / properties / formatted_addressAdded value: +{ + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" +} - changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
- Changed
resolve_intersection1 field changed- changed
Output schema / properties / feature / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "address_evidence": { - "additionalProperties": false, - "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", - "properties": { - "house_number": { - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "locality": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "postal_code": { - "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "region": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "street": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - } - }, - "required": [ - "house_number", - "street", - "locality", - "region", - "postal_code" - ], - "type": "object" - }, - "confidence": { - "type": "number" - }, - "confidence_scope": { - "const": "query_to_candidate", - "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", - "type": "string" - }, - "cross_street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "cross_street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "id": { - "type": "string" - }, - "intersection_precision": { - "enum": [ - "geometric_crossing", - "tangent_intersection", - "centroid_cluster", - "approximate" - ], - "type": "string" - }, - "intersection_type": { - "enum": [ - "corner", - "interchange" - ], - "type": "string" - }, - "label": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "layer": { - "type": "string" - }, - "lon": { - "type": "number" - }, - "method": { - "type": "string" - }, - "name": { - "type": "string" - }, - "place_type": { - "type": "string" - }, - "postal_code": { - "description": "Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", - "pattern": "^[0-9]{5}$", - "type": "string" - }, - "street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "address_components": { + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "address_evidence": { + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" + }, + "address_line1": { + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" + }, + "address_line2": { + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" + }, + "confidence": { + "type": "number" + }, + "confidence_scope": { + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" + }, + "cross_street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "cross_street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "formatted_address": { + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" + }, + "id": { + "type": "string" + }, + "intersection_precision": { + "enum": [ + "geometric_crossing", + "tangent_intersection", + "centroid_cluster", + "approximate" + ], + "type": "string" + }, + "intersection_type": { + "enum": [ + "corner", + "interchange" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "layer": { + "type": "string" + }, + "lon": { + "type": "number" + }, + "method": { + "type": "string" + }, + "name": { + "type": "string" + }, + "place_type": { + "type": "string" + }, + "postal_code": { + "description": "An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" + }, + "street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
reverse_geocode5 fields changed- added
Output schema / properties / items / items / properties / address_componentsAdded value: +{ + "additionalProperties": false, + "description": "The same US components the formatted string is built from. Every field is source-established or absent; nothing is inferred or back-filled.", + "properties": { + "country_code": { + "type": "string" + }, + "house_number": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region_code": { + "type": "string" + }, + "street": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / items / items / properties / address_line1Added value: +{ + "description": "House number and street for an eligible US address result, composed from the result's own components — never parsed from the display label. Absent when the result is not a US street address.", + "type": "string" +} - added
Output schema / properties / items / items / properties / address_line2Added value: +{ + "description": "Unit or suite, only when the source record carries one. A unit supplied in your request is never echoed back here.", + "type": "string" +} - added
Output schema / properties / items / items / properties / formatted_addressAdded value: +{ + "description": "Single-line US display form, e.g. `1600 Pennsylvania Avenue NW, Washington, DC 20500, USA`. The postal segment is present only when an eligible ZIP is; its absence never suppresses the street address.", + "type": "string" +} - changed
Output schema / properties / items / items / properties / postal_code / descriptionPrevious value: -"Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."New value: +"An eligible US ZIP5 normalized from the selected native result's available postal-code field; direct address-record origin is not yet guaranteed. Not checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied."
4 tool updates
- Changed
geocode1 field changed- added
Output schema / properties / items / items / properties / postal_codeAdded value: +{ + "description": "Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" +}
- Changed
geocode_structured1 field changed- added
Output schema / properties / items / items / properties / postal_codeAdded value: +{ + "description": "Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" +}
- Changed
resolve_intersection1 field changed- changed
Output schema / properties / feature / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "address_evidence": { - "additionalProperties": false, - "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", - "properties": { - "house_number": { - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "locality": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "postal_code": { - "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", - "enum": [ - "matched", - "partial", - "absent" - ], - "type": "string" - }, - "region": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - }, - "street": { - "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" - } - }, - "required": [ - "house_number", - "street", - "locality", - "region", - "postal_code" - ], - "type": "object" - }, - "confidence": { - "type": "number" - }, - "confidence_scope": { - "const": "query_to_candidate", - "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", - "type": "string" - }, - "cross_street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "cross_street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "id": { - "type": "string" - }, - "intersection_precision": { - "enum": [ - "geometric_crossing", - "tangent_intersection", - "centroid_cluster", - "approximate" - ], - "type": "string" - }, - "intersection_type": { - "enum": [ - "corner", - "interchange" - ], - "type": "string" - }, - "label": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "layer": { - "type": "string" - }, - "lon": { - "type": "number" - }, - "method": { - "type": "string" - }, - "name": { - "type": "string" - }, - "place_type": { - "type": "string" - }, - "street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "address_evidence": { + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" + }, + "confidence": { + "type": "number" + }, + "confidence_scope": { + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" + }, + "cross_street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "cross_street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "id": { + "type": "string" + }, + "intersection_precision": { + "enum": [ + "geometric_crossing", + "tangent_intersection", + "centroid_cluster", + "approximate" + ], + "type": "string" + }, + "intersection_type": { + "enum": [ + "corner", + "interchange" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "layer": { + "type": "string" + }, + "lon": { + "type": "number" + }, + "method": { + "type": "string" + }, + "name": { + "type": "string" + }, + "place_type": { + "type": "string" + }, + "postal_code": { + "description": "Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" + }, + "street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
reverse_geocode1 field changed- added
Output schema / properties / items / items / properties / postal_codeAdded value: +{ + "description": "Five-digit ZIP taken from the postcode supplied with this address record. It is reported by that record's own data source and has not been checked against any postal operator's records, so a syntactically correct value can still be wrong for the address. Omitted when unavailable or unsuitable for five-digit form. US address results only. Distinct from `address_evidence.postal_code`, which is a presence STATUS rather than a value. On reverse geocoding this describes the RETURNED ADDRESS — it is not a postal assignment to the coordinate you supplied.", + "pattern": "^[0-9]{5}$", + "type": "string" +}
4 tool updates
- Changed
geocode2 fields changed- added
Output schema / properties / items / items / properties / address_evidenceAdded value: +{ + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" +} - added
Output schema / properties / items / items / properties / confidence_scopeAdded value: +{ + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" +}
- Changed
geocode_structured2 fields changed- added
Output schema / properties / items / items / properties / address_evidenceAdded value: +{ + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" +} - added
Output schema / properties / items / items / properties / confidence_scopeAdded value: +{ + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" +}
- Changed
resolve_intersection1 field changed- changed
Output schema / properties / feature / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "confidence": { - "type": "number" - }, - "cross_street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "cross_street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "id": { - "type": "string" - }, - "intersection_precision": { - "enum": [ - "geometric_crossing", - "tangent_intersection", - "centroid_cluster", - "approximate" - ], - "type": "string" - }, - "intersection_type": { - "enum": [ - "corner", - "interchange" - ], - "type": "string" - }, - "label": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "layer": { - "type": "string" - }, - "lon": { - "type": "number" - }, - "method": { - "type": "string" - }, - "name": { - "type": "string" - }, - "place_type": { - "type": "string" - }, - "street_kind": { - "enum": [ - "street", - "route" - ], - "type": "string" - }, - "street_route": { - "maxLength": 128, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "address_evidence": { + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/feature/anyOf/0/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" + }, + "confidence": { + "type": "number" + }, + "confidence_scope": { + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" + }, + "cross_street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "cross_street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "id": { + "type": "string" + }, + "intersection_precision": { + "enum": [ + "geometric_crossing", + "tangent_intersection", + "centroid_cluster", + "approximate" + ], + "type": "string" + }, + "intersection_type": { + "enum": [ + "corner", + "interchange" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "layer": { + "type": "string" + }, + "lon": { + "type": "number" + }, + "method": { + "type": "string" + }, + "name": { + "type": "string" + }, + "place_type": { + "type": "string" + }, + "street_kind": { + "enum": [ + "street", + "route" + ], + "type": "string" + }, + "street_route": { + "maxLength": 128, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
reverse_geocode2 fields changed- added
Output schema / properties / items / items / properties / address_evidenceAdded value: +{ + "additionalProperties": false, + "description": "What THIS CANDIDATE carries, component by component — `matched` (a real value is present), `partial` (only a coarser or derived stand-in, e.g. an interpolated house number or a locality falling back to its administrative parent), `absent` (nothing). This describes the result, NOT a comparison against your query: the engine returns no per-component match data, and re-parsing your text here would mean two parsers disagreeing about the same string. Derived from the feature, never from `confidence`.", + "properties": { + "house_number": { + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "locality": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "postal_code": { + "description": "Whether the candidate carries a postal code. Presence only — this states what the result has, and makes no claim about its correctness.", + "enum": [ + "matched", + "partial", + "absent" + ], + "type": "string" + }, + "region": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + }, + "street": { + "$ref": "#/properties/items/items/properties/address_evidence/properties/house_number" + } + }, + "required": [ + "house_number", + "street", + "locality", + "region", + "postal_code" + ], + "type": "object" +} - added
Output schema / properties / items / items / properties / confidence_scopeAdded value: +{ + "const": "query_to_candidate", + "description": "What `confidence` is scoped to. `query_to_candidate` means it scores how well this candidate matches the submitted query — it is NOT a probability that the place is real, that the address is correct, or that mail would arrive. Fixed value today; treat it as a closed set that may gain members.", + "type": "string" +}
2 tool updates
- Changed
directions5 fields changed- added
Output schema / properties / timezone_artifact_versionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / timezone_end / descriptionAdded value: +"IANA timezone at the route destination, or null when unresolved. Contains information from timezone-boundary-builder, which is made available under the Open Database License (ODbL) v1.0. Timezone boundaries © OpenStreetMap contributors. US legal-zone cross-check: U.S. Department of Transportation, Bureau of Transportation Statistics (public domain)." - added
Output schema / properties / timezone_end_statusAdded value: +{ + "enum": [ + "resolved", + "boundary_ambiguous", + "source_conflict", + "not_covered", + "unavailable" + ], + "type": "string" +} - added
Output schema / properties / timezone_start / descriptionAdded value: +"IANA timezone at the route origin, or null when unresolved. Contains information from timezone-boundary-builder, which is made available under the Open Database License (ODbL) v1.0. Timezone boundaries © OpenStreetMap contributors. US legal-zone cross-check: U.S. Department of Transportation, Bureau of Transportation Statistics (public domain)." - added
Output schema / properties / timezone_start_statusAdded value: +{ + "enum": [ + "resolved", + "boundary_ambiguous", + "source_conflict", + "not_covered", + "unavailable" + ], + "type": "string" +}
- Changed
locate3 fields changed- added
Output schema / properties / timezone / descriptionAdded value: +"IANA timezone for the point, or null unless timezone_status is resolved. Contains information from timezone-boundary-builder, which is made available under the Open Database License (ODbL) v1.0. Timezone boundaries © OpenStreetMap contributors. US legal-zone cross-check: U.S. Department of Transportation, Bureau of Transportation Statistics (public domain)." - added
Output schema / properties / timezone_artifact_versionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / timezone_statusAdded value: +{ + "enum": [ + "resolved", + "boundary_ambiguous", + "source_conflict", + "not_covered", + "unavailable" + ], + "type": "string" +}
1 tool update
- Changed
search_places2 fields changed- changed
Input schema / properties / categories / descriptionPrevious value: -"Structured categories: food, fuel, charging_station, education, health, entertainment, retail, accommodation, nightlife, transport, government, recreation"New value: +"Structured categories: food, fuel, charging_station, education, health, entertainment, retail, accommodation, nightlife, transport, government, recreation. One of `categories` or `query` is required — a bare center (`lat`+`lon`/`center`) with neither is rejected." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text place query such as 'truck stop', 'restaurant', 'charging station'"New value: +"Free-text place query such as 'truck stop', 'restaurant', 'charging station'. One of `query` or `categories` is required — a bare center (`lat`+`lon`/`center`) with neither is rejected."
Publisher details
- Operator
- ThinAir Telematics, LLC · Publisher source
- Operator website
- https://geo.thinair.co
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://geo.thinair.co/developers
- Trust center
- Not available
- Restrictions
- Free tier available without a credit card. Paid plans add higher quotas and dedicated API keys. Authentication via OAuth 2.1 (keyless, no custom OAuth app required) or Bearer API key. No admin approval or allowlisting required. Global coverage, no regional restrictions. · Publisher source
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1618 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.