Analyzer Webhooks

The application can be configured to send test data to a webhook URL. This is useful for integrating with other services or for custom data analysis.

The webhook URL can be configured in the settings panel. The application will send a POST request to this URL with a JSON payload. Make sure that appropriate CORS headers are configured.

Triggers

The webhook is sent at the following times:

Payload

The payload is a JSON object with the following structure:

{
  "version": 0,
  "event": "string",
  "device": {
    "hwVersion": "string",
    "swVersion": "string",
    "deviceModel": "string",
    "sn": "number",
    "configuration": "string"
  },
  "test": {
    "state": "string",
    "result": "object",
    "data": {
      "temperatureSamples": [
        {
          "time": "string",
          "temp": "number"
        }
      ],
      "samples": [
        {
          "startingChannel": "number",
          "firstChannelResult": "number",
          "samplingTime": "number",
          "samplingTemperature": "number"
        }
      ]
    }
  }
}

Device

The device object contains information about the device that ran the test.

Test

The test object contains information about the test itself.

Examples

Device ready for test

{
  "version": 0,
  "event": "DEVICE_READY",
  "test": {
    "state": "IDLE",
    "data": { "temperatureSamples": [], "samples": [] }
  }
}

Test is already running when test is started

{
  "version": 0,
  "event": "ALREADY_TESTING",
  "test": {
    "state": "BLOCKED_ALREADY_TESTING",
    "data": { "temperatureSamples": [], "samples": [] }
  }
}

Test started

{
  "version": 0,
  "event": "TEST_STARTED",
  "device": {
    "hwVersion": "HV3.0.2",
    "swVersion": "SV2.2.2.230619_Beta_V2",
    "deviceModel": "PM001",
    "sn": 0000000000,
    "configuration": "CV1.22.7.20"
  },
  "test": {
    "state": "TESTING",
    "data": { "temperatureSamples": [], "samples": [] }
  }
}

Test continued

{
  "version": 0,
  "event": "CONTINUE_TEST",
  "device": {
    "hwVersion": "HV3.0.2",
    "swVersion": "SV2.2.2.230619_Beta_V2",
    "deviceModel": "PM001",
    "sn": 0000000000,
    "configuration": "CV1.22.7.20"
  },
  "test": {
    "state": "TESTING",
    "data": { "temperatureSamples": [], "samples": [] }
  }
}

Incremental updates during test

{
  "version": 0,
  "event": "NEW_DATA",
  "device": {
    "hwVersion": "HV3.0.2",
    "swVersion": "SV2.2.2.230619_Beta_V2",
    "deviceModel": "PM001",
    "sn": 0000000000,
    "configuration": "CV1.22.7.20"
  },
  "test": {
    "state": "TESTING",
    "data": {
      "temperatureSamples": [
        { "time": "2025-06-30T16:10:13.802Z", "temp": 63.16767501831055 },
        { "time": "2025-06-30T16:10:15.872Z", "temp": 63.13431167602539 },
        { "time": "2025-06-30T16:10:17.851Z", "temp": 63.13431167602539 },
        { "time": "2025-06-30T16:10:20.057Z", "temp": 63.20106887817383 },
        { "time": "2025-06-30T16:10:21.677Z", "temp": 63.16767501831055 },
        { "time": "2025-06-30T16:10:23.747Z", "temp": 63.16767501831055 }
      ],
      "samples": [
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 1,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 704
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 2,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 896
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 3,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 1088
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 4,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 448
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 5,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 1152
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 6,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 256
        }
      ]
    }
  }
}

Test completed

{
  "version": 0,
  "event": "TEST_FINISHED",
  "device": {
    "hwVersion": "HV3.0.2",
    "swVersion": "SV2.2.2.230619_Beta_V2",
    "deviceModel": "PM001",
    "sn": 0000000000,
    "configuration": "CV1.22.7.20"
  },
  "test": {
    "state": "DONE",
    "result": {
      "detectionType": 1,
      "detectionFlowNumber": 166,
      "detectionResult": "INVALID",
      "numberOfChannels": 7,
      "startingChannel": 0,
      "channelResults": [
        "NEGATIVE",
        "NEGATIVE",
        "NEGATIVE",
        "NEGATIVE",
        "NEGATIVE",
        "NEGATIVE",
        "NEGATIVE"
      ],
      "numberOfSubGroups": 2,
      "subGroupResults": [
        { "result": "NEGATIVE", "name": "IC" },
        { "result": "INVALID", "name": "SARS-CoV-2" }
      ]
    },
    "data": {
      "temperatureSamples": [
        { "time": "2025-06-30T16:10:13.802Z", "temp": 63.16767501831055 },
        { "time": "2025-06-30T16:10:15.872Z", "temp": 63.13431167602539 },
        { "time": "2025-06-30T16:10:17.851Z", "temp": 63.13431167602539 },
        ...
      ],
      "samples": [
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 1,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 704
        },
        {
          "sampleType": 1,
          "sampleStreamNumber": 166,
          "currentDataIndex": 7,
          "totalNumberOfSamples": 8,
          "startingChannel": 2,
          "numberOfChannels": 1,
          "samplingTime": 4508,
          "samplingTemperature": 63.1,
          "firstChannelResult": 896
        },
        ...
      ]
    }
  }
}

Send a mail to "hi [ät] virus.sucks" for questions and feedback.
Anything discount-related, email "discount [ät] virus.sucks" instead.
Imprint (Impressum) | Version: main (639a1f6c)