---
title: "Get CFTC Commitment of Traders (COT) data"
method: GET
path: "/v1/cot/{currency}"
tags: ["fx_markets"]
---

# Get CFTC Commitment of Traders (COT) data

`GET /v1/cot/{currency}`

## Request

- Base URL: `https://api.fxmacrodata.com`
- URL: `https://api.fxmacrodata.com/v1/cot/{currency}`
- Auth: one of:
  - none
  - API key in header `X-API-Key`
  - HTTP bearer

Returns weekly CFTC Commitment of Traders report data for the specified currency's futures contract. The default is the Legacy Futures-Only report; `report=` selects the Legacy combined, Traders in Financial Futures (TFF) futures-only / combined, or Disaggregated futures-only report from the same CFTC public datasets.

**Supported currencies:** AUD, CAD, CHF, EUR, GBP, JPY, NZD, USD, XAU

**Path Parameters:**
- `currency`: 3-letter currency code (e.g., EUR, GBP, JPY).

**Query Parameters:**
- `start_date`: Optional. Start date YYYY-MM-DD. Defaults to 52 weeks ago.
- `end_date`: Optional. End date YYYY-MM-DD. Defaults to today.
- `report`: Optional. One of `legacy_futures` (default), `legacy_combined`, `tff_futures`, `tff_combined`, `disaggregated_futures`. TFF reports return dealer / asset manager / leveraged funds / other reportable long, short, spreading and net positions for FX contracts and the dollar index; the Disaggregated report (producer/merchant, swap dealer, managed money, other reportable) is published for XAU only. A report the CFTC does not publish for the instrument returns 404 with the available list.

**Authentication:** USD data is publicly available on the same freemium terms as USD announcements: anonymous callers are limited to the most recent 90 days (an earlier `start_date` is clamped automatically) and a new report becomes readable 15 minutes after the CFTC publishes it. All other currencies require a professional API key supplied via `?api_key=<key>` or the `X-API-Key` header. Authenticated callers (any valid key) receive the full requested history for every currency.

**Data source:** CFTC public reporting API — Legacy futures-only https://publicreporting.cftc.gov/resource/6dca-aqww.json; Legacy combined jun7-fc8e; TFF futures-only gpe5-46if; TFF combined yw9f-hn96; Disaggregated futures-only 72hh-3qpy. Non-default reports echo `report`, `report_name`, `report_dataset_id` and `available_reports`.

## Path parameters

- `currency` 'AUD' | 'CAD' | 'CHF' | 'EUR' | 'GBP' | 'JPY' | 'NZD' | 'USD' | 'XAU', required

## Query parameters

- `start_date` string: Start date YYYY-MM-DD
- `end_date` string: End date YYYY-MM-DD
- `limit` integer: Maximum rows to return. Defaults to 20. Maximum 100.
- `offset` integer: Number of rows to skip after most-recent-first ordering.
- `page` integer, nullable: One-based page number. When supplied, it takes precedence over offset.
- `report` 'legacy_futures' | 'legacy_combined' | 'tff_futures' | 'tff_combined' | 'disaggregated_futures', nullable: CFTC report type. `legacy_futures` (default): Legacy Futures-Only report with commercial / non-commercial / non-reportable positions. `legacy_combined`: the same categories from the futures-and-options combined report. `tff_futures` / `tff_combined`: Traders in Financial Futures report with dealer, asset manager, leveraged funds, other reportable and non-reportable long / short / spreading positions (FX contracts and the dollar index; not gold). `disaggregated_futures`: producer/merchant, swap dealer, managed money and other reportable positions (COMEX gold only). Each report adds the matching `*_net` and `*_zscore` columns.
- `api_key` string: Your Individual or Business API key

## Response `200`

COT report history for the selected futures market.

