Macroeconomic & markets

CFTC Commitments of Traders

Returns CFTC Commitments of Traders (COT) report rows, weekly aggregated futures + options-on-futures positioning by trader class. The COT report is the macro positioning dataset for U.S.

EndpointGET /v1/cftc-cot-reports
SourceCFTC COT
Authx-api-key, a free key works

Live from the data

Loading the latest numbers…

What it returns

One record per result. Fields (from a live response):

Filters

idDirect doc lookup ({contract_code}-{YYYY-MM-DD}). Fastest path.
cftc_contract_market_codeExact CFTC contract code (e.g., '13874A' = E-mini S&P 500, '088691' = Gold, '067651' = Crude Oil WTI).
contract_market_nameCase-insensitive substring on contract_market_name (e.g., 'S&P 500', 'GOLD', 'CRUDE OIL', 'JAPANESE YEN'); a needle of 3 characters or fewer matches WHOLE WORDS ('GAS' finds 'NAT GAS', not 'GASOLINE'). Applied client-side, within a bounded window.
commodity_nameExact commodity name from CFTC's catalog (e.g., 'S&P 500 STOCK INDEX', 'GOLD', 'CRUDE OIL', 'EURO FX').
sinceInclusive lower bound on report_date (YYYY-MM-DD).
untilInclusive upper bound on report_date (YYYY-MM-DD).
latest_onlyWhen true, returns only the most recent report row per contract (one row per contract instead of weekly history).
sort_bySort key. Default: report_date. report_date, open_interest, noncomm_net, comm_net.
sort_orderDefault: desc.
limitMax records. Default 50, max 500.

Example request

curl "https://api.keyvex.com/v1/cftc-cot-reports?limit=1" \
  -H "x-api-key: YOUR_KEY"

Response

{
  "results": [
    {
      "comm_long": 5625,
      "commodity_code": "865",
      "traders_noncomm_short": 5,
      "nonrept_short": 0,
      "contract_market_name": "GULF # 6 FUEL OIL CRACK",
      "pct_comm_long": 66.2,
      "market_and_exchange_names": "GULF # 6 FUEL OIL CRACK - NEW YORK MERCANTILE EXCHANGE",
      "traders_noncomm_long": 5,
      "open_interest": 8500,
      "pct_comm_short": 62.6,
      "source_url": "https://publicreporting.cftc.gov/resource/jun7-fc8e.json?cftc_contract_market_code=86565A&report_date_as_yyyy_mm_dd=2026-06-09T00%3A00%3A00.000",
      "pct_noncomm_short": 14.4,
      "report_week": "2026 Report Week 23",
      "change_noncomm_short": 705,
      "traders_total": 30,
      "change_comm_short": -420,
      "noncomm_spread": 1950,
      "comm_short": 5325,
      "change_nonrept_long": -5,
      "change_nonrept_short": 0,
      "conc_net_le_4_long": 34.7,
      "id": "86565A-2026-06-09",
      "report": "legacy",
      "variant": "combined",
      "pct_nonrept_short": 0,
      "commodity_name": "FUEL OIL/CRUDE OIL",
      "report_date": "2026-06-09",
      "nonrept_long": 0,
      "noncomm_short": 1225,
      "change_noncomm_long": 345,
      "change_comm_long": -55,
      "pct_noncomm_long": 10.9,
      "change_open_interest": 85,
      "conc_net_le_8_long": 47.3,
      "market_code": "NYME",
      "nonrept_net": 0,
      "noncomm_net": -300,
      "conc_net_le_4_short": 32.9,
      "cftc_contract_market_code": "86565A",
      "conc_net_le_8_short": 49.8,
      "pct_nonrept_long": 0,
      "traders_comm_short": 15,
      "noncomm_long": 925,
      "traders_comm_long": 15,
      "comm_net"
      …
    }
  ],
  "count": 1,
  "has_more": true
}

Example questions you can answer

Related datasets

Query CFTC Commitments of Traders from your AI

Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. A free key works: 60 requests/day, one year of history.

Get a free key OpenAPI spec → REST docs →
← All 60+ datasets