For a more in depth documentation, you should check the comments from the protobuf file.


Used to authenticate the client.


The client should wait for the login response, before sending any other request. If the client sends a request before receiving the response for the login request, the server will close the connection.

Mandatory fields

The mandatory fields for the login request are:

  • user_name - Client username.

  • password - Client password.

    • version - The version of password that should be sent, will be given to the QST customer along with the user name and password.

  • client_id - QST customers will receive this ID when they sign up for service, along with the login credentials.

UserPreferences fields

These fields are used to set specific options per user connection.

  • coalescing_interval - If it is set to UNCOALESCED, the server will not coalesce the quotes. If it’s different than UNCOALESCED (_100_MS or _250_MS), the server will coalesce the quotes at that specific interval. If this is not present, the server will coalesce the quotes at a default interval (_250_MS).

  • coalesce_last_trade - If the server is coalescing the quotes, the client can opt in to coalesce the last trades. If this is set to true, the client will receive only the last trade received in that interval.


If the coalescing_interval is missing, the default coalescing interval is 250ms, or any other value that the user has rights in its subscription package. If the client has rights to a smaller interval(or uncoalesced), the client can ask for a bigger interval. But if the client asks for a smaller interval or uncoalesced, and the client has rights for a bigger interval, we will use the interval from its subscription package.


If user_preferences is missing, the server will coalesce the quotes at the default interval (_250_MS) and the last trades will not be coalesced.

Request example

  const payload = {
    request_id: 1,
    login: {
    user_name: "user_name",
    password: {
        version: 1,
        value: "password"
    user_preferences: {
        coalescing_interval: 2, /* _250_MS */
        coalesce_last_trade: false
    white_label_code: "CVS",
    local_ip: "",
    client_id: "client_id"


Login succeeded

If the provided login credentials are valid, the server will respond with a LoginResponse.

User didn’t agree to our terms

If the client has pending agreements, the server will respond with a ProvisioningMessages response. If the client doesn’t know how to accept the terms, the client shoud contact our support team.

Missing mandatory fields

If the client didn’t provide the mandatory fields the server will respond with an ErrorMessage that can contain one of the following error meessages:

  • Populate all mandatory fields: username and password are mandatory. - If the user_name or/and password fields were not populated.

  • Unauthorized client_id. - If the client_id field was not populated.

Login failed

If the login failed, the server will respond with an ErrorMessage that can contain one of the following error meessages:

  • Login failed. The credentials were not valid (1)

  • Login failed. TOTP Code Missing (2)

  • Login failed. E-Mail validation pending (3)

  • Login failed. 2FA key validation pending (4)

  • Login failed. Reached limit of failed logins, please contact support (5)

  • Login failed. Server error (6)


When contacting our support team regarding a login issue, please provide the response that you’ve received from our server.

Error codes

For external users:

  • 1 - Invalid username or password.

  • 2 - Second factor missing, when 2fa authentication is enabled.

  • 5 - Too many failed login attempts.

  • 1000 - Login failed for any other reason

For internal users, you should check the internal error codes.