📉 cftc¶
CFTC-jurisdiction swap and derivatives transaction data, publicly disseminated from the DTCC Global Trade Repository under 17 CFR Part 43 (Dodd-Frank). Daily end-of-day cumulative files across five asset classes — rates, credit, forex, equities and commodities — carrying notional amounts, prices, effective and expiration dates, clearing status and counterparty jurisdiction. Coverage starts 2024-01-01, the post-Part-43/45 rewrite schema; earlier years use an incompatible field structure and are not included.
9 datasets · 168 columns
cftc_trades · table¶
CFTC swap trade public dissemination records from DTCC GTR. Each row is one reported swap event (new trade, amendment, termination, correction). Covers all five CFTC asset classes, one per partition: RATES, CREDITS, FOREX, EQUITIES, COMMODITIES (the source short code IR/CR/FX/EQ/CO is preserved in asset_class_code). Partitioned by asset_class/year/month. Daily EOD files from 2024-01-01; weekends and holidays produce no file (skipped cleanly). For new trades only: WHERE action_type = 'NEWT'. For live trades: exclude action_type IN ('TERM','CORR','EROR'). Join on dissemination_id / original_dissemination_id to reconstruct amendment chains. For a narrower, asset-class-specific column set see rate_swaps, credit_default_swaps, fx_derivatives, equity_derivatives, and commodity_derivatives; for daily aggregate summaries see swap_activity and clearing_activity.
| Column | Type | Null | Description |
|---|---|---|---|
dissemination_ |
string | no | Unique identifier assigned by DTCC for this dissemination event (PK) |
original_ |
string | yes | References the original NEWT dissemination_id for amendments/terminations |
action_ |
string | no | NEWT=new trade, AMND=amendment, TERM=termination, CORR=correction, EROR=error, NOVA=novation |
event_ |
string | yes | TRAD=trade, NOVA=novation, CLRG=clearing |
event_ |
timestamp | no | UTC timestamp of the swap event |
amendment_ |
string | yes | Indicates whether the record is an amendment to a prior submission |
asset_ |
string | yes | CFTC standard asset-class code from the source file — IR (rates), CR (credit), FX, EQ (equity), CO (commodity). Redundant with the asset_class partition (the DTCC file is pre-split by class) but kept for analyst convenience and joins. |
product_ |
string | yes | Standard product description (e.g. 'Swap OIS USD', 'Index CDS') |
unique_ |
string | yes | UPI code identifying the swap product per ANNA DSB taxonomy |
upi_ |
string | yes | Financial Instrument Short Name from UPI |
upi_ |
string | yes | Underlier name from UPI (e.g. 'USD-SOFR-COMPOUND', 'CDX.NA.IG') |
cleared |
string | yes | Y=centrally cleared (per CFTC/DTCC CDE data element #1). Almost never seen in this table: Y is reported only on the CCP-facing "beta"/"gamma" novation legs created when a swap clears, and those legs are explicitly excluded from Part 43 public real-time dissemination ("Not Disseminated" per the CFTC Technical Specification's clearing novation example) — this file carries only the original "alpha" transaction. N=not centrally cleared (bilateral). I=Intent to clear — the alpha transaction is planned for submission to clearing; most I rows do go on to clear, but that outcome is recorded on a separate, non-disseminated transaction, not by amending this row. |
mandatory_ |
boolean | yes | Whether this swap is subject to mandatory clearing under CFTC rules |
execution_ |
timestamp | yes | UTC timestamp when the trade was executed |
platform_ |
string | yes | SEF or DCM venue identifier where the trade was executed |
block_ |
boolean | yes | True if the trade qualifies as a block trade (delayed reporting) |
large_ |
boolean | yes | True if large notional off-facility swap delayed reporting elected |
prime_ |
boolean | yes | True if this is a prime brokerage transaction |
effective_ |
date | yes | Date the swap begins accruing |
expiration_ |
date | yes | Scheduled maturity/expiration date of the swap |
maturity_ |
date | yes | Maturity date of the underlying instrument (for options/swaptions) |
first_ |
date | yes | Earliest exercise date for options |
notional_ |
double | yes | Notional amount leg1. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see notional_amount_leg1_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
notional_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and notional_amount_leg1 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
notional_ |
boolean | yes | True when the source value carried a trailing '+' — CFTC's Part 43 large-trade disclosure censoring marker, meaning the true notional is at or above the public reporting threshold and notional_amount_leg1 reflects only that threshold, not the real amount. Null when the source value itself is null. |
notional_ |
double | yes | Notional amount leg2. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see notional_amount_leg2_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
notional_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and notional_amount_leg2 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
notional_ |
boolean | yes | True when the source value carried a trailing '+' — see notional_amount_leg1_at_or_above_threshold for the CFTC large-trade censoring convention this reflects. |
notional_ |
string | yes | ISO 4217 currency code for leg 1 notional |
notional_ |
string | yes | ISO 4217 currency code for leg 2 notional |
notional_ |
double | yes | Notional quantity leg1. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see notional_quantity_leg1_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
notional_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and notional_quantity_leg1 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
notional_ |
boolean | yes | True when the source value carried a trailing '+' — CFTC's Part 43 large-trade disclosure censoring marker, meaning the true quantity is at or above the public reporting threshold and notional_quantity_leg1 reflects only that threshold, not the real amount. Null when the source value itself is null. |
notional_ |
double | yes | Notional quantity leg2. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see notional_quantity_leg2_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
notional_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and notional_quantity_leg2 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
notional_ |
boolean | yes | True when the source value carried a trailing '+' — CFTC's Part 43 large-trade disclosure censoring marker, meaning the true quantity is at or above the public reporting threshold and notional_quantity_leg2 reflects only that threshold, not the real amount. Null when the source value itself is null. |
total_ |
double | yes | Total notional quantity leg1. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see total_notional_quantity_leg1_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
total_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and total_notional_quantity_leg1 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
total_ |
boolean | yes | True when the source value carried a trailing '+' — see notional_amount_leg1_at_or_above_threshold for the CFTC large-trade censoring convention this reflects. |
total_ |
double | yes | Total notional quantity leg2. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999999999999999999.99999) — see total_notional_quantity_leg2_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
total_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999999999999999999.99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and total_notional_quantity_leg2 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
total_ |
boolean | yes | True when the source value carried a trailing '+' — CFTC's Part 43 large-trade disclosure censoring marker, meaning the true quantity is at or above the public reporting threshold and total_notional_quantity_leg2 reflects only that threshold, not the real amount. Null when the source value itself is null. |
quantity_ |
string | yes | Unit of measure for notional quantity leg 1 (BBL, MMBTU, MWH, etc.) |
quantity_ |
string | yes | Unit of measure for notional quantity leg 2 |
quantity_ |
string | yes | Frequency at which quantity is delivered/settled leg 1 |
quantity_ |
string | yes | Frequency at which quantity is delivered/settled leg 2 |
quantity_ |
double | yes | Multiplier applied to quantity frequency leg 1 |
quantity_ |
double | yes | Multiplier applied to quantity frequency leg 2 |
notional_ |
array |
yes | Notional amount(s) in effect on the associated effective date for leg 1. A single amount for a bullet swap; an amortizing/accreting swap reports a semicolon-delimited schedule, so this is a list. Positionally aligned with effective_date_notional_leg1 and end_date_notional_leg1. |
notional_ |
array |
yes | Notional amount(s) in effect on the associated effective date for leg 2. A single amount for a bullet swap; an amortizing/accreting swap reports a semicolon-delimited schedule, so this is a list. Positionally aligned with effective_date_notional_leg2 and end_date_notional_leg2. |
effective_ |
array |
yes | Date(s) the notional amount takes effect for leg 1 — one entry per step of an amortization schedule, positionally aligned with notional_amount_effective_leg1. |
effective_ |
array |
yes | Date(s) the notional amount takes effect for leg 2 — one entry per step of an amortization schedule, positionally aligned with notional_amount_effective_leg2. |
end_ |
array |
yes | Date(s) the notional amount expires for leg 1. Usually a single date; amortizing swaps report a semicolon-delimited schedule (e.g. "2030-01-31;2030-02-28;...") which is why this is a list rather than a scalar date. |
end_ |
array |
yes | Date(s) the notional amount expires for leg 2. Usually a single date; amortizing swaps report a semicolon-delimited schedule, which is why this is a list rather than a scalar date. |
fixed_ |
double | yes | Fixed rate leg1. NULL when the reporting counterparty used the CFTC all-9s not-available default (9.9999999999) — see fixed_rate_leg1_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
fixed_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (9.9999999999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and fixed_rate_leg1 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
fixed_ |
double | yes | Fixed rate leg2. NULL when the reporting counterparty used the CFTC all-9s not-available default (9.9999999999) — see fixed_rate_leg2_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
fixed_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (9.9999999999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and fixed_rate_leg2 is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
fixed_ |
string | yes | Day count convention for fixed leg 1 (A004=ACT/360, A006=30/360, etc.) |
fixed_ |
string | yes | Day count convention for fixed leg 2 |
floating_ |
string | yes | Day count convention for floating leg 1 |
floating_ |
string | yes | Day count convention for floating leg 2 |
floating_ |
string | yes | Reset period unit for floating leg 1 (MNTH, WEEK, YEAR, EXPI, etc.) |
floating_ |
string | yes | Reset period unit for floating leg 2 |
floating_ |
double | yes | Multiplier for reset frequency period leg 1 |
floating_ |
double | yes | Multiplier for reset frequency period leg 2 |
fixed_ |
string | yes | Payment frequency period unit for fixed leg 1 |
fixed_ |
string | yes | Payment frequency period unit for fixed leg 2 |
floating_ |
string | yes | Payment frequency period unit for floating leg 1 |
floating_ |
string | yes | Payment frequency period unit for floating leg 2 |
fixed_ |
double | yes | Payment frequency multiplier for fixed leg 1 |
fixed_ |
double | yes | Payment frequency multiplier for fixed leg 2 |
floating_ |
double | yes | Payment frequency multiplier for floating leg 1 |
floating_ |
double | yes | Payment frequency multiplier for floating leg 2 |
spread_ |
double | yes | Spread over floating index for leg 1 (basis points or decimal per convention) |
spread_ |
double | yes | Spread over floating index for leg 2 |
spread_ |
string | yes | Currency of spread leg 1 |
spread_ |
string | yes | Currency of spread leg 2 |
spread_ |
string | yes | Notation for spread leg 1 (ABSC=absolute, PRCT=percent) |
spread_ |
string | yes | Notation for spread leg 2 |
price |
double | yes | Transaction price (commodity/equity swaps) |
price_ |
string | yes | Unit of measure for price |
price_ |
string | yes | Currency of price |
price_ |
string | yes | Price notation type |
post_ |
boolean | yes | True if the price is determined after execution |
option_ |
string | yes | CALL, PUT, OTHR — option type for swaptions/options |
option_ |
string | yes | EURO=European, AMER=American, BERM=Bermudan |
strike_ |
double | yes | Strike price for options/swaptions |
strike_ |
string | yes | Currency or currency pair of the strike price |
strike_ |
string | yes | Notation type for strike price |
embedded_ |
string | yes | Type of embedded option (callable, putable, etc.) |
option_ |
double | yes | Premium paid for the option |
option_ |
string | yes | Currency of the option premium |
exchange_ |
double | yes | Exchange rate. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999.9999999999999 or 9.9999999999) — see exchange_rate_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
exchange_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999.9999999999999 or 9.9999999999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and exchange_rate is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
exchange_ |
string | yes | Basis for the exchange rate quotation |
call_ |
double | yes | Call leg notional for FX swaps |
call_ |
string | yes | Currency of the call leg |
put_ |
double | yes | Put leg notional for FX swaps |
put_ |
string | yes | Currency of the put leg |
underlier_ |
string | yes | Identifier of the underlier for leg 1 (ISIN, index ticker, etc.) |
underlier_ |
string | yes | Identifier of the underlier for leg 2 |
underlier_ |
string | yes | Identification scheme for underlier ID leg 1 (ISIN, INDX, etc.) |
underlying_ |
string | yes | Human-readable name of the underlier (e.g. 'CDX.NA.IG', 'WTI Crude') |
underlying_ |
array |
yes | Underlying asset/contract subtype identifier(s) for leg 1. Basket and index trades name several underliers in one semicolon-delimited field, so this is a list. |
underlying_ |
string | yes | Subtype classification of the underlier leg 2 |
maturity_ |
string | yes | Maturity of the underlying instrument |
other_ |
array |
yes | Additional payment(s) (e.g. upfront fee, points). Usually a single amount; tiered payment schedules report a semicolon-delimited list, which is why this is a list rather than a scalar double. |
other_ |
array |
yes | Type code(s) of the additional payment(s) — positionally aligned with other_payment_amount and other_payment_currency (e.g. UWIN, UFRO). |
other_ |
array |
yes | Currency code(s) of the additional payment(s) — positionally aligned with other_payment_amount and other_payment_type. |
settlement_ |
string | yes | Settlement currency for leg 1 |
settlement_ |
string | yes | Settlement currency for leg 2 |
settlement_ |
string | yes | Not a CCP/clearinghouse field. Per CFTC/DTCC CDE data element #90, this is the ISO 3166 (alpha-2) country code disambiguating an offshore currency from its onshore ISO 4217 code (e.g. CNY traded offshore in Hong Kong is reported as notional_currency=CNY plus settlement_location=HK). Only applicable — and only required — when a leg's notional currency is an offshore currency; genuinely blank on the vast majority of rows, and never a CCP name. |
collateralisation_ |
string | yes | FLCL=fully collateralised, PRCL=partially, UNCL=uncollateralised |
delivery_ |
string | yes | PHYS=physical delivery, CASH=cash settlement, OPTL=optional |
physical_ |
string | yes | Delivery point for commodity/physical swaps |
package_ |
boolean | yes | True if this trade is part of a multi-leg package transaction |
package_ |
double | yes | Package transaction price. NULL when the reporting counterparty used the CFTC all-9s not-available default (99999.9999999999999 or 9.9999999999) — see package_transaction_price_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
package_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (99999.9999999999999 or 9.9999999999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and package_transaction_price is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
package_ |
string | yes | Currency of the package price |
package_ |
string | yes | Notation for package price |
package_ |
double | yes | Package transaction spread. NULL when the reporting counterparty used the CFTC all-9s not-available default (9.9999999999 or 99999) — see package_transaction_spread_not_available. Thousands separators and the Part 43 '+' censoring marker are stripped before parsing. |
package_ |
boolean | yes | True when the reporting counterparty signalled that this value was NOT AVAILABLE at the time of reporting, by submitting the CFTC Parts 43/45 Technical Specification's all-9s default for this field's format (9.9999999999 or 99999). The spec states such a value is accepted when the value is not available, so it is a placeholder rather than an amount, and package_transaction_spread is NULL on these rows instead of carrying a nonsensical figure (the Num(25,5) default parses as 1e20, roughly 1000x world GDP). This is a different condition from an at_or_above_threshold flag, where the amount IS known but publicly censored and the disseminated number is the Part 43 reporting threshold; here no number was reported at all. Only the exact spec-canonical defaults match — a bare 999999 also occurs in this feed and is a genuine amount. |
package_ |
string | yes | Currency of the package spread |
package_ |
string | yes | Notation for package spread |
non_ |
boolean | yes | True if the trade contains non-standard bespoke terms |
custom_ |
boolean | yes | True if underlier is a custom basket |
index_ |
double | yes | Current index factor for ABS/MBS underliers |
asset_ |
string | no | DTCC asset-class partition, from the source file split — RATES, CREDITS, FOREX, EQUITIES, COMMODITIES. Drives the download URL and the Iceberg partition (no source mapping; populated from the partition dimension). See asset_class_code for the CFTC short code (IR/CR/FX/EQ/CO) carried in the data rows. |
trade_ |
date | no | UTC calendar date of event_timestamp — not a per-exchange local trading day; these are OTC swaps with no single canonical session, and CFTC's own Part 43/45 dissemination files bucket by UTC report day too. A trade executed late in the US session (after ~19:00-20:00 ET) falls under the next UTC calendar date here. |
year |
integer | no | Calendar year (partition key) |
month |
integer | no | Calendar month 1-12 (partition key) |
day |
integer | no | Calendar day of month 1-31 (partition key). Present so the partition spec can match the fetch unit — DTCC publishes one file per (asset_class, day), so a day-grained partition is owned by exactly one fetch and can be committed on its own as that fetch completes. |
cot_disaggregated_futures · table¶
CFTC Commitments of Traders — Disaggregated Futures-Only report. Weekly (Tuesday) open interest and long/short/spread positions by trader category — producer/ merchant, swap dealer, managed money, other reportables, and nonreportables — one row per (report_date, contract market). A different CFTC dataset from cftc_trades (DTCC GTR OTC swap dissemination): this is the futures-market positioning report, sourced directly from CFTC's own public Socrata endpoint (resource 72hh-3qpy), not DTCC. Series starts 2006-06-13 — the true start of the Disaggregated report, not a fetch limit (the Legacy COT report, a different resource, goes back to 1986). Source: publicreporting.cftc.gov/resource/72hh-3qpy.json.
| Column | Type | Null | Description |
|---|---|---|---|
report_ |
date | no | Tuesday report date |
report_ |
string | yes | |
market_ |
string | yes | |
contract_ |
string | yes | |
cftc_ |
string | no | Contract market code — PK component |
cftc_ |
string | yes | |
cftc_ |
string | yes | |
cftc_ |
string | yes | |
commodity_ |
string | yes | |
commodity |
string | yes | |
commodity_ |
string | yes | |
commodity_ |
string | yes | |
contract_ |
string | yes | |
open_ |
bigint | yes | |
producer_ |
bigint | yes | |
producer_ |
bigint | yes | |
swap_ |
bigint | yes | |
swap_ |
bigint | yes | |
swap_ |
bigint | yes | |
money_ |
bigint | yes | |
money_ |
bigint | yes | |
money_ |
bigint | yes | |
other_ |
bigint | yes | |
other_ |
bigint | yes | |
other_ |
bigint | yes | |
total_ |
bigint | yes | |
total_ |
bigint | yes | |
nonreportable_ |
bigint | yes | |
nonreportable_ |
bigint | yes | |
traders_ |
integer | yes | |
concentration_ |
double | yes | |
concentration_ |
double | yes | |
concentration_ |
double | yes | |
concentration_ |
double | yes | |
year |
integer | no | Calendar year (partition key) |
rate_swaps · view¶
Interest rate swaps filtered view. Covers vanilla IRS, OIS (SOFR, EFFR), basis swaps, cross-currency swaps, and swaptions in the RATES asset class. Key columns: fixed_rate_leg1/leg2 (coupon as decimal), floating_rate_reset_freq_period_leg1 (EXPI=at-expiry OIS, MNTH=monthly reset), settlement_location (offshore-currency jurisdiction — an ISO 3166 country code, populated only when a leg's currency is offshore; not a CCP field), upi_underlier_name (e.g. 'USD-SOFR-COMPOUND'). Filter action_type = 'NEWT' for new executions only. This table cannot support CCP/clearer concentration analysis — see clearing_activity's comment for why.
View — columns are resolved by the query engine at runtime.
credit_default_swaps · view¶
Credit default swaps filtered view. Covers single-name CDS and CDS index products (CDX.NA.IG, CDX.NA.HY, iTraxx). Key columns: spread_leg1 (running spread in bps), fixed_rate_leg1 (standard coupon — typically 100bps IG or 500bps HY), underlying_asset_name (reference entity or index name), underlier_id_leg1 (ISIN or index identifier). cleared = 'Y' will not isolate cleared index CDS activity — see clearing_activity's comment: the CCP-facing leg that carries cleared='Y' is excluded from Part 43 public dissemination, so almost no row here ever has it, regardless of true clearing status.
View — columns are resolved by the query engine at runtime.
fx_derivatives · view¶
FX derivatives filtered view. Covers FX swaps, cross-currency swaps, FX forwards, FX options, and NDFs. Key columns: notional_currency_leg1/leg2 (currency pair), exchange_rate (agreed FX rate), call_amount/put_amount (for FX options), option_type (CALL/PUT), strike_price (option strike rate). The notional_currency_leg1 and notional_currency_leg2 pair identifies the currency pair (e.g. USD/EUR).
View — columns are resolved by the query engine at runtime.
equity_derivatives · view¶
Equity derivatives filtered view. Covers total return swaps (TRS), equity options, variance swaps, and correlation swaps. Key columns: underlying_asset_name (single stock or index name), underlier_id_leg1 (ISIN or index ticker), price (equity price at execution), strike_price (for options), option_type/option_style.
View — columns are resolved by the query engine at runtime.
commodity_derivatives · view¶
Commodity derivatives filtered view. Covers energy swaps (crude oil, nat gas, power), agricultural swaps, and metals swaps. Key columns: notional_quantity_leg1 (physical quantity), quantity_unit_of_measure_leg1 (BBL=barrels, MMBTU=gas, MWH=power), price/price_unit_of_measure (commodity price), physical_delivery_location_leg1 (delivery hub — e.g. Henry Hub, NYMEX WTI), delivery_type (PHYS vs CASH).
View — columns are resolved by the query engine at runtime.
swap_activity · view¶
Daily swap activity summary across all asset classes. Columns: trade_date, asset_class (RATES/CREDITS/FOREX/EQUITIES/COMMODITIES), action_type (NEWT/AMND/TERM/CORR), cleared (Y/N/I), trade_count (number of swap events), total_usd_notional (USD-equivalent notional — uses leg1 if USD, leg2 if not; approximate for cross-currency), cleared_count (cleared='Y') / uncleared_count (cleared='N'). Primary dashboard for market activity monitoring and daily volume surveillance. Filter action_type = 'NEWT' for execution-only volumes. cleared_count/uncleared_count are NOT a clearing-adoption rate: cleared='Y' is reported only on the CCP-facing novation leg of a cleared swap, and Part 43 explicitly excludes that leg from public dissemination, so cleared_count is structurally near-zero here regardless of how much volume actually clears — see clearing_activity's comment for the source-level reason.
View — columns are resolved by the query engine at runtime.
clearing_activity · view¶
Despite the name, this is NOT usable for CCP concentration analysis, for every asset class, by design of CFTC's Part 43 public dissemination rules — not an ETL defect. settlement_location is an offshore-currency jurisdiction code (ISO 3166), never a CCP name, so grouping by it does not identify a clearer. Separately, cleared='Y' is reported only on the CCP-facing "beta"/"gamma" novation leg created when a swap actually clears (CFTC/DTCC CDE data element #1), and that leg is explicitly marked "Not Disseminated" in CFTC's own Technical Specification — this table, sourced entirely from the public dissemination feed, never receives it. The result is near-zero rows here regardless of real clearing volume. No field in the Part 43 public dissemination feed identifies the CCP (that's CDE data element #2, "Central counterparty," which is itself not disseminated whenever cleared != 'Y'); CCP concentration requires an external source (e.g. CCPView, BIS, FSB). Columns: trade_date, asset_class, settlement_location, cleared_trade_count, total_notional (raw sum of notional_amount_leg1 in its native currency — not USD-normalized, unlike swap_activity's total_usd_notional).
View — columns are resolved by the query engine at runtime.