# Stock Index Seasonality API
> The calendar patterns equity traders position around — "Sell in May", the Santa Claus rally, the September swoon — computed live from ~10 years of Yahoo Finance monthly data across the world's major stock indices (no key, nothing stored). Equities have well-documented seasonal tendencies, and this measures them directly: for each index it takes a decade of monthly returns, groups them by calendar month, and returns the average return in each of the twelve months, the share of years that month was positive (the win rate), and the historically strongest and weakest months. The seasonality endpoint returns one index's full 12-month seasonal profile plus the current month's historical bias. The month endpoint flips it around: for a calendar month it ranks every index by its historical average return, so you can see which markets are seasonally strong or weak right now. The indices endpoint lists what is covered, from the S&P 500, Nasdaq, Dow and Russell to the DAX, FTSE, CAC, Euro Stoxx, Nikkei and Hang Seng. The equity-index seasonality / calendar-pattern cut — distinct from the FX, commodity and crypto seasonality APIs, the index price feed and the constituent APIs.

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

## Pricing
- **Free** (Free) — 840 calls/Mo, 2 req/s
- **Starter** ($10/Mo) — 19,200 calls/Mo, 6 req/s
- **Pro** ($31/Mo) — 93,500 calls/Mo, 16 req/s
- **Business** ($73/Mo) — 512,000 calls/Mo, 40 req/s

## Endpoints

### Seasonality

#### `GET /v1/seasonality` — One index 12-month seasonal profile with best/worst month and current bias

**Parameters:**
- `index` (query, required, string) — Key or alias (see /v1/indices) Example: `sp500`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/indexseasonality-api/v1/seasonality?index=sp500"
```

**Response:**
```json
{
    "data": {
        "name": "S&P 500",
        "note": "Average month-over-month return in each calendar month over ~10 years, with win_rate_pct (share of years that month was positive) and the sample size (years). Captures effects like Sell-in-May and the year-end rally. Seasonal tendencies are statistical, not guarantees. Not financial advice.",
        "index": "sp500",
        "months": [
            {
                "month": "January",
                "years": 10,
                "month_num": 1,
                "win_rate_pct": 70,
                "avg_return_pct": 2.11
            },
            {
                "month": "February",
                "years": 10,
                "month_num": 2,
                "win_rate_pct": 40,
                "avg_return_pct": -0.4
            },
            {
                "month": "March",
                "years": 10,
                "month_num": 3,
                "win_rate_pct": 50,
                "avg_return_pct": -1.22
            },
            {
                "month": "April",
                "years": 10,
                "month_num": 4,
                "win_rate_pct": 70,
                "avg_return_pct": 2.2
            },
            {
                "month": "May",
                "years": 10,
                "month_num": 5,
                "win_rate_pct": 90,
                "avg_return_pct": 2.02
            },
            {
                "month": "June",
                "years": 11,
                "month_num
…(truncated, see openapi.json for full schema)
```

### Month

#### `GET /v1/month` — Every index ranked by historical average return in a calendar month

**Parameters:**
- `month` (query, optional, string) — 1-12 or month name (default current) Example: `December`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/indexseasonality-api/v1/month?month=December"
```

**Response:**
```json
{
    "data": {
        "note": "Every index ranked by its historical average return in December over ~10 years, seasonally strongest first.",
        "month": "December",
        "source": "Yahoo Finance",
        "indices": [
            {
                "name": "Hang Seng (Hong Kong)",
                "index": "hang_seng",
                "years": 10,
                "region": "asia",
                "win_rate_pct": 80,
                "avg_return_pct": 3.21
            },
            {
                "name": "Euro Stoxx 50",
                "index": "euro_stoxx50",
                "years": 10,
                "region": "europe",
                "win_rate_pct": 60,
                "avg_return_pct": 2.2
            },
            {
                "name": "DAX (Germany)",
                "index": "dax",
                "years": 10,
                "region": "europe",
                "win_rate_pct": 70,
                "avg_return_pct": 2.06
            },
            {
                "name": "FTSE 100 (UK)",
                "index": "ftse100",
                "years": 10,
                "region": "europe",
                "win_rate_pct": 70,
                "avg_return_pct": 1.99
            },
            {
                "name": "CAC 40 (France)",
                "index": "cac40",
                "years": 10,
                "region": "europe",
                "win_rate_pct": 50,
                "avg_return_pct": 1.7
            },
            {
                "name
…(truncated, see openapi.json for full schema)
```

### Indices

#### `GET /v1/indices` — Supported indices and regions

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

**Response:**
```json
{
    "data": {
        "note": "Supported stock indices. Pass key/alias as index= to /v1/seasonality, or month= (1-12 or name) to /v1/month.",
        "count": 14,
        "source": "Yahoo Finance",
        "indices": [
            {
                "key": "sp500",
                "name": "S&P 500",
                "region": "us"
            },
            {
                "key": "nasdaq100",
                "name": "Nasdaq 100",
                "region": "us"
            },
            {
                "key": "dow",
                "name": "Dow Jones",
                "region": "us"
            },
            {
                "key": "russell2000",
                "name": "Russell 2000",
                "region": "us"
            },
            {
                "key": "sp_midcap",
                "name": "S&P MidCap 400",
                "region": "us"
            },
            {
                "key": "dax",
                "name": "DAX (Germany)",
                "region": "europe"
            },
            {
                "key": "ftse100",
                "name": "FTSE 100 (UK)",
                "region": "europe"
            },
            {
                "key": "cac40",
                "name": "CAC 40 (France)",
                "region": "europe"
            },
            {
                "key": "euro_stoxx50",
                "name": "Euro Stoxx 50",
                "region": "europe"
            },
            {
                "key": "nikkei225",
        
…(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/indexseasonality-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "index is a key/alias (sp500, nasdaq100, dax, nikkei225; see /v1/indices). month is 1-12 or a name (default current month). Averages use ~10 years of monthly returns grouped by calendar month. Read fresh per call, nothing cached.",
        "source": "Yahoo Finance monthly index data, ~10y range, live",
        "regions": [
            "us",
            "europe",
            "asia",
            "americas",
            "global"
        ],
        "service": "indexseasonality-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/month": "Every index ranked by historical average return in a calendar month (month=December).",
            "GET /v1/indices": "The supported indices and regions.",
            "GET /v1/seasonality": "One index's 12-month seasonal profile with best/worst month and current-month bias (index=sp500)."
        },
        "description": "Stock index seasonality — the calendar patterns equity traders position around (Sell in May, the Santa rally), from ~10 years of Yahoo Finance monthly data across the world's major indices (no key, nothing stored). seasonality returns one index's 12-month seasonal profile (average return and win rate per calendar month, best/worst month, current-month bias). month ranks every index by its historical average return in a calendar month. indices lists what is covered. The equity-index seasonality / calendar-pattern cut — distinct from the FX, commodit
…(truncated, see openapi.json for full schema)
```


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