Die meisten Leser von COT-Reports.com werden nie eine API brauchen. Die Website deckt den täglichen Gebrauch ab, die Tabelle den wöchentlichen. Aber hin und wieder schreibt uns jemand mit derselben Frage: „Habt ihr eine API? Ich möchte COT-Daten in [Python / ein internes Dashboard / einen Discord-Bot / eine Notion-Datenbank] einspeisen.“ Ja. Sie heißt COT Data API, und das kann sie.
In einem Satz: ein REST-Endpoint, der denselben Commitments-of-Traders-Datensatz liefert, auf dem die Website und die Excel-Mappe laufen: Bearer-Authentifizierung, JSON, normalisierte Spalten, wöchentliche Historie. 9,99 $ pro Monat, jederzeit kündbar, Zugang bis zum Ende des bezahlten Zeitraums. Die zugrunde liegenden Daten sind gemeinfreie Daten der US-Bundesregierung (17 USC §105); bezahlt wird die Arbeit drumherum: die bereinigten Spalten, die Auslieferung mit veröffentlichten Limits und die OpenAPI-3.0-Spezifikation.
Wer nutzt eigentlich eine API für COT-Daten?
Drei Typen, nach unserer Erfahrung:
Der systematische Trader. Betreibt ein Positionierungsmodell in Python oder R. Liest die neue CFTC-Veröffentlichung am Freitagnachmittag, rechnet sein Modell am Wochenende neu und ist vor der Eröffnung am Montag bereit. Will weder einen CFTC-Scraper schreiben noch CSV-Downloads verwalten; er will requests.get(...) und einen JSON-Umschlag.
Der Analyst, der ein Dashboard baut. Internes Team-Dashboard, Grafana-Panel, Notion-Datenbank, eigener Tableau-Bericht. Er speist die neueste COT-Positionierung in eine Ansicht ein, die die Kollegen ohnehin täglich ansehen. Er braucht eine stabile JSON-Struktur, die sich nicht unter ihm verändert.
Der unabhängige Tool-Entwickler. Ein Discord-Bot, der jeden Freitag die neue COT-Veröffentlichung auf einem Server postet. Eine kleine Webseite, die die Managed-Money-Positionierung neben dem Kurs zeichnet. Eine Handy-App, die meldet, wenn die Positionierung den Rand ihrer Spanne erreicht. Verschiedene Oberflächen, derselbe Datenbedarf.
Wenn dein Arbeitsablauf einem davon ähnelt, ist die API für dich gemacht. Wenn du den Bericht nur lesen willst, erledigt das die Website kostenlos.
Die vier Endpoints
Die API ist bewusst schlank. Vier Endpoints, jeder erledigt eine Sache, alle liefern JSON:
GET /api/v1/markets/ — listet jeden CFTC-Markt unseres Katalogs, mit Name, CFTC-Code, Kategorie, Börse, Kontrakteinheit, den Berichtsfamilien, die ihn veröffentlichen, und dem Datum seines ersten und letzten Berichts. Filtern mit category, family, tracked oder search; blättern mit limit und offset. Einmal aufrufen, um die benötigten Codes zu finden, dann die eigene Liste führen.
GET /api/v1/cot/{cftc_code}/ — die wöchentliche Historie eines Marktes. Standardmäßig liefert er die letzten 520 Wochenberichte (etwa 10 Jahre) des Legacy-Berichts. family=disagg|tff|supp wechselt zu den anderen CFTC-Berichtsfamilien; from / to (JJJJ-MM-TT) grenzen die Daten ein; limit legt fest, wie viele Berichte zurückkommen.
GET /api/v1/cot/{cftc_code}/latest/ — der neueste Bericht eines Marktes, wenn du nur die aktuelle Woche brauchst, nicht die ganze Historie. Er nimmt dieselben Parameter family und variant.
GET /api/v1/cot/{cftc_code}/index/ — der COT Index nach Briese: wo die neueste Non-Commercial-Nettoposition (Long minus Short) zwischen der niedrigsten und der höchsten Nettoposition eines rollierenden Zeitfensters liegt, auf einer Skala von 0 bis 100 (100 am Hoch des Fensters, 0 am Tief, 50, wenn das Fenster flach ist). Berechnet wird er auf dem Legacy-Bericht; das Standardfenster beträgt 52 Wochen, einstellbar von 4 bis 520 mit lookback. Eingebaut, damit du ihn nicht selbst auf dem Client berechnen musst.
Der Parameter variant. Die CFTC veröffentlicht jeden Bericht in zwei Versionen: Nur Futures, und Futures und Optionen kombiniert. variant=futonly oder variant=combined wählt eine davon auf den Endpoints für Historie, neuesten Bericht und Index. Ohne den Parameter liefert jeder Bericht seine Standardversion: Nur Futures für Legacy, kombiniert für Disaggregated, TFF und Supplemental (Supplemental gibt es nur kombiniert). Wenn du eine Version anforderst, nennt die Antwort sie in einem Feld variant.
Dazu ein fünfter, GET /api/v1/demo/, der ohne Authentifizierung ein festes synthetisches Beispiel liefert (10 Anfragen pro Tag und Netzwerkadresse). Damit prüfst du deinen Parser, bevor du abonnierst.
Authentifizierung, Rate Limits und die praktischen Details
Die Authentifizierung läuft über ein Bearer-Token: Authorization: Bearer cot_live_<32 hex>. Nach dem Abo erstellst du deine Schlüssel auf der Seite „API-Schlüssel“ deines Kontos. Wir speichern von jedem Schlüssel nur einen SHA-256-Hash, nie den Schlüssel selbst, und du kannst einen Schlüssel auf derselben Seite widerrufen, falls er nach außen gelangt.
Die Limits liegen bei 60 Anfragen pro Minute und 500 Anfragen pro Tag, pro Schlüssel. Das ist deutlich mehr, als der typische Ablauf „jeden Freitag die neueste Woche für 30 Märkte holen“ braucht. Jede beantwortete Anfrage trägt X-RateLimit-Remaining-Header, damit du vor der Grenze bremsen kannst; darüber hinaus bekommst du HTTP 429 mit einem Retry-After-Header.
Fehler kommen in einem stabilen Umschlag zurück: { "error": "<machine_code>", "message": "<human_text>" } mit einem aussagekräftigen HTTP-Status. Auf den Maschinencode verzweigst du (unknown_token, rate_limited, no_data, invalid_variant usw.); die Klartextnachricht ist für die Logs.
Ein minimales Beispiel, in drei Sprachen
Die neueste Woche für Euro FX (CFTC-Code 099741) abzurufen, braucht ungefähr so viel Code, wie man erwartet:
Python:
import requests
r = requests.get(
"https://cot-reports.com/api/v1/cot/099741/latest/",
headers={"Authorization": "Bearer cot_live_..."},
)
data = r.json()
print(data["row"]["noncomm_long"])JavaScript / Node:
const res = await fetch(
"https://cot-reports.com/api/v1/cot/099741/latest/",
{ headers: { Authorization: "Bearer cot_live_..." } }
)
const data = await res.json()
console.log(data.row.noncomm_long)Bash / curl:
curl https://cot-reports.com/api/v1/cot/099741/latest/ \
-H "Authorization: Bearer cot_live_..."Die OpenAPI-3.0-Spezifikation liegt unter /api/v1/openapi.json, falls du automatisch einen Client in deiner Sprache erzeugen willst; die Seite mit der API-Dokumentation beschreibt jedes Feld.
Wie es sich vom eigenen Abruf des CFTC-Archivs unterscheidet
Du könntest das öffentliche Archiv der CFTC (Socrata, die SODA-API) natürlich direkt abrufen: Es ist öffentlich, kostenlos und dokumentiert. Genau das tun wir selbst im Backend. Warum also 9,99 $/Monat für eine normalisierte Schicht über derselben Quelle zahlen?
Ein paar Gründe, warum Leute entscheiden, dass es sich lohnt:
Spaltennamen. Die CFTC liefert ihre Daten mit stabilen, aber unordentlichen Feldnamen: noncomm_postions_spread_all (mit dem Tippfehler), change_in_noncomm_spead_all (mit einem weiteren), Endungen, die von Familie zu Familie kommen und gehen. Unsere API liefert saubere, vorhersehbare Namen: noncomm_long, noncomm_short, comm_long, comm_short. Eine Sache weniger zu pflegen.
Ein Namensschema für alle vier Familien. Die CFTC veröffentlicht Legacy, Disaggregated, TFF und Supplemental als getrennte Datensätze, jeder mit eigener Schreibweise (Supplemental liefert sogar Schlüssel in gemischter Groß- und Kleinschreibung). Die API benennt alle gleich: Jede Zeile hat cftc_code, report_date, market_name und open_interest, und jede Händlergruppe folgt einem Muster (<group>_long, <group>_short, change_<group>_long, pct_oi_<group>_long). Die Gruppen selbst unterscheiden sich, weil die Berichte sich unterscheiden: noncomm_long in Legacy, managed_long und swap_long in Disaggregated, dealer_long und asset_mgr_long in TFF. Ein Wechsel der family heißt also, andere Gruppennamen zu lesen, nicht andere Schreibweisen zu lernen.
Eingebauter COT Index. Der Index von 0 bis 100 ist ein Aufruf statt einer Fensterabfrage, die du selbst pflegst.
Limits, die du lesen kannst. Unsere Limits sind veröffentlicht und stehen in jeder Antwort, und die Daten kommen aus unserer eigenen Datenbank, nicht von den Servern der CFTC. Socrata, die Plattform hinter dem CFTC-Archiv, bedient Anfragen ohne App-Token aus einem gemeinsamen Kontingent pro Netzwerkadresse und kann eine Adresse drosseln, die zu viele sendet (HTTP 429); mit einem kostenlosen App-Token drosselt Socrata nach eigener Aussage eine normale Nutzung nicht.
Wartung. Benennt die CFTC ein Feld um, passiert die Korrektur auf unserer Seite, und dein Code liest weiter dieselben Namen.
Wie es neben der Tabelle und dem Data Dump passt
Wir verkaufen drei Datenprodukte, und sie decken drei verschiedene Arbeitsweisen ab:
Das COT Report Spreadsheet (39 $, einmalig) — für den Trader, der in Excel lebt. Datei öffnen, neueste Woche sehen, weiter mit dem Tag. Es enthält einen optionalen API-Modus (deinen API-Schlüssel in eine Konfigurationszelle einfügen, mit aktivierten Makros, und der Historien-Tab lädt aus unserer normalisierten API).
Die COT Data API (9,99 $/Monat) — für den Trader, der programmiert. Jede Sprache, jedes Framework, jede Plattform. Bearer-Authentifizierung, veröffentlichte Limits, JSON.
Der COT Data Dump (ab 49 $, einmalig) — wenn du das gesamte historische Archiv auf einmal brauchst. Jeder Markt, jede Familie (Legacy seit 1986, die anderen seit 2006), in zwei ZIP-Dateien (eine pro CFTC-Variante: Nur Futures, und Futures und Optionen kombiniert), jede mit einem SHA-256-Manifest. Backtests, Trainingsdaten für Machine Learning, Offline-Analyse.
Es sind bewusst verschiedene Produkte zu verschiedenen Preisen, weil sie verschiedenen Zwecken dienen. Die meisten Leser brauchen nur eins. Einige nehmen zwei: die API plus die Tabelle (ein programmierter Ablauf plus Excel-Komfort) oder die API plus den Data Dump (die wöchentlichen Updates plus die ganze Historie für Backtests). Was eben passt.
Abonniere auf der Seite der COT Data API, erstelle deinen ersten Schlüssel in deinem Konto, und der Demo-Endpoint prüft dein Setup, bevor du eine einzige Zeile Produktionscode schreibst. Jederzeit kündbar; der Zugang läuft bis zum Ende des bezahlten Monats, ohne Bindung.


