TS6 Server SDK/API

:package: Feature Request: SDK for TeamSpeak Server 6 (TS6)

Dear TeamSpeak Development Team,

I would like to propose the creation of a Software Development Kit (SDK) for TeamSpeak Server 6, inspired by the functionality and accessibility provided by the SDK of TeamSpeak 3.


:jigsaw: Requested SDK Features

1. ServerQuery-like Interface as in TeamSpeak 3

  • Provide a way to programmatically connect to and manage the TS6 server similar to the ServerQuery interface in TS3.
  • Support for popular programming languages such as:
    • PHP
    • Rust
    • Python
    • Others, if feasible
  • Ideally exposed via standard communication protocols (e.g., TCP or RESTful API).

2. HLS Output for Public Video Streams

  • When a video stream is active on the TS6 server and marked as PUBLIC, the SDK (or core server) should:
    • Provide access to that stream via the HLS protocol (HTTP Live Streaming).
    • Ensure compatibility with standard HLS players (e.g., hls.js, VLC).

3. Architecture Inspired by TeamSpeak 3 SDK

  • Structured and well-documented SDK following the philosophy of the TS3 SDK.
  • Focus on:
    • Stability
    • Compatibility
    • Extensibility
  • Optionally: Use of open standards like OpenAPI for client generation and broader adoption.

:dart: Goal of this Request

By offering such an SDK, developers would be empowered to build bots, admin tools, and third-party integrations for TS6 with ease — helping to grow the TeamSpeak ecosystem, just like the TS3 SDK once did.


Thank you very much for considering this feature request.
Please feel free to reach out for any technical clarifications or further input.

Best regards,
TerisC.

4 Likes

Hey ChatGPT TerisC!

As the TeamSpeak 6 server is in fact more or less a TeamSpeak 3 server, the query with all the commands you came to know from TeamSpeak 3 servers is still available. The raw telnet query was removed, however you can still use the SSH and the web query, see teamspeak6-server/CONFIG.md at main · teamspeak/teamspeak6-server · GitHub.

6 Likes

Thank you for the information, Gamer92000. Unfortunately, I’m receiving a 500 error with all scripts I’m using, whether in Python or PHP.

I can see in the logs that data requests are being initiated, but no data is being transmitted.

See log:

"2025-07-10 14:41:43.094312|INFO    |Query         |   |query from 5 ****************:10313 issued: login with account "serveradmin"(serveradmin)
2025-07-10 14:41:43.094541|INFO    |ServerParser  |   |begin------------------------------ COMMAND STATISTICS ------------------------------begin
2025-07-10 14:41:43.094569|INFO    |ServerParser  |   |cmd: dummy_connectionlost, calls: 4, time: 43, timePerCall: 10
2025-07-10 14:41:43.094580|INFO    |ServerParser  |   |cmd: login, calls: 1, time: 264049, timePerCall: 264049
2025-07-10 14:41:43.094589|INFO    |ServerParser  |   |end-------------------------------- COMMAND STATISTICS --------------------------------end
2025-07-10 14:41:46.560748|INFO    |Query         |   |query from  5 ************:10313 issued: help
2025-07-10 14:41:46.571735|INFO    |ServerParser  |   |begin------------------------------ COMMAND STATISTICS ------------------------------begin
2025-07-10 14:41:46.571768|INFO    |ServerParser  |   |cmd: dummy_connectionlost, calls: 4, time: 43, timePerCall: 10
2025-07-10 14:41:46.571778|INFO    |ServerParser  |   |cmd: help, calls: 1, time: 10833, timePerCall: 10833
2025-07-10 14:41:46.571787|INFO    |ServerParser  |   |cmd: login, calls: 1, time: 264049, timePerCall: 264049
2025-07-10 14:41:46.571795|INFO    |ServerParser  |   |end-------------------------------- COMMAND STATISTICS --------------------------------end
2025-07-10 14:41:54.144400|INFO    |Query         |   |query from  5 5.61.144.145:10313 issued: version
2025-07-10 14:41:54.144675|INFO    |ServerParser  |   |begin------------------------------ COMMAND STATISTICS ------------------------------begin
2025-07-10 14:41:54.144694|INFO    |ServerParser  |   |cmd: dummy_connectionlost, calls: 4, time: 43, timePerCall: 10
2025-07-10 14:41:54.144704|INFO    |ServerParser  |   |cmd: help, calls: 1, time: 10833, timePerCall: 10833
2025-07-10 14:41:54.144713|INFO    |ServerParser  |   |cmd: login, calls: 1, time: 264049, timePerCall: 264049
2025-07-10 14:41:54.144721|INFO    |ServerParser  |   |cmd: version, calls: 1, time: 173, timePerCall: 173
2025-07-10 14:41:54.144729|INFO    |ServerParser  |   |end-------------------------------- COMMAND STATISTICS --------------------------------end"

Additionally, while an SSH connection is technically possible, I can’t execute any commands — I get blocked immediately.

I’ve already adjusted the Query Allowlist accordingly, as well as the configuration file.

See:

  license-path: .  # The path to where the server will look for the server license
  default-voice-port: 8887  # Sets the default voice port for the first virtual server. Subsequent virtual servers will use incrementing ports starting from the one specified here.
  voice-ip:
    - ***.***.***.***
    - "::"  # IP address for the server to bind the voice port to
  machine-id: ""  # A string to distinguish this instance from other instances using the same database
  threads-voice-udp: 1  # Number of threads to use for voice processing
  log-path: logs  # Path to the directory where log files are stored
  log-append: 0  # Write one ever growing log file per virtual server, rather than rotating the server logs every time the instance is started
  no-default-virtual-server: 0  # If specified no default server is created even if no server exists in the database
  filetransfer-port: 30044  # The port on which to listen for file transfer connections
  filetransfer-ip:
    - ***.***.***.***
    - "::"  # The address on which to listen for file transfer connections
  clear-database: 0  # WARNING: If present, the database is reset to default and all servers, clients etc are lost!
  no-permission-update: 0  # Do not apply permission changes with a server update
  http-proxy: ""  # The proxy server to use for connecting to external services such as accounting
  accept-license: true  # Confirms you have read and accepted the server license agreement. The server will ask otherwise
  crashdump-path: crashdumps  # Path to store crashdumps in
  daemon: 1  # Run the server in the background
  pid-file: "ts6-server"  # File in which to store the process id of the server
  hints-enabled: 0  # Whether to enable permission hints. This may negatively affect performance on larger servers
  maxmind-db-path: ""  # Path to the MaxMind IP database
  administrative-domain: ""  # 
  database:
    plugin: sqlite3  # Specifies which database plugin to use
    sql-path: sql  # Path to the sql folder containing the SQL queries executed by the server
    sql-create-path: create_sqlite  # Path relative to the --sql-path where to load the database creation scripts from
    client-keep-days: 30  # Number of days to keep clients in the database. Clients that have no permanent group and have not connected to the server for this many days are removed from the database
    config:
      skip-integrity-check: 0  # SQLite only: Skip the database integrity check when opening the database
      host: 127.0.0.1  # Hostname / IP address to use when connecting to the database server
      port: 5432  # Port to use when connecting to the database server
      socket: ""  # The socket to use for the database connection
      timeout: 10  # Timeout in seconds for the database connection
      name: teamspeak  # The database name to use
      username: ""  # The username to use for database authentication
      password: ""  # The password to use for database authentication
      connections: 10  # The number of connections to establish to the database
      log-queries: 0  # Whether to log database queries
  query:
    pool-size: 2  # How many threads to use for query command processing
    log-timing: 3600  # Interval in seconds after which to log query statistics
    ip-allow-list: query_ip_allowlist.txt  # File path to a file which lists the addresses that are exempt from query flood protection
    ip-block-list: query_ip_denylist.txt  # File path to a file which lists the addresses that are blocked from the query interface
    admin-password: "this is my secret"  # Override the query password for the built-in serveradmin account to the specified value
    log-commands: 1  # If specified every command received on the query interface will be logged
    skip-brute-force-check: 0  # Skips brute force checking when clients connect to the query interface
    buffer-mb: 20  # How much memory to allocate for query connection buffering
    documentation-path: serverquerydocs  # Path to the query documentation files
    timeout: 300  # Specifies after how many seconds query connections time out
    ssh:
      enable: 1  # Enable the SSH query interface
      port: 10044  # The port on which to listen for SSH query connections
      ip:
        - ***.***.***.***
        - "::"  # The address on which to listen for SSH query connections
      rsa-key: ssh_host_rsa_key  # The SSH RSA host key to use
    http:
      enable: 1  # Enable the http query interface
      port: 10080  # Port on which to listen for Web Query connections
      ip:
        - ***.***.***.***
        - "::"  # Address on which to listen for Web Query connections
    https:
      enable: 1  # Enable the https query interface
      port: 10443  # Port on which to listen for secure Web Query connections
      ip:
        - ***.***.***.***
        - "::"  # Address on which to listen for secure web query connections
      certificate: ""  # File containing the certificate to serve for secure web query connections
      private-key: ""  # File containing the private key for the certificate
"