Skip to content

Migration Guide: Saveris 2 API to Smart Connect API

If you are currently using the Saveris 2 API (SaverisConnector) to retrieve measurement data, alarms, or device information, this guide explains what changes when you switch to the Smart Connect API.

What's Changing?

There are three main changes you need to be aware of:

  1. Simpler authentication — Instead of a token that you had to include with every request, you now use an API Key that you generate directly in Smart Connect.
  2. New way of retrieving data — The old API returned data immediately in one step. The new API uses a 3-step process: you submit a request, wait briefly for it to be processed, and then download the result as a file (e.g., a CSV that you can open in Excel).
  3. New terminology — What was previously called a "Measuring Point" is now called a Measuring Object. The data you get back is richer and more detailed, but the names and structure are different.

API Comparison

Saveris 2 API (Old) Smart Connect API (New)
Base URL https://www.saveris.net/SaverisConnector/ws/api/saveris/v1 https://data-api.<region>.smartconnect.testo.com
Authentication Token in Authorization header API Key in x-custom-api-key header
How you get data One step: send request → receive data Three steps: submit request → check status → download file
Result format JSON (data embedded directly in the response) File download — usually CSV, but also JSON and other formats
Filtering URL parameters (e.g., ?param=value) OData filter expressions in the request body — see OData Filtering
Endpoints 3 6 endpoint pairs (12 total)

Authentication: From Token to API Key

With the old API, you included an authentication token in every request:

Authorization: Bearer <your_token>

With the new API, you use an API Key instead — a string that you generate once in Smart Connect and include in every request:

x-custom-api-key: <your_api_key>

How to get your API Key

For a complete setup walkthrough, including screenshots, see the Authentication & Security guide.

API keys expire after at most one year

Remember to generate a new key before your current one expires. Once expired, your integration will stop working until you replace the key.


How Data Retrieval Works Now

This is the biggest change. Previously, you sent a single request and received your data back immediately. The new API works in three steps:

Step 1 — Tell the API what data you need:

You send a request describing what you want (e.g., "give me all measurements from the last hour in CSV format").

POST /v2/measurements
x-custom-api-key: <your_api_key>
Content-Type: application/json

{
  "date_time_from": "2026-04-28T13:00:00Z",
  "date_time_until": "2026-04-28T14:00:00Z",
  "options": {"result_file_format": "CSV"}
}

The server confirms your request and gives you a reference number (request_uuid):

{"status": "Submitted", "request_uuid": "abc-123"}

Step 2 — Wait and check if the result is ready:

Using the reference number, you check whether the data is ready:

GET /v2/measurements/abc-123
x-custom-api-key: <your_api_key>

While the server is still preparing your data, it responds with "In Progress". Once ready, it responds with "Completed" and provides a download link.

Step 3 — Download the result:

Open the download link to get your file. The link works without an API key and stays valid for about 1 hour.

How often should you check?

Don't check too frequently. A good approach: wait 5 seconds after submitting, then 10 seconds, then 20 seconds, and so on. This is sufficient for most requests.

For more details, see the Concepts chapter.


Endpoint Mapping

This section shows which old API call maps to which new one, and how the data fields have changed.

Measuring Points → Measuring Objects

Old GET /saveris/v1/measuringPoint — listed all your measuring points
New (primary) POST /v1/measuring-objects — returns your measuring objects with alarm settings, channel assignments, and measuring instructions
New (additional) POST /v3/devices/properties — returns detailed information about your physical devices, sensors, and channels

What changed: Your "Measuring Points" are now called Measuring Objects. A measuring object contains everything that defines a monitoring point: which alarm thresholds apply, which channels are assigned, and what the measuring instructions are.

If you need hardware details about your devices (serial numbers, firmware versions, battery types, etc.), these are now available through a separate endpoint called Devices Properties. This gives you more information than before, organized in a hierarchy: Device → Sensor → Channel.

Field Mapping

Old field New field Where to find it
id mo_uuid Measuring Objects
name device_display_name / sensor_display_name Devices Properties
description No direct equivalent
group location_type / location_subtype Locations
area customer_site Measuring Objects / Devices Properties

