# Calendar Effects (Day-of-Week & Turn-of-Month) API
> The two best-documented calendar anomalies in equities — the day-of-week effect and the turn-of-month effect — measured live across a cross-asset universe from Yahoo Finance daily history, no key, nothing stored. Decades of research show returns are not spread evenly through the week or the month: the turn-of-month effect — the cluster of the last trading day of a month and the first few of the next — has historically captured the bulk of the entire month's gain while the rest of the month drifts; and the day-of-week effect (the old "Monday effect" and its kin) shows some weekdays running persistently stronger than others. This API quantifies both directly. The turnofmonth endpoint splits an instrument's history into the turn-of-month window (the last trading day plus the first three of each month) versus the rest, and returns the average daily return and win-rate of each, the spread between them, and the share of the total return earned inside that handful of days. The dayofweek endpoint returns, for each weekday, the average daily return, win-rate and sample size, with the best and worst day. The screener endpoint ranks the cross-asset universe by the strength of the turn-of-month effect, so you can see where the calendar edge is biggest. This is the day-of-week / turn-of-month calendar-anomaly cut — distinct from the month-of-year seasonality APIs (equity-index, FX, commodity) and the crypto-only intraday/day-of-week seasonality API. Patterns are descriptive, not predictive.

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

## Pricing
- **Free** (Free) — 705 calls/Mo, 2 req/s
- **Starter** ($11/Mo) — 15,300 calls/Mo, 6 req/s
- **Pro** ($35/Mo) — 83,500 calls/Mo, 16 req/s
- **Mega** ($79/Mo) — 486,000 calls/Mo, 40 req/s

## Endpoints

### Screener

#### `GET /v1/screener` — Rank the universe by turn-of-month effect strength

