# Powerlifting Score API
> Powerlifting strength-score maths as an API, computed locally and deterministically — the Wilks, DOTS and IPF GL numbers a meet, gym or training app uses to compare lifters across bodyweights and sexes. The wilks endpoint gives the classic Wilks coefficient (1996) and score: total × 500 ÷ a fifth-order polynomial in bodyweight, with separate male and female curves — long the federation standard for "best lifter", a 100 kg man totalling 600 kg scores about 365. The dots endpoint gives the modern DOTS score (2019), the same total × 500 ÷ polynomial idea but fitted to updated data with a fourth-order curve that is fairer across the weight classes and not skewed to the middleweights, now the default in most raw meet software. The ipf-gl endpoint gives the International Powerlifting Federation's current GL Points (2020): 100 × total ÷ (A − B·e^(−C·bodyweight)), with separate constants for sex and for raw (classic) versus equipped lifting, the official metric at IPF championships. Everything is computed locally and deterministically, so it is instant and private. Ideal for meet-management and scoring software, gym leaderboards and training-log apps, and strength-sport tools. Pure local computation — no key, no third-party service, instant. 3 compute endpoints. For one-rep-max estimation and plate loading use a strength-training API.

## 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/powerlifting-api/..."
```

## Pricing
- **Free** (Free) — 9,000 calls/Mo, 2 req/s
- **Starter** ($7/Mo) — 88,000 calls/Mo, 6 req/s
- **Pro** ($26/Mo) — 360,000 calls/Mo, 15 req/s
- **Mega** ($81/Mo) — 1,640,000 calls/Mo, 40 req/s

## Endpoints

### Score

#### `GET /v1/dots` — DOTS coefficient and score

**Parameters:**
- `sex` (query, required, string) — male or female Example: `male`
- `bodyweight_kg` (query, required, string) — Bodyweight (kg) Example: `100`
- `total_kg` (query, required, string) — Total lifted (kg) Example: `600`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/powerlifting-api/v1/dots?sex=male&bodyweight_kg=100&total_kg=600"
```

**Response:**
```json
{
    "data": {
        "note": "DOTS (2019) is a modern replacement for Wilks, fitting a fourth-order polynomial to updated data so the score is fairer across the bodyweight range and not skewed to the middle classes. It is computed the same way — total × 500 ÷ the polynomial — and is widely used by federations and meet software as the default 'best lifter' metric for raw lifting.",
        "inputs": {
            "sex": "male",
            "total_kg": 600,
            "bodyweight_kg": 100
        },
        "dots_score": 369.31,
        "dots_coefficient": 0.6155
    },
    "meta": {
        "timestamp": "2026-06-07T08:18:04.068Z",
        "request_id": "e03b4f41-5dca-41d1-98a4-5b625d9cce4d"
    },
    "status": "ok",
    "message": "DOTS",
    "success": true
}
```

#### `GET /v1/ipf-gl` — IPF GL points

**Parameters:**
- `sex` (query, required, string) — male or female Example: `male`
- `bodyweight_kg` (query, required, string) — Bodyweight (kg) Example: `100`
- `total_kg` (query, required, string) — Total lifted (kg) Example: `600`
- `equipment` (query, optional, string) — raw (classic) or equipped (default raw) Example: `raw`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/powerlifting-api/v1/ipf-gl?sex=male&bodyweight_kg=100&total_kg=600&equipment=raw"
```

**Response:**
```json
{
    "data": {
        "note": "IPF GL Points (2020) is the International Powerlifting Federation's current scoring formula: 100 × total ÷ (A − B·e^(−C·bodyweight)), with separate constants for sex and for raw (classic) versus equipped lifting. The exponential shape models how strength scales with bodyweight better than a polynomial at the extremes, and it is the official metric at IPF championships.",
        "inputs": {
            "sex": "male",
            "total_kg": 600,
            "equipment": "raw",
            "bodyweight_kg": 100
        },
        "ipf_gl_points": 75.8
    },
    "meta": {
        "timestamp": "2026-06-07T08:18:04.156Z",
        "request_id": "48ea04bc-1700-4f0a-9c72-7ff398b77053"
    },
    "status": "ok",
    "message": "IPF GL",
    "success": true
}
```

#### `GET /v1/wilks` — Wilks coefficient and score

**Parameters:**
- `sex` (query, required, string) — male or female Example: `male`
- `bodyweight_kg` (query, required, string) — Bodyweight (kg) Example: `100`
- `total_kg` (query, required, string) — Total lifted (kg) Example: `600`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/powerlifting-api/v1/wilks?sex=male&bodyweight_kg=100&total_kg=600"
```

**Response:**
```json
{
    "data": {
        "note": "The Wilks coefficient (1996) normalises a lifter's total for bodyweight so a lightweight and a heavyweight can be compared: score = total × 500 ÷ a fifth-order polynomial in bodyweight, with separate male and female curves. It long served as the IPF and federation standard for 'best lifter'; it has since been criticised for favouring the middleweights, which is why DOTS and the IPF GL points were introduced.",
        "inputs": {
            "sex": "male",
            "total_kg": 600,
            "bodyweight_kg": 100
        },
        "wilks_score": 365.15,
        "wilks_coefficient": 0.6086
    },
    "meta": {
        "timestamp": "2026-06-07T08:18:04.256Z",
        "request_id": "6ce9762a-a695-41c4-9d74-d33323356999"
    },
    "status": "ok",
    "message": "Wilks",
    "success": true
}
```

### Meta

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

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

**Response:**
```json
{
    "data": {
        "notes": "Kilograms. Wilks = total×500/poly5(bw); DOTS = total×500/poly4(bw); IPF GL = 100·total/(A−B·e^(−C·bw)). Separate male/female (and raw/equipped) constants. For 1RM estimation use a strength-training API.",
        "service": "powerlifting-api",
        "endpoints": {
            "GET /v1/dots": "DOTS coefficient and score.",
            "GET /v1/meta": "This document.",
            "GET /v1/wilks": "Wilks coefficient and score from sex, bodyweight and total.",
            "GET /v1/ipf-gl": "IPF GL points (raw/classic or equipped)."
        },
        "description": "Powerlifting strength-score maths: Wilks coefficient/score, DOTS score, and IPF GL points."
    },
    "meta": {
        "timestamp": "2026-06-07T08:18:04.338Z",
        "request_id": "1ddad41a-ec34-4c8b-86df-ceef903067d1"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


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