# Suspension Tuning API
> 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.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/suspension-api/..."
```

## Pricing
- **Free** (Free) — 480 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 12,800 calls/Mo, 6 req/s
- **Pro** ($19/Mo) — 82,000 calls/Mo, 15 req/s
- **Mega** ($55/Mo) — 265,000 calls/Mo, 36 req/s

## Endpoints

### Suspension

#### `GET /v1/frequency` — Ride (natural) frequency

**Parameters:**
- `wheel_rate` (query, required, string) — Wheel rate in lb/in Example: `98`
- `corner_weight` (query, required, string) — Corner sprung weight in lb Example: `500`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/suspension-api/v1/frequency?wheel_rate=98&corner_weight=500"
```

**Response:**
```json
{
    "data": {
        "feel": "sporty street (≈ 1.0–1.5 Hz)",
        "note": "Ride frequency = (1/2π)·√(wheel rate × g ÷ corner sprung weight) — the suspension's natural bounce frequency, the number that actually sets ride feel. Luxury cars run ~0.5–1.2 Hz, sporty street ~1.2–1.7, race cars 2+ Hz. Front is usually set a touch lower than rear so the car settles flat.",
        "inputs": {
            "wheel_rate": 98,
            "corner_weight": 500
        },
        "ride_frequency_hz": 1.384
    },
    "meta": {
        "timestamp": "2026-06-06T23:54:02.174Z",
        "request_id": "9a789998-37f5-4f09-9968-d2d7dd651b98"
    },
    "status": "ok",
    "message": "Ride frequency",
    "success": true
}
```

#### `GET /v1/spring-rate` — Spring rate for a target frequency

**Parameters:**
- `ride_frequency_hz` (query, required, string) — Target ride frequency in Hz Example: `1.5`
- `corner_weight` (query, required, string) — Corner sprung weight in lb Example: `500`
- `motion_ratio` (query, optional, string) — Motion ratio (default 1) Example: `0.7`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/suspension-api/v1/spring-rate?ride_frequency_hz=1.5&corner_weight=500&motion_ratio=0.7"
```

**Response:**
```json
{
    "data": {
        "note": "Spring rate for a target frequency = (2πf)² × corner weight ÷ g, then divided by motion ratio² to get back to the spring. Pick the frequency for the car's job (street ~1.3–1.7 Hz), then this gives the spring. Heavier corners need stiffer springs for the same frequency.",
        "inputs": {
            "motion_ratio": 0.7,
            "corner_weight": 500,
            "ride_frequency_hz": 1.5
        },
        "required_wheel_rate": 115.03,
        "required_spring_rate": 234.76
    },
    "meta": {
        "timestamp": "2026-06-06T23:54:02.274Z",
        "request_id": "fe119144-f6d2-443d-9d0d-011f67469fa4"
    },
    "status": "ok",
    "message": "Spring rate",
    "success": true
}
```

#### `GET /v1/wheel-rate` — Wheel rate from spring rate

**Parameters:**
- `spring_rate` (query, required, string) — Spring rate (lb/in or N/mm) Example: `200`
- `motion_ratio` (query, required, string) — Motion ratio (spring travel ÷ wheel travel) Example: `0.7`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/suspension-api/v1/wheel-rate?spring_rate=200&motion_ratio=0.7"
```

**Response:**
```json
{
    "data": {
        "note": "Wheel rate = spring rate × motion ratio², where the motion ratio is the spring's movement per unit of wheel movement (usually < 1, so the wheel feels a softer rate than the spring's). A 200 lb/in spring at a 0.7 motion ratio gives a 98 lb/in wheel rate. Angle and leverage of the spring set the ratio — it dominates the feel.",
        "inputs": {
            "spring_rate": 200,
            "motion_ratio": 0.7
        },
        "wheel_rate": 98
    },
    "meta": {
        "timestamp": "2026-06-06T23:54:02.350Z",
        "request_id": "9e0e4c27-a460-4400-8cdb-752f8c1e538c"
    },
    "status": "ok",
    "message": "Wheel rate",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/suspension-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "notes": "US units (lb/in, lb). wheel = spring × MR²; f = (1/2π)√(k·g/W) with g = 386 in/s²; spring = (2πf)²·W/g ÷ MR². Consistent metric (N/mm, kg with g = 9810 mm/s²) also works for wheel-rate. Estimates — real ride depends on damping and tyres too.",
        "service": "suspension-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/frequency": "Ride frequency from wheel rate and corner sprung weight.",
            "GET /v1/wheel-rate": "Wheel rate = spring rate × motion ratio².",
            "GET /v1/spring-rate": "Spring rate needed for a target ride frequency."
        },
        "description": "Vehicle-suspension maths: wheel rate from spring rate and motion ratio, the ride (natural) frequency, and the spring rate for a target frequency."
    },
    "meta": {
        "timestamp": "2026-06-06T23:54:02.440Z",
        "request_id": "17142c79-968e-433d-8098-a08b6c016be6"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/suspension-api
OpenAPI spec: https://www.oanor.com/api/suspension-api/openapi.json
