Tradovate-API /product/find gibt 404 zurück
Sie haben eine Anfrage an product/find gesendet und nur ein nacktes 404 zurückbekommen. Der Endpunkt fehlt nicht, die Anfrage ist falsch aufgebaut, hier ist die genaue Lösung mit GET und Query-String.
Sie haben eine Anfrage an product/find gesendet, und statt eines sauberen JSON-Payloads hat der Server ein nacktes 404 zurückgeworfen. Hier ist nichts, heißt es. Doch der Endpunkt fehlt nicht. In der Praxis bedeutet dieses 404 fast immer, dass die Anfrage falsch aufgebaut ist, nicht dass die Route nicht existiert. In neun von zehn Fällen liegt es an einem von zwei Fehlern: Sie haben Ihre Parameter in einem JSON-Body statt in der URL gesendet, oder Sie zeigen auf den falschen Host oder Pfad. Korrigieren Sie den Aufbau des Aufrufs, und product/find (sowie sein enger Verwandter contract/find) liefert wieder Daten.
Hier die Kurzfassung, danach das Warum und das Wie.
Schnelle Lösung: Rufen Sie
product/findals GET mit dem Symbol im Query-String auf,GET https://demo.tradovateapi.com/v1/product/find?name=ES, nicht als POST mit einem JSON-Body. Um den tatsächlich handelbaren Kontrakt zu erhalten, verwenden Siecontract/find?name=ESU6. Beide nehmen dieselben Parameter entgegen.
Warum das 404 auftritt
Ein 404 bei diesem Aufruf ist irreführend, weil wir darauf trainiert sind, es als “diese URL existiert nicht” zu lesen. Bei der Tradovate-REST-API taucht derselbe Status jedoch auch dann auf, wenn der Router die tatsächlich gesendete Anfrage keiner echten Operation zuordnen kann. Eine Handvoll konkreter Fehler verursacht das.
Sie haben einen JSON-Body statt eines Query-Strings gesendet. Das ist der Hauptfehler. product/find ist eine Leseoperation, und Tradovate erwartet, dass Leseoperationen als GET-Anfragen mit Parametern in der URL erfolgen. Wenn Sie etwas wie {"name":"es","isAutomated":true} als JSON-Body per POST senden, wird die Anfrage nie der find-Operation zugeordnet und Sie erhalten ein 404. Dabei sind gleich zwei Dinge falsch: der Aufbau als Body statt Query-String, und das zusätzliche Feld isAutomated, das find von vornherein nicht akzeptiert. Entfernen Sie beides.
Sie haben das Versionspräfix weggelassen oder den Host falsch geschrieben. Jeder REST-Aufruf liegt unter /v1/. Die Basis ist https://demo.tradovateapi.com/v1 für die Simulation und https://live.tradovateapi.com/v1 für Live. Lassen Sie das /v1 weg, rufen Sie api.tradovate.com auf (das ist die Dokumentationsseite, nicht die API) oder vertippen Sie sich bei der Subdomain, gibt es keine passende Route, 404.
Sie haben Groß-/Kleinschreibung oder Schreibweise des Pfads geändert. Der Pfad besteht aus zwei Teilen: einer Entität und einer Operation, getrennt durch einen Schrägstrich, wie product/find oder contract/find. Schreiben Sie Product/Find, products/find oder product/search, löst keine davon auf.
Sie rufen eine Operation auf, die auf diesem Transportweg nicht implementiert ist. Manche Operationen existieren über WebSocket, aber nicht über die reine REST-Route, und umgekehrt. Wenn Sie einen Aufruf kopieren, der für den einen gedacht war, und ihn an den anderen senden, erhalten Sie ein 404 mit einem Body, der die fehlende Operation wörtlich benennt, etwa "Not found: md/getChart". Das ist Ihr Hinweis, dass die Route stimmt, aber der Transportweg falsch ist.
Eines ist ein 404 nicht: ein Authentifizierungsproblem. Fehlt Ihr Zugriffstoken oder ist es abgelaufen, erhalten Sie ein 401, kein 404. Wenn Sie also vor einem 404 stehen, verschwenden Sie keine Zeit mit dem Erneuern von Tokens, sondern prüfen Sie zuerst den Aufbau der Anfrage und die URL.
Die Lösung: GET mit Query-String
Bauen Sie den Aufruf als GET neu auf und verschieben Sie das Symbol in den Query-String. Diese eine Änderung löst die überwältigende Mehrheit dieser 404-Fehler.
GET https://demo.tradovateapi.com/v1/product/find?name=ES
Authorization: Bearer <your-access-token>
Accept: application/json
Tauschen Sie ES gegen die gewünschte Produktwurzel aus, MES, NQ, MNQ, CL und so weiter. Die Antwort ist der Produktdatensatz für dieses Instrument: seine ID, seinen Namen, den Produkttyp, die Börse, die Tickgröße und den Wert pro Punkt. Beachten Sie, dass es überhaupt keinen Request-Body gibt. Nichts zu serialisieren, nichts, was schiefgehen kann.
Wenn Sie eine Client-Bibliothek oder eine Bridge verwenden, die die Anfrage für Sie erstellt, und weiterhin 404-Fehler sehen, prüfen Sie, was sie tatsächlich auf der Leitung sendet. Erstaunlich viele “die API ist kaputt”-Momente stellen sich als Helfer heraus, der Ihre Parameter stillschweigend in einen POST-Body verpackt. Stellen Sie es auf GET um, und dieselbe Symbolsuche, die eben noch fehlschlug, funktioniert wieder einwandfrei.

