{"openapi":"3.1.0","info":{"title":"Suspension Tuning API","version":"1.0.0","description":"Vehicle-suspension maths as an API, computed locally and deterministically — the spring and frequency numbers a racer, tuner or chassis engineer sets a car up with. The wheel-rate endpoint converts a spring rate to the rate the wheel actually feels: wheel rate = spring rate × motion ratio², where the motion ratio is the spring's travel per unit of wheel travel — a 200 lb/in spring at a 0.7 motion ratio gives a 98 lb/in wheel rate, because the spring's leverage softens it. The frequency endpoint gives the ride (natural) frequency at a corner, f = (1/2π)·√(wheel rate × g ÷ corner sprung weight), the number that really sets the ride: luxury cars run about 0.5–1.2 Hz, sporty street 1.2–1.7, race cars 2 Hz and up. The spring-rate endpoint inverts it — the spring rate needed to hit a target frequency for a corner weight and motion ratio — so you can pick the frequency for the car's job and get the spring straight out. Everything is computed locally and deterministically, so it is instant and private. Ideal for motorsport and tuning apps, chassis-setup and corner-balancing tools, suspension-design calculators, and engineering study aids. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 compute endpoints. Estimates — real ride also depends on damping and tyres.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/suspension-api","description":"oanor gateway"}],"tags":[{"name":"Suspension"},{"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/frequency":{"get":{"operationId":"get_v1_frequency","tags":["Suspension"],"summary":"Ride (natural) frequency","description":"","parameters":[{"name":"wheel_rate","in":"query","required":true,"description":"Wheel rate in lb/in","schema":{"type":"string"},"example":"98"},{"name":"corner_weight","in":"query","required":true,"description":"Corner sprung weight in lb","schema":{"type":"string"},"example":"500"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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/spring-rate":{"get":{"operationId":"get_v1_spring_rate","tags":["Suspension"],"summary":"Spring rate for a target frequency","description":"","parameters":[{"name":"ride_frequency_hz","in":"query","required":true,"description":"Target ride frequency in Hz","schema":{"type":"string"},"example":"1.5"},{"name":"corner_weight","in":"query","required":true,"description":"Corner sprung weight in lb","schema":{"type":"string"},"example":"500"},{"name":"motion_ratio","in":"query","required":false,"description":"Motion ratio (default 1)","schema":{"type":"string"},"example":"0.7"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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/wheel-rate":{"get":{"operationId":"get_v1_wheel_rate","tags":["Suspension"],"summary":"Wheel rate from spring rate","description":"","parameters":[{"name":"spring_rate","in":"query","required":true,"description":"Spring rate (lb/in or N/mm)","schema":{"type":"string"},"example":"200"},{"name":"motion_ratio","in":"query","required":true,"description":"Motion ratio (spring travel ÷ wheel travel)","schema":{"type":"string"},"example":"0.7"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"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"},"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":480,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":615,"monthly_call_quota":12800,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1870,"monthly_call_quota":82000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5500,"monthly_call_quota":265000,"rps_limit":36,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/suspension-api"}