COT Data API
Programmatic access to weekly CFTC Commitments of Traders data across three report tables — Legacy (900+ markets), TFF (130+ financial instruments), and Disaggregated (640+ physical commodities). Pull net positioning, COT Index percentiles, and week-on-week changes for any instrument directly into your application or research environment.
- 900+ instruments
- 3-year rolling history
- 60 req/min · 500 req/day
- Bearer token by email
Secure checkout via Stripe
Tiers
Free
£0No sign-up required. No auth header.
- Latest week only (no from/to params)
- All 900+ instruments
- Full dense response — positioning, COT Index, z-scores
- 10 requests / minute
- US Dollar Index: full history open to all as a live demo
Paid
Bearer token included on purchase.
- 3-year rolling history for every instrument
- All 900+ instruments with full date range
- from / to query params unlocked
- 60 requests / minute · 500 requests / day
- Dedicated API token — revoke or rotate any time
PDF user guide
8-page printable reference — authentication, code examples (PowerShell, curl, Python, Node, Excel, Sheets), CFTC code lookup table, troubleshooting.
Endpoint
Single endpoint. All instruments. Three report tables: Legacy, TFF, Disaggregated.
Response — latest mode
Without from / to the API returns a single dense object for the most recent report date. Pass from to get { instrument, table, count, rows: [...] } for charting.
{
"cftc_code": "088691",
"market_name": "Gold",
"exchange": "COMEX",
"report_date": "2024-12-31",
"table": "legacy",
"non_commercial": {
"long": 286741,
"short": 34892,
"net": 251849,
"net_change": 3124,
"cot_index_26w": 71,
"cot_index_52w": 68,
"cot_index_3y": 74,
"zscore_26w": 1.12,
"zscore_52w": 0.94,
"pct_long": 89.1
},
"commercial": {
"long": 98432,
"short": 347821,
"net": -249389,
"net_change": -2876,
"pct_long": 22.1
},
"small_traders": {
"long": 22341,
"short": 24882,
"net": -2541
},
"open_interest": 407514
}{
"cftc_code": "099741",
"market_name": "Euro FX",
"exchange": "CME",
"report_date": "2024-12-31",
"table": "tff",
"leveraged_funds": {
"long": 142318,
"short": 198472,
"net": -56154,
"net_change": -8421,
"cot_index_26w": 18,
"cot_index_52w": 24,
"cot_index_3y": 31,
"zscore_26w": -1.42,
"zscore_52w": -1.18,
"pct_long": 41.74
},
"dealer_intermediary": {
"long": 88241,
"short": 64187,
"net": 24054,
"net_change": 3128,
"pct_long": 57.89
},
"asset_mgr": {
"long": 432187,
"short": 71294,
"net": 360893
},
"other_rept": {
"long": 41782,
"short": 32918,
"net": 8864
},
"small_traders": {
"long": 28471,
"short": 31204,
"net": -2733
},
"open_interest": 762183
}{
"cftc_code": "088691",
"market_name": "Gold",
"exchange": "COMEX",
"report_date": "2024-12-31",
"table": "disaggregated",
"managed_money": {
"long": 218941,
"short": 24187,
"net": 194754,
"net_change": -4218,
"cot_index_26w": 65,
"cot_index_52w": 71,
"cot_index_3y": 78,
"zscore_26w": 0.84,
"zscore_52w": 1.04,
"pct_long": 90.05
},
"producer_merchant": {
"long": 41827,
"short": 184129,
"net": -142302,
"net_change": 2871,
"pct_long": 18.51
},
"swap_dealer": {
"long": 56918,
"short": 163692,
"net": -106774,
"net_change": 1893
},
"other_rept": {
"long": 32841,
"short": 26431,
"net": 6410,
"net_change": -127
},
"small_traders": {
"long": 22341,
"short": 24882,
"net": -2541
},
"open_interest": 407514
}TFF groups: Leveraged Funds, Dealer/Intermediary, Asset Managers, Other Reportables. COT Index and Z-score are computed against the Leveraged Funds net series. Disaggregated groups: Managed Money, Producer/Merchant, Swap Dealers, Other Reportables. Indicators are computed against the Managed Money net series. Both tables also return the Non-Reportable small_traders group.
Field reference
Every field returned by the latest-mode response, by table. History mode (with from/to) returns the underlying database rows directly with one row per weekly report.
Top-level fields (all tables)
| Field | Type | Notes |
|---|---|---|
| cftc_code | string | CFTC contract market code (may end with "+" for consolidated contracts). |
| market_name | string | CFTC's contract name (e.g. "GOLD"). Falls back to a friendly name if empty. |
| exchange | string? | CFTC market code such as CMX, NYM, CBT (may be null). |
| report_date | string | YYYY-MM-DD — Tuesday cutoff date of the report. |
| table | string | "legacy" | "tff" | "disaggregated". |
| open_interest | number | Total open interest across all categories. |
Per-group fields
All groups return long, short, net, and (where shown below) net_change. The primary speculator group additionally returns COT Index, Z-score, and percent-long.
| Table | Group key | CFTC name | Indicators? |
|---|---|---|---|
| legacy | non_commercial | Non-Commercials (large speculators) | ✓ |
| legacy | commercial | Commercials (hedgers) | pct_long |
| legacy | small_traders | Non-Reportables | — |
| tff | leveraged_funds | Leveraged Funds | ✓ |
| tff | dealer_intermediary | Dealer / Intermediary | pct_long |
| tff | asset_mgr | Asset Manager / Institutional | — |
| tff | other_rept | Other Reportables | — |
| tff | small_traders | Non-Reportables | — |
| disaggregated | managed_money | Managed Money | ✓ |
| disaggregated | producer_merchant | Producer / Merchant / Processor / User | pct_long |
| disaggregated | swap_dealer | Swap Dealers | — |
| disaggregated | other_rept | Other Reportables | — |
| disaggregated | small_traders | Non-Reportables | — |
Indicator fields (on the primary speculator group only)
| Field | Type | Range | Notes |
|---|---|---|---|
| long | integer | ≥ 0 | Raw long contracts held by the group. |
| short | integer | ≥ 0 | Raw short contracts held by the group. |
| net | integer | — | long − short. |
| net_change | integer | — | Week-on-week change in net (CFTC-supplied). |
| cot_index_26w | number | 0–100 | Percentile rank of current net within the last 26 weekly nets. |
| cot_index_52w | number | 0–100 | Percentile rank over 52 weeks. |
| cot_index_3y | number | 0–100 | Percentile rank over 156 weeks (≈ 3 years). |
| zscore_26w | number | — | (current − 26w mean) / 26w std (population std). |
| zscore_52w | number | — | Same shape, 52-week window. |
| pct_long | number | 0–100 | long / (long + short) × 100, two decimal places. |
Primary speculator group = non_commercial (legacy), leveraged_funds (tff), managed_money (disaggregated). Indicators are pre-computed and stored at ingestion, not at query time.
Rate limits
| Tier | Requests / minute | Requests / day | History |
|---|---|---|---|
| Free | 10 | Unlimited | Latest week only |
| Paid | 60 | 500 | 3-year rolling window |
The 3-year window is a rolling cutoff from today's date. For full history back to 1986, see the one-time data dump.
Common questions
How do I authenticate?
Add an Authorization: Bearer <token> header to your requests. After purchase, you receive an email with a single-use download link. Open it once to retrieve your API token. The link expires after first use — save the token somewhere safe, there is no account portal to retrieve it from.
When is data updated?
The CFTC publishes each Friday's report by approximately 3:30 PM Eastern. Our API typically reflects the new data within minutes of publication.
What does "3-year rolling window" mean?
The from parameter is capped at three years before today. If you pass an earlier date it is silently clamped. For data going back to 1986, purchase the one-time data dump instead.
What is the TFF table?
Traders in Financial Futures — a supplemental CFTC report breaking out Dealer/Intermediary, Asset Manager, Leveraged Funds, and Other Reportables. Pass table=tff to access it.
What is the disaggregated table?
CFTC Disaggregated COT — breaks the Commercial bucket into Producer/Merchant and Swap Dealers, and the Non-Commercial bucket into Managed Money and Other Reportables. Covers physical-commodity markets back to 2006. Pass table=disaggregated to access it.
Can I use this commercially?
Yes. CFTC Commitments of Traders data is published by a US government agency and is in the public domain. You are free to use the data in your own products, research, or services.
How do I find CFTC codes for instruments?
Every instrument page on cotdata.net shows its CFTC code. Alternatively, call the API without a from/to param on any instrument slug — the cftc_code field is in the response.
Get API access
£19/month. Full 3-year history, 900+ markets, 60 req/min. Cancel any time.
Secure checkout via Stripe · Token delivered by email · Cancel any time from your Stripe billing portal
