Конечные точки
Примечание
В данном разделе для описания примеров с HTTPS-запросами к конечным точкам API используется расширение REST Client для VSCode.
Сервер
Аутентификация
POST /api/login
Данный запрос требуется для получения токена.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
username |
string |
Имя пользователя учетной записи |
password |
string |
Пароль учетной записи |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
code |
number |
Код ответа |
expire |
string |
Время действия токена в формате RFC3339 |
token |
string |
Токен доступа к системе |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie:token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Tue, 14 Jul 2026 11:12:18 GMT
Content-Length: 349
Connection: close
{
"code": 200,
"expire": "2026-07-14T15:12:18+03:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Обновление токена
GET /auth/token
Данный запрос необходимо выполнять периодически для обновления выданного токена.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
code |
number |
Код ответа |
expire |
string |
Время действия токена в формате RFC3339 |
token |
string |
Токен доступа к системе |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Wed, 15 Jul 2026 17:17:58 GMT
Content-Length: 349
Connection: close
{
"code": 200,
"expire": "2026-07-15T21:17:58+03:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Служебная информация
GET /api/server/info
Получение данных о необходимости аутентификации на сервере и статусе его работы.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
authRequired |
boolean |
Статус аутентификации (TRUE — требуется, FALSE — не требуется) |
status |
string |
Статус сервера |
Паспорта
Паспорта представляют собой структуру, содержащую свойства тега, которые были актуальны на момент запуска сервера.
Получение всех паспортов
GET /api/v2/passports
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
passport |
array |
Массив структур паспортов |
Структура passport:
| Параметр | Тип данных | Описание |
|---|---|---|
eventCatID |
int64 |
Уникальный идентификатор категории событий тега |
name |
string |
Имя тега |
ID |
string |
Уникальный идентификатор тега |
readable |
boolean |
Флаг возможности чтения тега |
saveDB |
boolean |
Флаг активности сохранения в базу данных |
saveStrategy |
enum SaveStrategy |
Стратегия сохранения значения в базе данных |
sourceType |
string |
Тип источника значения тега |
type |
enum ValueType |
Тип значения тега |
variableFormat |
int32 |
Количествово знаков после запятой |
visible |
boolean |
Флаг видимости тега в таблице тегов в меню клиента |
writable |
boolean |
Флаг доступа тега на запись |
scale |
Scale |
Шкала тега |
customMessages |
CustomMessages |
Шаблоны сообщений для различных видов событий |
Структура scale:
| Параметр | Тип данных | Описание |
|---|---|---|
alarmDelay |
int32 |
Задержка сигнала тревоги (в тактах опроса значение -1 означает отсутствие тревоги) |
highScale |
double |
Максимальное значение диапазона шкалы тега |
lowScale |
double |
Минимальное значение диапазона шкалы тега |
hiHiAlarm |
double |
Верхнее уставка аварийного события |
hiHiAlarmEnabled |
boolean |
Флаг активации аварийной сигнализации верхней уставки |
hiAlarm |
double |
Верхняя уставка предупредительного события |
hiAlarmEnabled |
boolean |
Флаг активации предупредительной сигнализации верхней уставки |
loAlarm |
double |
Нижнее уставка предупредительного события |
loAlarmEnabled |
boolean |
Флаг активации предупредительной сигнализации нижней уставки |
loLoAlarm |
double |
Нижнея уставка аварийного события |
loLoAlarmEnabled |
boolean |
Флаг активации аварийной сигнализации нижней уставки |
trackDiscreteOn |
boolean |
Контроль состояния "Вкл" |
trackDiscreteOff |
boolean |
Контроль состояния "Выкл" |
units |
string |
Единицы измерения |
Структура СustomMessages:
| Параметр | Тип данных | Описание |
|---|---|---|
enabled |
boolean |
Флаг активации механизма пользовательских сообщений для данного тега |
badQuality |
string |
Сообщение, выводимое при установлении статуса "Плохое качество" тега |
discreteOn |
string |
Сообщение, соответствующее состоянию "Вкл" |
discreteOff |
string |
Сообщение, соответствующее логическому состоянию "Выкл" |
hiHiAlarm |
string |
Сообщение о срабатывании аварийной верхней уставки |
hiAlarm |
string |
Сообщение о срабатывании предупредительной верхней уставки |
normal |
string |
Сообщение о возврате значения тега в нормальный диапазон |
loAlarm |
string |
Сообщение о срабатывании предупредительной нижней уставки |
loLoAlarm |
string |
Сообщение о срабатывании аварийной нижней уставки |
Перечисление ValueType:
| Значение | Описание |
|---|---|
int64 |
Знаковое целое число размером 64 бит |
uint64 |
Беззнаковое целое число размером 64 бит |
double |
Число с плавающей запятой двойной точности размером 64 бит |
datetime |
Момент времени, представленный в формате RFC3339 |
string |
Строка символов в кодировке UTF-8 |
boolean |
Логическое значение, принимающее одно из двух состояний: true или false |
float |
Число с плавающей запятой одинарной точности размером 32 бит |
int8 |
Знаковое целое число размером 8 бит |
int16 |
Знаковое целое число размером 16 бит |
int32 |
Знаковое целое число размером 32 бита |
uint8 |
Беззнаковое целое число размером 8 бит |
uint16 |
Беззнаковое целое число размером 16 бит |
uint32 |
Беззнаковое целое число размером 32 бит |
Перечисление SaveStrategy:
| Значение | Описание |
|---|---|
0 |
Запись по таймеру |
1 |
Запись по изменению |
2 |
Смешанная запись |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 13:13:02 GMT
Content-Length: 1010
Connection: close
[
{
"eventCatID": 0,
"group": "",
"name": "Counter",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 1,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": true,
"loLoAlarm": "Значение ниже нижней аварийной уставки",
"loAlarm": "Значение ниже нижней предупредительной уставки",
"normal": "Значение в нормальном диапазоне",
"hiAlarm": "Значение выше верхней предупредительной уставки",
"hiHiAlarm": "Значение выше верхней аварийной уставки",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
}
]
Получение паспортов по ID тегов
GET /api/v2/passports/{ids}
Запрос на получение паспортов по идентификатору тега ID. Идентификаторы тегов в запросе перечисляются через запятую.
При ответе содержит массив passport:
| Параметр | Тип данных | Описание |
|---|---|---|
results |
Passport[] |
Массив объектов типа Passport |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 22:50:33 GMT
Content-Length: 1653
Connection: close
{
"results": [
{
"eventCatID": 0,
"group": "",
"name": "Counter",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 1,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": true,
"loLoAlarm": "Значение ниже нижней аварийной уставки",
"loAlarm": "Значение ниже нижней предупредительной уставки",
"normal": "Значение в нормальном диапазоне",
"hiAlarm": "Значение выше верхней предупредительной уставки",
"hiHiAlarm": "Значение выше верхней аварийной уставки",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
},
{
"eventCatID": 0,
"group": "",
"name": "Counter_10",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 13,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": false,
"loLoAlarm": "",
"loAlarm": "",
"normal": "",
"hiAlarm": "",
"hiHiAlarm": "",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
}
]
}
Теги
Получение тегов по ID
GET /api/channels/{ids}
Запрос на получение данных тегов по их идентификаторам. Идентификаторы тегов в запросе перечисляются через запятую.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
nullIfNotFound |
boolean |
TRUE — если тег не найден, заменить его значение на null. FALSE возвращает ошибку 404 |
reduceProps |
boolean |
Сокращение названия свойств для уменьшения нагрузки на сеть |
props |
string |
Свойства, которые нужно вернуть в ответе. Доступны: channelID, quality, value, valueType, viewValue, viewValueTag |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
results |
TagProps[] |
Массив структур свойств тегов |
Структура TagProps:
| Название | Сокращение | Тип данных | Описание |
|---|---|---|---|
channelID |
id |
int64 |
Уникальный идентификатор тега |
quality |
q |
uint64 |
Качество тега |
value |
v |
any |
Значение тега |
valueType |
vt |
enum ValueType |
Тип значения тега |
viewValue |
vv |
string |
Форматированное значение тега |
viewValueTag |
vvt |
string |
Форматированное значение тега c единицами измерения |
Пример запроса значений тегов с ID 1, 13, 14.
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@null = TRUE
@reduceProps = TRUE
@props = value
###
GET {{host}}/api/channels/1,13,14?nullIfNotFound={{null}}&reduceProps={{reduceProps}}&props={{props}}
Authorization: Bearer {{access_token}}
Изменение значения тега
PATCH /api/channels/{id}
Запрос на изменение значение тега.
Внимание
Данный запрос поддерживается только лицензией Base, Standard и Enterprise проекта. В случае использования лицензии Free запрос может быть выполнен только с инженерной станции, на которой развернут проект.
Параметры в теле запроса указываются в виде JSON-объекта. При положительном ответе сервер возвращает код 204 (No content).
| Параметр | Тип данных | Описание |
|---|---|---|
value |
any |
Новое значение тега |
Получение ID актуальных событий
GET /api/channels/actualEventIds
Для получения событий проекта сначала требуется получить их идентификаторы, а затем выполнить обмен на сами события, используя запрос к серверу ресурсов
GET /api/v1/events/resolveIds?ids={ids}
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
EventID |
array |
Массив идентификаторов событий в системе |
Bus77
Подключенные устройства
POST /api/bus77/browse
Запрос на получение дерева подключенных устройств и тегов по протоколу Bus77.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
address |
string |
Адрес нахождения IP-Hub в сети |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Bus77Node |
array |
Массив структур данных узла |
Структура Bus77Node:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
enum Bus77NodeType |
Тип узла |
name |
string |
Имя узла |
tagID |
string |
UUID тега |
tagGlobalVariableID |
uint16 |
Уникальный ID глобальной переменной |
tagValueType |
enum Bus77ValueType |
Тип данных Bus77 |
Перечисление Bus77NodeType:
| Значение | Описание |
|---|---|
driver |
Драйвер |
group |
Группа |
tcpEndpoint |
TCP-узел |
tag |
Тег Bus77 |
Перечисление Bus77ValueType:
| Значение | Описание |
|---|---|
none |
Отсутствие типа |
bool |
Логическое значение |
s8 |
Знаковое целое число размером 8 бит |
u8 |
Беззнаковое целое число размером 8 бит |
s16 |
Знаковое целое число размером 16 бит |
u16 |
Беззнаковое целое число размером 16 бит |
s32 |
Знаковое целое число размером 32 бит |
u32 |
Беззнаковое целое число размером 32 бит |
f32 |
Число с плавающей запятой размером 32 бит |
s64 |
Знаковое целое число размером 64 бит |
u64 |
Беззнаковое целое число размером 64 бит |
string8 |
Строка |
time |
Дата и время |
arrayU8 |
Массив байт |
Проект
Название проекта
GET /api/project
Запрос на получение названия проекта, развернутого на сервере.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
name |
string |
Наименование проекта |
Дерево проекта
POST /api/project-tree
Запрос на получение дерева подключенных устройств и тегов проекта.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
ProjectNode |
array |
Массив структур дерева проекта |
Структура ProjectNode:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
enum ProjectNodeType |
Тип узла |
passportID |
int64 |
ID тега |
name |
string |
Название узла (для тегов пропускается) |
children |
ProjectNode[] |
Дочерние узлы дерева проекта |
Перечисление ProjectNodeType:
| Значение | Описание |
|---|---|
tag |
Тег проекта |
group |
Группа проекта |
Сервис ресурсов
Внимание
При запросах к сервису ресурсов в поле хост должен быть указан порт сервиса (по умолчанию — 23501).
Моменты
GET /api/v1/channels/{id}/moments
Запрос на получение моментов проекта. Момент – это запись тега в архиве, состоящая из метки времени, значения и качества тега на момент метки времени.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
start_time |
string |
Начальное время выборки в ISO8601 |
end_time |
string |
Конечное время выборки в ISO8601 |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Moment |
array |
Массив структур моментов |
Структура Moment:
| Параметр | Тип данных | Описание |
|---|---|---|
q |
number |
Значение качества тега |
t |
string |
Время момента в ISO8601. Время указывается без смещения по Гринвичу |
v |
any |
Значение тега в моменте |
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-17T09:34:00.000%2B03:00
@end_time = 2026-07-17T09:34:05.000%2B03:00
###
GET {{host}}/api/v1/channels/1/moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 09:37:53 GMT
Content-Length: 271
Connection: close
[
{
"q": 192,
"t": "2026-07-17T09:34:00.018+03:00",
"v": 523
},
{
"q": 192,
"t": "2026-07-17T09:34:01.018+03:00",
"v": 524
},
{
"q": 192,
"t": "2026-07-17T09:34:02.018+03:00",
"v": 525
},
{
"q": 192,
"t": "2026-07-17T09:34:03.018+03:00",
"v": 526
},
{
"q": 192,
"t": "2026-07-17T09:34:04.018+03:00",
"v": 527
}
]
Числовые моменты
GET /api/v1/channels/{id}/numeric-moments
Запрос на выполнение числовых моментов. Числовые моменты отличаются от обычных тем, что сервис ресурсов возвращает их именно для числовых тегов. Они предназначены для вывода на график. Сервис ресурсов дополняет моменты там, где это необходимо для графика.
Справка
Значения числовых моментов для тегов со сценарием записи в СУБД "по изменению" возвращаются с начала суток по всемирному координированному времени (UTC) независимо от временного запроса, указанного в запросе.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
start_time |
string |
Начальное время выборки в ISO8601 |
end_time |
string |
Конечное время выборки в ISO8601 |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
NumericMoment |
array |
Массив структур числовых моментов |
Структура NumericMoment:
| Параметр | Тип данных | Описание |
|---|---|---|
q |
number |
Значение качества тега |
t |
string |
Время момента в ISO8601. Время указывается по Гринвичу (часовой пояс не учитывается) |
v |
any |
Значение тега в моменте |
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-22T18:27:00.000%2B03:00
@end_time = 2026-07-22T18:27:05.000%2B03:00
###
GET {{host}}/api/v1/channels/1/numeric-moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 22 Jul 2026 15:28:26 GMT
Connection: close
Transfer-Encoding: chunked
[
{
"q": 0,
"t": "2026-07-22T18:26:09.048+03:00",
"v": 0
},
{
"q": 192,
"t": "2026-07-22T18:26:10.136+03:00",
"v": 1
},
{
"q": 192,
"t": "2026-07-22T18:26:11.136+03:00",
"v": 2
},
{
"q": 192,
"t": "2026-07-22T18:26:12.136+03:00",
"v": 3
},
{
"q": 192,
"t": "2026-07-22T18:26:13.145+03:00",
"v": 4
},
{
"q": 192,
"t": "2026-07-22T18:26:14.145+03:00",
"v": 5
},
]
События
GET /api/v1/events/resolveIds?ids={ids}
Запрос на получение событий системы по их идентификатору ID.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Event |
array |
Массив структур событий |
Структура Event:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
string |
Тип события |
channelID |
number |
Уникальный идентификатор тега |
acked |
boolean |
Флаг подтверждения события оператором (FALSE — не подтверждено) |
ackTime |
string |
Время подтверждения события. "0001-01-01T00:00:00Z" — это "нулевая" дата, что означает "не подтверждено" |
ackComment |
string |
Комментарий оператора при подтверждении |
priority |
number |
Приоритет события |
ID |
number |
Уникальный числовой идентификатор события в системе |
startTime |
string |
Время возникновения события по ISO 8601 |
text |
string |
Текстовое описание события |
textOwn |
boolean |
Флаг, что событие имеет уже сформированный текст |
endTime |
string |
Время окончания события по ISO 8601 |
value |
number |
Значение тега в момент активности события |
userID |
number |
Идентификатор пользователя, который выполнил действие, вызвавшее событие |
userName |
string |
Имя пользователя, связанного с событием. Пустая строка — пользователь не назначен или событие системное |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 07:15:19 GMT
Content-Length: 490
Connection: close
[
{
"type": "hiHiAlarm",
"channelID": 13,
"acked": false,
"ackTime": "0001-01-01T00:00:00Z",
"ackComment": "",
"priority": 2,
"ID": 78,
"startTime": "2026-07-17T08:30:19.197+03:00",
"text": "",
"textOwn": false,
"endTime": null,
"value": 100,
"userID": null,
"userName": ""
},
{
"type": "hiHiAlarm",
"channelID": 1,
"acked": false,
"ackTime": "0001-01-01T00:00:00Z",
"ackComment": "",
"priority": 2,
"ID": 79,
"startTime": "2026-07-17T08:31:49.217+03:00",
"text": "",
"textOwn": false,
"endTime": null,
"value": 100,
"userID": null,
"userName": ""
}
]