{"openapi":"3.1.0","info":{"title":"COT Index API","version":"1.0.0","description":"The normalised Commitments-of-Traders positioning signal traders actually act on, computed live from the US CFTC public reporting API — no key. A raw COT net-position number means little on its own: \"large speculators are +176,020 contracts net long gold\" tells you nothing until you know whether that is high or low versus history. The COT Index fixes that by normalising each trader group's current net futures position to a 0-100 percentile over a lookback window (the classic Larry Williams 156-week / three-year COT Index): 100 = the most net-long that group has been in the window, 0 = the most net-short. Above 80 marks a crowded long extreme (contrarian bearish), below 20 a crowded short extreme (contrarian bullish). The index endpoint returns one market's COT Index for both the large speculators (non-commercials) and the commercial hedgers, with the current net, the window min/max, the week-over-week change and an extreme flag. The screener endpoint computes the index across a curated set of 17 FX, stock-index, metal, energy and grain futures and ranks them, surfacing which markets sit at a positioning extreme right now. This is the normalised positioning-signal cut — distinct from the raw COT-report feed (which serves the weekly long/short contract counts), and from the price, open-interest and options-positioning APIs. It turns the report into the signal.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/cotindex-api","description":"oanor gateway"}],"tags":[{"name":"Index"},{"name":"Screener"},{"name":"Markets"},{"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/index":{"get":{"operationId":"get_v1_index","tags":["Index"],"summary":"COT Index for one market (both trader groups)","description":"","parameters":[{"name":"market","in":"query","required":true,"description":"Market key (gold, eur, sp500, wti, corn, ...)","schema":{"type":"string"},"example":"gold"},{"name":"weeks","in":"query","required":false,"description":"Lookback weeks (26-156)","schema":{"type":"string"},"example":"156"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"comm":{"extreme":"neutral","cot_index":53.5,"weeks_used":156,"net_position":-206345,"window_max_net":-90428,"window_min_net":-339706,"net_change_week":-20579,"cot_index_change":-8.3,"cot_index_prev_week":61.8},"name":"Gold","note":"COT Index normalises each group's net futures position to 0-100 over the last window_weeks (Larry Williams style). 100 = most net long in the window, 0 = most net short. Above 80 = crowded long (contrarian bearish); below 20 = crowded short (contrarian bullish). noncomm = large speculators, comm = commercial hedgers (often the opposite side). Source CFTC, updated weekly.","class":"metal","market":"gold","source":"CFTC Commitments of Traders (legacy futures-only)","noncomm":{"extreme":"neutral","cot_index":42.9,"weeks_used":156,"net_position":176020,"window_max_net":315390,"window_min_net":71433,"net_change_week":21760,"cot_index_change":8.9,"cot_index_prev_week":34},"traders":258,"report_date":"2026-06-02","window_weeks":156,"open_interest":326052},"meta":{"timestamp":"2026-06-12T10:34:55.611Z","request_id":"07ee73df-9933-4fa9-80f9-64f5be074fc5"},"status":"ok","message":"COT Index 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/screener":{"get":{"operationId":"get_v1_screener","tags":["Screener"],"summary":"Rank markets by COT Index, flag crowded extremes","description":"","parameters":[{"name":"group","in":"query","required":false,"description":"noncomm (large speculators) or comm (commercials)","schema":{"type":"string"},"example":"noncomm"},{"name":"class","in":"query","required":false,"description":"fx, index, metal, energy, grain or all","schema":{"type":"string"},"example":"all"},{"name":"weeks","in":"query","required":false,"description":"Lookback weeks (26-156)","schema":{"type":"string"},"example":"156"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Markets ranked by the large speculators (non-commercials) COT Index (0-100) over window_weeks. High = that group is near its most net-long of the window (crowded long, contrarian bearish); low = most net-short (crowded short, contrarian bullish). Source CFTC, updated weekly.","class":"all","count":17,"group":"noncomm","source":"CFTC Commitments of Traders (legacy futures-only)","results":[{"name":"Copper","rank":1,"class":"metal","market":"copper","extreme":"bullish-extreme (net long crowded — contrarian bearish)","available":true,"cot_index":100,"report_date":"2026-06-02","net_position":78833,"net_change_week":5793,"cot_index_change":5.2},{"name":"Soybeans","rank":2,"class":"grain","market":"soybeans","extreme":"bullish-extreme (net long crowded — contrarian bearish)","available":true,"cot_index":85.3,"report_date":"2026-06-02","net_position":187784,"net_change_week":-16891,"cot_index_change":-3.7},{"name":"Australian Dollar","rank":3,"class":"fx","market":"aud","extreme":"leaning long","available":true,"cot_index":77.3,"report_date":"2026-06-02","net_position":41812,"net_change_week":-18343,"cot_index_change":-9.5},{"name":"Wheat (SRW)","rank":4,"class":"grain","market":"wheat","extreme":"leaning long","available":true,"cot_index":65,"report_date":"2026-06-02","net_position":-40762,"net_change_week":-31304,"cot_index_change":-26.3},{"name":"Corn","rank":5,"class":"grain","market":"corn","extreme":"leaning long","available":true,"cot_index":63.4,"report_date":"2026-06-02","net_position":199942,"net_change_week":-102060,"cot_index_change":-13.9},{"name":"Dow Jones (DJIA x$5)","rank":6,"class":"index","market":"djia","extreme":"neutral","available":true,"cot_index":53.1,"report_date":"2026-06-02","net_position":-4457,"net_change_week":3305,"cot_index_change":5.4},{"name":"Euro FX","rank":7,"class":"fx","market":"eur","extreme":"neutral","available":true,"cot_index":48.6,"report_date":"2026-06-02","net_position":48866,"net_change_week":19440,"cot_index_change":7.6},{"name":"Canadian Dollar","rank":8,"class":"fx","market":"cad","extreme":"neutral","available":true,"cot_index":44,"report_date":"2026-06-02","net_position":-94111,"net_change_week":-25229,"cot_index_change":-10.9},{"name":"Gold","rank":9,"class":"metal","market":"gold","extreme":"neutral","available":true,"cot_index":42.9,"report_date":"2026-06-02","net_position":176020,"net_change_week":21760,"cot_index_change":8.9},{"name":"Crude Oil WTI","rank":10,"class":"energy","market":"wti","extreme":"leaning short","available":true,"cot_index":37.4,"report_date":"2026-06-02","net_position":155874,"net_change_week":-5124,"cot_index_change":-1.7},{"name":"Swiss Franc","rank":11,"class":"fx","market":"chf","extreme":"leaning short","available":true,"cot_index":36.4,"report_date":"2026-06-02","net_position":-32909,"net_change_week":2231,"cot_index_change":4.8},{"name":"Silver","rank":12,"class":"metal","market":"silver","extreme":"leaning short","available":true,"cot_index":27.1,"report_date":"2026-06-02","net_position":23926,"net_change_week":1703,"cot_index_change":2.9},{"name":"S&P 500","rank":13,"class":"index","market":"sp500","extreme":"leaning short","available":true,"cot_index":21.4,"report_date":"2026-06-02","net_position":-214309,"net_change_week":-54993,"cot_index_change":-12.9},{"name":"British Pound","rank":14,"class":"fx","market":"gbp","extreme":"bearish-extreme (net short crowded — contrarian bullish)","available":true,"cot_index":17.4,"report_date":"2026-06-02","net_position":-52218,"net_change_week":9180,"cot_index_change":3.9},{"name":"Japanese Yen","rank":15,"class":"fx","market":"jpy","extreme":"bearish-extreme (net short crowded — contrarian bullish)","available":true,"cot_index":15,"report_date":"2026-06-02","net_position":-129567,"net_change_week":-14900,"cot_index_change":-4.1},{"name":"Natural Gas","rank":16,"class":"energy","market":"natgas","extreme":"bearish-extreme (net short crowded — contrarian bullish)","available":true,"cot_index":13,"report_date":"2026-06-02","net_position":-186115,"net_change_week":17066,"cot_index_change":11},{"name":"Nasdaq 100 (E-mini)","rank":17,"class":"index","market":"nasdaq","extreme":"bearish-extreme (net short crowded — contrarian bullish)","available":true,"cot_index":1.4,"report_date":"2026-06-02","net_position":-14949,"net_change_week":-8864,"cot_index_change":-12.1}],"group_label":"large speculators (non-commercials)","unavailable":[],"window_weeks":156,"extremes_long":["copper","soybeans"],"extremes_short":["gbp","jpy","natgas","nasdaq"]},"meta":{"timestamp":"2026-06-12T10:34:56.323Z","request_id":"f4090413-01e0-4b56-a941-b6bcc7220cab"},"status":"ok","message":"COT Index 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/markets":{"get":{"operationId":"get_v1_markets","tags":["Markets"],"summary":"Supported futures markets and CFTC codes","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The futures markets the COT Index covers. Pass market= to /v1/index or class= to /v1/screener.","count":17,"groups":{"comm":"commercial hedgers","noncomm":"large speculators (non-commercials)"},"source":"CFTC Commitments of Traders","classes":["fx","index","metal","energy","grain"],"markets":[{"name":"Euro FX","class":"fx","market":"eur","cftc_code":"099741"},{"name":"Japanese Yen","class":"fx","market":"jpy","cftc_code":"097741"},{"name":"British Pound","class":"fx","market":"gbp","cftc_code":"096742"},{"name":"Swiss Franc","class":"fx","market":"chf","cftc_code":"092741"},{"name":"Canadian Dollar","class":"fx","market":"cad","cftc_code":"090741"},{"name":"Australian Dollar","class":"fx","market":"aud","cftc_code":"232741"},{"name":"S&P 500","class":"index","market":"sp500","cftc_code":"13874+"},{"name":"Nasdaq 100 (E-mini)","class":"index","market":"nasdaq","cftc_code":"209742"},{"name":"Dow Jones (DJIA x$5)","class":"index","market":"djia","cftc_code":"124603"},{"name":"Gold","class":"metal","market":"gold","cftc_code":"088691"},{"name":"Silver","class":"metal","market":"silver","cftc_code":"084691"},{"name":"Copper","class":"metal","market":"copper","cftc_code":"085692"},{"name":"Crude Oil WTI","class":"energy","market":"wti","cftc_code":"067651"},{"name":"Natural Gas","class":"energy","market":"natgas","cftc_code":"023651"},{"name":"Corn","class":"grain","market":"corn","cftc_code":"002602"},{"name":"Wheat (SRW)","class":"grain","market":"wheat","cftc_code":"001602"},{"name":"Soybeans","class":"grain","market":"soybeans","cftc_code":"005602"}]},"meta":{"timestamp":"2026-06-12T10:34:56.405Z","request_id":"5a7ad93d-c2fa-4d06-8493-da8851867f73"},"status":"ok","message":"Markets 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":"market is one of /v1/markets keys (gold, eur, sp500, ...). group is noncomm (large speculators, default) or comm (commercial hedgers). weeks is the lookback (26-156, default 156). class filters the screener to fx/index/metal/energy/grain (default all). COT updates Fridays; a 30-minute protective cache fronts the shared CFTC upstream.","groups":["noncomm","comm"],"source":"CFTC Commitments of Traders, legacy futures-only combined report (Socrata), live","classes":["fx","index","metal","energy","grain"],"markets":17,"service":"cotindex-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/index":"COT Index for one market, both trader groups, with extreme flag (market=gold, weeks=156).","GET /v1/markets":"The supported futures markets and their CFTC codes.","GET /v1/screener":"Rank markets by COT Index, flagging crowded extremes (group=noncomm, class=all, weeks=156)."},"description":"COT Index — the normalised Commitments-of-Traders positioning signal, computed live from the CFTC public reporting API (no key). It normalises each trader group's net futures position to a 0-100 percentile over a lookback window (classic 156-week COT Index): above 80 = crowded long (contrarian bearish), below 20 = crowded short (contrarian bullish). index returns one market's COT Index for both large speculators and commercials with an extreme flag; screener ranks a curated set of FX, index, metal, energy and grain futures by their positioning extreme. The normalised positioning-signal cut — distinct from the raw COT-report feed, the price, open-interest and options-positioning APIs. It turns the report into the signal.","upstream_status":"ok","gold_noncomm_cot_index":42.9},"meta":{"timestamp":"2026-06-12T10:34:56.499Z","request_id":"32aba38d-a31b-4d8f-86a6-d12b86d2c726"},"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":750,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1260,"monthly_call_quota":15500,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3780,"monthly_call_quota":84000,"rps_limit":16,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":8460,"monthly_call_quota":470000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/cotindex-api"}