{"openapi":"3.1.0","info":{"title":"Calendar Effects (Day-of-Week & Turn-of-Month) API","version":"1.0.0","description":"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.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/calendareffects-api","description":"oanor gateway"}],"tags":[{"name":"Screener"},{"name":"TurnOfMonth"},{"name":"DayOfWeek"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/screener":{"get":{"operationId":"get_v1_screener","tags":["Screener"],"summary":"Rank the universe by turn-of-month effect strength","description":"","parameters":[{"name":"window","in":"query","required":false,"description":"Lookback in trading days (252-3000)","schema":{"type":"string"},"example":"1260"},{"name":"class","in":"query","required":false,"description":"index, sector, commodity, bond, crypto or all","schema":{"type":"string"},"example":"all"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"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":true,"spread_pct":0.0112,"tom_avg_return_pct":-0.0246,"rest_avg_return_pct":-0.0358,"share_of_total_return_pct":14.1},{"name":"Utilities Sector","rank":4,"class":"sector","symbol":"XLU","available":true,"spread_pct":-0.0034,"tom_avg_return_pct":0.0268,"rest_avg_return_pct":0.0303,"share_of_total_return_pct":17.6},{"name":"Nasdaq 100 ETF","rank":5,"class":"index","symbol":"QQQ","available":true,"spread_pct":-0.0036,"tom_avg_return_pct":0.0674,"rest_avg_return_pct":0.071,"share_of_total_return_pct":18.6},{"name":"Developed ex-US","rank":6,"class":"index","symbol":"EFA","available":true,"spread_pct":-0.017,"tom_avg_return_pct":0.0116,"rest_avg_return_pct":0.0286,"share_of_total_return_pct":8.9},{"name":"S&P 500 ETF","rank":7,"class":"index","symbol":"SPY","available":true,"spread_pct":-0.02,"tom_avg_return_pct":0.0339,"rest_avg_return_pct":0.0539,"share_of_total_return_pct":13.1},{"name":"US Small Caps","rank":8,"class":"index","symbol":"IWM","available":true,"spread_pct":-0.0262,"tom_avg_return_pct":0.0084,"rest_avg_return_pct":0.0346,"share_of_total_return_pct":5.5},{"name":"Technology Sector","rank":9,"class":"sector","symbol":"XLK","available":true,"spread_pct":-0.0318,"tom_avg_return_pct":0.0632,"rest_avg_return_pct":0.095,"share_of_total_return_pct":13.8},{"name":"Energy Sector","rank":10,"class":"sector","symbol":"XLE","available":true,"spread_pct":-0.0712,"tom_avg_return_pct":0.013,"rest_avg_return_pct":0.0842,"share_of_total_return_pct":3.6},{"name":"Silver ETF","rank":11,"class":"commodity","symbol":"SLV","available":true,"spread_pct":-0.0814,"tom_avg_return_pct":0.0296,"rest_avg_return_pct":0.1111,"share_of_total_return_pct":6},{"name":"Broad Commodities","rank":12,"class":"commodity","symbol":"DBC","available":true,"spread_pct":-0.0848,"tom_avg_return_pct":-0.028,"rest_avg_return_pct":0.0568,"share_of_total_return_pct":-13.5},{"name":"High-Yield Credit","rank":13,"class":"bond","symbol":"HYG","available":true,"spread_pct":-0.0913,"tom_avg_return_pct":-0.0794,"rest_avg_return_pct":0.0119,"share_of_total_return_pct":264.8},{"name":"Financials Sector","rank":14,"class":"sector","symbol":"XLF","available":true,"spread_pct":-0.095,"tom_avg_return_pct":-0.0449,"rest_avg_return_pct":0.0501,"share_of_total_return_pct":-27.4},{"name":"Crude Oil ETF","rank":15,"class":"commodity","symbol":"USO","available":true,"spread_pct":-0.2379,"tom_avg_return_pct":-0.0862,"rest_avg_return_pct":0.1516,"share_of_total_return_pct":-15.8},{"name":"Bitcoin","rank":16,"class":"crypto","symbol":"BTC-USD","available":true,"spread_pct":-0.3255,"tom_avg_return_pct":-0.1447,"rest_avg_return_pct":0.1808,"share_of_total_return_pct":-14.2},{"name":"Ethereum","rank":17,"class":"crypto","symbol":"ETH-USD","available":true,"spread_pct":-0.4267,"tom_avg_return_pct":-0.2874,"rest_avg_return_pct":0.1392,"share_of_total_return_pct":-47}],"sorted_by":"spread_pct","strongest":{"symbol":"EEM","spread_pct":0.0668},"unavailable":[],"window_days":1260},"meta":{"timestamp":"2026-06-12T10:34:38.457Z","request_id":"a5c8ce55-232e-4cbf-af32-e6c79e6647e3"},"status":"ok","message":"Calendar screener retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/turnofmonth":{"get":{"operationId":"get_v1_turnofmonth","tags":["TurnOfMonth"],"summary":"Turn-of-month vs rest-of-month return profile for one instrument","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Universe symbol","schema":{"type":"string"},"example":"SPY"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (252-3000)","schema":{"type":"string"},"example":"1260"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"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}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/dayofweek":{"get":{"operationId":"get_v1_dayofweek","tags":["DayOfWeek"],"summary":"Average return and win-rate by weekday for one instrument","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Universe symbol","schema":{"type":"string"},"example":"SPY"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (252-3000)","schema":{"type":"string"},"example":"1260"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"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}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"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-month — the two best-documented equity calendar anomalies, measured live across a cross-asset universe from Yahoo Finance daily history (no key, nothing stored). turnofmonth splits an instrument's history into the turn-of-month window (last 1 + first 3 trading days of each month) versus the rest and returns each side's average daily return, win-rate, the spread, and the share of total return earned in the turn days. dayofweek returns each weekday's average return, win-rate and sample size with the best/worst day. screener ranks the universe by the strength of the turn-of-month effect. 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. Descriptive, not predictive.","universe_size":17,"upstream_status":"ok","turn_of_month_window":"last 1 + first 3 trading days of each month","strongest_turn_of_month":"EEM"},"meta":{"timestamp":"2026-06-12T10:34:39.954Z","request_id":"3d7e836a-a693-4902-a95d-ef24853d56d8"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":705,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1080,"monthly_call_quota":15300,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3540,"monthly_call_quota":83500,"rps_limit":16,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7900,"monthly_call_quota":486000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/calendareffects-api"}