{"openapi":"3.1.0","info":{"title":"Geo Calc","version":"1.0.0","description":"Coordinate math for agents: geohash, Plus Codes, UTM and MGRS, geodesics, bounding boxes, polygon area and coordinate formats. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Geo Calc: Coordinate math for agents: geohash, Plus Codes, UTM and MGRS, geodesics, bounding boxes, polygon area and coordinate formats. Use /geohash-encode, /geohash-decode and /geohash-neighbors for geohashes, /pluscode-encode and /pluscode-decode for Open Location Codes, /utm-mgrs and /utm-mgrs-reverse for grid coordinates, /geodesic-inverse for distance and bearing on the WGS84 ellipsoid, /geodesic-direct for a destination point, /bbox-radius for a search box, /polygon-area for area and centroid, and /coord-format to convert decimal degrees, DMS and degrees-decimal-minutes. Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://geo-calc.x402tookit.com"}],"paths":{"/bbox-radius":{"get":{"operationId":"bbox_radius","summary":"Bounding box (min/max latitude and longitude) enclosing a radius in meters around a point, with pole and 180 degree handling.","description":"Bounding box (min/max latitude and longitude) enclosing a radius in meters around a point, with pole and 180 degree handling.","tags":["bounding-box","geodesy","radius-search","coordinates"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Center latitude","schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Center longitude","schema":{"type":"number"}},{"name":"radiusM","in":"query","required":true,"description":"Radius in meters, 1 to 5,000,000","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"minLat":{"type":["null","number"]},"maxLat":{"type":["null","number"]},"minLon":{"type":["null","number"]},"maxLon":{"type":["null","number"]},"crossesAntimeridian":{"type":["boolean","null"]},"includesPole":{"type":["boolean","null"]},"spansAllLongitudes":{"type":["boolean","null"]},"radiusM":{"type":["null","number"]},"latitudeHalfHeightM":{"type":["null","number"]},"ellipsoid":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Box 40.667774 to 40.757825 N, -74.065172 to -73.946828 E.","reasons":["The extremes of the true geodesic circle on the ellipsoid were located numerically."],"minLat":40.6677744,"maxLat":40.75782525,"minLon":-74.06517207,"maxLon":-73.94682793,"crossesAntimeridian":false,"includesPole":false,"spansAllLongitudes":false,"radiusM":5000,"latitudeHalfHeightM":5000,"ellipsoid":"WGS84","degraded":false,"notChecked":["the box is a conservative pre-filter: points in its corners can be farther than the radius, so filter candidates by true distance afterwards","terrain or political boundaries"],"source":"Vincenty direct solution on WGS84 with extreme-point search, computed locally","asOf":"2026-10-11T08:41:05.446Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/bbox-radius"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/bbox-radius"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/bbox-radius"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/bbox-radius"}}]}}},"/coord-format":{"get":{"operationId":"coord_format","summary":"Convert a coordinate pair between decimal degrees, degrees-minutes-seconds and degrees-decimal-minutes.","description":"Convert a coordinate pair between decimal degrees, degrees-minutes-seconds and degrees-decimal-minutes.","tags":["coordinates","dms","decimal-degrees","converter"],"parameters":[{"name":"coord","in":"query","required":true,"description":"Any of: 40.7128, -74.0060 | 40°42'46\"N 74°0'21\"W | 40 42.767 N 74 0.35 W","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"valid":{"type":["boolean","null"]},"inputStyle":{"type":["null","string"]},"lat":{"type":["null","number"]},"lon":{"type":["null","number"]},"decimalDegrees":{"type":["null","string"]},"dms":{"type":["null","string"]},"ddm":{"type":["null","string"]},"latDms":{"type":["null","string"]},"lonDms":{"type":["null","string"]},"latDdm":{"type":["null","string"]},"lonDdm":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CONVERTED","summary":"40°42'46.08\"N 74°00'21.60\"W is 40.7128, -74.006 in decimal degrees.","reasons":["Input was read as dms.","Seconds are rounded to 0.01 and minutes to 0.0001 with carry into the next unit."],"valid":true,"inputStyle":"DMS","lat":40.7128,"lon":-74.006,"decimalDegrees":"40.7128, -74.006","dms":"40°42'46.08\"N 74°00'21.60\"W","ddm":"40°42.7680'N 74°00.3600'W","latDms":"40°42'46.08\"N","lonDms":"74°00'21.60\"W","latDdm":"40°42.7680'N","lonDdm":"74°00.3600'W","degraded":false,"notChecked":["datum (WGS84 is assumed, nothing is shifted)","UTM, MGRS and Plus Codes (see /utm-mgrs and /pluscode-encode)","…1 more"],"source":"Standard sexagesimal arithmetic, computed locally","asOf":"2026-10-11T08:41:05.710Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/coord-format"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/coord-format"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/coord-format"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/coord-format"}}]}}},"/geodesic-direct":{"get":{"operationId":"geodesic_direct","summary":"Destination latitude/longitude and final bearing from a start point, initial bearing and distance (WGS84, Vincenty).","description":"Destination latitude/longitude and final bearing from a start point, initial bearing and distance (WGS84, Vincenty).","tags":["geodesy","destination","bearing","vincenty"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Start latitude","schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Start longitude","schema":{"type":"number"}},{"name":"bearing","in":"query","required":true,"description":"Initial bearing in degrees clockwise from north, 0 to 360","schema":{"type":"number"}},{"name":"distanceM","in":"query","required":true,"description":"Distance in meters, 0 to 20,000,000","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"destinationLat":{"type":["null","number"]},"destinationLon":{"type":["null","number"]},"finalBearingDeg":{"type":["null","number"]},"sphericalDestinationLat":{"type":["null","number"]},"sphericalDestinationLon":{"type":["null","number"]},"sphericalOffsetM":{"type":["null","number"]},"ellipsoid":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Going 3000 km from (40.6413, -73.7781) on bearing 273.5 degrees ends at (36.9805976, -108.2248508), arriving on bearing 251.497.","reasons":["A spherical calculation (R = 6371008.8 m) ends 7245.1 m away from the ellipsoidal answer."],"destinationLat":36.980597588,"destinationLon":-108.224850786,"finalBearingDeg":251.497076,"sphericalDestinationLat":36.974004359,"sphericalDestinationLon":-108.305992255,"sphericalOffsetM":7245.054,"ellipsoid":"WGS84","degraded":false,"notChecked":["terrain, obstacles or water","the path is the geodesic: a constant compass heading (rhumb line) would end somewhere else","…1 more"],"source":"Vincenty (1975) direct formula on WGS84, computed locally","asOf":"2026-10-11T08:41:05.973Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-direct"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-direct"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-direct"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-direct"}}]}}},"/geodesic-inverse":{"get":{"operationId":"geodesic_inverse","summary":"Ellipsoidal (WGS84, Vincenty) distance and bearings between two points, compared with haversine on a sphere.","description":"Ellipsoidal (WGS84, Vincenty) distance and bearings between two points, compared with haversine on a sphere.","tags":["geodesy","distance","bearing","vincenty"],"parameters":[{"name":"lat1","in":"query","required":true,"description":"Start latitude","schema":{"type":"number"}},{"name":"lon1","in":"query","required":true,"description":"Start longitude","schema":{"type":"number"}},{"name":"lat2","in":"query","required":true,"description":"End latitude","schema":{"type":"number"}},{"name":"lon2","in":"query","required":true,"description":"End longitude","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"converged":{"type":["boolean","null"]},"ellipsoidalDistanceM":{"type":["null","number"]},"kilometers":{"type":["null","number"]},"miles":{"type":["null","number"]},"nauticalMiles":{"type":["null","number"]},"initialBearingDeg":{"type":["null","number"]},"finalBearingDeg":{"type":["null","number"]},"initialCompass":{"type":["null","string"]},"haversineDistanceM":{"type":["null","number"]},"haversineMinusEllipsoidalM":{"type":["null","number"]},"haversineInitialBearingDeg":{"type":["null","number"]},"ellipsoid":{"type":["null","string"]},"iterations":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"3983.08 km (2474.971 mi, 2150.691 nmi) on the WGS84 ellipsoid, initial bearing 273.887 degrees W.","reasons":["Haversine on a sphere differs by -8738.1 m (-0.219 percent).","Vincenty converged in 5 iteration(s)."],"converged":true,"ellipsoidalDistanceM":3983079.7485,"kilometers":3983.079748,"miles":2474.971012,"nauticalMiles":2150.691009,"initialBearingDeg":273.887299,"finalBearingDeg":245.908169,"initialCompass":"W","haversineDistanceM":3974341.69,"haversineMinusEllipsoidalM":-8738.059,"haversineInitialBearingDeg":273.841961,"ellipsoid":"WGS84","iterations":5,"degraded":false,"notChecked":["terrain, roads, flight paths or sea lanes (this is the shortest line on the ellipsoid surface)","elevation above the ellipsoid","…1 more"],"source":"Vincenty (1975) inverse formula on WGS84, computed locally","asOf":"2026-10-11T08:41:06.238Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-inverse"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-inverse"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-inverse"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geodesic-inverse"}}]}}},"/geohash-decode":{"get":{"operationId":"geohash_decode","summary":"Decode a geohash to its center latitude/longitude, bounding box and the plus-or-minus error in degrees.","description":"Decode a geohash to its center latitude/longitude, bounding box and the plus-or-minus error in degrees.","tags":["geohash","geocoding","coordinates"],"parameters":[{"name":"geohash","in":"query","required":true,"description":"Geohash, 1 to 12 characters of 0-9 b-z (no a, i, l, o)","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"geohash":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"lat":{"type":["null","number"]},"lon":{"type":["null","number"]},"latErrorDeg":{"type":["null","number"]},"lonErrorDeg":{"type":["null","number"]},"bounds":{"type":["null","object"],"properties":{"south":{"type":["null","number"]},"north":{"type":["null","number"]},"west":{"type":["null","number"]},"east":{"type":["null","number"]}}},"precision":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"DECODED","summary":"Geohash ezs42 is centered at (42.60498047, -5.60302734), plus or minus 0.02197265625 degrees latitude and 0.02197265625 degrees longitude.","reasons":["The center is the midpoint of the cell; the true point can be anywhere inside the bounds."],"geohash":"ezs42","valid":true,"lat":42.6049804688,"lon":-5.6030273437,"latErrorDeg":0.02197265625,"lonErrorDeg":0.02197265625,"bounds":{"south":42.5830078125,"north":42.626953125,"west":-5.625,"east":-5.5810546875},"precision":5,"degraded":false,"notChecked":["whether the cell contains anything of interest","geohashes longer than 12 characters are refused"],"source":"Geohash algorithm (G. Niemeyer, public domain), computed locally","asOf":"2026-10-11T08:41:06.499Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-decode"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-decode"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-decode"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-decode"}}]}}},"/geohash-encode":{"get":{"operationId":"geohash_encode","summary":"Encode latitude/longitude as a geohash (1 to 12 characters) with the cell bounds, center and size in meters.","description":"Encode latitude/longitude as a geohash (1 to 12 characters) with the cell bounds, center and size in meters.","tags":["geohash","geocoding","coordinates"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude in degrees, -90 to 90","schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude in degrees, -180 to 180","schema":{"type":"number"}},{"name":"precision","in":"query","required":false,"description":"Characters, 1 to 12 (default 9)","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"geohash":{"type":["null","string"]},"precision":{"type":["null","number"]},"centerLat":{"type":["null","number"]},"centerLon":{"type":["null","number"]},"bounds":{"type":["null","object"],"properties":{"south":{"type":["null","number"]},"north":{"type":["null","number"]},"west":{"type":["null","number"]},"east":{"type":["null","number"]}}},"cellHeightM":{"type":["null","number"]},"cellWidthM":{"type":["null","number"]},"latErrorDeg":{"type":["null","number"]},"lonErrorDeg":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ENCODED","summary":"(57.64911, 10.40744) is geohash u4pruydqqvj (11 characters), a cell about 0.1 m tall and 0.1 m wide.","reasons":["Bits alternate longitude, latitude, starting with longitude; 5 bits per base-32 character."],"geohash":"u4pruydqqvj","precision":11,"centerLat":57.64911063,"centerLon":10.407439694,"bounds":{"south":57.64910996,"north":57.649111301,"west":10.407439023,"east":10.407440364},"cellHeightM":0.149,"cellWidthM":0.08,"latErrorDeg":6.71e-7,"lonErrorDeg":6.71e-7,"degraded":false,"notChecked":["whether the point is on land or at a real address","neighbouring cells (see /geohash-neighbors)","…1 more"],"source":"Geohash algorithm (G. Niemeyer, public domain), computed locally","asOf":"2026-10-11T08:41:06.762Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-encode"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-encode"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-encode"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-encode"}}]}}},"/geohash-neighbors":{"get":{"operationId":"geohash_neighbors","summary":"The eight adjacent geohash cells (N, NE, E, SE, S, SW, W, NW) for a geohash, wrapping at 180 degrees longitude.","description":"The eight adjacent geohash cells (N, NE, E, SE, S, SW, W, NW) for a geohash, wrapping at 180 degrees longitude.","tags":["geohash","proximity","coordinates"],"parameters":[{"name":"geohash","in":"query","required":true,"description":"Geohash, 1 to 12 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"geohash":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"neighbors":{"type":["null","object"],"properties":{"n":{"type":["null","string"]},"ne":{"type":["null","string"]},"e":{"type":["null","string"]},"se":{"type":["null","string"]},"s":{"type":["null","string"]},"sw":{"type":["null","string"]},"w":{"type":["null","string"]},"nw":{"type":["null","string"]}}},"missingDirections":{"type":["array","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"NEIGHBORS","summary":"Geohash ezs42 has eight neighbours.","reasons":["A cell on the north or south edge of the world has no cell beyond the pole (returned as null).","East-west neighbours wrap across the 180 degree meridian."],"geohash":"ezs42","valid":true,"neighbors":{"n":"ezs48","ne":"ezs49","e":"ezs43","se":"ezs41","s":"ezs40","sw":"ezefp","w":"ezefr","nw":"ezefx"},"missingDirections":[],"degraded":false,"notChecked":["search radius coverage: a point near a cell edge can be closer to a neighbour's points than to its own cell's, so search the cell plus all eight neighbours"],"source":"Geohash algorithm (G. Niemeyer, public domain), computed locally","asOf":"2026-10-11T08:41:07.013Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-neighbors"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-neighbors"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-neighbors"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/geohash-neighbors"}}]}}},"/pluscode-decode":{"get":{"operationId":"pluscode_decode","summary":"Decode a Plus Code (Open Location Code) to its area and center; recovers short codes near a reference point.","description":"Decode a Plus Code (Open Location Code) to its area and center; recovers short codes near a reference point.","tags":["plus-code","olc","geocoding","coordinates"],"parameters":[{"name":"code","in":"query","required":true,"description":"Full code like 8FVC9G8F+6W or a short one like 9G8F+6W","schema":{"type":"string"}},{"name":"refLat","in":"query","required":false,"description":"Reference latitude, needed for short codes","schema":{"type":"number"}},{"name":"refLon","in":"query","required":false,"description":"Reference longitude, needed for short codes","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"code":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"short":{"type":["boolean","null"]},"fullCode":{"type":["null","string"]},"digits":{"type":["null","number"]},"bounds":{"type":["null","object"],"properties":{"south":{"type":["null","number"]},"north":{"type":["null","number"]},"west":{"type":["null","number"]},"east":{"type":["null","number"]}}},"centerLat":{"type":["null","number"]},"centerLon":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"DECODED","summary":"8FVC9G8F+6W covers 47.3655 to 47.365625 N and 8.52475 to 8.524875 E; center (47.3655625, 8.5248125).","reasons":["Full code decoded directly."],"code":"8FVC9G8F+6W","valid":true,"short":false,"fullCode":"8FVC9G8F+6W","digits":10,"bounds":{"south":47.3655,"north":47.365625,"west":8.52475,"east":8.524875},"centerLat":47.3655625,"centerLon":8.5248125,"degraded":false,"notChecked":["whether the place exists","a short code resolves to the match nearest the reference point, which may not be the place intended if the reference is far off (a 6 digit short code is only unique within about 40 km)"],"source":"Open Location Code specification (Google, Apache-2.0), computed locally","asOf":"2026-10-11T08:41:07.274Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-decode"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-decode"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-decode"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-decode"}}]}}},"/pluscode-encode":{"get":{"operationId":"pluscode_encode","summary":"Encode latitude/longitude as an Open Location Code (Plus Code) with its area bounds and a short local form.","description":"Encode latitude/longitude as an Open Location Code (Plus Code) with its area bounds and a short local form.","tags":["plus-code","olc","geocoding","coordinates"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude in degrees, -90 to 90","schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude in degrees, -180 to 180","schema":{"type":"number"}},{"name":"length","in":"query","required":false,"description":"Code digits: 2,4,6,8,10 (default),11,12,13,14,15","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"plusCode":{"type":["null","string"]},"length":{"type":["null","number"]},"shortCode":{"type":["null","string"]},"bounds":{"type":["null","object"],"properties":{"south":{"type":["null","number"]},"north":{"type":["null","number"]},"west":{"type":["null","number"]},"east":{"type":["null","number"]}}},"centerLat":{"type":["null","number"]},"centerLon":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ENCODED","summary":"(47.36559, 8.524997) is Plus Code 8FVC9G8F+6X, locally +6X.","reasons":["Digits come from the 20-character alphabet 23456789CFGHJMPQRVWX in latitude/longitude pairs; digits 11 to 15 refine a 4 by 5 grid."],"plusCode":"8FVC9G8F+6X","length":10,"shortCode":"+6X","bounds":{"south":47.3655,"north":47.365625,"west":8.524875,"east":8.525},"centerLat":47.3655625,"centerLon":8.5249375,"degraded":false,"notChecked":["whether the place has an address or a name","a 10 digit code is about 14 m by 14 m; the point can be anywhere inside the area"],"source":"Open Location Code specification (Google, Apache-2.0), computed locally","asOf":"2026-10-11T08:41:07.533Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-encode"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-encode"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-encode"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/pluscode-encode"}}]}}},"/polygon-area":{"get":{"operationId":"polygon_area","summary":"Area, perimeter and centroid of a lat,lon polygon using spherical excess on the WGS84 equal-area sphere.","description":"Area, perimeter and centroid of a lat,lon polygon using spherical excess on the WGS84 equal-area sphere.","tags":["polygon","area","centroid","geodesy"],"parameters":[{"name":"points","in":"query","required":true,"description":"Vertices as lat,lon;lat,lon;... (3 to 300, ring may or may not repeat the first point)","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"vertices":{"type":["null","number"]},"areaM2":{"type":["null","number"]},"areaKm2":{"type":["null","number"]},"areaHectares":{"type":["null","number"]},"areaAcres":{"type":["null","number"]},"perimeterM":{"type":["null","number"]},"perimeterKm":{"type":["null","number"]},"centroidLat":{"type":["null","number"]},"centroidLon":{"type":["null","number"]},"orientation":{"type":["null","string"]},"selfIntersecting":{"type":["boolean","null"]},"method":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"4 vertices enclose 490413.1235 km2 (121183721.966 acres) with perimeter 2875.862 km.","reasons":["Spherical area on the WGS84 authalic sphere; vertex order is counterclockwise."],"vertices":4,"areaM2":490413123530.02,"areaKm2":490413.12353,"areaHectares":49041312.353,"areaAcres":121183721.9664,"perimeterM":2875862.04,"perimeterKm":2875.86204,"centroidLat":37.57752478,"centroidLon":-95,"orientation":"COUNTERCLOCKWISE","selfIntersecting":false,"method":"spherical excess, WGS84 authalic sphere (not ellipsoidal)","valid":true,"degraded":false,"notChecked":["ellipsoidal geodesic area: this is a spherical (equal-area sphere, great-circle edges) area; against GeographicLib's ellipsoidal polygon area measured difference was 0.0009 percent for a 10 by 5 degre…","the polygon's holes or multiple rings","…2 more"],"source":"Spherical excess on the WGS84 authalic sphere (R = 6371007.1809 m), computed locally","asOf":"2026-10-11T08:41:07.797Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/polygon-area"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/polygon-area"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/polygon-area"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/polygon-area"}}]}}},"/utm-mgrs-reverse":{"get":{"operationId":"utm_mgrs_reverse","summary":"Convert a UTM (18T 585628 4511322) or MGRS (18TWL8562811322) reference to WGS84 latitude/longitude.","description":"Convert a UTM (18T 585628 4511322) or MGRS (18TWL8562811322) reference to WGS84 latitude/longitude.","tags":["utm","mgrs","coordinates","geodesy"],"parameters":[{"name":"code","in":"query","required":true,"description":"MGRS like 18TWL8562811322 or UTM like '18T 585628 4511322' (letter = latitude band)","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"input":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"lat":{"type":["null","number"]},"lon":{"type":["null","number"]},"zone":{"type":["null","number"]},"band":{"type":["null","string"]},"hemisphere":{"type":["null","string"]},"easting":{"type":["null","number"]},"northing":{"type":["null","number"]},"mgrs":{"type":["null","string"]},"cellSizeM":{"type":["null","number"]},"inBand":{"type":["boolean","null"]},"southWestLat":{"type":["null","number"]},"southWestLon":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CONVERTED","summary":"MGRS 18TWL8562811322 is a 1 m cell centered at (40.74840046, -73.98569892).","reasons":["The 2,000 km northing ambiguity of the row letter is resolved by the latitude band.","Cell size 1 m; the south-west corner is UTM 18T 585628 4511322."],"input":"18TWL8562811322","valid":true,"lat":40.748400463,"lon":-73.985698916,"zone":18,"band":"T","hemisphere":"N","easting":585628,"northing":4511322,"mgrs":"18TWL8562811322","cellSizeM":1,"inBand":true,"southWestLat":40.748396012,"southWestLon":-73.985704906,"degraded":false,"notChecked":["UPS polar references","datums other than WGS84","…2 more"],"source":"Kruger series to 6th order (Karney 2011), WGS84, with NGA MGRS lettering; computed locally","asOf":"2026-10-11T08:41:08.059Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs-reverse"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs-reverse"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs-reverse"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs-reverse"}}]}}},"/utm-mgrs":{"get":{"operationId":"utm_mgrs","summary":"Convert WGS84 latitude/longitude to UTM (zone, band, easting, northing) and MGRS, with Norway/Svalbard zone rules.","description":"Convert WGS84 latitude/longitude to UTM (zone, band, easting, northing) and MGRS, with Norway/Svalbard zone rules.","tags":["utm","mgrs","coordinates","geodesy"],"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude in degrees, -80 to 84 for UTM","schema":{"type":"number"}},{"name":"lon","in":"query","required":true,"description":"Longitude in degrees, -180 to 180","schema":{"type":"number"}},{"name":"digits","in":"query","required":false,"description":"MGRS digits per axis, 1 to 5 (default 5 = 1 m)","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"inRange":{"type":["boolean","null"]},"utm":{"type":["null","object"],"properties":{"zone":{"type":["null","number"]},"band":{"type":["null","string"]},"hemisphere":{"type":["null","string"]},"easting":{"type":["null","number"]},"northing":{"type":["null","number"]},"text":{"type":["null","string"]}}},"mgrs":{"type":["null","string"]},"mgrsGrid":{"type":["null","string"]},"mgrsDigitsPerAxis":{"type":["null","number"]},"mgrsCellSizeM":{"type":["null","number"]},"centralMeridianDeg":{"type":["null","number"]},"gridConvergenceDeg":{"type":["null","number"]},"scaleFactor":{"type":["null","number"]},"zoneException":{},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CONVERTED","summary":"(40.748433, -73.985656) is UTM 18T 585632.08 E 4511326.15 N, MGRS 18TWL8563211326.","reasons":["Standard 6 degree zone.","Grid convergence 0.66214 degrees, point scale factor 0.9996903."],"inRange":true,"utm":{"zone":18,"band":"T","hemisphere":"N","easting":585632.081,"northing":4511326.154,"text":"18T 585632 4511326"},"mgrs":"18TWL8563211326","mgrsGrid":"18T WL","mgrsDigitsPerAxis":5,"mgrsCellSizeM":1,"centralMeridianDeg":-75,"gridConvergenceDeg":0.662142,"scaleFactor":0.99969026,"zoneException":null,"degraded":false,"notChecked":["polar areas: north of 84 N and south of 80 S use UPS, which is not implemented","datums other than WGS84 (NAD83 differs by about 1 m in North America)","…1 more"],"source":"Kruger series to 6th order (Karney 2011), WGS84, with NGA MGRS lettering; computed locally","asOf":"2026-10-11T08:41:08.323Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://geo-calc.x402tookit.com/utm-mgrs"}}]}}}}}