Den handelbaren Kontrakt mit contract/find erhalten
product/find gibt Ihnen Auskunft über die Instrumentenfamilie. Es sagt Ihnen nicht, an welchen Kontrakt Sie eine Order tatsächlich routen sollen, denn ein Produkt läuft nicht ab, ein Kontrakt schon. Dafür greifen Sie zu contract/find, das genau dieselben Query-Parameter entgegennimmt:
GET https://demo.tradovateapi.com/v1/contract/find?name=ESU6
Das name hier ist das vollständige Kontraktsymbol, nicht nur die Wurzel. Tradovate setzt es aus drei Teilen ohne Leerzeichen zusammen: der Produktwurzel, einem einzelnen Monatscode und der letzten Ziffer des Jahres. Also ist ESU6 der E-mini S&P 500 für U (September) 6 (2026). Ändern Sie den Monatsbuchstaben und die Jahresziffer, wenn Kontrakte rollen, die vierteljährlichen Aktienindex-Monate sind H, M, U und Z (März, Juni, September, Dezember). Der Frontmonat wechselt im Laufe des Jahres, bestätigen Sie also den aktuell aktiven Kontrakt, statt einen fest einzucodieren, der bald ausläuft.
Füttern Sie contract/find mit einem Symbol, das nicht existiert oder bereits abgelaufen ist, erhalten Sie möglicherweise ein leeres Ergebnis statt eines sauberen Kontrakts, ein weiterer Grund, zuerst den aktiven Frontmonat zu ermitteln, statt zu raten. Sobald Sie die Kontrakt-ID haben, ist das der Wert, den Sie an Orderaufgabe, Positionsabfragen und Marktdaten-Abonnements übergeben.

Wenn Sie das genaue Symbol nicht kennen
Was, wenn Sie den genauen Kontraktcode nicht haben und einfach nur suchen möchten? Passen Sie zunächst Ihre Erwartungen an: Es gibt keinen öffentlichen “gib mir jedes Symbol”-Endpunkt. Die API ist auf gezielte Abfragen ausgelegt und erwartet, dass Sie das Abgerufene zwischenspeichern, statt bei jedem Lauf eine riesige Liste zu holen.
Zwei praktikable Wege:
- Type-Ahead-Vorschläge. Tradovate hat einen Kontraktvorschlags-Endpunkt, der sich wie das Suchfeld in der Plattform verhält, Sie übergeben eine Teilzeichenkette und ein Ergebnislimit, und er liefert passende Kontrakte zurück. Das ist der sauberste Weg, um aus “der Nutzer hat
MNQeingegeben” einen echten, aktuellen Kontrakt zu machen. Bestätigen Sie die genauen Parameternamen in der aktuellen API-Referenz, bevor Sie es einbinden, da die Vorschlags-Endpunkte kurze Einzelbuchstaben-Schlüssel verwenden. - Erst Produkt, dann Kontrakt. Suchen Sie das Produkt mit
product/find?name=NQ, und lösen Sie dann den aktiven Kontrakt dafür auf. Dieser zweistufige Weg hält Sie bei dokumentierten, stabilen Operationen.
Möglicherweise stoßen Sie in freier Wildbahn auf eine Route contract/list. Sie existiert, ist aber undokumentiert und nicht empfohlen, sie ist kein unterstützter “alles auflisten”-Aufruf, und darauf zu bauen lädt zu Problemen ein. Bleiben Sie bei contract/find und dem Vorschlags-Endpunkt, cachen Sie die Ergebnisse und aktualisieren Sie Ihren Cache bei jedem Kontraktrollover.
Eine 90-Sekunden-Checkliste
Bevor Sie einen Bug-Report einreichen, gehen Sie diese Liste durch. Sie klärt fast jedes product/find-404.
| Prüfpunkt | Wie es “richtig” aussieht |
|---|---|
| HTTP-Methode | GET, nicht POST |
| Parameter | Im Query-String (?name=ES), nicht in einem JSON-Body |
| Zusätzliche Felder | Kein isAutomated oder andere reine Order-Felder bei einem find-Aufruf |
| Basis-URL | demo.tradovateapi.com/v1 oder live.tradovateapi.com/v1, mit dem /v1 |
| Pfadschreibweise | Genau product/find / contract/find, kleingeschrieben |
| Host | Nicht api.tradovate.com (das ist die Dokumentationsseite) |
| Transportweg | REST-Route über HTTPS, keine reine WebSocket-Operation |
Wenn alles oben stimmt und Sie trotzdem speziell bei product/find ein 404 erhalten, während andere GET-Aufrufe funktionieren, erfassen Sie die rohe Anfrage und Antwort und wenden Sie sich an den API-Support von Tradovate, aber das ist selten. Fast immer liegt das Problem bei einer der obigen Zeilen.
Gut zu wissen, welche Fehler nicht dieser hier sind: Ein 401 bedeutet, dass Ihr Token veraltet oder fehlt (erneuern Sie es, bevor es abläuft), und ein “symbol is inaccessible” oder 403 bei einer Quote-Anfrage bedeutet ein Marktdaten-Berechtigungsproblem, kein Suchproblem. Kontrakt- und Produktabfragen selbst benötigen nur ein gültiges Token, kein Datenabonnement.

