Quanergy · Authentication Profile

Quanergy Authentication

Authentication

Quanergy declares 3 security scheme(s) across its OpenAPI definitions.

CompanyLiDARSensorsPhysical SecurityPerimeter SecurityPerceptionCrowd ManagementIndustrial AutomationInternet of ThingsgRPCStreamingHardware
Methods: Schemes: 3 OAuth flows: API key in:

Security Schemes

http
scheme: digest
Q-Auth apiKey
· in: header ()
metadata

Source

Authentication Profile

quanergy-authentication.yml Raw ↑
generated: '2026-08-05'
method: searched
source: https://downloads.quanergy.com/qortex/Qortex-API-Reference-RevA-120824.pdf
docs: https://downloads.quanergy.com/qortex/Qortex-API-Reference-RevA-120824.pdf
x-evidence:
  fetched: '2026-08-05'
  url: https://downloads.quanergy.com/qortex/Qortex-API-Reference-RevA-120824.pdf
  http_status: 200
  content_type: application/pdf
  document: QORTEX DTC for Q-Track API Reference, QPN 96-00134 Rev A (2024-09-15)

api: QORTEX DTC API
deployment: on-premises
default_posture: >-
  Security mode is OFF by default on the QORTEX DTC server. When Security mode is disabled the
  gRPC endpoint (port 17177) and the TCP publisher ports are unauthenticated and unencrypted on
  the local network. Security mode is enabled by an operator from the QORTEX DTC client in
  Configuration mode and requires an activated Quanergy license.

schemes:
  - id: http-digest
    type: http
    scheme: digest
    realm: realm@quanergy
    endpoint: 'https://<IP_Address>:8080/v1/login'
    description: >-
      RFC 7616-style HTTP Digest access authentication against the QORTEX HTTP command server.
      Two-phase GET: the first request draws a nonce, the second carries the digest hash.
      Credentials may be a username/password pair or a License ID/License password pair; the
      documentation recommends username auth and treats the License ID as an administrative
      backup path.
    credential_policy:
      username_min_length: 4
      username_composition: letters and digits
      password_min_length: 6
      password_composition: upper and lower case letters plus digits
      account_expiry: >-
        The server pushes `Security/Expiring` (with an `hours` parameter) and `Security/Expired`
        gRPC notifications for user accounts, so accounts have a finite lifetime.
    x-note: >-
      The published Python example calls the login endpoint over plain `http://` on port 8080
      while the prose gives the endpoint as `https://`. Both forms appear in Rev A.

  - id: q-auth-header
    type: apiKey
    in: header
    name: Q-Auth
    description: >-
      A custom application-level command header layered on top of HTTP Digest. One command per
      request, parameters delimited by colons. Server replies come back on `Q-*` headers.
    commands:
      - command: GetSecured
        authenticated: false
        response_headers: [Q-Secured, Q-UserPresent]
        description: >-
          Reports whether the QORTEX DTC system is currently secured and whether a username is
          configured. This is the only command that does not require authentication.
      - command: GetToken
        authenticated: true
        response_headers: [Q-Token]
        description: >-
          Returns a 64-character hex token which is unhexed into the AES-256 key used to decrypt
          the TCP publisher streams. Failure returns HTTP 401.
      - command: 'SetSecured:true|false'
        authenticated: true
        response_headers: [Q-SetSecured]
        description: Secures or unsecures the whole client-to-server data flow. Reply is `ok` or `failed`.
      - command: 'SetCredentials:username:encryptedPassword'
        authenticated: true
        response_headers: [Q-CredentialsSet, Q-Token]
        description: >-
          Sets user credentials using the documented HTTP password encryption formula; on success
          returns true plus a security token.

  - id: grpc-client-id-metadata
    type: metadata
    transport: grpc
    endpoint: '<IP_Address>:17177'
    metadata_key: client_id
    description: >-
      Every gRPC call carries a `client_id` metadata pair holding the string form of a 128-bit
      UUID. This is how the QORTEX DTC server distinguishes concurrent clients. It is an
      identity/correlation value, not a credential — authentication is carried by the Q-Auth /
      Digest exchange when Security mode is on.
    x-example-shape: 'metadata = (("client_id", "<uuid4>"),)'

authorization:
  model: mode-based
  description: >-
    Authorization is not scope- or role-based. Each gRPC method belongs to either Monitor mode
    or Config mode. A client must hold an open `SwitchToConfigMode` bidirectional stream before
    calling any Config-mode method, otherwise the server returns a permission-denied error.
  modes:
    - name: monitor
      requires_switch_to_config_mode: false
      methods:
        - GetZones
        - GetEventZoneViolationActions
        - GetEventZoneViolationRecordingEnabled
        - GetEventZoneViolationHandlerEnabled
        - GetServerState
        - GetSensorState
        - GetFile
        - PubSub
    - name: config
      requires_switch_to_config_mode: true
      description: >-
        Every remaining method — zone, counter-line, rule, PTZ camera, settings, recording and
        playback configuration — requires the client to hold the Config-mode stream.
  entitlements:
    - name: SubVehicle license add-on
      effect: >-
        Without it the tracker emits only PERSON, VEHICLE and UNKNOWN classifications.
        TWOWHEELER_VEHICLE, PASSENGER_VEHICLE and COMMERCIAL_VEHICLE are only populated when the
        sub-classification license is present.

transport_security:
  - control: AES-256 payload encryption
    applies_to: [object/trackable list, zone list, sensor health/state list]
    description: >-
      When Security mode is on, the TCP publisher payloads are AES-256 encrypted. The key is the
      unhexed `Q-Token`. Quanergy ships Python and C++ TCP listener samples that perform the
      decryption; the corresponding publisher must be configured with
      `<TCPPublisher><AddDataSize>true</AddDataSize></TCPPublisher>`.
  - control: no CA required
    description: >-
      The documentation states explicitly that internet access and a Certificate Authority are
      not required — the scheme is self-contained on the customer network.

not_present:
  - oauth2
  - openIdConnect
  - mutualTLS
  - api-key-issuance-portal
  - self-service-credentials

gaps:
  - >-
    Security mode being off by default means a stock QORTEX DTC deployment publishes person and
    vehicle track data on unauthenticated TCP ports. The default is a deployment-hardening
    decision for the operator, but it is not called out as a hardening step in the API Reference.
  - >-
    No machine-readable description of the auth surface is published — no OpenAPI for the
    port-8080 HTTP command server, and no `.proto` for the gRPC service.