For the base URL, authentication and errors, see the REST API overview.
GET /v1/users/{user}/projects
- Request: GET /v1/users/{user}/projects
- Operation: ListProjects
- Operation ID:
Project_List - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200)
[
{
"created": 1792263090704,
"description": "Description",
"modified": 1792263090704,
"name": "Project",
"project": "project"
}
]POST /v1/users/{user}/projects
- Request: POST /v1/users/{user}/projects
- Operation: CreateProject
- Operation ID:
Project_Create - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
config | object | no | ||
config.limit_bucket_access | boolean | no | Bucket reads made over the project only return the records of the project's devices (the bucket needs a device tag). Default true for new projects. | |
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
name | string | yes | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
project | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Create Project
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Description",
"name": "Project",
"project": "project"
}'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}
- Request: GET /v1/users/{user}/projects/
- Operation: ReadProjectConfig
- Operation ID:
Project_ReadConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200, Create Project)
{
"created": 1792263090704,
"description": "Description",
"modified": 1792263090704,
"name": "Project",
"project": "project"
}PUT /v1/users/{user}/projects/{project}
- Request: PUT /v1/users/{user}/projects/
- Operation: UpdateProject
- Operation ID:
Project_Update - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
config | object | no | ||
config.limit_bucket_access | boolean | no | Bucket reads made over the project only return the records of the project's devices (the bucket needs a device tag). Default true for new projects. | |
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
Example request: Full Update
curl -X PUT 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Description",
"name": "Project",
"project": "project"
}'Example body: Update 'description'
{
"description": "Description"
}Example body: Update 'name'
{
"name": "Project"
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
DELETE /v1/users/{user}/projects/{project}
- Request: DELETE /v1/users/{user}/projects/
- Operation: DeleteProject
- Operation ID:
Project_Delete - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl -X DELETE 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/clone
- Request: GET /v1/users/{user}/projects/{project}/clone
- Operation: CloneProjectConfig
- Operation ID:
Project_CloneConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/clone' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
POST /v1/users/{user}/projects/{project}/clone
- Request: POST /v1/users/{user}/projects/{project}/clone
- Operation: CloneProject
- Operation ID:
Project_Clone - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
enabled | boolean | no | ||
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
project | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Copy with a new id
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/clone' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"project": "copy_of_project"
}'Example body: Copy with name and description
{
"description": "Same configuration as the original, for production line 2",
"name": "Line 2 copy",
"project": "line_2_project"
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/members
- Request: GET /v1/users/{user}/projects/{project}/members
- Operation: ListProjectMembers
- Operation ID:
Project_ListMembers - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/members' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200)
[
{
"created": 1792263090706,
"enabled": true,
"member": "jane",
"modified": 1792263090706
},
{
"created": 1792263090706,
"enabled": true,
"member": "tech_madrid",
"modified": 1792263090706
},
{
"created": 1792263090706,
"enabled": true,
"member": "acme_viewer",
"modified": 1792263090706
}
]POST /v1/users/{user}/projects/{project}/members
- Request: POST /v1/users/{user}/projects/{project}/members
- Operation: CreateProjectMember
- Operation ID:
Project_CreateMember - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Request body (application/json, required)
Shares the project with an account (member = its username). Effective permissions: its own allow / deny plus its project roles and global roles. 'groups' limits it to devices of those asset groups. With 'account' the server first creates that account (verified, role member, this project as default).
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
account | object | no | ||
account.email | string | no | Format: email | |
account.password | string | no | ||
allow | object | no | ||
allow.* | object | no | Minimum properties: 1 | |
allow.*.* | string or array of string or object | no | ||
allow.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
allow.*.* | array of string or object | no | Variant 2: | |
allow.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
allow.*.*[] | object | no | Variant 2: Variant 2: | |
allow.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
deny | object | no | ||
deny.* | object | no | Minimum properties: 1 | |
deny.*.* | string or array of string or object | no | ||
deny.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
deny.*.* | array of string or object | no | Variant 2: | |
deny.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
deny.*.*[] | object | no | Variant 2: Variant 2: | |
deny.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
enabled | boolean | yes | ||
global_roles | array of string | no | Maximum items: 10 | |
groups | array of string | no | Maximum items: 10 | |
hide_menu | boolean | no | ||
member | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
roles | array of string | no | Maximum items: 10 |
Example request: Existing account with a role
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/members' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"enabled": true,
"member": "jane",
"roles": [
"operator"
]
}'Example body: Limited to a site
{
"enabled": true,
"groups": [
"madrid_plant"
],
"hide_menu": true,
"member": "tech_madrid",
"roles": [
"operator"
]
}Example body: New account
{
"account": {
"email": "viewer@acme.example",
"password": "a-long-random-password"
},
"enabled": true,
"member": "acme_viewer",
"roles": [
"viewer"
]
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/members/{member}
- Request: GET /v1/users/{user}/projects/{project}/members/
- Operation: ReadProjectMemberConfig
- Operation ID:
Project_ReadMemberConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
member | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/members/YOUR_MEMBER' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200, Existing account with a role)
{
"created": 1792263090706,
"enabled": true,
"member": "jane",
"modified": 1792263090706,
"roles": [
"operator"
]
}Response example (200, Limited to a site)
{
"created": 1792263090706,
"enabled": true,
"groups": [
"madrid_plant"
],
"hide_menu": true,
"member": "tech_madrid",
"modified": 1792263090706,
"roles": [
"operator"
]
}Response example (200, New account)
{
"account": {
"email": "viewer@acme.example",
"password": "a-long-random-password"
},
"created": 1792263090706,
"enabled": true,
"member": "acme_viewer",
"modified": 1792263090706,
"roles": [
"viewer"
]
}PUT /v1/users/{user}/projects/{project}/members/{member}
- Request: PUT /v1/users/{user}/projects/{project}/members/
- Operation: UpdateProjectMember
- Operation ID:
Project_UpdateMember - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
member | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
allow | object | no | ||
allow.* | object | no | Minimum properties: 1 | |
allow.*.* | string or array of string or object | no | ||
allow.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
allow.*.* | array of string or object | no | Variant 2: | |
allow.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
allow.*.*[] | object | no | Variant 2: Variant 2: | |
allow.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
deny | object | no | ||
deny.* | object | no | Minimum properties: 1 | |
deny.*.* | string or array of string or object | no | ||
deny.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
deny.*.* | array of string or object | no | Variant 2: | |
deny.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
deny.*.*[] | object | no | Variant 2: Variant 2: | |
deny.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
enabled | boolean | no | ||
global_roles | array of string | no | Maximum items: 10 | |
groups | array of string | no | Maximum items: 10 | |
hide_menu | boolean | no | ||
roles | array of string | no | Maximum items: 10 |
Example request: Change roles
curl -X PUT 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/members/YOUR_MEMBER' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"roles": [
"viewer"
]
}'Example body: Suspend
{
"enabled": false
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
DELETE /v1/users/{user}/projects/{project}/members/{member}
- Request: DELETE /v1/users/{user}/projects/{project}/members/
- Operation: DeleteProjectMember
- Operation ID:
Project_DeleteMember - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
member | path | string | yes |
Example request
curl -X DELETE 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/members/YOUR_MEMBER' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/properties
- Request: GET /v1/users/{user}/projects/{project}/properties
- Operation: ListProjectProperties
- Operation ID:
Project_ListProperties - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200)
[
{
"created": 1792263090705,
"description": "Sampling and alert thresholds",
"modified": 1792263090705,
"name": "Settings",
"property": "settings",
"type": "configuration",
"value": {
"alerts": true,
"interval": 60,
"max_temperature": 28.5
}
},
{
"created": 1792263090705,
"modified": 1792263090705,
"name": "Location",
"property": "location",
"value": {
"lat": 40.4168,
"lon": -3.7038
}
},
{
"created": 1792263090705,
"modified": 1792263090705,
"name": "Calibration",
"perm": {
"readOnly": [
"member"
]
},
"property": "calibration",
"value": {
"gain": 1.02,
"offset": -0.4
}
},
{
"created": 1792263090705,
"modified": 1792263090705,
"name": "Dashboard",
"property": "dashboard",
"value": {
"source": "url",
"url": "/v1/users/YOUR_USER/storages/fleet_app/files/"
}
}
]POST /v1/users/{user}/projects/{project}/properties
- Request: POST /v1/users/{user}/projects/{project}/properties
- Operation: CreateProjectProperty
- Operation ID:
Project_CreateProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Request body (application/json, required)
The body matches one of these 2 variants.
Variant 1
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
(body) | array of object | no | ||
(body)[].description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
(body)[].form | object | no | ||
(body)[].form.fields | any | yes | ||
(body)[].name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
(body)[].perm | object | no | ||
(body)[].perm.hidden | array of string | no | Unique items | |
(body)[].perm.readOnly | array of string | no | Unique items | |
(body)[].property | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
(body)[].type | string | no | One of: ``, configuration | |
(body)[].value | any | yes |
Variant 2: Property Create. Schema for creating a property
Schema for creating a property
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
form | object | no | ||
form.fields | any | yes | ||
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
perm | object | no | ||
perm.hidden | array of string | no | Unique items | |
perm.readOnly | array of string | no | Unique items | |
property | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
type | string | no | One of: ``, configuration | |
value | any | yes |
Example request: Configuration value
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Sampling and alert thresholds",
"name": "Settings",
"property": "settings",
"type": "configuration",
"value": {
"alerts": true,
"interval": 60,
"max_temperature": 28.5
}
}'Example body: Location
{
"name": "Location",
"property": "location",
"value": {
"lat": 40.4168,
"lon": -3.7038
}
}Example body: Read-only for project members
{
"name": "Calibration",
"perm": {
"readOnly": [
"member"
]
},
"property": "calibration",
"value": {
"gain": 1.02,
"offset": -0.4
}
}Example body: Url dashboard of the resource
{
"name": "Dashboard",
"property": "dashboard",
"value": {
"source": "url",
"url": "/v1/users/YOUR_USER/storages/fleet_app/files/"
}
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/properties/{property}
- Request: GET /v1/users/{user}/projects/{project}/properties/
- Operation: ReadProjectProperty
- Operation ID:
Project_ReadProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
PUT /v1/users/{user}/projects/{project}/properties/{property}
- Request: PUT /v1/users/{user}/projects/{project}/properties/
- Operation: UpdateProjectProperty
- Operation ID:
Project_UpdateProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Request body (application/json, required)
Schema for updating a property
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
form | object | no | ||
form.fields | any | yes | ||
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
perm | object | no | ||
perm.hidden | array of string | no | Unique items | |
perm.readOnly | array of string | no | Unique items | |
property | string | no | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
type | string | no | One of: ``, configuration | |
value | any | yes |
Example request: Hide from project members
curl -X PUT 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"perm": {
"hidden": [
"member"
]
},
"value": "internal note"
}'Example body: Replace the value
{
"value": {
"alerts": true,
"interval": 30,
"max_temperature": 27
}
}Example body: Value, name and description
{
"description": "Faster sampling during commissioning",
"name": "Settings",
"value": {
"alerts": false,
"interval": 10,
"max_temperature": 28.5
}
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
PATCH /v1/users/{user}/projects/{project}/properties/{property}
- Request: PATCH /v1/users/{user}/projects/{project}/properties/
- Operation: UpdateProjectProperty
- Operation ID:
Project_PatchProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Request body (application/json, required)
The body matches one of these 2 variants.
Variant 1
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
value | any | yes |
Variant 2
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
* | any | no |
Example request: Change some fields of the value
curl -X PATCH 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"value": {
"interval": 30
}
}'Example body: Flattened fields
{
"value.alerts": false,
"value.max_temperature": 27
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
DELETE /v1/users/{user}/projects/{project}/properties/{property}
- Request: DELETE /v1/users/{user}/projects/{project}/properties/
- Operation: DeleteProjectProperty
- Operation ID:
Project_DeleteProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Example request
curl -X DELETE 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/properties/{property}/clone
- Request: GET /v1/users/{user}/projects/{project}/properties/{property}/clone
- Operation: CloneProjectPropertyConfig
- Operation ID:
Project_ClonePropertyConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY/clone' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
POST /v1/users/{user}/projects/{project}/properties/{property}/clone
- Request: POST /v1/users/{user}/projects/{project}/properties/{property}/clone
- Operation: CloneProjectProperty
- Operation ID:
Project_CloneProperty - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
property | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
enabled | boolean | no | ||
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
property | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Copy with a new id
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/properties/YOUR_PROPERTY/clone' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"property": "copy_of_property"
}'Example body: Copy with name and description
{
"description": "Same configuration as the original, for production line 2",
"name": "Line 2 copy",
"property": "line_2_property"
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/roles
- Request: GET /v1/users/{user}/projects/{project}/roles
- Operation: ListProjectRoles
- Operation ID:
Project_ListRoles - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200)
[
{
"allow": {
"Alarm": {
"*": [
"List*",
"Read*",
"UpdateAlarmInstance"
]
},
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*",
"AccessDeviceResources"
]
}
},
"created": 1792263090706,
"enabled": true,
"modified": 1792263090706,
"role": "operator"
},
{
"allow": {
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*"
]
}
},
"created": 1792263090706,
"enabled": true,
"modified": 1792263090706,
"role": "viewer"
}
]POST /v1/users/{user}/projects/{project}/roles
- Request: POST /v1/users/{user}/projects/{project}/roles
- Operation: CreateProjectRole
- Operation ID:
Project_CreateRole - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes |
Request body (application/json, required)
A project role is a named set of permissions for members of this project (members.roles). Permissions: {<resource type>: {<resource id or *>: action | [actions]}}; actions accept a trailing * (Read*, List*).
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
allow | object | no | ||
allow.* | object | no | Minimum properties: 1 | |
allow.*.* | string or array of string or object | no | ||
allow.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
allow.*.* | array of string or object | no | Variant 2: | |
allow.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
allow.*.*[] | object | no | Variant 2: Variant 2: | |
allow.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
deny | object | no | ||
deny.* | object | no | Minimum properties: 1 | |
deny.*.* | string or array of string or object | no | ||
deny.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
deny.*.* | array of string or object | no | Variant 2: | |
deny.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
deny.*.*[] | object | no | Variant 2: Variant 2: | |
deny.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
enabled | boolean | yes | ||
role | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Operator
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"allow": {
"Alarm": {
"*": [
"List*",
"Read*",
"UpdateAlarmInstance"
]
},
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*",
"AccessDeviceResources"
]
}
},
"enabled": true,
"role": "operator"
}'Example body: Viewer
{
"allow": {
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*"
]
}
},
"enabled": true,
"role": "viewer"
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/roles/{role}
- Request: GET /v1/users/{user}/projects/{project}/roles/
- Operation: ReadProjectRoleConfig
- Operation ID:
Project_ReadRoleConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
role | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles/YOUR_ROLE' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
Response example (200, Operator)
{
"allow": {
"Alarm": {
"*": [
"List*",
"Read*",
"UpdateAlarmInstance"
]
},
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*",
"AccessDeviceResources"
]
}
},
"created": 1792263090706,
"enabled": true,
"modified": 1792263090706,
"role": "operator"
}Response example (200, Viewer)
{
"allow": {
"Bucket": {
"*": [
"List*",
"Read*"
]
},
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*"
]
}
},
"created": 1792263090706,
"enabled": true,
"modified": 1792263090706,
"role": "viewer"
}PUT /v1/users/{user}/projects/{project}/roles/{role}
- Request: PUT /v1/users/{user}/projects/{project}/roles/
- Operation: UpdateProjectRole
- Operation ID:
Project_UpdateRole - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
role | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
allow | object | no | ||
allow.* | object | no | Minimum properties: 1 | |
allow.*.* | string or array of string or object | no | ||
allow.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
allow.*.* | array of string or object | no | Variant 2: | |
allow.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
allow.*.*[] | object | no | Variant 2: Variant 2: | |
allow.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
deny | object | no | ||
deny.* | object | no | Minimum properties: 1 | |
deny.*.* | string or array of string or object | no | ||
deny.*.* | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 1: |
deny.*.* | array of string or object | no | Variant 2: | |
deny.*.*[] | string | no | Pattern: ^[a-zA-Z0-9_\*]{1,64}$|^\*$ | Variant 2: Variant 1: |
deny.*.*[] | object | no | Variant 2: Variant 2: | |
deny.*.*[].* | string or array of string | no | Variant 1: Pattern: ^[a-zA-Z0-9_\*]{1,32}$|^\*$ | Variant 2: Variant 2: |
enabled | boolean | no |
Example request: Disable the role
curl -X PUT 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles/YOUR_ROLE' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"enabled": false
}'Example body: Replace its permissions
{
"allow": {
"Dashboard": {
"*": [
"List*",
"Read*"
]
},
"Device": {
"*": [
"List*",
"Read*"
]
}
}
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
DELETE /v1/users/{user}/projects/{project}/roles/{role}
- Request: DELETE /v1/users/{user}/projects/{project}/roles/
- Operation: DeleteProjectRole
- Operation ID:
Project_DeleteRole - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
role | path | string | yes |
Example request
curl -X DELETE 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles/YOUR_ROLE' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
GET /v1/users/{user}/projects/{project}/roles/{role}/clone
- Request: GET /v1/users/{user}/projects/{project}/roles/{role}/clone
- Operation: CloneProjectRoleConfig
- Operation ID:
Project_CloneRoleConfig - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
role | path | string | yes |
Example request
curl 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles/YOUR_ROLE/clone' \
-H 'Authorization: Bearer YOUR_TOKEN'Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |
POST /v1/users/{user}/projects/{project}/roles/{role}/clone
- Request: POST /v1/users/{user}/projects/{project}/roles/{role}/clone
- Operation: CloneProjectRole
- Operation ID:
Project_CloneRole - Authentication: access token,
Authorization: Bearer YOUR_TOKEN
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user | path | string | yes | |
project | path | string | yes | |
role | path | string | yes |
Request body (application/json, required)
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
description | string | no | Maximum length: 255 | A brief description of the resource, providing context or additional information, limited to 255 characters. |
enabled | boolean | no | ||
name | string | no | Maximum length: 255 | The name of the resource, limited to 255 characters. It can include any character. |
role | string | yes | Pattern: ^[a-zA-Z0-9_-]{1,32}$ | A unique identifier for resources, consisting of alphanumeric characters, underscores, or hyphens, and limited to 32 characters. |
Example request: Copy with a new id
curl -X POST 'https://YOUR_SERVER/v1/users/YOUR_USER/projects/YOUR_PROJECT/roles/YOUR_ROLE/clone' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"role": "copy_of_role"
}'Example body: Copy with name and description
{
"description": "Same configuration as the original, for production line 2",
"name": "Line 2 copy",
"role": "line_2_role"
}Responses
| Status | Description |
|---|---|
| 200 | ok |
| 401 | unauthorized |
| 403 | forbidden |