If you like WireQuery, please ⭐️ it on GitHub
Table of Contents


!!IMPORTANT: this SDK is highly experimental. There is no built-in masking!!

WireQuery Universal Daemon is a program that allows any application to easily connect to WireQuery.

How It Works

WireQuery Universal Daemon connects to WireQuery to fetch the queries for the specified applications. Whenever queries are sent from WireQuery to WireQuery Universal Daemon, the list of queries that run over every request is updated.

In the meanwhile, applications can send a so-called Context object to WireQuery Universal Daemon. Whenever a context object is received, WireQuery Universal Daemon will run all queries against that object and send the results back to WireQuery.


Make sure you have Go 1.19 or later installed and run:

go install github.com/wirequery/wirequery/sdk/go/cmd/universal

Running WireQuery Universal Daemon

WireQuery Universal Daemon should be run on the same machine as your application.

wirequery --appName <appName> --apiKey <apiKey> --port <port> --host <host>

For example:

wirequery --appName dummy --apiKey 123-456-789 --port 8091 --host grpc.wirequery.io


Applications wanting to connect to WireQuery should send the following information to WireQuery Universal Daemon with each request, whereas the request's sensitive data is masked before sending the data to WireQuery Universal Daemon. Masked data should be replaced by the term "MASKED".

POST api/v1/events

Content-Type: application/json

  "method": "<method>",
  "path": "<path>",
  "statusCode": <statusCode>,
  "queryParameters": <queryParameters>,
  "requestBody": <requestBody>,
  "responseBody": <responseBody>,
  "requestHeaders": <requestHeaders>,
  "responseHeaders": <responseHeaders>,
  "extensions": <extensions>,
  "startTime": <startTime>,
  "endTime": <endTime>,
  "traceId": <traceId>


  • <method> is the method of the HTTP call, e.g. POST
  • <path> is the path of the HTTP call, e.g. /api/users/1
  • <statusCode> is the status code of the HTTP call, e.g. 200
  • <queryParamters> is an object of query parameters, e.g. { "searchTerms": [ "some", "term"], "something": "else" }
  • <requestBody> is an object containing the request body, e.g. { "username": "wouter" }
  • <responseBody> is an object containing the response body, e.g. { "username": "wouter" }
  • <extensions> is an object containing custom extensions, e.g. { "upstreamCalls": [], "logs": [] }
  • <startTime> is the start timestamp of the request in milliseconds
  • <endTime> is the end timestamp of the request in milliseconds
  • <traceId> is the trace id of the request, which is needed for Extended Tracing