Documentation
The Questrade API allows developers to create their own fully featured trading and analytical applications through their brokerage account.
Streaming
Streaming services in Qiestrade API allows client applications to subscribe and receive push notifications on order status changes, executions and as well as subscribe to L1 market data and receive quotes in steaming mode.
Order Notifications
Request notification port
GET https://api01.iq.questrade.com/v1/notifications?mode=RawSocket GET https://api01.iq.questrade.com/v1/notifications?mode=WebSocket Response: { "streamPort": 8080 }
Notifications endpoint does not accept JSON format messages. You can hardcode the mode as it’s unlikely you’ll change it within the same application.
Ports do not change on the same URL within the same day. On a different URL, however, they can be different.
You cannot connect to both RawSocket and WebSocket at the same time. When you create a second connection, it will disconnect the previous one.
- On RawSocket, within 5 seconds after the connection is established, send the access token and then ' ' as a delimiter (a space character)
- On WebSocket, send the access token as a message without any delimiters
Note: Do not use the word Bearer in sockets
If the token is recognized, the response message will be:
{"success": true}
Notification response will include either:
{"orders": [...], "accountNumber": XXXXXXXX}
Order Data structures (same as on GET orders endpoint) or
{"orders" : [...], "executions" : [ ...], "accountNumber" : XXXXXXXX}
Execution Data structures (same as on GET executions endpoint)
Note: Executions always update orders so there cannot be executions without orders. Keeping a socket open does not extend your session. You need to send requests at least every 30 minutes otherwise your socket will get disconnected when the session expires.
L1 Streaming
Same as for notifications, you can use either WebSocket or RawSocket Ports for L1 are separate but still remain same for the same URL within the same day.
Note: If you use L1 Streaming in Trading API, then your market data will freeze in any other IQ Platform that you are using simultaneously.
You must specify stream=true (or '"stream": true' in JSON) and then the mode you want to use
GET https://api01.iq.questrade.com/v1/markets/quotes?ids=9291,8049"stream=true"mode=RawSocket POST https://api01.iq.questrade.com/v1/markets/quotes/options { "stream": true , "mode": "RawSocket" , "filters": [ { "optionType": "Call" , "underlyingId": 27426 , "expiryDate": "2017-01-20T00:00:00.000000-05:00" , "minstrikePrice": 70 , "maxstrikePrice": 80 }, ... ], "optionIds": [ 9907637 , 9907638 , ... ] }
POST https://api01.iq.questrade.com/v1/markets/quotes/strategies { "stream": true , "mode": "RawSocket" , "variants": [ { "variantId": 1 , "strategy": "Custom", "legs: [ { "symbolId": 27426 , "ratio": 1000 , "action": "Buy" }, { "symbolId": 10550014 , "ratio": 10, "action": "Sell" } ] }, ... ] }