{"openapi":"3.1.0","info":{"title":"Highway Horizontal Curve API","version":"1.0.0","description":"Horizontal road-curve geometry as an API, computed locally and deterministically — the curve-element, stationing and design-radius numbers a highway engineer, surveyor or civil-design tool lays out a road or railway curve with. The geometry endpoint takes the radius and the intersection (deflection) angle and returns the full simple circular curve: the tangent T = R·tan(Δ/2), the curve length L = R·Δ in radians, the long chord LC = 2R·sin(Δ/2), the middle ordinate M = R(1−cos(Δ/2)) and the external distance E = R(sec(Δ/2)−1), plus the degree of curve (arc definition) = 5729.578 ÷ R, the US shorthand for sharpness. The stations endpoint lays the curve out from the PI: the PC (point of curvature) = PI − tangent and the PT (point of tangency) = PC + curve length — and it reminds you the PT is reached along the arc, not by adding the tangent again. The min-radius endpoint gives the minimum radius for a design speed (AASHTO) R = V² ÷ (15·(e + f)), where e is the superelevation and f the side-friction factor, the banking-plus-grip that holds a vehicle in the turn. Everything is computed locally and deterministically, so it is instant and private. Ideal for highway- and rail-design tools, surveying and civil-engineering utilities, and CAD/GIS road layout. Pure local computation — no key, no third-party service, instant. US units (ft, mph). 3 compute endpoints. For slope and grade use a slope API; for open-channel drainage a Manning API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/horizontalcurve-api","description":"oanor gateway"}],"tags":[{"name":"Curve"},{"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/geometry":{"get":{"operationId":"get_v1_geometry","tags":["Curve"],"summary":"Curve elements from radius and angle","description":"","parameters":[{"name":"radius_ft","in":"query","required":true,"description":"Curve radius (ft)","schema":{"type":"string"},"example":"500"},{"name":"deflection_angle_deg","in":"query","required":true,"description":"Intersection/deflection angle (deg)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"A simple circular curve from the radius R and the intersection (deflection) angle Δ: tangent T = R·tan(Δ/2), curve length L = R·Δ (radians), long chord LC = 2R·sin(Δ/2), middle ordinate M = R(1−cos(Δ/2)) and external E = R(sec(Δ/2)−1). The degree of curve (arc definition) = 5729.578 ÷ R is the US highway shorthand for sharpness — a bigger radius is a flatter, faster curve.","inputs":{"radius_ft":500,"deflection_angle_deg":30},"long_chord_ft":258.819,"curve_length_ft":261.799,"tangent_length_ft":133.975,"middle_ordinate_ft":17.037,"degree_of_curve_deg":11.4592,"external_distance_ft":17.638},"meta":{"timestamp":"2026-06-07T08:18:03.268Z","request_id":"0177095d-f7d3-4f26-a37f-7b71e92db5e2"},"status":"ok","message":"Curve geometry","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/min-radius":{"get":{"operationId":"get_v1_min_radius","tags":["Curve"],"summary":"Minimum radius for a design speed","description":"","parameters":[{"name":"design_speed_mph","in":"query","required":true,"description":"Design speed (mph)","schema":{"type":"string"},"example":"60"},{"name":"superelevation","in":"query","required":false,"description":"Superelevation e (ft/ft, default 0.08)","schema":{"type":"string"},"example":"0.08"},{"name":"side_friction","in":"query","required":false,"description":"Side-friction factor f (default 0.12)","schema":{"type":"string"},"example":"0.12"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The minimum curve radius for a design speed (AASHTO) R = V² ÷ (15·(e + f)), where e is the superelevation (road banking, up to ~0.08–0.12) and f the maximum side-friction factor the tyres can use (falls with speed, ~0.10–0.16). Banking and friction together hold the car in the turn against the centripetal demand — a sharper curve than this needs a slower speed or more bank. Metric form uses 127 instead of 15.","inputs":{"side_friction":0.12,"superelevation":0.08,"design_speed_mph":60},"min_radius_ft":1200,"degree_of_curve_max_deg":4.7746},"meta":{"timestamp":"2026-06-07T08:18:03.369Z","request_id":"fb609266-77de-46eb-b620-ba03307d7e4e"},"status":"ok","message":"Min radius","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/stations":{"get":{"operationId":"get_v1_stations","tags":["Curve"],"summary":"PC and PT stations from the PI","description":"","parameters":[{"name":"pi_station_ft","in":"query","required":true,"description":"PI station (ft)","schema":{"type":"string"},"example":"1000"},{"name":"radius_ft","in":"query","required":true,"description":"Curve radius (ft)","schema":{"type":"string"},"example":"500"},{"name":"deflection_angle_deg","in":"query","required":true,"description":"Intersection/deflection angle (deg)","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The curve is laid out from the PI (point of intersection of the two tangents): the PC (point of curvature, where the curve begins) = PI − tangent, and the PT (point of tangency, where it ends) = PC + curve length. Note the PT is NOT PI + tangent — you travel the longer arc, not the two straight tangents, so chaining station equations along a road must follow the curve length.","inputs":{"radius_ft":500,"pi_station_ft":1000,"deflection_angle_deg":30},"pc_station_ft":866.025,"pt_station_ft":1127.825,"curve_length_ft":261.799,"tangent_length_ft":133.975},"meta":{"timestamp":"2026-06-07T08:18:03.468Z","request_id":"d1869c23-d0ad-40e1-ad91-5a172f232c87"},"status":"ok","message":"Stations","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":{"notes":"US units (ft, mph, deg). T = R·tan(Δ/2); L = R·Δ(rad); LC = 2R·sin(Δ/2); M = R(1−cos(Δ/2)); E = R(sec(Δ/2)−1); degree of curve = 5729.578/R; R_min = V²/(15(e+f)). For slope/grade conversion use a slope API; for open-channel flow a Manning API.","service":"horizontalcurve-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/geometry":"Tangent, length, chord, ordinates and degree of curve.","GET /v1/stations":"PC and PT stations from the PI station.","GET /v1/min-radius":"Minimum radius for a design speed (AASHTO)."},"description":"Horizontal road-curve geometry: curve elements from radius and angle, PC/PT stationing, and minimum radius for a design speed."},"meta":{"timestamp":"2026-06-07T08:18:03.575Z","request_id":"bcd0cad0-2ae5-42a2-9c77-ff2d35e4c023"},"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":5200,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1220,"monthly_call_quota":53000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3840,"monthly_call_quota":224000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":11900,"monthly_call_quota":1140000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/horizontalcurve-api"}