---
title: "Get CFTC positioning"
method: GET
path: "/v1/indicators/cftc-positioning"
tags: ["Indicators"]
---

# Get CFTC positioning

`GET /v1/indicators/cftc-positioning`

## Request

- Base URL: `https://api.oilpriceapi.com`
- URL: `https://api.oilpriceapi.com/v1/indicators/cftc-positioning`
- Auth: API key in header `Authorization`

CFTC Legacy Futures Only non-commercial positioning, in contracts. BRENT identifies NYMEX Brent Last Day (06765T), not ICE Brent. This is not disaggregated managed money or combined futures-and-options data. report_date is the source observation date; collected_at/timestamp are collection times and published_at is null when unknown. Metrics join only the same observation date; unavailable fields remain null and coverage reports partial fields. Undated legacy rows are excluded.

## Query parameters

- `commodity` 'WTI' | 'BRENT' | 'NATURAL_GAS' | 'HEATING_OIL' | 'GASOLINE'

## Response `200`

Get CFTC positioning

- object
  - `status` string, required
  - `data` object, required
    - `commodity` string
    - `name` string
    - `positioning` object
    - `signal` string
    - `percentile_1y` number, nullable
    - `week_change` integer, nullable
    - `report_date` string, date
    - `report` object: Dataset, contract_market_code, population, instrument_scope and unit.
    - `coverage` object: Complete/partial status and missing_fields (long, short, commercial_net, open_interest).
    - `collected_at` string, date-time
    - `published_at` string, date-time, nullable
    - `timestamp` string, date-time

## Other responses

- `400`: A required parameter is missing or invalid. The message enumerates valid values.
- `401`: Missing or invalid API key.
- `500`: Unexpected server error. Retry transient failures with bounded backoff and retain the request ID when contacting support.

## Changes

- **2026-10-11** `84bf31be62ff`: 4 breaking, 9 info
  - the `query` request parameter `commodity` was restricted to a list of enum values
  - the response property `data/percentile_1y` became nullable for the status `200`
  - the response property `data/week_change` became nullable for the status `200`
  - the `data/week_change` response's property type changed from `object` to `integer` for status `200`
  - …9 more
- **2026-08-25** `0e79e21dee2e`: 5 info
  - added the new optional `query` request parameter `commodity`
  - added the media type `application/json` for the response with the status `200`
  - added the media type `application/json` for the response with the status `401`
  - added the non-success response with the status `400`
  - …1 more

[Operation history](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/changes/v1/indicators/cftc-positioning/get.md)

---

[API](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1.md) - [All operations](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/revisions/7f8b4d763210?raw)
