Skip to main content
Glama

Server Details

Location & routing intelligence for AI agents — geocoding, truck routing, traffic, weather, and place search.

Ownership verified

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

A4.1/5.0

Scored across 19 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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. 1 tool update
    • Changedissue_api_key9 fields changed
      • removedOutput schema / properties / api_key
        Removed 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"
        -}
      • addedOutput schema / properties / console_url
        Added 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"
        +}
      • removedOutput schema / properties / credential_returned_once
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedOutput schema / properties / instructions
        Added value: +{
        +  "description": "How to create the key in the console and send it (Authorization: Bearer). Surface to the user as written.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / key_id
        Removed value: -{
        -  "description": "Non-secret fingerprint of the issued key. Safe to log and surface in UI.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / previous_keys_retire_at
        Removed 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"
        -}
      • removedOutput schema / properties / previous_keys_retiring
        Removed 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"
        -}
      • removedOutput schema / properties / usage
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / user
        Removed value: -{
        -  "type": "string"
        -}
  2. 1 tool update
    • Changedissue_api_key1 field changed
      • changedOutput schema / properties / api_key / description
        Previous 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."
  3. 1 tool update
    • Changedlocate4 fields changed
      • changedOutput schema / properties / meta / additionalProperties
        Previous value: -{}New value: +true
      • addedOutput schema / properties / meta / properties
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / retryable
        Added value: +{
        +  "description": "Present and true only when `road_status` is `unavailable`: the same call may succeed shortly.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / road_status
        Added 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"
        +}
  4. 1 tool update
    • Changedreverse_geocode1 field changed
      • changedInput schema / properties / size / description
        Previous value: -"Number of nearby candidates (default 3, max 40)"New value: +"Number of nearby candidates (default 5, max 40)"
  5. 1 tool update
    • Changeddirections5 fields changed
      • changedOutput schema / properties / traffic_provenance / properties / freshness_seconds / description
        Previous 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."
      • changedOutput schema / properties / traffic_provenance / properties / outcome / description
        Previous 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."
      • changedOutput schema / properties / traffic_provenance / properties / retrieval_age_seconds / description
        Previous 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`."
      • changedOutput schema / properties / traffic_provenance / properties / retrieved_at / description
        Previous 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."
      • changedOutput schema / properties / traffic_provenance / properties / source_as_of / description
        Previous 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."
  6. 2 tool updates
    • Changedmap_match4 fields changed
      • addedInput schema / properties / breakage_distance_m
        Added 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"
        +}
      • changedOutput schema / properties / meta / additionalProperties
        Previous value: -{}New value: +true
      • addedOutput schema / properties / meta / properties
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "upstream_ms",
        +  "point_count"
        +]
    • Changedtrace_attributes4 fields changed
      • addedInput schema / properties / breakage_distance_m
        Added 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"
        +}
      • changedOutput schema / properties / meta / additionalProperties
        Previous value: -{}New value: +true
      • addedOutput schema / properties / meta / properties
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "upstream_ms",
        +  "point_count"
        +]
  7. 2 tool updates
    • Changeddistance_matrix2 fields changed
      • addedOutput schema / properties / duration_basis
        Added 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"
        +}
      • addedOutput schema / properties / traffic_applied
        Added value: +{
        +  "const": false,
        +  "description": "Whether live or historical traffic influenced any matrix duration. Always false today — see `duration_basis`.",
        +  "type": "boolean"
        +}
    • Changedmap_match4 fields changed
      • changedOutput schema / properties / confidence / description
        Previous 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`."
      • addedOutput schema / properties / coverage
        Added 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"
        +}
      • addedOutput schema / properties / match_status
        Added 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`."
        +}
      • addedOutput schema / properties / matched / description
        Added value: +"True when a route was returned for the trace. It does NOT mean the whole trace matched — use `match_status`."
  8. 1 tool update
    • Changedsearch_places8 fields changed
      • addedInput schema / properties / center / properties / lat / $ref
        Added value: +"#/properties/lat"
      • removedInput schema / properties / center / properties / lat / maximum
        Removed value: -90
      • removedInput schema / properties / center / properties / lat / minimum
        Removed value: --90
      • removedInput schema / properties / center / properties / lat / type
        Removed value: -"number"
      • addedInput schema / properties / center / properties / lon / $ref
        Added value: +"#/properties/lon"
      • removedInput schema / properties / center / properties / lon / maximum
        Removed value: -180
      • removedInput schema / properties / center / properties / lon / minimum
        Removed value: --180
      • removedInput schema / properties / center / properties / lon / type
        Removed value: -"number"
  9. 1 tool update
    • Changedweather1 field changed
      • addedOutput schema / properties / alerts_error
        Added value: +{
        +  "type": "string"
        +}
  10. 4 tool updates
    • Changedgeocode1 field changed
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
    • Changedgeocode_structured1 field changed
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
    • Changedresolve_intersection1 field changed
      • changedOutput schema / properties / feature / anyOf
        Previous 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"
        +  }
        +]
    • Changedreverse_geocode1 field changed
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
  11. 4 tool updates
    • Changedgeocode2 fields changed
      • addedOutput schema / properties / items / items / properties / address_components / properties / region_name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / properties / postal_input_match
        Added 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"
        +}
    • Changedgeocode_structured2 fields changed
      • addedOutput schema / properties / items / items / properties / address_components / properties / region_name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / properties / postal_input_match
        Added 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"
        +}
    • Changedresolve_intersection1 field changed
      • changedOutput schema / properties / feature / anyOf
        Previous 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"
        +  }
        +]
    • Changedreverse_geocode2 fields changed
      • addedOutput schema / properties / items / items / properties / address_components / properties / region_name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / properties / postal_input_match
        Added 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"
        +}
  12. 4 tool updates
    • Changedgeocode5 fields changed
      • addedOutput schema / properties / items / items / properties / address_components
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line1
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line2
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / formatted_address
        Added 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"
        +}
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
    • Changedgeocode_structured5 fields changed
      • addedOutput schema / properties / items / items / properties / address_components
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line1
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line2
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / formatted_address
        Added 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"
        +}
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
    • Changedresolve_intersection1 field changed
      • changedOutput schema / properties / feature / anyOf
        Previous 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"
        +  }
        +]
    • Changedreverse_geocode5 fields changed
      • addedOutput schema / properties / items / items / properties / address_components
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line1
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / address_line2
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / formatted_address
        Added 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"
        +}
      • changedOutput schema / properties / items / items / properties / postal_code / description
        Previous 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."
  13. 4 tool updates
    • Changedgeocode1 field changed
      • addedOutput schema / properties / items / items / properties / postal_code
        Added 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"
        +}
    • Changedgeocode_structured1 field changed
      • addedOutput schema / properties / items / items / properties / postal_code
        Added 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"
        +}
    • Changedresolve_intersection1 field changed
      • changedOutput schema / properties / feature / anyOf
        Previous 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"
        +  }
        +]
    • Changedreverse_geocode1 field changed
      • addedOutput schema / properties / items / items / properties / postal_code
        Added 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"
        +}
  14. 4 tool updates
    • Changedgeocode2 fields changed
      • addedOutput schema / properties / items / items / properties / address_evidence
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / confidence_scope
        Added 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"
        +}
    • Changedgeocode_structured2 fields changed
      • addedOutput schema / properties / items / items / properties / address_evidence
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / confidence_scope
        Added 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"
        +}
    • Changedresolve_intersection1 field changed
      • changedOutput schema / properties / feature / anyOf
        Previous 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"
        +  }
        +]
    • Changedreverse_geocode2 fields changed
      • addedOutput schema / properties / items / items / properties / address_evidence
        Added 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"
        +}
      • addedOutput schema / properties / items / items / properties / confidence_scope
        Added 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"
        +}
  15. 2 tool updates
    • Changeddirections5 fields changed
      • addedOutput schema / properties / timezone_artifact_version
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / timezone_end / description
        Added 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)."
      • addedOutput schema / properties / timezone_end_status
        Added value: +{
        +  "enum": [
        +    "resolved",
        +    "boundary_ambiguous",
        +    "source_conflict",
        +    "not_covered",
        +    "unavailable"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / timezone_start / description
        Added 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)."
      • addedOutput schema / properties / timezone_start_status
        Added value: +{
        +  "enum": [
        +    "resolved",
        +    "boundary_ambiguous",
        +    "source_conflict",
        +    "not_covered",
        +    "unavailable"
        +  ],
        +  "type": "string"
        +}
    • Changedlocate3 fields changed
      • addedOutput schema / properties / timezone / description
        Added 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)."
      • addedOutput schema / properties / timezone_artifact_version
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / timezone_status
        Added value: +{
        +  "enum": [
        +    "resolved",
        +    "boundary_ambiguous",
        +    "source_conflict",
        +    "not_covered",
        +    "unavailable"
        +  ],
        +  "type": "string"
        +}
  16. 1 tool update
    • Changedsearch_places2 fields changed
      • changedInput schema / properties / categories / description
        Previous 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."
      • changedInput schema / properties / query / description
        Previous 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
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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    16
    18 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources