{"openapi":"3.1.0","info":{"title":"Geodesy API","version":"1.0.0","description":"Advanced geodesy beyond the simple great circle. The vincenty endpoint computes the distance between two latitude/longitude points on the WGS84 ellipsoid using Vincenty's inverse formula — accurate to within a millimetre, far better than the spherical approximation — plus the initial and final bearings, in metres, kilometres, miles and nautical miles. The rhumb endpoint computes the rhumb-line (loxodrome) distance and the single constant compass bearing that follows it — the path you steer by holding a heading, as used in marine and air navigation. The cross-track endpoint finds how far a point lies to the left or right of a great-circle path between two points (the cross-track distance) and how far along that path it is (the along-track distance). Everything is computed locally and deterministically, so it is instant and private. Ideal for marine and aviation navigation, surveying and GIS, route analysis, and precise mapping. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is advanced geodesy; for simple great-circle distance, bearing, midpoint and destination use a geo-distance API and for coordinate-format conversion use a geo-convert API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/geodesy-api","description":"oanor gateway"}],"tags":[{"name":"Geodesy"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/cross-track":{"get":{"operationId":"get_v1_cross_track","tags":["Geodesy"],"summary":"Cross-track / along-track","description":"","parameters":[{"name":"lat1","in":"query","required":true,"description":"Path start lat","schema":{"type":"string"},"example":"53.3206"},{"name":"lon1","in":"query","required":true,"description":"Path start lon","schema":{"type":"string"},"example":"-1.7297"},{"name":"lat2","in":"query","required":true,"description":"Path end lat","schema":{"type":"string"},"example":"53.1887"},{"name":"lon2","in":"query","required":true,"description":"Path end lon","schema":{"type":"string"},"example":"0.1334"},{"name":"lat3","in":"query","required":true,"description":"Point lat","schema":{"type":"string"},"example":"53.2611"},{"name":"lon3","in":"query","required":true,"description":"Point lon","schema":{"type":"string"},"example":"-0.7972"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"side":"left of path","point":[53.2611,-0.7972],"path_end":[53.1887,0.1334],"path_start":[53.3206,-1.7297],"along_track_distance_m":62331.579,"cross_track_distance_m":-307.55},"meta":{"timestamp":"2026-06-03T17:42:04.936Z","request_id":"8d79482f-e9ff-45e4-9a31-f47497df69bb"},"status":"ok","message":"Cross-track","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/rhumb":{"get":{"operationId":"get_v1_rhumb","tags":["Geodesy"],"summary":"Rhumb-line distance & bearing","description":"","parameters":[{"name":"lat1","in":"query","required":true,"description":"Latitude A","schema":{"type":"string"},"example":"51.127"},{"name":"lon1","in":"query","required":true,"description":"Longitude A","schema":{"type":"string"},"example":"1.338"},{"name":"lat2","in":"query","required":true,"description":"Latitude B","schema":{"type":"string"},"example":"50.964"},{"name":"lon2","in":"query","required":true,"description":"Longitude B","schema":{"type":"string"},"example":"1.853"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"path":"rhumb line (constant bearing / loxodrome)","point_a":[51.127,1.338],"point_b":[50.964,1.853],"distance_m":40307.8009,"bearing_deg":116.72186,"distance_km":40.3078009,"distance_nmi":21.7644713},"meta":{"timestamp":"2026-06-03T17:42:05.060Z","request_id":"d70c72ee-15ff-40d0-8312-7e207fefb156"},"status":"ok","message":"Rhumb line","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/vincenty":{"get":{"operationId":"get_v1_vincenty","tags":["Geodesy"],"summary":"Ellipsoidal (WGS84) distance","description":"","parameters":[{"name":"lat1","in":"query","required":true,"description":"Latitude A","schema":{"type":"string"},"example":"-37.9510"},{"name":"lon1","in":"query","required":true,"description":"Longitude A","schema":{"type":"string"},"example":"144.4249"},{"name":"lat2","in":"query","required":true,"description":"Latitude B","schema":{"type":"string"},"example":"-37.6528"},{"name":"lon2","in":"query","required":true,"description":"Longitude B","schema":{"type":"string"},"example":"143.9265"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"model":"WGS84 ellipsoid (Vincenty inverse)","point_a":[-37.951,144.4249],"point_b":[-37.6528,143.9265],"distance_m":54973.4069,"distance_km":54.9734069,"distance_mi":34.1588914,"distance_nmi":29.6832651,"final_bearing_deg":307.17097,"initial_bearing_deg":306.86548},"meta":{"timestamp":"2026-06-03T17:42:05.134Z","request_id":"5889444d-6ed8-411f-bedf-34b2981efe9b"},"status":"ok","message":"Vincenty distance","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Geodesy API","notes":"Vincenty uses the WGS84 ellipsoid; rhumb and cross-track use a spherical earth (R = 6371008.8 m). Bearings are degrees clockwise from north. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/vincenty","params":{"lat1":"","lat2":"","lon1":"","lon2":""},"returns":"the precise ellipsoidal distance and bearings"},{"path":"/v1/rhumb","params":{"lat1":"","lat2":"","lon1":"","lon2":""},"returns":"the rhumb-line distance and constant bearing"},{"path":"/v1/cross-track","params":{"lat1":"path start","lat2":"path end","lat3":"the point","lon1":"","lon2":"","lon3":""},"returns":"cross-track and along-track distance"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Advanced geodesy beyond the simple great circle. The vincenty endpoint computes the distance between two latitude/longitude points on the WGS84 ellipsoid using Vincenty's inverse formula — accurate to within a millimetre, far better than the spherical approximation — plus the initial and final bearings, in metres, kilometres, miles and nautical miles. The rhumb endpoint computes the rhumb-line (loxodrome) distance and the single constant compass bearing that follows it — the path you steer by holding a heading, as used in marine and air navigation. The cross-track endpoint finds how far a point lies to the left or right of a great-circle path between two points (the cross-track distance), and how far along that path it is (the along-track distance). Everything is computed locally and deterministically, so it is instant and private. Ideal for marine and aviation navigation, surveying and GIS, route analysis, and mapping. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is advanced geodesy; for simple great-circle distance, bearing, midpoint and destination use a geo-distance API and for coordinate-format conversion use a geo-convert API."},"meta":{"timestamp":"2026-06-03T17:42:05.228Z","request_id":"caf21f23-7a27-4ba2-9a56-a241a4f61238"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":8235,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":975,"monthly_call_quota":17750,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2965,"monthly_call_quota":228500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6765,"monthly_call_quota":1185000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/geodesy-api"}