ES futures positioning intelligence for trading agents.
TFF data. Leveraged Funds signal. Percentile context.
x402 pay-per-call · one endpoint · no subscription · no API keys
Updated every Friday after the CFTC release. Full positioning data (long/short/net, percentiles) requires a paid API call.
Every week since 2011. Green = bullish lean (LF crowded short). Red = bearish lean (LF crowded long). Brighter = stronger signal.
rules_triggered so you can audit exactly what fired.{
"instrument": "ES",
"market_code": "13874+",
"dataset": "TFF_futures_only",
"report_date": "2026-03-10",
"data_age_days": 3,
"leveraged_funds": {
"long": 154685,
"short": 512781,
"net": -358096,
"net_chg_wk": 53262,
"percentile_52wk": 58,
"percentile_5yr": 22
},
"asset_managers": {
"long": 1098358,
"short": 197292,
"net": 901066,
"percentile_52wk": 73,
"percentile_5yr": 81
},
"signal": {
"bias": "neutral",
"signal_strength": "none",
"institutional_context": "asset_managers_neutral",
"rules_triggered": [],
"extreme_flag": false
}
}
Drop this into your agent in 5 minutes. Works with Claude, GPT, LangChain, or any x402-compatible client.
import requests
# No API key needed — x402 handles payment
res = requests.get("https://api.positionflow.ai/es/latest")
if res.status_code == 402:
# Handle x402 payment flow
payment_info = res.headers["payment-required"]
# ... sign and resend with payment proof
data = res.json()
bias = data["signal"]["bias"]
strength = data["signal"]["signal_strength"]
rules = data["signal"]["rules_triggered"]
print(f"ES positioning: {bias} ({strength})")
print(f"Rules fired: {rules}")
const res = await fetch("https://api.positionflow.ai/es/latest");
if (res.status === 402) {
// Handle x402 payment — see docs for full flow
const paymentInfo = res.headers.get("payment-required");
}
const { signal, leveraged_funds } = await res.json();
console.log(`Bias: ${signal.bias}, Strength: ${signal.signal_strength}`);
console.log(`LF Net: ${leveraged_funds.net} (${leveraged_funds.percentile_5yr}th pctl 5yr)`);
console.log(`Rules: ${signal.rules_triggered.join(", ")}`);
{
"name": "get_es_positioning",
"description": "Returns the latest ES futures positioning signal from CFTC TFF data. Includes Leveraged Funds and Asset Manager net positions with 52-week and 5-year percentile context, plus a categorical signal with explicit rules.",
"inputSchema": {
"type": "object",
"properties": {}
}
}
Connect your wallet and make a live x402 call. Pay $1.00 USDC on Base, get the full positioning snapshot.
Leveraged Funds net positioning at 5-year percentile extremes. Above 80th = bearish_lean (crowded long). Below 20th = bullish_lean (crowded short). Crowded positioning precedes mean reversion.
Asset Manager positioning provides context. When Asset Managers oppose the Leveraged Funds extreme, it strengthens the reversal signal. When they support it, the signal is weaker.
Low: 5yr extreme only. Medium: + Asset Manager opposition. High: + 52wk and 5yr alignment. Every rule is explicit.
Legacy COT lumps hedge funds with pension funds in "non-commercial." TFF separates them. Leveraged Funds = fast money. Asset Managers = structural. The separation is the signal.
Full methodology with historical hit rates at positionflow.ai/methodology
| GET /es/latest | $1.00 USDC via x402 |
| GET /es/history?weeks=52 | $5.00 USDC via x402 |
| GET /es/signal | Free — signal preview only |
| GET /es/signal/timeline | Free — historical signal heatmap |
| GET /health | Free — status check |
Base URL: https://api.positionflow.ai
Data source: CFTC Traders in Financial Futures (TFF), Futures Only, code 13874+
Updated weekly. Published every Friday at 3:30 PM ET.