# TFF Positioning API
> Where the leveraged funds and the asset managers are positioned in the financial futures — currencies, stock indices and interest rates — read live from the CFTC Traders in Financial Futures (TFF) report, no key. For financial futures the CFTC publishes a dedicated breakdown the commodity-style reports do not: Dealer/Intermediary (the sell-side banks), Asset Manager/Institutional (pension funds, mutual funds and insurers — the real-money long-term side), Leveraged Funds (hedge funds and CTAs — the fast speculative money) and Other Reportables. The split between Leveraged Funds and Asset Managers is the one macro traders watch: in the Treasury complex, leveraged funds run the famous cash-futures basis trade short while asset managers sit long, and the gap is a systemic-risk gauge. The positioning endpoint returns, for a market, the full four-group breakdown — each group's long, short and net contracts, share of open interest, trader count and week-over-week change — with a leveraged-funds bias read. The screener endpoint ranks a curated set of 17 FX, equity-index and interest-rate futures by where the leveraged funds (or the asset managers) are net positioned, surfacing the most crowded macro bets. This is the financial-futures TFF positioning cut — distinct from the legacy COT feed, the normalised COT-Index, the commodity Managed-Money report and the price APIs. It is who the hedge funds and the real money are, in the markets that move macro.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/tffpositioning-api/..."
```

## Pricing
- **Free** (Free) — 730 calls/Mo, 2 req/s
- **Starter** ($13/Mo) — 15,600 calls/Mo, 6 req/s
- **Pro** ($39/Mo) — 85,000 calls/Mo, 16 req/s
- **Mega** ($87/Mo) — 474,000 calls/Mo, 40 req/s

## Endpoints

### Positioning

#### `GET /v1/positioning` — Four-group TFF breakdown for one financial future

**Parameters:**
- `market` (query, required, string) — Market key (ust10y, eur, sp500, vix, ...) Example: `ust10y`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tffpositioning-api/v1/positioning?market=ust10y"
```

**Response:**
```json
{
    "data": {
        "name": "UST 10-Year Note",
        "note": "CFTC Traders in Financial Futures (TFF), latest weekly report. net = long - short contracts; net_pct_oi = net as a share of open interest. Leveraged Funds = hedge funds / CTAs (fast speculative money); Asset Managers = pension/mutual funds and insurers (real-money long-term side); Dealers = sell-side intermediaries. net_change_week is the week-over-week change in net. Updated Fridays.",
        "class": "rate",
        "market": "ust10y",
        "source": "CFTC Traders in Financial Futures (futures-only)",
        "dealers": {
            "net": -417784,
            "long": 159245,
            "short": 577029,
            "net_pct_oi": -6.45,
            "net_change_week": 57410
        },
        "report_date": "2026-06-02",
        "open_interest": 6478701,
        "asset_managers": {
            "net": 2311379,
            "bias": "crowded net long",
            "long": 3240635,
            "short": 929256,
            "net_pct_oi": 35.68,
            "long_pct_oi": 50,
            "short_pct_oi": 14.3,
            "net_change_week": 260401
        },
        "leveraged_funds": {
            "net": -1896875,
            "bias": "crowded net short",
            "long": 379854,
            "short": 2276729,
            "net_pct_oi": -29.28,
            "long_pct_oi": 5.9,
            "short_pct_oi": 35.1,
            "traders_long": 53,
            "traders_short": 90,
            "net_change_week": 17885

…(truncated, see openapi.json for full schema)
```

### Screener

#### `GET /v1/screener` — Rank financial futures by leveraged-fund or asset-manager net positioning

