Die COT Data API — programmatischer Zugriff auf wöchentliche CFTC-Reports
Eine REST API für den Commitments of Traders Datensatz. Bearer Auth, JSON Responses, vier Endpoints, 9,99 $/Monat. Für Trader die programmieren, Analysten die Daten in Dashboards pipen, und alle die den COT report außerhalb eines Browsers oder einer Tabelle brauchen.

ie meisten COT-Reports.com Leser werden nie eine API brauchen. Die Website deckt den täglichen Fall ab; die Tabelle deckt den wöchentlichen Fall ab. Aber einmal pro Quartal mailt jemand mit der gleichen Frage: "Habt ihr eine API? Ich will COT-Daten in [Python / einen TradingView Indikator / ein internes Dashboard / einen Discord Bot / eine Notion Datenbank] pipen." Wir haben. Sie heißt COT Data API und das ist, was sie macht.
Der Pitch in einem Satz: ein REST Endpoint, der den gleichen Commitments of Traders Datensatz zurückgibt, der die Website und die Excel-Vorlage antreibt — bearer-authentifiziert, JSON-Form, normalisierte Spalten, wöchentliche Historie. 9,99 $ pro Monat, jederzeit kündbar. Die zugrundeliegenden Daten sind US-bundesstaatliches Public Domain (17 USC §105).
Wer nutzt eigentlich eine API für COT-Daten?
Drei Personas, aus unserer Erfahrung:
**Der systematische Trader.** Lässt ein Positioning-Modell in Python oder R laufen. Liest die neue CFTC-Veröffentlichung Freitagnachmittag, rechnet Signale neu, schickt Orders an den Broker Montagmorgen. Will keinen CFTC Scraper schreiben, will keinen CSV Download Workflow.
**Der Analyst, der ein Dashboard baut.** Internes Team-Dashboard, Grafana Panel, Notion Datenbank, custom Tableau Report. Pipt das neueste COT Positioning in eine Visualisierung, die Kollegen sowieso täglich prüfen.
**Der Indie Tool Builder.** Discord Bot der die neue COT-Veröffentlichung jeden Freitag in einem Server postet. TradingView Pine Script. iOS App. Verschiedene Oberflächen, gleicher Datenbedarf.
Wenn dein Workflow wie einer dieser aussieht, existiert die API für dich. Wenn du nur den Report lesen und handeln willst, macht die Website das kostenlos.
Die vier Endpoints
Die API-Oberfläche ist absichtlich knapp. Vier Endpoints, jeder macht eine Sache gut, alle geben JSON zurück:
**`GET /api/v1/markets`** — listet jeden CFTC-Markt in unserem normalisierten Katalog auf.
**`GET /api/v1/cot/{cftc_code}`** — wöchentliche Historie für einen Markt. Standardmäßig die letzten 520 Wochen (~10 Jahre).
**`GET /api/v1/cot/{cftc_code}/latest`** — neuester Report für einen Markt. Convenience Endpoint, wenn du nur die aktuelle Woche brauchst.
**`GET /api/v1/cot/{cftc_code}/index`** — Briese-Style COT Index (0-100 Perzentil des Netto-Non-Commercial Positioning).
Plus ein fünfter, `GET /api/v1/demo`, der ein festes synthetisches Sample ohne Auth zurückgibt (10 Requests pro Tag pro IP). Nutze es, um deinen Parser zu validieren bevor du abonnierst.
Authentifizierung, Rate Limits und die praktischen Details
Auth ist Bearer Token: `Authorization: Bearer cot_live_<32 hex>`. Du generierst einen Token bei /account/api nach dem Abo — Tokens sind SHA-256 gehasht in der Datenbank, nie im Klartext gespeichert, und über die gleiche Seite widerrufbar wenn ein Schlüssel leakt.
Entry-Tier Limits sind 60 Requests pro Minute und 500 Requests pro Tag, pro Token. Das ist deutlich mehr als der typische "neueste Woche für 30 Märkte jeden Freitag holen" Workflow braucht. Wir zeigen das verbleibende Kontingent in `X-RateLimit-Remaining` Headers auf jeder Response.
Fehler kommen als stabiles Envelope zurück: `{ "error": "<machine_code>", "message": "<human_text>" }` mit aussagekräftigem HTTP Status. Der Machine Code ist der Teil, auf den du verzweigen solltest; die menschliche Nachricht ist für Logs.
Ein minimales Beispiel, in drei Sprachen
Die letzte Woche für EUR FX (CFTC Code 099741) zu ziehen, braucht etwa so viel Code wie erwartet:
**Python:**
```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:**
```javascript 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:**
```bash curl https://cot-reports.com/api/v1/cot/099741/latest \ -H "Authorization: Bearer cot_live_..." ```
Die OpenAPI 3.0 Spec lebt bei `/api/v1/openapi.json`, falls du Clients in deiner Sprache automatisch generieren willst.
Wie es sich vom Scrapen des CFTC-Archivs unterscheidet
Du könntest absolut das CFTC SODA Archiv direkt scrapen — es ist öffentlich, kostenlos und gut dokumentiert. Wir machen genau das selbst im Backend. Warum also 9,99 $/Monat zahlen für was effektiv eine normalisierte Schicht über der gleichen Quelle ist?
Ein paar Gründe, warum Leute entscheiden, dass es sich lohnt:
**Spaltennamen.** Die CFTC liefert ihre Daten mit stabilen aber unordentlichen Feldnamen. Unsere API gibt saubere, vorhersagbare Namen zurück: `noncomm_long`, `noncomm_short`, `comm_long`, `comm_short`.
**Cross-Family Konsistenz.** Die CFTC veröffentlicht Legacy, Disaggregated, TFF und Supplemental als vier separate Datensätze mit vier separaten Spalten-Konventionen. Die API normalisiert alle vier zur gleichen Form.
**Eingebauter COT Index.** Das Briese 0-100 Perzentil ist ein Ein-Zeilen Endpoint statt einer Window-Funktion-Query, die du selbst wartest.
**Rate-limited Delivery.** Wenn du unseren Endpoint triffst, liest du aus unserem Cache, nicht von CFTCs Servern. CFTC SODA throttled aggressiv unter Last.
**Wartung.** Wenn die CFTC einen Spaltennamen ändert (und sie tun es, alle paar Jahre), passiert der Bruch auf unserer Seite.
Wie es neben der Tabelle und dem Data Dump passt
Wir verkaufen drei Datenprodukte und sie decken drei verschiedene Workflows ab:
**Das COT Report Spreadsheet (39 $ einmalig)** — für den Trader, der in Excel lebt.
**Die COT Data API (9,99 $/Monat)** — für den Trader, der programmiert.
**Der COT Data Dump (49 $ einmalig)** — für den Fall, dass du das gesamte historische Archiv auf einmal brauchst.
Sie sind absichtlich verschiedene Produkte mit verschiedenen Preispunkten, weil sie verschiedene Use Cases bedienen. Die meisten Leser brauchen nur eins.
Abonniere die API bei /api auf der Hauptseite, generiere dein erstes Token bei /account/api, und der Demo Endpoint validiert dein Setup, bevor du eine einzige Zeile Production Code schreibst.