**Parameters:**
- `window` (query, optional, string) — Lookback in trading days (252-3000) Example: `1260`
- `class` (query, optional, string) — index, sector, commodity, bond, crypto or all Example: `all`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/calendareffects-api/v1/screener?window=1260&class=all"
```

**Response:**
```json
{
    "data": {
        "note": "Cross-asset universe ranked by the turn-of-month spread — the average-daily-return advantage of the turn-of-month window (last 1 + first 3 trading days) over the rest of the month. A positive spread means the calendar edge is present. share_of_total_return_pct shows how concentrated each market's return is in those days. Descriptive, not predictive. Read fresh per call, nothing cached.",
        "class": "all",
        "count": 17,
        "effect": "turn_of_month",
        "source": "Yahoo Finance",
        "results": [
            {
                "name": "Emerging Markets",
                "rank": 1,
                "class": "index",
                "symbol": "EEM",
                "available": true,
                "spread_pct": 0.0668,
                "tom_avg_return_pct": 0.0762,
                "rest_avg_return_pct": 0.0093,
                "share_of_total_return_pct": 66.2
            },
            {
                "name": "Gold ETF",
                "rank": 2,
                "class": "commodity",
                "symbol": "GLD",
                "available": true,
                "spread_pct": 0.0469,
                "tom_avg_return_pct": 0.1063,
                "rest_avg_return_pct": 0.0594,
                "share_of_total_return_pct": 30.1
            },
            {
                "name": "20Y+ Treasuries",
                "rank": 3,
                "class": "bond",
                "symbol": "TLT",
                "available
…(truncated, see openapi.json for full schema)
```

### TurnOfMonth

#### `GET /v1/turnofmonth` — Turn-of-month vs rest-of-month return profile for one instrument

**Parameters:**
- `symbol` (query, required, string) — Universe symbol Example: `SPY`
- `window` (query, optional, string) — Lookback in trading days (252-3000) Example: `1260`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/calendareffects-api/v1/turnofmonth?symbol=SPY&window=1260"
```

**Response:**
```json
{
    "data": {
        "name": "S&P 500 ETF",
        "note": "Daily returns split into the turn-of-month window (last 1 + first 3 trading days of each month) versus the rest. spread_pct is the difference in average daily return; share_of_total_return_pct is how much of the window's whole return was earned in those ~4 days a month. Descriptive, not predictive. Read fresh per call, nothing cached.",
        "read": "no meaningful turn-of-month edge",
        "class": "index",
        "source": "Yahoo Finance",
        "symbol": "SPY",
        "tom_days": 244,
        "rest_days": 1016,
        "spread_pct": -0.02,
        "tom_window": "last 1 + first 3 trading days of each month",
        "window_days": 1260,
        "tom_win_rate_pct": 51.6,
        "rest_win_rate_pct": 55,
        "tom_avg_return_pct": 0.0339,
        "rest_avg_return_pct": 0.0539,
        "share_of_total_return_pct": 13.1
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:38.583Z",
        "request_id": "2a6a32f9-5602-412f-8b88-666c2012ac10"
    },
    "status": "ok",
    "message": "Turn-of-month retrieved successfully",
    "success": true
}
```

### DayOfWeek

#### `GET /v1/dayofweek` — Average return and win-rate by weekday for one instrument

**Parameters:**
- `symbol` (query, required, string) — Universe symbol Example: `SPY`
- `window` (query, optional, string) — Lookback in trading days (252-3000) Example: `1260`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/calendareffects-api/v1/dayofweek?symbol=SPY&window=1260"
```

**Response:**
```json
{
    "data": {
        "days": {
            "Friday": {
                "count": 254,
                "win_rate_pct": 52.8,
                "avg_return_pct": 0.0115
            },
            "Monday": {
                "count": 234,
                "win_rate_pct": 62.4,
                "avg_return_pct": 0.112
            },
            "Tuesday": {
                "count": 261,
                "win_rate_pct": 49.8,
                "avg_return_pct": 0.0248
            },
            "Thursday": {
                "count": 252,
                "win_rate_pct": 51.6,
                "avg_return_pct": -0.01
            },
            "Wednesday": {
                "count": 259,
                "win_rate_pct": 56,
                "avg_return_pct": 0.1158
            }
        },
        "name": "S&P 500 ETF",
        "note": "Average daily return and win-rate by weekday over window_days. Equity ETFs trade Mon-Fri; crypto trades all seven days. Descriptive of historical tendency, not predictive. Read fresh per call, nothing cached.",
        "class": "index",
        "source": "Yahoo Finance",
        "symbol": "SPY",
        "best_day": "Wednesday",
        "worst_day": "Thursday",
        "window_days": 1260
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:39.725Z",
        "request_id": "74a710f8-26ee-4b6b-b7d6-f2ea1458533b"
    },
    "status": "ok",
    "message": "Day-of-week retrieved successfully",
    "success": true
}
```

### Meta

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

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

**Response:**
```json
{
    "data": {
        "note": "symbol is a universe symbol (SPY, GLD, BTC-USD, ...). window is 252-3000 trading days (default 1260, ~5 years, for robust calendar stats). class filters the screener to index/sector/commodity/bond/crypto (default all). Month-of-year seasonality is covered by the seasonality APIs; this is day-of-week and turn-of-month. Read fresh per call, nothing cached.",
        "source": "Yahoo Finance daily closes, live",
        "classes": [
            "index",
            "sector",
            "commodity",
            "bond",
            "crypto"
        ],
        "service": "calendareffects-api",
        "universe": [
            "SPY",
            "QQQ",
            "IWM",
            "EFA",
            "EEM",
            "XLK",
            "XLF",
            "XLE",
            "XLU",
            "GLD",
            "SLV",
            "USO",
            "DBC",
            "TLT",
            "HYG",
            "BTC-USD",
            "ETH-USD"
        ],
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/screener": "Rank the universe by turn-of-month effect strength (window=1260, class=all).",
            "GET /v1/dayofweek": "Average return and win-rate by weekday for one instrument (symbol=SPY, window=1260).",
            "GET /v1/turnofmonth": "Turn-of-month vs rest-of-month return profile for one instrument (symbol=SPY, window=1260)."
        },
        "description": "Calendar effects — day-of-week & turn-of
…(truncated, see openapi.json for full schema)
```


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