Hilfe
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

REST API 8.1.3 Anlage Quote Request gibt 422 "fehler_unsupported_ordertyp" zurück

RustDev
Autor
2 Beiträge

Ich bin gerade dabei die Comdirect REST API in einem Rust crate (crate = library in Rust) abzubilden und habe mich bis zu den Quotes vorgearbeitet.

 

Leider habe ich bei den Quotes, genauer gesagt bei Punkt 8.1.3 ein Problem. Sowohl meine Implementation als auch die Postman-Collection bekommt hier einen 422 von dem API zurück.

 

So sieht mein aktueller ablauf aus (Postman Code-Generation):

 

8.1.1 Anlage Validierung Quote Request-Initialisierung

POST /brokerage/v3/quoteticket HTTP/1.1
Host: https://api.comdirect.de/api
Accept: application/json
Authorization: Bearer __ACESS_TOKEN__
x-http-request-info: {"clientRequestId":{"sessionId":"__SESSION_ID__","requestId":"219236953"}}
Content-Type: application/json
Cookie: qSession=__Q_SESSION__

{"depotId":"__DEPOT_ID__","orderType":"QUOTE","side":"BUY","instrumentId":"US0079031078","quantity":{"value":"1","unit":"XXX"},"venueId":"C3E017C9A9464A688F57E57BD7661C12"}

Response

{
    "depotId": "__DEPOT_ID__",
    "orderType": "QUOTE",
    "side": "BUY",
    "instrumentId": "US0079031078",
    "venueId": "C3E017C9A9464A688F57E57BD7661C12",
    "quantity": {
        "value": "1",
        "unit": "XXX"
    },
    "quoteTicketId": "__QUOTE_TICKET_ID__"
}

 

 

 

8.1.2 Änderung Validierung Quote Request-Initialisierung mit TAN

PATCH /brokerage/v3/quoteticket/__QUOTE_TICKET_ID__ HTTP/1.1
Host: https://api.comdirect.de/api
Accept: application/json
Authorization: Bearer __ACCESS_TOKEN__
x-http-request-info: {"clientRequestId":{"sessionId":"__SESSION_ID__","requestId":"219236953"}}
Content-Type: application/json
x-once-authentication-info: {"id":"__TAN_ID__"}
x-once-authentication: TAN_FREI
Cookie: qSession=__Q_SESSION__

Response

 

 

 

8.1.3 Anlage Quote Request

POST /brokerage/v3/quotes HTTP/1.1
Host: https://api.comdirect.de/api
Accept: application/json
Authorization: Bearer __ACESS_TOKEN__
x-http-request-info: {"clientRequestId":{"sessionId":"__SESSION_ID__","requestId":"221780369"}}
Content-Type: application/json
Cookie: qSession=__Q_SESSION__

{"depotId":"__DEPOT_ID__","orderType":"QUOTE","side":"BUY","instrumentId":"US0079031078","quantity":{"value":"1","unit":"XXX"},"venueId":"C3E017C9A9464A688F57E57BD7661C12"}

Response

{
    "code": "request.object.invalid",
    "messages": [
        {
            "severity": "ERROR",
            "key": "fehler_unsupported_ordertyp",
            "message": "Der Ordertyp ist leider ungültig.",
            "args": {},
            "origin": []
        }
    ]
}

 

 

Ich habe schon versucht den Order-Typ in 8.1.3 durch MARKET bzw. LIMIT (mit extra limit Feld) auszutauschen. Hat leider nicht funktioniert.

 

4 ANTWORTEN

ehemaliger Nutzer
ohne Rang
0 Beiträge

Hallo @RustDev,

 

herzlich willkommen in unserer Community.

 

Der Handelsplatz, an den du die Quote-Anfrage schreiben willst, unterstützt LiveTrading nicht. 

 

In unseren Systemen gibt es zwei Handelsplätze mit dem Namen „Tradegate“: Einmal der börsliche Handelsplatz (erkennbar an "type": "EXCHANGE") und einmal der Außerbörsliche ("type": "OFF"). Beide Handelsplätze haben unterschiedliche venueIDs.

 