How to find your old measuring points in the new system

The best way to match old and new data is by serial number. Use the device_serial_no and sensor_serial_no fields from the Devices Properties endpoint to find the same devices you had in the Saveris 2 system.

Measurement Values

Old GET /saveris/v1/measuringPoint/value — returned the latest value for each measuring point
New POST /v2/measurements — returns measurement data for a time range you specify

What changed: The old API had a simple "give me the current value" call. The new API always expects you to specify a time range — for example, "give me all measurements from the last hour." You receive a file with all measurements in that period, not just the latest one.

Field Mapping

Old field New field Explanation
measuringPointId serial_no Identifies which sensor the measurement came from
channelName physical_property_name + physical_extension What was measured — e.g., "Temperature" + "Air Temperature"
value measurement The measured value (e.g., 4.5)
unit physical_unit The unit of measurement (e.g., "CELSIUS")
isoValue / isoUnit No longer provided separately — values come in one format
timestamp timestamp + timestamp_local When the measurement was taken — now available in both UTC and your local time zone

Getting just the latest value

If you only need the most recent measurement (like the old API provided), the simplest approach is to leave out the start time. The API will then automatically look at the last hour. You can also ask it to sort by time (newest first):

{
  "options": {"result_file_format": "CSV"},
  "odata": {
    "$orderby": "timestamp desc"
  }
}

The result file may contain multiple values (all measurements from the past hour). Your integration should pick the first row (= the most recent value).

Alarms

Old GET /saveris/v1/measuringPoint/alarm — returned only currently active alarms and system warnings
New POST /v3/alarms — returns all alarms (both active and resolved) for a time range

What changed: The old API only showed alarms that were still active. The new API gives you the complete alarm history for a time range — including alarms that have already been resolved. This is more powerful, but it means you need to filter if you only want active alarms.

Only want active alarms? You need to add a filter

To get the same result as the old API (only active alarms), add this filter to your request:

"odata": {
  "$filter": "alarm_status eq 'Alarm'"
}

Without this filter, you will also receive resolved alarms (marked as "Ok").

Field Mapping — Alarms

Old field New field Explanation
measuringPointId serial_no Identifies which device triggered the alarm
channelName physical_value + physical_value_extension What was measured — e.g., "Temperature" + "Air Temperature"
limitViolationValue alarm_value The value that triggered the alarm (e.g., 8.5)
limitValue Available in Measuring Objects The configured threshold is now part of the measuring object's alarm configuration
limitUnit / isoUnit physical_unit The unit (e.g., "°C")
timestamp alarm_time + alarm_time_local When the alarm occurred — now in both UTC and local time

The new API also provides additional information that was not available before:

New field What it tells you
alarm_status Whether the alarm is still active ("Alarm") or has been resolved ("Ok")
alarm_severity How severe it is: "Warning" (approaching limit) or "Alarm" (limit exceeded)
alarm_type What kind of alarm: "measurement_alarm", "device system alarm", or "sensor system alarm"
alarm_reason A description of what caused the alarm

System Warnings

The old API returned system warnings in a separate list (systemWarnings). In the new API, system warnings are included together with alarms — you can identify them by their alarm_type:

Old New equivalent
systemWarningsmessage Alarms where alarm_type is "device system alarm" or "sensor system alarm"alarm_reason
systemWarningsmeasuringPointId serial_no
systemWarningstimestamp alarm_time + alarm_time_local

Additional Endpoints

The Smart Connect API also offers new endpoints that were not available in the old Saveris 2 API:

Endpoint What it gives you
POST /v3/devices/properties Detailed information about your devices, sensors, and channels — serial numbers, firmware versions, calibration status, battery types, and more. See also Measuring Points → Measuring Objects.
POST /v3/devices/status Current device health — battery level, signal strength, connection type (Wi-Fi or Ethernet), when it last communicated
POST /v1/locations Your location hierarchy — customers, measurement sites, and their categories