**Parameters:**
- `group` (query, optional, string) — lev_money (hedge funds) or asset_mgr (institutional) Example: `lev_money`
- `sort` (query, optional, string) — net_pct, net or change Example: `net_pct`
- `class` (query, optional, string) — fx, index, rate or all Example: `all`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tffpositioning-api/v1/screener?group=lev_money&sort=net_pct&class=all"
```

**Response:**
```json
{
    "data": {
        "note": "Financial futures ranked by leveraged funds (hedge funds / CTAs) net positioning as a share of open interest. High = that group is crowded net long; low/negative = crowded net short. sort=net ranks by raw contracts, sort=change by week-over-week net change. Source CFTC TFF, updated Fridays.",
        "class": "all",
        "count": 17,
        "group": "lev_money",
        "source": "CFTC Traders in Financial Futures (futures-only)",
        "results": [
            {
                "net": 56800,
                "bias": "net long",
                "name": "Australian Dollar",
                "rank": 1,
                "class": "fx",
                "market": "aud",
                "available": true,
                "net_pct_oi": 17.58,
                "long_pct_oi": 25.4,
                "report_date": "2026-06-02",
                "short_pct_oi": 7.8,
                "net_change_week": -1241
            },
            {
                "net": 27022,
                "bias": "net long",
                "name": "British Pound",
                "rank": 2,
                "class": "fx",
                "market": "gbp",
                "available": true,
                "net_pct_oi": 9.12,
                "long_pct_oi": 19.2,
                "report_date": "2026-06-02",
                "short_pct_oi": 10.1,
                "net_change_week": 647
            },
            {
                "net": -21339,
                "bias": "roughly balanced"
…(truncated, see openapi.json for full schema)
```

### Markets

#### `GET /v1/markets` — Supported financial futures and CFTC codes

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tffpositioning-api/v1/markets"
```

**Response:**
```json
{
    "data": {
        "note": "The financial futures covered by the TFF report. Pass market= to /v1/positioning or class= to /v1/screener.",
        "count": 17,
        "groups": {
            "asset_mgr": "asset managers / institutional",
            "lev_money": "leveraged funds (hedge funds / CTAs)"
        },
        "source": "CFTC Traders in Financial Futures",
        "classes": [
            "fx",
            "index",
            "rate"
        ],
        "markets": [
            {
                "name": "Euro FX",
                "class": "fx",
                "market": "eur",
                "cftc_code": "099741"
            },
            {
                "name": "Japanese Yen",
                "class": "fx",
                "market": "jpy",
                "cftc_code": "097741"
            },
            {
                "name": "British Pound",
                "class": "fx",
                "market": "gbp",
                "cftc_code": "096742"
            },
            {
                "name": "Australian Dollar",
                "class": "fx",
                "market": "aud",
                "cftc_code": "232741"
            },
            {
                "name": "Swiss Franc",
                "class": "fx",
                "market": "chf",
                "cftc_code": "092741"
            },
            {
                "name": "Canadian Dollar",
                "class": "fx",
                "market": "cad",
                "cftc_code": "090741"
  
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tffpositioning-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "market is one of /v1/markets keys (ust10y, eur, sp500, vix, ...). screener group is lev_money (hedge funds, default) or asset_mgr (institutional); sort is net_pct (default, net as % of OI), net (raw contracts) or change (week-over-week); class filters to fx/index/rate. TFF updates Fridays; a 30-minute protective cache fronts the shared CFTC upstream.",
        "groups": [
            "lev_money",
            "asset_mgr"
        ],
        "source": "CFTC Traders in Financial Futures (Socrata yw9f-hn96), live",
        "classes": [
            "fx",
            "index",
            "rate"
        ],
        "markets": 17,
        "service": "tffpositioning-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/markets": "The supported financial futures and their CFTC codes.",
            "GET /v1/screener": "Rank financial futures by leveraged-fund or asset-manager net positioning (group=lev_money, sort=net_pct, class=all).",
            "GET /v1/positioning": "Full four-group TFF breakdown for one financial future (market=ust10y)."
        },
        "description": "TFF positioning — where leveraged funds and asset managers are positioned in financial futures (currencies, stock indices, interest rates), from the CFTC Traders in Financial Futures report (no key). It splits the market into Dealers (sell-side), Asset Managers (real-money institutional), Leveraged Funds (hedge funds) and Other — the bre
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/tffpositioning-api
OpenAPI spec: https://www.oanor.com/api/tffpositioning-api/openapi.json