Deine Quote-Anfrage hast du an den börslichen Handelsplatz gestellt, der die Anfrage leider nicht verarbeiten kann.  Führe noch einmal die dimensions-Anfrage aus und wähle einen Handelsplatz vom Typ „OFF“ aus. Damit sollte der LiveTrade funktionieren.

 

Viele Grüße

Mario

RustDev

Danke @ehemaliger Nutzer ,

 

am Außerbörslichen Handelsplatz funktioniert alles. Ich hätte vorher einen Blick auf die "orderTypes" der einzelnen Handelsplätze werfen sollen.

 

 

Fred261
Einsteiger
1 Beiträge

Ich habe ein ähnliches Problem und hoffe ihr könnt mir Helfen. Ziel ist der Kauf via LiveTrading. Bis dahin hat alles einwandfrei funktioniert. Umsetzung erfolgt in Matlab..

 

Ich bekomme als Fehlermeldung:

 

result.response_body.messages ans = struct with fields: severity: 'ERROR' key: 'fehler_pflichtfeld_depotid_nicht_gesetzt' message: 'Es wurde keine Depot ID angegeben.' args: [1×1 struct] origin: []

 

function result = create_quote_ticket(base_url, access_token, session_id, request_id, depot_uuid, instrument_id, venue_id)
 
import matlab.net.*
import matlab.net.http.*
 
% Build request URL
if endsWith(base_url,'/')
url = [base_url 'brokerage/v3/quoteticket'];
else
url = [base_url '/brokerage/v3/quoteticket'];
end
 
% Build request-info structure
request_info.clientRequestId.sessionId = session_id;
request_info.clientRequestId.requestId = request_id;
request_info_json = jsonencode(request_info);
 
% Build JSON body
body_struct = struct();
body_struct.depotId = depot_uuid;
body_struct.orderType = "QUOTE";
body_struct.side = "BUY";
body_struct.instrumentId = instrument_id;
body_struct.quantity = struct("value", "1", "unit", "XXX");
body_struct.venueId = venue_id;
 
body = jsonencode(body_struct);
 
% Headers
headers = [ ...
HeaderField('Accept','application/json'), ...
HeaderField('Authorization',['Bearer ' access_token]), ...
HeaderField('x-http-request-info', request_info_json), ...
HeaderField('Content-Type','application/json') ...
];
 
try
% Send POST request
req = RequestMessage('post', headers, body);
resp = req.send(url);
 
% Output struct
result.status_code = double(resp.StatusCode);
result.response_body = resp.Body.Data;
 
% Extract headers
if isprop(resp,'Header')
for k = 1:numel(resp.Header)
result.headers.(matlab.lang.makeValidName(resp.Header(k).Name)) = string(resp.Header(k).Value);
end
else
result.headers = [];
end
 
% Extract QuoteTicketId (if available)
if isfield(result.response_body, 'quoteTicketId')
result.quoteTicketId = result.response_body.quoteTicketId;
else
result.quoteTicketId = "";
end
 
% Extract TAN challenge from header x-once-authentication-info
if isfield(result.headers, 'x_once_authentication_info')
tan_info = jsondecode(result.headers.x_once_authentication_info);
result.challengeId = tan_info.id;
else
result.challengeId = "";
end
 
result.error_message = "";
 
catch ME
% On error
result.status_code = -1;
result.response_body = [];
result.headers = [];
result.quoteTicketId = "";
result.challengeId = "";
result.error_message = ME.message;
end
 
end
 
 
body sieht wie folgt aus: '{"depotId":"___ID___","orderType":"QUOTE","side":"BUY","instrumentId":"B8A09A2424EB47EB8719E339B2A6C631","quantity":{"value":"1","unit":"XXX"},"venueId":"3053FBD1995146598833F23B03301815"}'
 Auch mit WKN oder ISIN kommt es zum gleichen Fehler.. 
 

dg2210
Legende
7.798 Beiträge

Die Fehlermeldung spricht von einer fehlenden depotID. Daher solltest du zuerst prüfen, ob die DepotID im ausgehenden requests korrekt gesetzt ist.

 

Falls ja: dieselbe Aktion mit Postman durchführen und bei Erfolg den Postman-Request mit deinem selbstgemachten Request vergleichen.

Bettina Orlopp : „Wir haben kein Erkenntnis-, sondern ein Umsetzungsproblem.“ (Focus online 24.06.2025)