# Whisky API
> Scotch whisky flavour profiles for 86 Scottish single-malt distilleries as an API, built on the classic Wishart taste-classification dataset. Each distillery is scored 0–4 on twelve flavour axes — body, sweetness, smoky, medicinal, tobacco, honey, spicy, winey, nutty, malty, fruity, floral — and tagged with its whisky region (Islay, Speyside, Highlands and more). Look a distillery up, find the ones whose flavour is most SIMILAR to one you love, rank distilleries by any flavour (e.g. the smokiest), list a region, or search. Perfect for drinks, recommendation, hospitality and gifting apps. Distinct from cocktails recipes.

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

## Pricing
- **Free** (Free) — 300 calls/Mo, 5 req/s
- **Hobby** ($4/Mo) — 8,000 calls/Mo, 12 req/s
- **Pro** ($10/Mo) — 30,000 calls/Mo, 25 req/s
- **Business** ($26/Mo) — 120,000 calls/Mo, 40 req/s

## Endpoints

### Whisky

#### `GET /v1/distillery` — Distillery flavour profile

**Parameters:**
- `name` (query, required, string) — Distillery name Example: `Lagavulin`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/distillery?name=Lagavulin"
```

**Response:**
```json
{
    "data": {
        "distillery": {
            "region": "Islay",
            "flavours": {
                "body": 4,
                "honey": 0,
                "malty": 1,
                "nutty": 1,
                "smoky": 4,
                "spicy": 1,
                "winey": 2,
                "floral": 0,
                "fruity": 1,
                "tobacco": 1,
                "medicinal": 4,
                "sweetness": 1
            },
            "postcode": "PA42 7DZ",
            "distillery": "Lagavulin"
        }
    },
    "meta": {
        "timestamp": "2026-06-09T03:03:48.359Z",
        "request_id": "dab6c00b-801e-4f80-95c4-08f9d891ad7f"
    },
    "status": "ok",
    "message": "Distillery retrieved successfully",
    "success": true
}
```

#### `GET /v1/list` — List all distilleries

**Parameters:**
- `limit` (query, optional, string) — Max 1-86 Example: `86`
- `offset` (query, optional, string) — Offset Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/list?limit=86&offset=0"
```

**Response:**
```json
{
    "data": {
        "count": 86,
        "total": 86,
        "distilleries": [
            {
                "region": "Highlands",
                "flavours": {
                    "body": 2,
                    "honey": 2,
                    "malty": 2,
                    "nutty": 2,
                    "smoky": 2,
                    "spicy": 1,
                    "winey": 2,
                    "floral": 2,
                    "fruity": 2,
                    "tobacco": 0,
                    "medicinal": 0,
                    "sweetness": 2
                },
                "postcode": "PH15 2EB",
                "distillery": "Aberfeldy"
            },
            {
                "region": "Speyside",
                "flavours": {
                    "body": 3,
                    "honey": 4,
                    "malty": 3,
                    "nutty": 2,
                    "smoky": 1,
                    "spicy": 3,
                    "winey": 2,
                    "floral": 2,
                    "fruity": 3,
                    "tobacco": 0,
                    "medicinal": 0,
                    "sweetness": 3
                },
                "postcode": "AB38 9PJ",
                "distillery": "Aberlour"
            },
            {
                "region": "Highlands",
                "flavours": {
                    "body": 1,
                    "honey": 2,
                    "malty": 2,
                    "nutty": 2,
                    "s
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/region` — Distilleries in a region

