{"openapi":"3.1.0","info":{"title":"Banked Curve API","version":"1.0.0","description":"Banked-curve and circular-motion dynamics as an API, computed locally and deterministically. The speed endpoint takes the radius of a curve and its banking (bank) angle and returns the frictionless ideal (design) speed at which the banking alone supplies the centripetal force, v = √(r·g·tanθ); give a coefficient of friction as well and it also returns the maximum safe speed before the vehicle slides outward up the bank, v = √(r·g·(tanθ+μ)/(1−μ·tanθ)), and the minimum speed before it slides inward down the bank — every speed in metres per second, km/h, mph and knots, plus the centripetal acceleration. The bank-angle endpoint inverts this: from a design speed and radius it returns the ideal banking angle θ = atan(v²/(r·g)) and the equivalent superelevation as a ratio and a percentage, the cant a road or railway needs so no side friction is used at that speed. The flat-curve endpoint handles an unbanked curve from the coefficient of friction: the maximum cornering speed v = √(μ·r·g) for a given radius and the minimum radius v²/(μ·g) for a given speed. Gravity defaults to standard 9.80665 m/s² and can be overridden. Everything is computed locally and deterministically, so it is instant and private. Ideal for road and racetrack design tools, vehicle-dynamics and driving-simulator apps, civil and transportation engineering, and physics education. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is curve banking and cornering dynamics; for projectile and SUVAT kinematics use a physics API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/bankedcurve-api","description":"oanor gateway"}],"tags":[{"name":"Banked 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/bank-angle":{"get":{"operationId":"get_v1_bank_angle","tags":["Banked Curve"],"summary":"Ideal banking angle for a design speed","description":"","parameters":[{"name":"radius","in":"query","required":true,"description":"Curve radius (m)","schema":{"type":"string"},"example":"120"},{"name":"speed","in":"query","required":false,"description":"Design speed (m/s)","schema":{"type":"string"},"example":"25"},{"name":"speed_kmh","in":"query","required":false,"description":"Or design speed (km/h)","schema":{"type":"string"}},{"name":"speed_mph","in":"query","required":false,"description":"Or design speed (mph)","schema":{"type":"string"}},{"name":"gravity","in":"query","required":false,"description":"Gravity (default 9.80665)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Frictionless ideal banking angle so no side friction is needed at the design speed.","formula":"θ = atan(v²/(r·g)); superelevation e = tanθ = v²/(r·g).","radius_m":120,"gravity_ms2":9.80665,"design_speed":{"speed_ms":25,"speed_kmh":90,"speed_mph":55.923407,"speed_knots":48.596112},"ideal_bank_angle_deg":27.972869,"ideal_bank_angle_rad":0.48821867,"superelevation_ratio":0.53110219,"superelevation_percent":53.110219,"centripetal_acceleration_ms2":5.208333},"meta":{"timestamp":"2026-06-04T10:18:54.633Z","request_id":"a5e9c7ee-5856-4e7b-ae21-b8832c94d90f"},"status":"ok","message":"Ideal banking angle","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/flat-curve":{"get":{"operationId":"get_v1_flat_curve","tags":["Banked Curve"],"summary":"Unbanked curve speed & radius limits","description":"","parameters":[{"name":"friction","in":"query","required":true,"description":"Coefficient of friction","schema":{"type":"string"},"example":"0.7"},{"name":"radius","in":"query","required":false,"description":"Radius (m) for max speed","schema":{"type":"string"},"example":"80"},{"name":"speed","in":"query","required":false,"description":"Or speed (m/s) for minimum radius","schema":{"type":"string"}},{"name":"gravity","in":"query","required":false,"description":"Gravity (default 9.80665)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Unbanked (flat) curve — friction alone supplies the centripetal force.","formula":"flat curve: v_max = √(μ·r·g); minimum radius r_min = v²/(μ·g).","radius_m":80,"max_speed":{"note":"Above this the vehicle skids on the flat curve.","speed_ms":23.434428,"speed_kmh":84.36394,"speed_mph":52.421322,"speed_knots":45.552883},"gravity_ms2":9.80665,"friction_coefficient":0.7,"max_centripetal_acceleration_ms2":6.864655},"meta":{"timestamp":"2026-06-04T10:18:54.735Z","request_id":"e215ad18-0ff9-4433-9f88-d0a5df513fdd"},"status":"ok","message":"Unbanked curve limits","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/speed":{"get":{"operationId":"get_v1_speed","tags":["Banked Curve"],"summary":"Safe speeds on a banked curve","description":"","parameters":[{"name":"radius","in":"query","required":true,"description":"Curve radius (m)","schema":{"type":"string"},"example":"100"},{"name":"bank_angle","in":"query","required":true,"description":"Banking angle (degrees, 0–90)","schema":{"type":"string"},"example":"20"},{"name":"friction","in":"query","required":false,"description":"Coefficient of friction (optional)","schema":{"type":"string"},"example":"0.3"},{"name":"gravity","in":"query","required":false,"description":"Gravity (default 9.80665 m/s²)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"ideal":{"note":"Frictionless design speed: the banking alone supplies the centripetal force.","speed_ms":18.892667,"speed_kmh":68.013602,"speed_mph":42.261693,"speed_knots":36.724407,"centripetal_acceleration_ms2":3.569329},"formula":"v_ideal = √(r·g·tanθ); with friction μ: v_max = √(r·g·(tanθ+μ)/(1−μ·tanθ)).","radius_m":100,"max_speed":{"note":"Above this the vehicle slides outward (up the bank).","speed_ms":27.035995,"speed_kmh":97.329583,"speed_mph":60.477799,"speed_knots":52.553771},"min_speed":{"note":"Below this the vehicle slides inward (down the bank).","speed_ms":7.52049,"speed_kmh":27.073763,"speed_mph":16.822857,"speed_knots":14.618663},"gravity_ms2":9.80665,"bank_angle_deg":20,"friction_coefficient":0.3},"meta":{"timestamp":"2026-06-04T10:18:54.838Z","request_id":"3a913ba2-0589-4f10-a923-7d35fc3949e4"},"status":"ok","message":"Safe speeds on a banked curve","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":{"api":"banked-curve","note":"Banked-curve and circular-motion dynamics — computed locally and deterministically, no key, no third-party service.","endpoints":["/v1/speed","/v1/bank-angle","/v1/flat-curve","/v1/meta"],"gravity_default_ms2":9.80665},"meta":{"timestamp":"2026-06-04T10:18:54.928Z","request_id":"83323086-52d1-4a01-ac8f-e4a1ec0a28c9"},"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":3000,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":500,"monthly_call_quota":40000,"rps_limit":5,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1500,"monthly_call_quota":250000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":4900,"monthly_call_quota":1500000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/bankedcurve-api"}