The COT report API built for positioning signals
Weekly Commitments of Traders data for every CFTC contract as clean JSON. Each contract is scored against its own history, so you see crowding in one number instead of a raw report.
What is included?
Everything ships on the same observation model as the rest of the API, with provenance on every row.
Every contract
972 CFTC contracts from the weekly legacy report, from gold and crude to currencies and rates futures.
History to 1986
Raw reports are stored back to January 1986, the full published history of the legacy report.
Percentiles since 1992
Net positioning is ranked against each contract's own history, week by week, since 1992.
Crowded trade flags
Extreme readings carry crowded long and crowded short flags, so screens stay simple.
Point in time
Every value is stored as it was known on release day. Backtests never see the future.
JSON, SDK and MCP
Cursor pagination, stable error codes, a typed TypeScript client and a hosted MCP server for agents.
What does the COT report API return?
For any contract and week you get net positioning, the percentile of that positioning against the contract's own history, and crowding flags at the extremes. Gold printed a 93.3rd percentile net long the week of its 2011 top and 2.9 at the 2015 bottom. Those two numbers are live on the API today and you can pull them with a free key.
Percentiles run weekly since 1992 and the underlying reports are stored back to 1986, so a positioning backtest can cover every major cycle since the report existed.
{
"data": [{
"entityId": "instrument_cftc_gold_commodity_exchange_inc",
"indicatorId": "indicator_cot_positioning_percentile",
"valueNumeric": 93.3,
"unit": "percentile",
"frequency": "weekly",
"periodEnd": "2011-08-02T00:00:00.000Z",
"revisionStatus": "final",
"metadata": { "derivedFrom": ["indicator_cot_positioning"] },
"rights": {
"exposureClass": "public_api_allowed",
"redistributionAllowed": "allowed"
}
}],
"meta": { "api_version": "v1", "pagination": { "limit": 1, "has_more": false } }
}A real row from the live API: gold futures, the week of the 2011 top. The 93.3 means net positioning was more stretched than 93 percent of its own history.
How is this different from the CFTC website?
The CFTC publishes raw weekly files. Turning them into a signal means downloading decades of archives, matching contract codes across renames, deduplicating revisions and computing rolling percentile ranks. This API does all of that once, then serves the result as predictable JSON with provenance back to the official release on every row.
Agents can use the same data through the hosted MCP server. One URL plus your key, and Claude, Cursor or any MCP client can query positioning by name.
Common questions
The short answers, straight from the documentation.
Start with the macro data, ship the rest faster
Free tier, no card. One key, one API and every macro number, with a hosted MCP server for your agent.
Get your free API key