**Parameters:**
- `region` (query, required, string) — Whisky region Example: `Islay`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/region?region=Islay"
```

**Response:**
```json
{
    "data": {
        "count": 7,
        "region": "islay",
        "distilleries": [
            {
                "region": "Islay",
                "flavours": {
                    "body": 4,
                    "honey": 0,
                    "malty": 2,
                    "nutty": 1,
                    "smoky": 4,
                    "spicy": 2,
                    "winey": 0,
                    "floral": 0,
                    "fruity": 1,
                    "tobacco": 0,
                    "medicinal": 4,
                    "sweetness": 1
                },
                "postcode": "PA42 7EB",
                "distillery": "Ardbeg"
            },
            {
                "region": "Islay",
                "flavours": {
                    "body": 2,
                    "honey": 2,
                    "malty": 1,
                    "nutty": 1,
                    "smoky": 3,
                    "spicy": 2,
                    "winey": 1,
                    "floral": 2,
                    "fruity": 1,
                    "tobacco": 0,
                    "medicinal": 1,
                    "sweetness": 2
                },
                "postcode": "PA43 7GS",
                "distillery": "Bowmore"
            },
            {
                "region": "Islay",
                "flavours": {
                    "body": 1,
                    "honey": 2,
                    "malty": 2,
                    "nutty": 2,
                    "smoky": 2,

…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Search distilleries

**Parameters:**
- `q` (query, required, string) — Search term Example: `glen`
- `limit` (query, optional, string) — Max 1-86 Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/search?q=glen&limit=25"
```

**Response:**
```json
{
    "data": {
        "count": 21,
        "query": "glen",
        "total": 21,
        "distilleries": [
            {
                "region": "Speyside",
                "flavours": {
                    "body": 1,
                    "honey": 1,
                    "malty": 2,
                    "nutty": 1,
                    "smoky": 1,
                    "spicy": 1,
                    "winey": 0,
                    "floral": 2,
                    "fruity": 2,
                    "tobacco": 0,
                    "medicinal": 0,
                    "sweetness": 3
                },
                "postcode": "AB38 9LR",
                "distillery": "Glenallachie"
            },
            {
                "region": "Speyside",
                "flavours": {
                    "body": 2,
                    "honey": 1,
                    "malty": 2,
                    "nutty": 0,
                    "smoky": 1,
                    "spicy": 1,
                    "winey": 2,
                    "floral": 1,
                    "fruity": 0,
                    "tobacco": 1,
                    "medicinal": 1,
                    "sweetness": 3
                },
                "postcode": "AB4 3JT",
                "distillery": "GlenDeveronMacduff"
            },
            {
                "region": "Highlands",
                "flavours": {
                    "body": 4,
                    "honey": 2,
                    "malty": 2,
                  
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/similar` — Distilleries similar in flavour

**Parameters:**
- `name` (query, required, string) — Distillery name Example: `Lagavulin`
- `limit` (query, optional, string) — Max 1-50 Example: `5`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/similar?name=Lagavulin&limit=5"
```

**Response:**
```json
{
    "data": {
        "count": 5,
        "region": "Islay",
        "similar": [
            {
                "region": "Islay",
                "distance": 2,
                "flavours": {
                    "body": 4,
                    "honey": 0,
                    "malty": 1,
                    "nutty": 1,
                    "smoky": 4,
                    "spicy": 0,
                    "winey": 1,
                    "floral": 0,
                    "fruity": 0,
                    "tobacco": 1,
                    "medicinal": 4,
                    "sweetness": 2
                },
                "postcode": "PA42 7DU",
                "distillery": "Laphroig",
                "similarity": 0.857
            },
            {
                "region": "Islay",
                "distance": 2.646,
                "flavours": {
                    "body": 4,
                    "honey": 0,
                    "malty": 2,
                    "nutty": 1,
                    "smoky": 4,
                    "spicy": 2,
                    "winey": 0,
                    "floral": 0,
                    "fruity": 1,
                    "tobacco": 0,
                    "medicinal": 4,
                    "sweetness": 1
                },
                "postcode": "PA42 7EB",
                "distillery": "Ardbeg",
                "similarity": 0.811
            },
            {
                "region": "Highlands",
                "distance": 3.162,
              
…(truncated, see openapi.json for full schema)
```

### Rankings

#### `GET /v1/rank` — Rank distilleries by a flavour

**Parameters:**
- `by` (query, optional, string) — body|sweetness|smoky|medicinal|tobacco|honey|spicy|winey|nutty|malty|fruity|floral Example: `smoky`
- `order` (query, optional, string) — desc or asc Example: `desc`
- `limit` (query, optional, string) — Max 1-86 Example: `10`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/whisky-api/v1/rank?by=smoky&order=desc&limit=10"
```

**Response:**
```json
{
    "data": {
        "count": 10,
        "order": "desc",
        "flavour": "smoky",
        "ranking": [
            {
                "value": 4,
                "region": "Islay",
                "flavours": {
                    "body": 4,
                    "honey": 0,
                    "malty": 2,
                    "nutty": 1,
                    "smoky": 4,
                    "spicy": 2,
                    "winey": 0,
                    "floral": 0,
                    "fruity": 1,
                    "tobacco": 0,
                    "medicinal": 4,
                    "sweetness": 1
                },
                "position": 1,
                "postcode": "PA42 7EB",
                "distillery": "Ardbeg"
            },
            {
                "value": 4,
                "region": "Islay",
                "flavours": {
                    "body": 3,
                    "honey": 0,
                    "malty": 1,
                    "nutty": 2,
                    "smoky": 4,
                    "spicy": 2,
                    "winey": 0,
                    "floral": 1,
                    "fruity": 1,
                    "tobacco": 1,
                    "medicinal": 2,
                    "sweetness": 1
                },
                "position": 2,
                "postcode": "PA46 7RL",
                "distillery": "Caol Ila"
            },
            {
                "value": 4,
                "region": "Islay",
                "fla
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata

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

**Response:**
```json
{
    "data": {
        "regions": {
            "Islay": 7,
            "Islands": 6,
            "Lowlands": 3,
            "Speyside": 43,
            "Highlands": 25,
            "Campbelltown": 2
        },
        "service": "whisky-api",
        "endpoints": {
            "GET /v1/list": "List all distilleries (limit, offset).",
            "GET /v1/meta": "This document.",
            "GET /v1/rank": "Rank distilleries by a flavour axis (by=smoky|body|…, order, limit).",
            "GET /v1/region": "Distilleries in a whisky region (region=, e.g. Islay).",
            "GET /v1/search": "Search distilleries by name or region (q=).",
            "GET /v1/similar": "Distilleries most similar in flavour to one (name=, limit).",
            "GET /v1/distillery": "Distillery profile by name (name=, e.g. Lagavulin)."
        },
        "description": "Scotch whisky flavour profiles for 86 Scottish single-malt distilleries (Wishart dataset): twelve flavour axes scored 0–4 plus region. Look up a distillery, find the most similar by flavour, rank by any flavour, list a region, or search. Distinct from cocktails-api. No key.",
        "flavour_axes": [
            "body",
            "sweetness",
            "smoky",
            "medicinal",
            "tobacco",
            "honey",
            "spicy",
            "winey",
            "nutty",
            "malty",
            "fruity",
            "floral"
        ],
        "total_distilleries": 86
    },
    "meta": {

…(truncated, see openapi.json for full schema)
```


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