Möchten Sie die Symbolsuche für sich erledigen lassen?
Token-Erneuerung, Frontmonat-Auflösung und Kontraktabfragen pro Symbol einzurichten ist die Art von Detailarbeit, die ein Wochenende verschlingt und beim nächsten Kontraktrollover wieder ausfällt. Wenn Ihr eigentliches Ziel ist, einen TradingView-Alert auszulösen und ihn als Live-Order bei Tradovate landen zu lassen, ohne die REST-Ebene zu betreuen, können Sie die rohe API komplett überspringen und eine Bridge Symbole zuordnen und Orders für Sie routen lassen.
Automatisieren Sie Ihre Tradovate-Orders von TradingView aus, ohne die rohe API zu berühren, und lassen Sie PickMyTrade die Symbolsuche und das Order-Routing für Sie übernehmen.
Die rohe API überspringen
Automatisieren Sie Ihre Tradovate-Orders von TradingView aus, ohne die rohe API zu berühren. PickMyTrade übernimmt die Symbolsuche und das Order-Routing für Sie.
Starten Sie Ihre kostenlose 5-Tage-TestphaseHäufig gestellte Fragen
Fast immer, weil die Anfrage falsch aufgebaut ist, nicht weil die Route fehlt. Der häufigste Auslöser ist, das Symbol in einem JSON-Body statt im URL-Query-String zu senden oder Felder hinzuzufügen, die der Endpunkt nicht akzeptiert. Es ist ein GET-Aufruf, übergeben Sie das Symbol also als Query-String: GET /v1/product/find?name=ES. Ein fehlendes /v1/-Präfix, der falsche Host oder ein Tippfehler im Pfad führen ebenfalls zu einem 404.
product/find liefert das Produkt, die Instrumentenfamilie, wie ES für den E-mini S&P 500. contract/find liefert einen konkreten handelbaren Kontrakt mit Verfallsdatum, wie ESU6 für September 2026. Beide nehmen dieselben Query-Parameter entgegen. Verwenden Sie product/find, um das Instrument nachzuschlagen, und dann contract/find, um den genauen Kontrakt zu erhalten, den Sie handeln oder abonnieren.
Nein. Es gibt keinen öffentlichen Endpunkt, der alle Symbole auflistet. Die API erwartet, dass Sie das Benötigte mit contract/find oder dem Type-Ahead-Vorschlags-Endpunkt nachschlagen und die Ergebnisse zwischenspeichern. Eine Route contract/list existiert, ist aber undokumentiert und nicht empfohlen, richten Sie Ihren Workflow also stattdessen an gezielten Abfragen aus.
Nein. contract/find und product/find liefern Referenzdaten und funktionieren mit nur einem gültigen Zugriffstoken. Ein Marktdaten-Abonnement ist erst relevant, wenn Sie Live-Kurse abonnieren. Gelingt eine Abfrage, schlägt aber eine Kursanfrage fehl, ist das ein Berechtigungsproblem bei den Daten, kein Suchproblem.
Dieser Leitfaden dient ausschließlich Bildungs- und Informationszwecken und stellt keine Finanz-, Anlage- oder Handelsberatung dar. Der Handel mit Futures und anderen gehebelten Produkten birgt ein erhebliches Verlustrisiko und ist nicht für jeden Anleger geeignet. PickMyTrade ist eine unabhängige Drittanbieter-Automatisierungsplattform und steht in keiner Verbindung zu Tradovate, Inc. oder Bookmap und wird von diesen weder unterstützt noch gesponsert. Alle zugehörigen Namen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Plattformfunktionen und -schritte ändern sich im Laufe der Zeit, bestätigen Sie den aktuellen Ablauf daher immer in der offiziellen Plattformdokumentation, bevor Sie handeln.