- COTResponse
  - `currency` string, required
  - `instrument` string, required
  - `report` string, nullable
  - `report_name` string, nullable
  - `report_dataset_id` string, nullable
  - `available_reports` string[], nullable
  - `source` string, required
  - `source_url` string, required
  - `provenance` COTProvenance, required
    - `publisher` string, required
    - `publisher_url` string, required
    - `storage` string, required
    - `served_by` string, required
    - `timestamp_field` string, required
    - `value_field` string, required
  - `fx_overlay` COTFXOverlay, required
    - `pair` string, required
  - `start_date` string, required
  - `end_date` string, required
  - `latest_available_date` string, nullable
  - `latest_available_announcement_datetime` integer, nullable
  - `expected_next_release` string, nullable
  - `expected_next_release_epoch` integer, nullable
  - `last_sync_status` string, required
  - `last_sync_datetime` string, nullable
  - `data_lag_days` integer, nullable
  - `next_expected_cftc_report_date` string, nullable
  - `next_expected_cftc_release_date` string, nullable
  - `expected_next_release_holiday_adjusted` boolean, nullable
  - `expected_next_release_source` string, nullable
  - `expected_next_release_source_url` string, nullable
  - `expected_next_release_schedule_storage` string, nullable
  - `expected_next_release_schedule_last_updated` string, nullable
  - `requested_window_has_data` boolean, nullable
  - `requested_window_latest_date` string, nullable
  - `requested_window_includes_latest_available` boolean, nullable
  - `page_includes_latest_available` boolean, nullable
  - `last_updated` string, nullable
  - `data_quality` DataQuality, required
    - `source_freshness` string, nullable
    - `source_monitoring_complete` boolean, nullable
    - `known_source_gap` boolean, nullable
    - `source_checked_at` integer, nullable
    - `source_check_expires_at` integer, nullable
    - `latest_published_period` string, nullable
    - `source_permission_status` string, nullable
    - `commodity_coverage` CommodityCoverage
      - `scope` string, required
      - `requested_start` string, nullable
      - `requested_end` string, nullable
      - `available_start` string, nullable
      - `available_end` string, nullable
      - `input_row_count` integer, required
      - `row_count` integer, required
      - `distinct_date_count` integer, required
      - `duplicate_date_row_count` integer, required
      - `excluded_weekend_row_count` integer, required
      - `invalid_date_row_count` integer, required
      - `expected_weekday_label_count` integer, required
      - `missing_weekday_label_count` integer, required
      - `largest_missing_weekday_run` integer, required
      - `largest_calendar_gap_days` integer, required
      - `missing_weekday_ranges` CommodityMissingWeekdayRange[], required
        - `start_date` string, required
        - `end_date` string, required
        - `weekday_count` integer, required
      - `longest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `latest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `sparse_history` boolean, required
      - `coverage_basis` string, required
      - `continuous_coverage_verified` boolean
      - `reference_only` boolean
      - `executable_quotes` boolean
      - `provenance_version` integer, required
      - `repaired_excluded_weekend_row_count` integer
      - `repaired_invalid_date_row_count` integer
    - `stored_history_coverage` CommodityCoverage
      - `scope` string, required
      - `requested_start` string, nullable
      - `requested_end` string, nullable
      - `available_start` string, nullable
      - `available_end` string, nullable
      - `input_row_count` integer, required
      - `row_count` integer, required
      - `distinct_date_count` integer, required
      - `duplicate_date_row_count` integer, required
      - `excluded_weekend_row_count` integer, required
      - `invalid_date_row_count` integer, required
      - `expected_weekday_label_count` integer, required
      - `missing_weekday_label_count` integer, required
      - `largest_missing_weekday_run` integer, required
      - `largest_calendar_gap_days` integer, required
      - `missing_weekday_ranges` CommodityMissingWeekdayRange[], required
        - `start_date` string, required
        - `end_date` string, required
        - `weekday_count` integer, required
      - `longest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `latest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `sparse_history` boolean, required
      - `coverage_basis` string, required
      - `continuous_coverage_verified` boolean
      - `reference_only` boolean
      - `executable_quotes` boolean
      - `provenance_version` integer, required
      - `repaired_excluded_weekend_row_count` integer
      - `repaired_invalid_date_row_count` integer
    - `point_in_time_basis` string, nullable
    - `is_official` boolean, required
    - `is_proxy` boolean, required
    - `is_fallback` boolean, required
    - `is_stale` boolean, required
    - `has_announcement_datetime` boolean, required
    - `point_in_time_safe` boolean, required: Whether the returned values have verified availability and vintage evidence; estimated release times do not qualify.
    - `unverified_vintage_count` integer
    - `unknown_publication_time_count` integer
    - `latest_available_date` string, nullable
    - `last_updated` string, nullable
    - `data_lag_days` integer, nullable
    - `source_name` string, nullable
    - `source_type` 'official' | 'public' | 'fallback' | 'derived', required
    - `is_derived` boolean
    - `row_count` integer
    - `announcement_datetime_count` integer
    - `missing_announcement_datetime_count` integer
    - `has_assumed_release_times` boolean: True when at least one row in the quality scope carries a publication timestamp derived from the publication lag measured on that series' own confirmed releases, because no official release calendar reaches the period.
    - `assumed_release_time_count` integer: Number of rows in the quality scope whose publication timestamp was derived rather than captured. Compare against row_count to size the derived portion of the requested window.
    - `bounded_release_time_count` integer: Legacy rows carrying an upper-bound estimate flag; this does not certify replay safety.
    - `unbounded_release_time_count` integer: Assumed timestamps without proven availability bounds.
    - `quality_scope` string
    - `stale_after_days` integer, nullable
    - `requested_window_has_data` boolean, nullable
    - `requested_window_latest_date` string, nullable
    - `requested_window_includes_latest_available` boolean, nullable
    - `page_includes_latest_available` boolean, nullable
    - `returned_latest_available_before_window` boolean, nullable
    - `staleness_days` integer, nullable
    - `reason` string, nullable
    - `datetime_field` string, nullable
    - `datetime_precision` string, nullable
    - `datetime_semantics` string, nullable
    - `source_legs` object[], nullable
    - `historical_point_in_time` PointInTimeCompleteness: Coverage of source-confirmed publication timestamps for a dataset.
      - `row_count` integer, required
      - `announcement_datetime_count` integer, required
      - `missing_announcement_datetime_count` integer, required
      - `assumed_release_time_count` integer
      - `bounded_release_time_count` integer
      - `unbounded_release_time_count` integer
      - `unverified_vintage_count` integer
      - `unknown_publication_time_count` integer
      - `point_in_time_safe` boolean, required
  - `pagination` COTPaginationInfo, required
    - `limit` integer, required
    - `offset` integer, required
    - `returned_count` integer, required
    - `total_count` integer, required
    - `has_more` boolean, required
    - `next_offset` integer, nullable
  - `data` COTDataPoint[], required
    - `date` string, required
    - `announcement_datetime` integer, nullable
    - `open_interest` integer, nullable
    - `noncommercial_long` integer, nullable
    - `noncommercial_short` integer, nullable
    - `noncommercial_net` integer, nullable
    - `noncommercial_spread` integer, nullable
    - `commercial_long` integer, nullable
    - `commercial_short` integer, nullable
    - `commercial_net` integer, nullable
    - `total_reportable_long` integer, nullable
    - `total_reportable_short` integer, nullable
    - `nonreportable_long` integer, nullable
    - `nonreportable_short` integer, nullable
    - `open_interest_zscore` number, nullable
    - `noncommercial_long_zscore` number, nullable
    - `noncommercial_short_zscore` number, nullable
    - `noncommercial_net_zscore` number, nullable
    - `noncommercial_spread_zscore` number, nullable
    - `commercial_long_zscore` number, nullable
    - `commercial_short_zscore` number, nullable
    - `commercial_net_zscore` number, nullable
    - `total_reportable_long_zscore` number, nullable
    - `total_reportable_short_zscore` number, nullable
    - `nonreportable_long_zscore` number, nullable
    - `nonreportable_short_zscore` number, nullable
    - `dealer_long` integer, nullable
    - `dealer_short` integer, nullable
    - `dealer_spread` integer, nullable
    - `dealer_net` integer, nullable
    - `asset_manager_long` integer, nullable
    - `asset_manager_short` integer, nullable
    - `asset_manager_spread` integer, nullable
    - `asset_manager_net` integer, nullable
    - `leveraged_funds_long` integer, nullable
    - `leveraged_funds_short` integer, nullable
    - `leveraged_funds_spread` integer, nullable
    - `leveraged_funds_net` integer, nullable
    - `other_reportable_long` integer, nullable
    - `other_reportable_short` integer, nullable
    - `other_reportable_spread` integer, nullable
    - `other_reportable_net` integer, nullable
    - `nonreportable_net` integer, nullable
    - `producer_merchant_long` integer, nullable
    - `producer_merchant_short` integer, nullable
    - `producer_merchant_net` integer, nullable
    - `swap_dealer_long` integer, nullable
    - `swap_dealer_short` integer, nullable
    - `swap_dealer_spread` integer, nullable
    - `swap_dealer_net` integer, nullable
    - `managed_money_long` integer, nullable
    - `managed_money_short` integer, nullable
    - `managed_money_spread` integer, nullable
    - `managed_money_net` integer, nullable
    - `dealer_long_zscore` number, nullable
    - `dealer_short_zscore` number, nullable
    - `dealer_spread_zscore` number, nullable
    - `dealer_net_zscore` number, nullable
    - `asset_manager_long_zscore` number, nullable
    - `asset_manager_short_zscore` number, nullable
    - `asset_manager_spread_zscore` number, nullable
    - `asset_manager_net_zscore` number, nullable
    - `leveraged_funds_long_zscore` number, nullable
    - `leveraged_funds_short_zscore` number, nullable
    - `leveraged_funds_spread_zscore` number, nullable
    - `leveraged_funds_net_zscore` number, nullable
    - `other_reportable_long_zscore` number, nullable
    - `other_reportable_short_zscore` number, nullable
    - `other_reportable_spread_zscore` number, nullable
    - `other_reportable_net_zscore` number, nullable
    - `nonreportable_net_zscore` number, nullable
    - `producer_merchant_long_zscore` number, nullable
    - `producer_merchant_short_zscore` number, nullable
    - `producer_merchant_net_zscore` number, nullable
    - `swap_dealer_long_zscore` number, nullable
    - `swap_dealer_short_zscore` number, nullable
    - `swap_dealer_spread_zscore` number, nullable
    - `swap_dealer_net_zscore` number, nullable
    - `managed_money_long_zscore` number, nullable
    - `managed_money_short_zscore` number, nullable
    - `managed_money_spread_zscore` number, nullable
    - `managed_money_net_zscore` number, nullable
    - `report_date` string, nullable
    - `cutoff_date` string, nullable
    - `release_date` string, nullable
    - `release_datetime` string, nullable
    - `release_date_confirmed` boolean, nullable
    - `release_time_assumed` boolean, nullable
    - `release_source` string, nullable
    - `release_source_url` string, nullable
    - `holiday_adjusted_release` boolean, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api.md) · [All operations](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api/revisions/fadaa543b154?raw)
