CFTC Data
Access Commitments of Traders (COT) report data from the CFTC.
Overview
The CFTC Commitments of Traders (COT) report provides a breakdown of open interest positions held by different categories of traders. Data is released weekly, typically on Fridays, with positions as of the prior Tuesday.
We provide both Legacy and Disaggregated report formats.
The Disaggregated format provides more granular trader categorization.
Get COT Reports
GET
/v1/commodities/{slug}/cot
Returns COT report data for a specific commodity contract. Supports filtering by date range and report format.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| slug | string | Required | Commodity identifier in the URL path (e.g., "WTI_CRUDE_OIL") |
| format | string | Optional | Report format: "legacy" (default) or "disaggregated" |
| start_date | string | Optional | Start date in ISO 8601 format (YYYY-MM-DD) |
| end_date | string | Optional | End date in ISO 8601 format (YYYY-MM-DD) |
| sort_order | string | Optional | Sort order: "asc" or "desc" (default) |
| page | integer | Optional | Page number (default: 1) |
| per_page | integer | Optional | Results per page, max 100 (default: 25) |
Example Request
curl -X GET "https://commodityfundamentals.com/api/v1/commodities/WTI_CRUDE_OIL/cot?format=legacy&start_date=2024-01-01" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
response = requests.get(
"https://commodityfundamentals.com/api/v1/commodities/WTI_CRUDE_OIL/cot",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={
"format": "legacy",
"start_date": "2024-01-01"
}
)
reports = response.json()["data"]
require "net/http"
require "json"
uri = URI("https://commodityfundamentals.com/api/v1/commodities/WTI_CRUDE_OIL/cot")
uri.query = URI.encode_www_form(
format: "legacy",
start_date: "2024-01-01"
)
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http|
http.request(req)
}
reports = JSON.parse(res.body)["data"]
Example Response (Legacy)
{
"data": [
{
"report_date": "2024-06-18",
"commodity": "WTI_CRUDE_OIL",
"exchange": "NYMEX",
"format": "legacy",
"open_interest": 1823456,
"commercial": {
"long": 456789,
"short": 523456,
"spreading": 0,
"net": -66667
},
"non_commercial": {
"long": 634567,
"short": 234567,
"spreading": 312345,
"net": 400000
},
"non_reportable": {
"long": 107755,
"short": 140088,
"net": -32333
}
}
],
"meta": {
"page": 1,
"per_page": 25,
"total": 24,
"total_pages": 1
}
}
Disaggregated Format
The Disaggregated format breaks down traders into four categories instead of two, providing more granular insight into market positioning.
| Category | Description |
|---|---|
| Producer/Merchant | Entities that predominantly produce, process, or merchandise the commodity |
| Swap Dealer | Entities that deal primarily in swaps for the commodity, using futures to hedge risk |
| Managed Money | CTAs, CPOs, and other managed money traders |
| Other Reportable | All other reportable traders that don't fit the above categories |
Available Contracts
The following commodity contracts are available in CFTC data. Use the
slug
value as the identifier in your API URL.
| Commodity ID | Name | Exchange |
|---|---|---|
| WTI_CRUDE_OIL | WTI Crude Oil | NYMEX |
| BRENT_CRUDE | Brent Crude Oil | ICE |
| NATURAL_GAS | Natural Gas | NYMEX |
| GOLD | Gold | COMEX |
| SILVER | Silver | COMEX |
| COPPER | Copper | COMEX |
| CORN | Corn | CBOT |
| SOYBEANS | Soybeans | CBOT |
| WHEAT | Wheat | CBOT |
| COTTON | Cotton No. 2 | ICE |
| SUGAR | Sugar No. 11 | ICE |
| COFFEE | Coffee C | ICE |