We are excited to announce the launch of our brand-new MQTT Publisher!

As part of our ongoing commitment to delivering top-tier data solutions, we rebuilt our MQTT architecture from the ground up. This new service is designed to give you a much more robust, flexible, and scalable data delivery experience.

Our upgraded platform is built for the future and provides:

  • ⚡️ Improved performance and scalability to handle your data seamlessly.
  • 🔒 Enhanced security and rock-solid reliability.
  • 🚀 Long-term support with a foundation for continued feature development.

You can explore the new capabilities here: 👉 Check out the new MQTT Publisher Documentation

The Airthings Business API now supports Gzip compression of the response payloads.

Why use compression?

As your sensor networks grow and the volume of historical data or device lists increases, API payloads can become quite large. Enabling Gzip compression can reduce the size of the data transferred by up to 80%, resulting in:

  • Faster response times for your applications.
  • Lower data consumption, which is particularly beneficial for high-frequency data polling applications.

How to enable Compression

To start receiving compressed data, simply add the Accept-Encoding header to your GET requests: Header: Accept-Encoding: gzip

NOTE: Most modern HTTP clients (like Axios, Python Requests, or Go’s http package) handle decompression automatically once this header is present, but make sure your client handles decompression before rolling out your changes.

Previously, configuring a webhook for specific locations required manual action and updates whenever a new location was added to an account. Now, you can configure webhooks to subscribe always to all locations in an account. See the sections below for more details.

Dashboard

You can configure webhooks in our dashboard at dashboard.airthings.com/integrations/webhooks:

Previously, the Select all checkbox did not account for new locations added in the future. Now, the Select all option automatically includes new locations as they are added.

API

Our API also enables webhook configuration. We have introduced a new field, subscribedToAll, which allows a webhook to subscribe to all locations. When this field is set to true, it is no longer possible to provide specific locations in the request. See our API reference for more information or see this example:

curl --request POST \
     --url 'https://ext-api.airthings.com/v1/webhooks?accountId=00000000-0000-0000-0000-0000000000' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer $AUTH_TOKEN' \
     --header 'content-type: application/json' \
     --data '
{
  "active": true,
  "eventTypes": [
    "samle-feed"
  ],
  "subscribedToAll": true,
  "url": "https://webhook.site/00000000-0000-0000-0000-0000000000",
  "name": "My Webhook"
}
'

🚀 Feature Release

Updating/creating device labels in batch is now possible via API. This new endpoint requires the access scope write:device. It allows 1000 operations per request.

You can look at API Spec for further details.

We added support for hourly radon also to webhooks known as hourly-radon-sample-feed. The sample-feed provides a 24-hour average, and sometimes it can be useful to subscribe to hourly events. The event feed is opt-in so it's necessary to update existing webhooks to use it. The value can be in Bq/m³ or pCi/L and it is possible to configure the preference in webhook configuration (using dashboard or API).

{
  "id": "00000000-0000-0000-0000-0000000000",
  "type": "airthings-webhook-cloudevent-hourly-radon-sample-feed",
  "source": "https://dashboard.airthings.com/integrations/webhooks/00000000-0000-0000-0000-0000000000",
  "dataContentType": "application/json",
  "labels": {},
  "data": [
    {
      "serialNumber": "0000000000",
      "hourlyRadon": 0.5,
      "ratings": {
        "hourlyRadon": "GOOD"
      },
      "sensorUnits": {
        "hourlyRadon": "pci"
      },
      "recorded": "2023-11-30T10:00:00Z"
    }
  ],
  "time": "2023-11-30T10:00:00.0Z",
  "specVersion": "0.2"
}

🚀 Feature Release

The "Hourly Radon" sensor is now available for the Space Plus devices, and is an improvement of the short term average data that has been the only way to interpret Radon values until now. While the radonShortTermAvg sensor provides a running average of the latest 24 hours, the hourlyRadon sensor presents data processed by an algorithm which uses the data collected from the device to estimate the current Radon level. This can be useful when controlling mitigation equipment or presenting Radon levels in buildings where the ventilation or other mitigation equipment isn't running 24/7. As the name suggests, the value is updated once an hour.

We added "hourly radon" samples to the latest-samples endpoints:

... and new endpoints for historical samples:

Now, there is a new property in the response:

  • hourlyRadon - hourly average radon level

We added a new webhook event type ventilation-sample-feed that provides samples from the ventilation rate virtual sensor. The event is triggered whenever the virtual sensor is calculated.

The data contains airflow in cubic meters per hour and number of air exchanges per hour as airExchangeRate:

{
	"id": "00000000-0000-0000-0000-0000000000",
	"type": "airthings-webhook-cloudevent-ventilation-sample-feed",
	"source": "https://dashboard.airthings.com/integrations/webhooks/00000000-0000-0000-0000-0000000000?version=v2",
	"dataContentType": "application/json",
	"labels": {},
	"data": [
		{
			"serialNumber": "0000000000",
			"recorded": "2024-07-08T20:00:00.0Z",
			"airflow": 98.93,
			"airExchangeRate": 4.46,
			"sensorUnits": {
				"airExchangeRate": "ach",
				"airflow": "m3h"
			}
		},
		// ... (next 23 samples)
	],
	"time": "2024-07-08T20:00:00.0Z",
	"specVersion": "0.2"
}

You can subscribe to this event using the dashboard or the API. See more about the event type here in the webhook documentation.