Skip to main content
Press ⌘K to search

Futures positioning (CFTC)

CFTC futures positioning — search contracts, weekly Commitments of Traders reports, and the latest snapshot across contracts. Identify a contract by its CFTC market code (for example 067651 for Crude Oil), which you can look up with the contract-search endpoint below.

/v1/cftc/contracts

Search the tracked CFTC futures contracts. An exact market code or verified futures alias such as GC, ES, NQ, WTI, or gold futures wins. Otherwise every punctuation-independent query word must match somewhere across the market code or name before a sparse any-word fallback. Results are sorted by category and then market name — use them to find the market code you pass to the positioning endpoints. The tracked universe is a curated set of ~35 major contracts; omit query to list all of them (the default limit fits the full universe), and treat an empty result as a tracked-set miss rather than proof that the contract does not exist.

Parameters: query (optional) — market code, verified alias, or search words (e.g. 088691, GC, gold futures, crude oil); omit to list every tracked contract; limit (optional, default 50, max 500). Returns a data list (no meta).

curl "https://api.equibles.com/v1/cftc/contracts?query=crude%20oil" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/cftc/contracts?query=crude%20oil",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/cftc/contracts?query=crude%20oil", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "marketCode": "067651",
      "marketName": "Crude Oil, Light Sweet (NYMEX)",
      "category": "Energy"
    }
  ]
}

/v1/cftc/contracts/

Weekly Commitments of Traders (COT) positioning for a single contract, newest first — open interest plus commercial and non-commercial long, short, and spread positions.

Parameters: {marketCode} (path) — CFTC market code (e.g. 067651 for Crude Oil); startDate / endDate (optional, YYYY-MM-DD; default: the last year); limit (optional, default 52, max 500) and offset for paging.

curl "https://api.equibles.com/v1/cftc/contracts/067651/positions?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/cftc/contracts/067651/positions?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/cftc/contracts/067651/positions?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "reportDate": "2026-07-07",
      "openInterest": 1905761,
      "commLong": 924510,
      "commShort": 1029132,
      "nonCommLong": 317773,
      "nonCommShort": 242024,
      "nonCommSpreads": 584653
    },
    {
      "reportDate": "2026-06-30",
      "openInterest": 1914443,
      "commLong": 902424,
      "commShort": 1042572,
      "nonCommLong": 340698,
      "nonCommShort": 230167,
      "nonCommSpreads": 594641
    }
  ],
  "meta": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "hasMore": true
  }
}

/v1/cftc/positions/latest

The latest COT snapshot across every tracked contract — one row per contract with its report date, open interest, and net commercial and non-commercial positions (long minus short); the report fields are null for any contract without a stored report yet.

Parameters: category (optional) — filter by Agriculture, Energy, Metals, EquityIndices, InterestRates, or Currencies (defaults to all). Not paged: returns one data row per tracked contract (no meta).

curl "https://api.equibles.com/v1/cftc/positions/latest" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/cftc/positions/latest",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/cftc/positions/latest", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "marketCode": "083731",
      "marketName": "Coffee C (ICE)",
      "category": "Agriculture",
      "reportDate": "2026-07-07",
      "openInterest": 174440,
      "commNet": -27568,
      "nonCommNet": 25623
    },
    {
      "marketCode": "002602",
      "marketName": "Corn (CBOT)",
      "category": "Agriculture",
      "reportDate": "2026-07-07",
      "openInterest": 1711613,
      "commNet": -67654,
      "nonCommNet": 100980
    }
  ]
}

Try it with a real key

Every example on this page runs against the live API. A free account includes an API key and MCP access — set up in under a minute.

Get your free API key