{"data":{"cred":{"n":"demo","p":"demo"}}}
Domain-specific login:
{"data":{"cred":{"d":"GlobalDomain","n":"demo","p":"demo"}}}
**Response Properties:**
* **token** (string) - Authentication token for calling other API methods.
* **tokenValidFor** (TimeSpan) - The duration for which the provided token is valid (e.g., "P1D" = 1 day).
* **changePwdBefore** (DateTime or null) - Specifies the date and time by which the current password must be changed.
{
"data": {
"ChangePwdBefore": null,
"ClientType": 2,
"Domain": "3c73477a-6c95-4939-b047-7bbf902bcef1",
"DomainName": "GlobalDomain",
"FullName": "GlobalDomain\\demo",
"Login": "demo",
"NotifyNearingPwdExpirationIn": null,
"Token": "3:b83d56f8-2e25-4745-a4e5-1a259c286c5f",
"TokenValidFor": "P1D",
"User": "48141739-5d16-4ca3-8ae1-33e27d9eb22e",
"Username": ""
},
"result": { "code": 0, "codeTxt": null, "dataType": null, "desc": null }
}
===== Reading Data =====
==== api/get/values ====
Retrieves current values of data points (property "Output") from one or multiple projects.
**Request:**
* **URL:** ''/api/get/values?format=xml''
* **Method:** POST
{
"cred": {
"n": "demo",
"p": "demo"
},
"propNamesToSerialize": ["Output"],
"offset": 0,
"count": 1000,
"serverState": null,
"dps": [{
"projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"dpIds": ["62cf4083-31ed-4bc1-be25-044ba837a9f0"]
}]
}
**Response:**
13851.42
==== api/v3/get/history ====
Downloading one or multiple trends with a single API call.
**Rules:**
* Items "segmentation", "requestState", and "serverState" should always copy the values from the last server response for pagination. The first call should use an empty "segmentation".
**Request:**
* **URL:** ''/api/v3/get/history?format=json''
* **Method:** POST
{
"credentials": {
"name": "demo",
"password": "demo"
},
"request": {
"commonSeriesParameters": {
"from": "2026-06-20T00:00:00Z",
"to": "2026-07-17T00:00:00Z"
},
"series": [
{
"clientReference": "test1",
"provider": {
"parameters": {
"projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0"
}
}
}
]
},
"dataSpecification": {
"limits": { "count": 1000 }
},
"segmentation": {
"requestState": "",
"serverState": ""
}
}
**Response Details:**
* **v** - value
* **ts** - timestamp (start of validity period)
* **gt** - goodthrough (end of validity period)
* **meta.interval** - expected interval between stored records. Useful to identify missing data.
{
"result": { "code": 0, "subCode": 0, "message": "" },
"data": {
"count": 1,
"historyData": [
{
"clientReference": "test1",
"provider": {
"id": "689e32fa-24a2-448e-9374-6158e6e6cb15",
"parameters": {
"projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0"
}
},
"meta": { "type": "double", "unit": "h", "interval": "PT3M" },
"values": [
{ "v": 13851.4, "ts": "2026-06-25T12:00:00.000Z" }
]
}
]
},
"segmentation": { "requestState": "", "serverState": "" }
}
==== api/get/history/specific ====
**Request:**
* **URL:** ''/api/get/history/specific?format=json''
* **Method:** POST
* **dataSpec:** Defines the specific point to fetch (e.g., 2 = First value less than reference time).
* **refTime:** Reference time required for specific temporal searches.
{
"cred": {
"n": "demo",
"p": "demo"
},
"projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"offset": 0,
"count": 1000,
"dataSpec": 2,
"refTime": "\/Date(1692788459000)\/",
"dpIds": ["62cf4083-31ed-4bc1-be25-044ba837a9f0"]
}
===== Writing Data & Execution =====
==== api/set/values ====
**Request:**
* **URL:** ''/api/set/values?format=xml''
* **Method:** POST
23
==== api/set/executeActions ====
**Request:**
* **URL:** ''/api/set/executeActions?format=xml''
* **Method:** POST
16
==== api/set/history & api/replace/history ====
Attribute **i** sets **interval** (ISO 8601) in which the next value should be expected. All date/time values must be in UTC.
**Replace History Request Example:**
* **URL:** ''/api/replace/history?format=xml''
* **Method:** POST
2.7
3.0
===== Projects Management =====
==== api/get/projects ====
**Request:**
* **URL:** ''/api/get/projects?format=xml''
* **Method:** POST
{
"cred": {
"n": "demo",
"p": "demo"
},
"offset": 0,
"count": 250
}
**Response:**
==== api/get/projectByParts ====
To get the visual tree and list of datapoints.
**Request:**
* **URL:** ''/api/get/projectByParts?format=xml''
* **Method:** POST
{
"cred": {
"n": "demo",
"p": "demo"
},
"projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"treeId": "Visual tree",
"partType": 0,
"offset": 0,
"count": 250
}
===== Matlab Client =====
==== General Notes ====
* Parameter names **ID** and **Guid** are used interchangeably in the Matlab client; it is always a universally unique identifier referring to a project or datapoint.
* When plural is used, an array of guids is expected (ie. ''{'guid1', 'guid2'}'' ), otherwise just one guid is expected.
==== ScadaClient ====
ScadaClient(url, username, password)
Constructor of the Mervis API wrapper.
==== findAllDPsWithReqTags ====
findAllDPsWithReqTags(projIds, tags)
Returns list of datapoints based on tags query. Example of tags definition: ''{'label','indoor_air_temperature';'room_type','office'}''
==== getDpTags ====
getDpTags(projectId, DpId)
Returns tags of the particular datapoint.
==== getAllProjectDPs ====
getAllProjectDPs(projectGuid)
Returns project IDs and names that are accessible to the logged-in user.
==== getData ====
[data, time, dataInCell, info] = getData(projID, dpsIds, from, to, span, zone, doublesInterpolationMethod, interpolate_gaps_shorter_than)
Downloads data.
* **span:** sampling interval in seconds, default is 300 sec.
* **zone:** time zone ('local' or 'utc') applied to parameters and output, default is 'local'.
* **Returns:** ''data'' (NaN used for missing values), ''time'', ''dataInCell'' (useful for strings), and ''info''.
**Data Download Example:**
scada = ScadaClient('https://scada.mervis.info/','demo','demo');
dataPointIDs = {'acad79f3-3358-42dd-9b74-98733e63d771','1afa7d9b-1183-4ab1-a6b1-18e464ae2d4d','e496bb8c-14ce-4c2c-b53b-3b71daeabca6'};
projectId = '5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0';
chartLegend = {'Temp UT1','Temp UT1 Return','Valve Position'};
from = now - 4;
to = now;
timeSpan = 300; %sec
[data, time] = scada.getData(projectId, dataPointIDs, from, to, timeSpan);
plot(time,data);
legend(chartLegend);
datetick;
==== saveData ====
saveData(projID, dpID, time, data)
Saves data into the Mervis database.
==== setDataPointValue ====
setDataPointValue(projGuid, dpGuid, value, buttonName)
Sets a datapoint value using a button. Only numerical values are supported. Parameter ''buttonName'' is not mandatory; 'INIT' is used if undefined.
**Example:**
dpGuid = 'ccaacb77-295b-48a8-a712-3fb272aa9b6f';
projectId = '6b65447e-8622-4a0d-b3b9-42f1d905fdaa';
buttonName = 'INIT';
newValue = 1;
scada = ScadaClient('https://scada.mervis.info/','demo','demo');
scada.setDataPointValue(projectId, dpGuid, newValue, buttonName)
==== deleteVariable ====
deleteVariable(projGuid, dpGuid, from, to)
**Warning:** Deletes data of one variable based on from-to interval. If from-to is not defined, ALL data are deleted. Use carefully, there is no undo!