IoE² IoT API - to create end-user applications
Connect to IoE² IoT API - to create end-user applications with 1 MCP tools for AI-powered API automation.
COMMUNITYAPI KEY0 INSTALLS
OpenAPI Specificationv3.0
{
"swagger": "2.0",
"schemes": [
"https"
],
"host": "ioe2api.ijenko.net",
"info": {
"contact": {
"email": "contact@ijenko.com",
"name": "IJENKO",
"url": "http://developers.ijenko.com/"
},
"title": "IoE² IoT API - to create end-user applications",
"version": "3.0.0",
"x-apisguru-categories": [
"iot"
],
"x-logo": {
"backgroundColor": "#383D41",
"url": "https://api.apis.guru/v2/cache/logo/https_pbs.twimg.com_profile_images_1706275304__0_logo_carr__fd_gris_400x400.png"
},
"x-origin": [
{
"format": "swagger",
"url": "http://developers.ijenko.com/swagger.json",
"version": "2.0"
}
],
"x-providerName": "ijenko.net"
},
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"securityDefinitions": {
"Token in Access-Token header": {
"description": "Token in Access-Token header",
"in": "header",
"name": "Access-Token",
"type": "apiKey"
},
"Token in query": {
"description": "Token in query",
"in": "query",
"name": "token",
"type": "apiKey"
}
},
"security": [
{
"Token in query": []
},
{
"Token in Access-Token header": []
}
],
"parameters": {
"accountId": {
"description": "Unique identifier of an *Account*.",
"in": "path",
"name": "accountId",
"required": true,
"type": "string"
},
"action": {
"description": "Identifier of an *Action* inside a *Functionality*.",
"in": "path",
"name": "action",
"required": true,
"type": "string"
},
"attributeName": {
"description": "Identifier of an *Attribute* inside a *Functionality*.",
"in": "path",
"name": "attributeName",
"required": true,
"type": "string"
},
"attributesNames": {
"collectionFormat": "csv",
"description": "One or multiple *Attribute* names separated by commas",
"in": "query",
"items": {
"type": "string"
},
"name": "names",
"required": false,
"type": "array"
},
"busId": {
"description": "Unique identifier of a *Bus*.",
"in": "path",
"name": "busId",
"required": true,
"type": "string"
},
"deviceId": {
"description": "Unique identifier of a *Device*.",
"in": "path",
"name": "deviceId",
"required": true,
"type": "string"
},
"devicesSelector.Opt": {
"description": "Devices selector. Device tags or device classes or device ids or '*' for any. Multiple values are separated by '|' and interpreted as « OR ».",
"in": "query",
"name": "devices",
"pattern": "^(?:\\\\*|(?:[A-Z][A-Z0-9]{3}|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22})(?:\\\\|(?:[A-Z][A-Z0-9]{3}|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22}))*)$",
"required": false,
"type": "string"
},
"devicesSelector.Req": {
"description": "Devices selector. Device tags or device classes or device ids or '*' for any. Multiple values are separated by '|' and interpreted as « OR ».",
"in": "query",
"name": "devices",
"pattern": "^(?:\\\\*|(?:[A-Z][A-Z0-9]{3}|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22})(?:\\\\|(?:[A-Z][A-Z0-9]{3}|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22}))*)$",
"required": true,
"type": "string"
},
"embedMetadata": {
"collectionFormat": "csv",
"description": "Request to include the given keys of metadata in the response. If a key doesn't exist on the resource it is ignored.\n**Note:** This only applies to the top level resources.\n",
"in": "query",
"items": {
"type": "string"
},
"name": "embed-metadata",
"required": false,
"type": "array"
},
"from.Opt": {
"description": "Beginning of the time interval.",
"format": "date-time",
"in": "query",
"name": "from",
"required": false,
"type": "string"
},
"from.Req": {
"description": "Beginning of the time interval.",
"format": "date-time",
"in": "query",
"name": "from",
"required": true,
"type": "string"
},
"functionalitiesSelector.Opt": {
"description": "Functionality selector: Functionality tags or functionality class (optionally, '@' followed by a endpoint in decimal) or '*' for all. Multiple values are separated by '|' and are interpreted as « OR ».\n",
"in": "query",
"name": "functionalities",
"pattern": "^(?:\\\\*|(?:[A-Z][A-Za-z0-9]+(?:@(?:0|1[0-9]{,2}|[3-9][0-9]?|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?))?|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22})(?:\\\\|(?:[A-Z][A-Za-z0-9]+(?:@(?:0|1[0-9]{,2}|[3-9][0-9]?|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?))?|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22}))*)$",
"required": false,
"type": "string"
},
"functionalitiesSelector.Req": {
"description": "Functionality selector: Functionality tags or functionality class (optionally, '@' followed by a endpoint in decimal) or '*' for all. Multiple values are separated by '|' and are interpreted as « OR ».\n",
"in": "query",
"name": "functionalities",
"pattern": "^(?:\\\\*|(?:[A-Z][A-Za-z0-9]+(?:@(?:0|1[0-9]{,2}|[3-9][0-9]?|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?))?|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22})(?:\\\\|(?:[A-Z][A-Za-z0-9]+(?:@(?:0|1[0-9]{,2}|[3-9][0-9]?|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?))?|[a-z][a-z0-9_:]{0,20}|[A-Za-z0-9-_]{22}))*)$",
"required": true,
"type": "string"
},
"functionalityId": {
"description": "Unique identifier of a *Functionality*.",
"in": "path",
"name": "functionalityId",
"required": true,
"type": "string"
},
"metadataPatch": {
"description": "Modifications to apply to the metadata of the resource.\n",
"in": "body",
"name": "metadataPatch",
"required": true,
"schema": {
"$ref": "#/definitions/MetadataPatch"
}
},
"notificationId": {
"description": "Unique identifier of a *Notification*.",
"in": "path",
"name": "notificationId",
"required": true,
"type": "string"
},
"placeId": {
"description": "Unique identifier of a *Place*.",
"in": "path",
"name": "placeId",
"required": true,
"type": "string"
},
"programId": {
"description": "Unique identifier of a *Program*.",
"in": "path",
"name": "programId",
"required": true,
"type": "string"
},
"span.Req": {
"description": "Timespan: H (hour), D (day), Wmo (week starting on Monday), Wsu (week starting on Sunday), M (month), Y (year)",
"enum": [
"H",
"D",
"Wmo",
"Wsu",
"M",
"Y"
],
"in": "query",
"name": "span",
"required": true,
"type": "string"
},
"tagsPatch": {
"description": "Modifications to apply to the tags list of the resource.\n",
"in": "body",
"name": "tagsPatch",
"required": true,
"schema": {
"$ref": "#/definitions/TagsPatch"
}
},
"to": {
"description": "End of the interval. Default: now.\n",
"format": "date-time",
"in": "query",
"name": "to",
"required": false,
"type": "string"
},
"tokenId": {
"description": "Identifier of the token",
"in": "path",
"name": "tokenId",
"required": true,
"type": "string"
},
"userId": {
"description": "Unique identifier of a *User*.",
"in": "path",
"name": "userId",
"required": true,
"type": "string"
},
"when.Req": {
"description": "A time part of the time span.",
"format": "date-time",
"in": "query",
"name": "when",
"required": true,
"type": "string"
}
},
"responses": {
"ActionMultiResultOK": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/ActionMultiResult"
}
},
"DefaultError": {
"description": "Other error.",
"schema": {
"$ref": "#/definitions/DefaultError"
}
},
"DeleteOK": {
"description": "Resource successfully deleted."
},
"ErrorAccessAccount": {
"description": "The authentication token doesn't allow to modify the *Account*.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessBus": {
"description": "*Bus* doesn't exist or the requester doesn't have appropriate access to the *Place*.\n",
"schema": {
"$ref": "#/definitions/ErrorSubEntity"
}
},
"ErrorAccessDevice": {
"description": "*Device* doesn't exist or the requester doesn't have appropriate access to the *Place*.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessFunctionality": {
"description": "*Functionality* doesn't exist or the requester doesn't have appropriate access to the *Place*.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessNotification": {
"description": "*Notification* doesn't exist or the requester doesn't have appropriate access to the *Place*.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessPlace": {
"description": "*Place* doesn't exist or the requester doesn't have access.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessProgram": {
"description": "*Program* doesn't exist or the requester doesn't have appropriate access to the *Place*.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorAccessUser": {
"description": "*User* doesn't exist in this *Account* or the requester doesn't have access to a *Place* on which this *User* has access.\n",
"schema": {
"$ref": "#/definitions/ErrorEntity"
}
},
"ErrorGatewayUnreachable": {
"description": "The gateway of the Place is not reachable.",
"schema": {
"$ref": "#/definitions/ErrorGatewayUnreachable"
}
},
"ErrorWriteAttribute": {
"description": "*Attribute* is not writable.\n",
"schema": {
"$ref": "#/definitions/ErrorSubEntity"
}
},
"PatchNotModified": {
"description": "Successful, but nothing changed."
},
"PatchOK": {
"description": "Modification successful."
}
},
"tags": [
{
"name": "Entry points"
},
{
"name": "Authentication"
},
{
"name": "Account"
},
{
"name": "User"
},
{
"name": "Place"
},
{
"name": "Device"
},
{
"name": "Functionality"
},
{
"name": "Action"
},
{
"name": "Program"
},
{
"name": "Notification"
},
{
"name": "Electricity"
}
],
"paths": {
"/account/change-password": {
"post": {
"description": "Set a new password for the account.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Account.changePassword",
"parameters": [
{
"description": "Old and new password",
"in": "body",
"name": "changePasswordInfo",
"required": true,
"schema": {
"$ref": "#/definitions/AuthChangePassword"
}
}
],
"responses": {
"204": {
"description": "Change successful."
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Change the password",
"tags": [
"Account"
]
}
},
"/account/places": {
"get": {
"description": "List the *Places* of the account.\n\n**Note:** requires full access to the *Account*.\n",
"operationId": "Account.places",
"responses": {
"200": {
"description": "Successful response",
"schema": {
"items": {
"$ref": "#/definitions/PlaceItem"
},
"type": "array",
"uniqueItems": true
}
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
}
},
"summary": "List Places of the Account",
"tags": [
"Account"
]
},
"parameters": [],
"post": {
"description": "Create a new *Place*.\n\nA *Device* (`class`: `MINT`, `address`: `0`) is automatically created and attached to the new *Place*.\n\n**Note:** requires full access to the *Account*.\n",
"operationId": "Account.newPlace",
"parameters": [
{
"in": "body",
"name": "place",
"schema": {
"$ref": "#/definitions/PlaceNew"
}
}
],
"responses": {
"201": {
"description": "*Place* successfully created.",
"headers": {
"Location": {
"description": "Path of the Place created (`/places/{id}`)",
"type": "string"
}
},
"schema": {
"$ref": "#/definitions/PlaceCreated"
}
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Create a Place",
"tags": [
"Account"
]
}
},
"/account/tokens": {
"get": {
"description": "List the active *Tokens* on the account.\n\n**Note:** requires full access to the *Account*.\n",
"operationId": "Account.tokens",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/UserTokenItem"
},
"type": "array",
"uniqueItems": true
}
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List active Tokens of the Account",
"tags": [
"Account"
]
},
"parameters": []
},
"/account/tokens/{tokenId}": {
"delete": {
"description": "Revoke the given *Token*.\n\n**Note:** requires full access to the *Account*.\n",
"operationId": "Account.revokeToken",
"responses": {
"204": {
"$ref": "#/responses/DeleteOK"
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Revoke a Token",
"tags": [
"Account"
]
},
"parameters": [
{
"$ref": "#/parameters/tokenId"
}
]
},
"/account/users": {
"get": {
"description": "Get the list of *Users* of this *Account*.",
"operationId": "Account.users",
"parameters": [
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/UserItem"
},
"type": "array",
"uniqueItems": true
}
}
},
"summary": "List Users of the Account",
"tags": [
"Account"
]
},
"parameters": [],
"post": {
"description": "Add a *User*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Account.newUser",
"parameters": [
{
"in": "body",
"name": "userInfo",
"required": true,
"schema": {
"$ref": "#/definitions/UserNew"
}
}
],
"responses": {
"201": {
"description": "*User* successfully created.",
"headers": {
"Location": {
"description": "Path of the User created",
"type": "string"
}
},
"schema": {
"$ref": "#/definitions/UserCreated"
}
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "New User",
"tags": [
"Account"
]
}
},
"/account/users/{userId}": {
"delete": {
"description": "Delete a *User* from this *Account*, and revoke all his/her *Tokens*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Account.deleteUser",
"responses": {
"204": {
"$ref": "#/responses/DeleteOK"
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Delete a User",
"tags": [
"Account"
]
},
"get": {
"description": "Get information about a *User* in the same *Account*.",
"operationId": "Account.getUser",
"responses": {
"200": {
"description": "*User* information.\n",
"schema": {
"$ref": "#/definitions/User"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Information about a User",
"tags": [
"Account"
]
},
"parameters": [
{
"$ref": "#/parameters/userId"
}
],
"patch": {
"description": "Modify a *User*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Account.patchUser",
"parameters": [
{
"in": "body",
"name": "userPatch",
"required": true,
"schema": {
"$ref": "#/definitions/UserPatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify a User",
"tags": [
"Account"
]
}
},
"/account/users/{userId}/metadata": {
"get": {
"description": "Get the metadata.",
"operationId": "User.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Account"
]
},
"parameters": [
{
"$ref": "#/parameters/userId"
}
],
"patch": {
"description": "Modify the metadata.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "User.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessUser"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata",
"tags": [
"Account"
]
}
},
"/auth/login": {
"post": {
"description": "Get an access+refresh tokens pair from login and password information.\n\nThe *access token* obtained with this request can then be used in\nan `Access-Token` HTTP header or in a `token` URL query parameter\nin requests that require authentication.\n\nThe *refresh token* can be used with `/auth/refresh` when the *access\ntoken* expires to retrieve a new *access token*. The lifetime of the\nrefresh token is the maximum lifetime of this authentication request.\n\nThe default lifetime of the *refresh token* is defined by the `appId`\nused. The `ttl` input parameter allows to request a *refresh token*\nwith a shorter lifetime.\n\nTo implement *logout*, use `/auth/revoke`.\n",
"operationId": "AuthAccountLogin",
"parameters": [
{
"description": "Login information.",
"in": "body",
"name": "loginInfo",
"required": true,
"schema": {
"$ref": "#/definitions/AuthLogin"
}
}
],
"responses": {
"200": {
"description": "Login successful. The access token is given to use the API. The refresh token must be stored in a safe place.",
"schema": {
"$ref": "#/definitions/AuthTokens"
}
},
"401": {
"description": "Authentication failure.",
"schema": {
"$ref": "#/definitions/DefaultError"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"security": [],
"summary": "Get a token using login+password",
"tags": [
"Authentication",
"Entry points"
]
}
},
"/auth/refresh": {
"post": {
"description": "Get a new *access token* using a valid *refresh token*.\n\nThis is a **replacement** of the *access token*: if an existing *access\ntoken* was still not expired, it is invalidated.\n",
"operationId": "AuthRefreshToken",
"parameters": [
{
"description": "Refresh token information.",
"in": "body",
"name": "refreshInfo",
"required": true,
"schema": {
"$ref": "#/definitions/AuthRefresh"
}
}
],
"responses": {
"200": {
"description": "Refresh successful. A new access token is given to use the API.",
"schema": {
"$ref": "#/definitions/AuthTokens"
}
},
"401": {
"description": "Authentication failure.",
"schema": {
"$ref": "#/definitions/DefaultError"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"security": [],
"summary": "Refresh a token",
"tags": [
"Authentication"
]
}
},
"/auth/reset-password": {
"post": {
"description": "Trigger the request of a new password.\n\nThe account administrator will receive an e-mail with an URL pointing to a form\nto allow him/her to enter a new password.\nThe old password is still functional until a new one is submitted.\n\nEither the login or e-mail of the account must be given.\n",
"operationId": "AuthResetPassword",
"parameters": [
{
"description": "Account identification information",
"in": "body",
"name": "resetPasswordInfo",
"required": true,
"schema": {
"$ref": "#/definitions/AuthResetPassword"
}
}
],
"responses": {
"204": {
"description": "As this request is not authenticated, response is always successful to not reveal (in)existence of accounts."
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"security": [],
"summary": "Ask for a new password",
"tags": [
"Authentication"
]
}
},
"/auth/revoke": {
"post": {
"description": "Invalidate the authentication used for the request. The access token and the refresh token will be invalid after this request.\nThis request is typically called to implement logout.\n",
"operationId": "AuthRevokeToken",
"responses": {
"204": {
"description": "Revocation successful. The token used for the request is now invalid."
},
"401": {
"description": "Authentication failure.",
"schema": {
"$ref": "#/definitions/DefaultError"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Revoke a token",
"tags": [
"Authentication"
]
}
},
"/devices/{deviceId}": {
"get": {
"description": "Get information about a *Device*.",
"operationId": "Devices.get",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Device"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Information about a Device",
"tags": [
"Device"
]
},
"parameters": [
{
"$ref": "#/parameters/deviceId"
}
],
"patch": {
"description": "Modify information about a *Device*: its name.\n",
"operationId": "Devices.patch",
"parameters": [
{
"in": "body",
"name": "devicePatch",
"required": true,
"schema": {
"$ref": "#/definitions/DevicePatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessDevice"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Update a Device",
"tags": [
"Device"
]
}
},
"/devices/{deviceId}/functionalities": {
"post": {
"description": "Add a *Functionality* to the device.\n\nRequired parameters are :\n- functionality class\n- endpoint\n\nEach device class has its own restrictions on which Functionality classes can be added and on which endpoints.\nOnly a few devices allow to add Functionalities.\n\n|Device class|Functionality class|Endpoints|\n|------------|-------------------|---------|\n|MINT |CurrentPeriod |1,2,3 |\n|MINT |ElectricityRates |1,2,3 |\n|MINT |GenericRate |1,2,3 |\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Device.addFunctionality",
"parameters": [
{
"$ref": "#/parameters/deviceId"
},
{
"in": "body",
"name": "functionalityInfo",
"required": true,
"schema": {
"$ref": "#/definitions/FunctionalityNew"
}
}
],
"responses": {
"201": {
"description": "*Functionality* successfully created.",
"headers": {
"Location": {
"description": "Path of the Functionality created",
"type": "string"
}
},
"schema": {
"$ref": "#/definitions/FunctionalityCreated"
}
},
"403": {
"$ref": "#/responses/ErrorAccessDevice"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Add dynamically a functionality",
"tags": [
"Device",
"Functionality"
]
}
},
"/devices/{deviceId}/metadata": {
"get": {
"description": "Get the metadata.",
"operationId": "Device.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Device"
]
},
"parameters": [
{
"$ref": "#/parameters/deviceId"
}
],
"patch": {
"description": "Modify the metadata.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "Device.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessDevice"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata",
"tags": [
"Device"
]
}
},
"/devices/{deviceId}/run/{action}": {
"post": {
"description": "Run an *Action* on zero, one or multiple Functionalities selected with tags.\n",
"operationId": "Device.run",
"parameters": [
{
"$ref": "#/parameters/deviceId"
},
{
"$ref": "#/parameters/action"
},
{
"$ref": "#/parameters/functionalitiesSelector.Req"
},
{
"in": "body",
"name": "arguments",
"required": true,
"schema": {
"$ref": "#/definitions/ActionArgs"
}
}
],
"responses": {
"200": {
"$ref": "#/responses/ActionMultiResultOK"
},
"450": {
"$ref": "#/responses/ErrorGatewayUnreachable"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Run actions",
"tags": [
"Action"
]
}
},
"/devices/{deviceId}/tags": {
"get": {
"description": "Get the tags of a *Device*.",
"operationId": "Device.getTags",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Tags"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List tags",
"tags": [
"Device"
]
},
"parameters": [
{
"$ref": "#/parameters/deviceId"
}
],
"patch": {
"description": "Modify the tags of a *Device*.",
"operationId": "Device.patchTags",
"parameters": [
{
"$ref": "#/parameters/tagsPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new list of tags is returned.",
"schema": {
"$ref": "#/definitions/Tags"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessDevice"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify tags",
"tags": [
"Device"
]
}
},
"/functionalities/{functionalityId}": {
"get": {
"description": "Get the *Functionality*.",
"operationId": "Functionalities.get",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Functionality"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Information about a Functionality",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/functionalityId"
}
],
"patch": {
"description": "Modify information about a *Functionality*: its name.\n",
"operationId": "Functionality.patch",
"parameters": [
{
"in": "body",
"name": "functionalityPatch",
"required": true,
"schema": {
"$ref": "#/definitions/FunctionalityPatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessFunctionality"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify a Functionality",
"tags": [
"Functionality"
]
}
},
"/functionalities/{functionalityId}/attributes": {
"get": {
"description": "Get the values of multiple *Attributes* and their history.\n\nIf the `names` parameter is not given, all the attributes of the *Functionality*\nare returned. As the list may be huge, this must be avoided.\n\nIf the `to` parameter is set, `from` must also be set.\n\nIf `from` is not set, only the last value is returned.\n\nThe `surround` parameter allows to ask also for one value beyond each interval boundaries.\n\nThe request may fail if too many values are asked.\n",
"operationId": "Functionality.values",
"parameters": [
{
"$ref": "#/parameters/attributesNames"
},
{
"$ref": "#/parameters/from.Opt"
},
{
"$ref": "#/parameters/to"
},
{
"description": "If true, return also one value before from and one value after to",
"in": "query",
"name": "surround",
"required": false,
"type": "boolean"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/AttributesValues"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get history of multiple attributes",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/functionalityId"
}
]
},
"/functionalities/{functionalityId}/attributes/{attributeName}": {
"get": {
"description": "Get the *Attribute* value and the last time when it changed.",
"operationId": "Functionality.value",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/AttributeValue"
}
},
"204": {
"description": "No value has yet been set on this attribute."
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get an Attribute value",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/functionalityId"
},
{
"$ref": "#/parameters/attributeName"
}
],
"put": {
"description": "Modify the value of the *Attribute*.",
"operationId": "Functionality.set",
"parameters": [
{
"description": "New value for the *Attribute*.",
"in": "body",
"name": "value",
"required": true,
"schema": {
"$ref": "#/definitions/AnyJSON"
}
}
],
"responses": {
"204": {
"description": "Successful."
},
"405": {
"$ref": "#/responses/ErrorWriteAttribute"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify an Attribute value",
"tags": [
"Functionality"
]
}
},
"/functionalities/{functionalityId}/metadata": {
"get": {
"description": "Get the metadata.",
"operationId": "Functionality.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/functionalityId"
}
],
"patch": {
"description": "Modify the metadata.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "Functionality.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessFunctionality"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata",
"tags": [
"Functionality"
]
}
},
"/functionalities/{functionalityId}/run/{action}": {
"post": {
"description": "Run an action on the Functionality.\n",
"operationId": "Functionality.run",
"parameters": [
{
"$ref": "#/parameters/functionalityId"
},
{
"$ref": "#/parameters/action"
},
{
"in": "body",
"name": "arguments",
"required": true,
"schema": {
"$ref": "#/definitions/ActionArgs"
}
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/ActionResult"
}
},
"450": {
"$ref": "#/responses/ErrorGatewayUnreachable"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Run an action",
"tags": [
"Action"
]
}
},
"/functionalities/{functionalityId}/tags": {
"get": {
"description": "Get the tags of a *Functionality*.",
"operationId": "Functionality.getTags",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Tags"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List tags",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/functionalityId"
}
],
"patch": {
"description": "Modify the tags of a *Functionality*.",
"operationId": "Functionality.patchTags",
"parameters": [
{
"$ref": "#/parameters/tagsPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new list of tags is returned.",
"schema": {
"$ref": "#/definitions/Tags"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessFunctionality"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify tags",
"tags": [
"Functionality"
]
}
},
"/me": {
"get": {
"description": "Get information on the authenticated *User* who does the request.\n\nThe *login* property is returned only if the *User* is the administrator of\nthe *Account*.\n",
"operationId": "Me.get",
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/UserMe"
}
}
},
"summary": "Information about the User",
"tags": [
"Entry points"
]
},
"patch": {
"description": "Update *User* information (locale).\n",
"operationId": "Me.patch",
"parameters": [
{
"description": "Updated user info.",
"in": "body",
"name": "userPatch",
"required": true,
"schema": {
"$ref": "#/definitions/UserMePatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Update User information",
"tags": [
"Entry points"
]
}
},
"/notifications/{notificationId}": {
"delete": {
"description": "Delete a *Notification*.\n",
"operationId": "Notification.delete",
"responses": {
"204": {
"$ref": "#/responses/DeleteOK"
},
"403": {
"$ref": "#/responses/ErrorAccessNotification"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Delete a Notification",
"tags": [
"Notification"
]
},
"get": {
"description": "Get information about a *Notification*.\n",
"operationId": "Notifications.get",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Notification"
}
},
"403": {
"$ref": "#/responses/ErrorAccessNotification"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Information about a Notification",
"tags": [
"Notification"
]
},
"parameters": [
{
"$ref": "#/parameters/notificationId"
}
],
"patch": {
"description": "Modify a *Notification*.\n",
"operationId": "Notification.patch",
"parameters": [
{
"in": "body",
"name": "notificationPatch",
"required": true,
"schema": {
"$ref": "#/definitions/NotificationPatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessNotification"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify a Notification",
"tags": [
"Notification"
]
}
},
"/notifications/{notificationId}/metadata": {
"get": {
"description": "Get the metadata of the *Notification*.",
"operationId": "Notification.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Notification"
]
},
"parameters": [
{
"$ref": "#/parameters/notificationId"
}
],
"patch": {
"description": "Modify the metadata of a *Notification*.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "Notification.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessNotification"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata of a Notification",
"tags": [
"Notification"
]
}
},
"/places": {
"get": {
"description": "List the *Places* to which the *Token* has access.",
"operationId": "Me.places",
"parameters": [
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"items": {
"$ref": "#/definitions/PlaceItem"
},
"type": "array",
"uniqueItems": true
}
}
},
"summary": "List accessible Places",
"tags": [
"Entry points"
]
}
},
"/places/{placeId}": {
"get": {
"description": "Get information about a *Place*.",
"operationId": "Places.get",
"responses": {
"200": {
"description": "Successful response.",
"schema": {
"$ref": "#/definitions/Place"
}
},
"400": {
"$ref": "#/responses/ErrorAccessPlace"
}
},
"summary": "Information about a Place",
"tags": [
"Place"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
],
"patch": {
"description": "Change information about a *Place*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Place.patch",
"parameters": [
{
"in": "body",
"name": "placePatch",
"required": true,
"schema": {
"$ref": "#/definitions/PlacePatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessAccount"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Update a Place",
"tags": [
"Place"
]
}
},
"/places/{placeId}/buses": {
"get": {
"description": "Get the list of *Buses* available on the gateway of this *Place*.\nIf `withPairing` is `true`, return only buses that allow device pairing (see `/places/{placeId}/buses/{busId}/pairing`).",
"operationId": "Place.buses",
"parameters": [
{
"default": false,
"description": "Filter out buses that have no pairing window",
"in": "query",
"name": "withPairing",
"required": false,
"type": "boolean"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/BusItem"
},
"type": "array",
"uniqueItems": true
}
},
"403": {
"$ref": "#/responses/ErrorAccessBus"
}
},
"summary": "List Buses",
"tags": [
"Place"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/buses/{busId}/pairing": {
"get": {
"description": "Get the state of the pairing window of the *Bus*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Place.pairing",
"responses": {
"200": {
"description": "State information.",
"schema": {
"$ref": "#/definitions/BusPairing"
}
},
"403": {
"$ref": "#/responses/ErrorAccessBus"
}
},
"summary": "State of the pairing window",
"tags": [
"Place"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
},
{
"$ref": "#/parameters/busId"
}
],
"put": {
"description": "Open/Close the pairing window.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Place.openPairing",
"parameters": [
{
"in": "body",
"name": "pairing",
"required": true,
"schema": {
"$ref": "#/definitions/BusPairing"
}
}
],
"responses": {
"200": {
"description": "State information.",
"schema": {
"$ref": "#/definitions/BusPairing"
}
},
"403": {
"$ref": "#/responses/ErrorAccessBus"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Open/Close the pairing window",
"tags": [
"Place"
]
}
},
"/places/{placeId}/devices": {
"get": {
"description": "Get the list of *Devices* available in this *Place*.",
"operationId": "Place.devices",
"parameters": [
{
"$ref": "#/parameters/devicesSelector.Opt"
},
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/DeviceItem"
},
"type": "array",
"uniqueItems": true
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List of Devices",
"tags": [
"Device"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/electricity/autonomy": {
"get": {
"description": "Compute the autonomy rate of the *Place* on a time period.\n\n`autonomy = 1 - (elec_drawn / elec_total_usage)`\n",
"operationId": "Place.Electricity.autonomy",
"parameters": [
{
"$ref": "#/parameters/when.Req"
},
{
"$ref": "#/parameters/span.Req"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/ElectricityAutonomy"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get autonomy rate of the place",
"tags": [
"Electricity"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/electricity/flows": {
"get": {
"description": "Get the mapping of virtual electricity flows to functionalities.\n\nSome rules are applied to expand the virtual flows using the concrete\nflows available.\n\nThe `factor` tells how each energy value coming from a functionality\nmust be added with values from other functionality to compute the\nenergy of the virtual flow. Factors are usually `1` or `-1`.\n\nThe `code` property gives the result which may be partial:\n- If all flows are available, `200000` is returned.\n- If no flows are available (indicating that the place has no\n electricity functionality or that no functionality has been attached\n to a flow), the `code` is `200001`. The `missing` property contains\n all the requested flows.\n- If some flows are missing, the `code` is `200002` and the `missing`\n property lists them.\n",
"operationId": "Place.Electricity.getFlows",
"parameters": [
{
"collectionFormat": "csv",
"description": "Names of the flows requested",
"in": "query",
"items": {
"enum": [
"battery_charge",
"battery_discharge",
"battery_grid",
"elec_total_gen",
"elec_total_usage",
"elec_feed_in",
"elec_drawn",
"elec_local",
"elec_from_household",
"elec_to_pv",
"elec_usage"
],
"type": "string"
},
"name": "flows",
"required": true,
"type": "array"
}
],
"responses": {
"200": {
"description": "Place is available. `code` gives the functional result.",
"schema": {
"$ref": "#/definitions/ElectricityFlows"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get electricity virtual flows",
"tags": [
"Electricity"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/electricity/flows/setup": {
"get": {
"description": "Get the mapping of functionalities to electricity flows.\n\nA functionality is attached to *at most* one flow.\n",
"operationId": "Place.Electricity.getFlowsSetup",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/ElectricityFlowsSetup"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get electricity flows setup",
"tags": [
"Electricity"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/electricity/self-consumption": {
"get": {
"description": "Compute the self-consumption rate of the *Place* on a time period.\n\n`selfConsumption = 1 - (elec_feed_in / elec_total_usage)`\n",
"operationId": "Place.Electricity.selfConsumption",
"parameters": [
{
"$ref": "#/parameters/when.Req"
},
{
"$ref": "#/parameters/span.Req"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/ElectricitySelfConsumption"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Get self-consumption rate of the place",
"tags": [
"Electricity"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
]
},
"/places/{placeId}/functionalities": {
"get": {
"description": "Get the list of *Functionalities* available in this *Place*.",
"operationId": "Place.functionalities",
"parameters": [
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/FunctionalityItem"
},
"type": "array",
"uniqueItems": true
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List Functionalities",
"tags": [
"Functionality"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
},
{
"$ref": "#/parameters/devicesSelector.Opt"
},
{
"$ref": "#/parameters/functionalitiesSelector.Opt"
}
]
},
"/places/{placeId}/metadata": {
"get": {
"description": "Get the metadata.",
"operationId": "Place.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Place"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
],
"patch": {
"description": "Modify the metadata.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "Place.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessPlace"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata",
"tags": [
"Place"
]
}
},
"/places/{placeId}/notifications": {
"get": {
"description": "Get the list of *Notifications* available in this *Place*.",
"operationId": "Place.notifications",
"parameters": [
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/NotificationItem"
},
"type": "array",
"uniqueItems": true
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List Notifications",
"tags": [
"Notification"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
],
"post": {
"description": "Create a new *Notification*.",
"operationId": "Place.newNotification",
"parameters": [
{
"in": "body",
"name": "notification",
"required": true,
"schema": {
"$ref": "#/definitions/NotificationNew"
}
}
],
"responses": {
"201": {
"description": "*Notification* successfully created.",
"headers": {
"Location": {
"description": "Path of the Notification created (`/notifications/{id}`)",
"type": "string"
}
},
"schema": {
"$ref": "#/definitions/NotificationCreated"
}
},
"403": {
"$ref": "#/responses/ErrorAccessPlace"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Create a Notification",
"tags": [
"Notification"
]
}
},
"/places/{placeId}/programs": {
"get": {
"description": "Get the list of *Programs* available in this *Place*.",
"operationId": "Place.programs",
"parameters": [
{
"$ref": "#/parameters/embedMetadata"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/ProgramItem"
},
"type": "array",
"uniqueItems": true
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List Programs",
"tags": [
"Program"
]
},
"parameters": [
{
"$ref": "#/parameters/placeId"
}
],
"post": {
"description": "Create a new *Program*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Place.newProgram",
"parameters": [
{
"in": "body",
"name": "programInfo",
"required": true,
"schema": {
"$ref": "#/definitions/ProgramNew"
}
}
],
"responses": {
"201": {
"description": "*Program* successfully created.",
"headers": {
"Location": {
"description": "Path of the Program created (`/programs/{id}`)",
"type": "string"
}
},
"schema": {
"$ref": "#/definitions/ProgramCreated"
}
},
"403": {
"$ref": "#/responses/ErrorAccessPlace"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Create a Program",
"tags": [
"Program"
]
}
},
"/places/{placeId}/run/{action}": {
"post": {
"description": "Run an *Action* on zero, one or multiple *Functionalities* selected with tags.\n\n*Device* and *Functionality* selection are combined with « AND ».\n\nIf no functionality is matched by the device/functionality selection, an empty array is returned.\n",
"operationId": "Place.run",
"parameters": [
{
"$ref": "#/parameters/placeId"
},
{
"$ref": "#/parameters/action"
},
{
"$ref": "#/parameters/devicesSelector.Req"
},
{
"$ref": "#/parameters/functionalitiesSelector.Req"
},
{
"in": "body",
"name": "arguments",
"required": true,
"schema": {
"$ref": "#/definitions/ActionArgs"
}
}
],
"responses": {
"200": {
"$ref": "#/responses/ActionMultiResultOK"
},
"450": {
"$ref": "#/responses/ErrorGatewayUnreachable"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Run actions",
"tags": [
"Action"
]
}
},
"/programs/{programId}": {
"delete": {
"description": "Delete a *Program*.\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Program.delete",
"responses": {
"204": {
"$ref": "#/responses/DeleteOK"
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Delete a Program",
"tags": [
"Program"
]
},
"get": {
"description": "Get information about a *Program*.\n",
"operationId": "Programs.get",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Program"
}
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Information about a Program",
"tags": [
"Program"
]
},
"parameters": [
{
"$ref": "#/parameters/programId"
}
],
"patch": {
"description": "Modify a *Program*:\n- name\n- status (enabled/disabled)\n- code\n\n**Note**: requires full access to the *Account*.\n",
"operationId": "Program.patch",
"parameters": [
{
"in": "body",
"name": "programPatch",
"required": true,
"schema": {
"$ref": "#/definitions/ProgramPatch"
}
}
],
"responses": {
"204": {
"$ref": "#/responses/PatchOK"
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify a Program",
"tags": [
"Program"
]
}
},
"/programs/{programId}/log": {
"get": {
"description": "Get the execution history list of this *Program*.",
"operationId": "Program.log",
"parameters": [
{
"$ref": "#/parameters/from.Req"
},
{
"$ref": "#/parameters/to"
}
],
"responses": {
"200": {
"description": "Successful.",
"schema": {
"items": {
"$ref": "#/definitions/ProgramLog"
},
"type": "array",
"uniqueItems": true
}
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "History of executions of a Program",
"tags": [
"Program"
]
},
"parameters": [
{
"$ref": "#/parameters/programId"
}
]
},
"/programs/{programId}/metadata": {
"get": {
"description": "Get the metadata of the *Program*.",
"operationId": "Program.getMetadata",
"responses": {
"200": {
"description": "Successful.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "List metadata",
"tags": [
"Program"
]
},
"parameters": [
{
"$ref": "#/parameters/programId"
}
],
"patch": {
"description": "Modify the metadata of a *Program*.\nKeys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.\n",
"operationId": "Program.patchMetadata",
"parameters": [
{
"$ref": "#/parameters/metadataPatch"
}
],
"responses": {
"200": {
"description": "Successful. The new metadata is returned.",
"schema": {
"$ref": "#/definitions/Metadata"
}
},
"304": {
"$ref": "#/responses/PatchNotModified"
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Modify metadata of a Program",
"tags": [
"Program"
]
}
},
"/programs/{programId}/run": {
"parameters": [
{
"$ref": "#/parameters/programId"
}
],
"post": {
"description": "Launch the *Program*.\nThe result will be available later in the run history.",
"operationId": "Program.run",
"responses": {
"204": {
"description": "*Program* successfully launched."
},
"403": {
"$ref": "#/responses/ErrorAccessProgram"
},
"default": {
"$ref": "#/responses/DefaultError"
}
},
"summary": "Run the Program",
"tags": [
"Program"
]
}
}
},
"definitions": {
"AccountId": {
"description": "Unique identifier of the *Account*",
"example": "t1hqYcQITCFX-AObjs_t4Q",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"AccountLogin": {
"minLength": 1,
"type": "string"
},
"ActionArgs": {
"example": [
true,
1,
"hello"
],
"items": {
"$ref": "#/definitions/AnyJSON"
},
"type": "array"
},
"ActionMultiResult": {
"items": {
"$ref": "#/definitions/ActionResult"
},
"type": "array"
},
"ActionName": {
"minLength": 1,
"readOnly": true,
"type": "string"
},
"ActionResult": {
"example": {
"functionality": "RnVuY3Rpb25hbGl0eTAwMA",
"result": [],
"status": 200
},
"properties": {
"functionality": {
"$ref": "#/definitions/FunctionalityId"
},
"result": {
"items": {
"$ref": "#/definitions/AnyJSON"
},
"type": "array"
},
"status": {
"description": "Return code (HTTP status code)",
"example": 200,
"maximum": 599,
"minimum": 200,
"type": "integer"
}
},
"required": [
"status"
],
"type": "object",
"x-links": [
{
"href": "/functionalities/{functionality}",
"rel": "functionality"
}
]
},
"AnyJSON": {
"description": "null/boolean/integer/number/string/object/array",
"x-type": "any"
},
"AppId": {
"minLength": 1,
"type": "string"
},
"AttributeName": {
"minLength": 1,
"readOnly": true,
"type": "string"
},
"AttributeValue": {
"example": {
"value": 0,
"when": "2014-02-17T12:31:00Z"
},
"properties": {
"value": {
"$ref": "#/definitions/AnyJSON"
},
"when": {
"format": "date-time",
"type": "string"
}
},
"required": [
"when",
"value"
],
"type": "object"
},
"AttributesValues": {
"additionalProperties": {
"items": {
"$ref": "#/definitions/AttributeValue"
},
"type": "array"
},
"description": "Keys are attribute ids",
"example": {
"Counter": [
{
"value": 0,
"when": "2014-02-17T12:31:00Z"
}
],
"Schedule": [
{
"value": [
{
"DTSTAMP": "20120101T000000Z",
"DTSTART": {
"": "20120101T063000",
"TZID": "Europe/Paris"
},
"RRULE": {
"FREQ": "DAILY"
},
"SUMMARY": "2",
"UID": "HP-06h30@si.ijenko.net"
},
{
"DTSTAMP": "20120101T000000Z",
"DTSTART": {
"": "20120101T223000",
"TZID": "Europe/Paris"
},
"RRULE": {
"FREQ": "DAILY"
},
"SUMMARY": "3",
"UID": "HC-22h30@si.ijenko.net"
}
],
"when": "2014-02-17T00:00:00Z"
}
]
},
"type": "object"
},
"AuthChangePassword": {
"properties": {
"newPassword": {
"$ref": "#/definitions/Password"
},
"oldPassword": {
"$ref": "#/definitions/Password"
}
},
"required": [
"oldPassword",
"newPassword"
],
"type": "object"
},
"AuthLogin": {
"properties": {
"appId": {
"$ref": "#/definitions/AppId"
},
"login": {
"minLength": 1,
"type": "string"
},
"password": {
"$ref": "#/definitions/Password"
},
"ttl": {
"description": "Desired maximum life-time in seconds for the refresh token",
"example": 1800,
"minimum": 0,
"type": "integer"
}
},
"required": [
"login",
"password",
"appId"
],
"type": "object"
},
"AuthRefresh": {
"properties": {
"appId": {
"$ref": "#/definitions/AppId"
},
"refreshToken": {
"minLength": 1,
"type": "string"
}
},
"required": [
"refreshToken",
"appId"
],
"type": "object"
},
"AuthResetPassword": {
"properties": {
"appId": {
"$ref": "#/definitions/AppId"
},
"email": {
"$ref": "#/definitions/UserEmail"
},
"login": {
"minLength": 1,
"type": "string"
}
},
"required": [
"appId"
],
"type": "object"
},
"AuthTokens": {
"properties": {
"accessToken": {
"minLength": 1,
"type": "string"
},
"accessTokenExpires": {
"format": "date-time",
"type": "string"
},
"refreshToken": {
"minLength": 1,
"type": "string"
},
"refreshTokenExpires": {
"format": "date-time",
"type": "string"
}
},
"required": [
"accessToken",
"refreshToken",
"accessTokenExpires",
"refreshTokenExpires"
],
"type": "object"
},
"BusId": {
"minLength": 3,
"type": "string"
},
"BusItem": {
"properties": {
"functionality": {
"$ref": "#/definitions/FunctionalityId"
},
"id": {
"$ref": "#/definitions/BusId"
},
"protocol": {
"$ref": "#/definitions/BusProtocol"
}
},
"readOnly": true,
"required": [
"id",
"functionality",
"protocol"
],
"type": "object"
},
"BusPairing": {
"properties": {
"duration": {
"description": "Duration of the pairing window.",
"type": "integer"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"type": "object"
},
"BusProtocol": {
"minLength": 1,
"type": "string"
},
"CountryCode": {
"description": "Country code (ISO 3166-1 alpha-2)",
"example": "FR",
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Z][A-Z]$",
"type": "string"
},
"DefaultError": {
"description": "Any error.",
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"Device": {
"properties": {
"address": {
"$ref": "#/definitions/DeviceAddress"
},
"attributes": {
"additionalProperties": {
"additionalProperties": {
"$ref": "#/definitions/AnyJSON"
},
"description": "Each key is an attribute name",
"type": "object"
},
"description": "Each key is <FunctionalityClass>@<Endpoint>",
"type": "object"
},
"class": {
"$ref": "#/definitions/DeviceClass"
},
"functionalities": {
"items": {
"$ref": "#/definitions/FunctionalityItem"
},
"readOnly": true,
"type": "array",
"uniqueItems": true
},
"isOnline": {
"readOnly": true,
"type": "boolean"
},
"manufacturer": {
"readOnly": true,
"type": "string"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"model": {
"readOnly": true,
"type": "string"
},
"name": {
"description": "Name of the device. User defined.",
"minLength": 2,
"type": "string"
},
"place": {
"$ref": "#/definitions/PlaceId"
},
"protocol": {
"$ref": "#/definitions/BusProtocol"
},
"tags": {
"items": {
"$ref": "#/definitions/DeviceTag"
},
"type": "array",
"uniqueItems": true
}
},
"required": [
"place",
"class",
"address",
"isOnline",
"functionalities",
"tags"
],
"type": "object",
"x-links": [
{
"href": "/places/{place}",
"rel": "place"
}
]
},
"DeviceAddress": {
"minLength": 1,
"pattern": "^[A-Z0-9]{1,32}$",
"type": "string"
},
"DeviceClass": {
"maxLength": 4,
"minLength": 4,
"pattern": "^[A-Z][A-Z0-9]{3}$",
"type": "string"
},
"DeviceId": {
"description": "Unique identifier of the *Device*",
"example": "RGV2aWNlMDAwMDAwMDAwMA",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"DeviceItem": {
"properties": {
"address": {
"$ref": "#/definitions/DeviceAddress"
},
"class": {
"$ref": "#/definitions/DeviceClass"
},
"id": {
"$ref": "#/definitions/DeviceId"
},
"isOnline": {
"type": "boolean"
},
"metadata": {
"$ref": "#/definitions/MetadataSelected"
},
"name": {
"description": "Name of the *Device* as defined by the user. Can be used for user interfaces.",
"minLength": 2,
"type": "string"
},
"place": {
"$ref": "#/definitions/PlaceId"
},
"tags": {
"items": {
"$ref": "#/definitions/DeviceTag"
},
"type": "array",
"uniqueItems": true
}
},
"readOnly": true,
"required": [
"id",
"place",
"class",
"address",
"isOnline",
"tags"
],
"type": "object",
"x-links": [
{
"href": "/devices/{id}",
"rel": "full"
},
{
"href": "/places/{place}",
"rel": "place"
}
]
},
"DevicePatch": {
"properties": {
"name": {
"description": "Name of the *Device* as defined by the user. Can be used for user interfaces.",
"minLength": 2,
"type": "string"
}
},
"type": "object"
},
"DeviceTag": {
"maxLength": 21,
"minLength": 1,
"pattern": "^[a-z](?:[a-z0-9_]{0,20}|[a-z0-9_]:[a-z0-9_]{1,18}|[a-z0-9_]{2}:[a-z0-9_]{1,17}|[a-z0-9_]{3}:[a-z0-9_]{1,16}|[a-z0-9_]{4}:[a-z0-9_]{1,15})$",
"type": "string"
},
"ElectricityAutonomy": {
"example": {
"autonomy": 0.4,
"code": 200000,
"from": "2016-03-02T09:00:00Z",
"to": "2016-03-02T10:00:00Z"
},
"properties": {
"autonomy": {
"description": "Average electricity autonomy in % (value in range [0, 1], rounded)",
"example": 0.4,
"maximum": 1,
"minimum": 0,
"type": "number"
},
"code": {
"$ref": "#/definitions/ElectricityStatusCode"
},
"from": {
"format": "date-time",
"type": "string"
},
"message": {
"description": "Message for cases where computation is not possible (codes 200001, 200002)",
"minLength": 1,
"type": "string"
},
"to": {
"format": "date-time",
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"ElectricityFlow": {
"items": {
"$ref": "#/definitions/ElectricityFunctionality"
},
"type": "array",
"uniqueItems": true
},
"ElectricityFlowFormula": {
"items": {
"$ref": "#/definitions/ElectricityFlowFunctionality"
},
"type": "array",
"uniqueItems": true
},
"ElectricityFlowFunctionality": {
"example": {
"class": "ElecMetering",
"factor": 1,
"flow": "elec_total_gen",
"id": "RnVuY3Rpb25hbGl0eTAwMA"
},
"properties": {
"class": {
"$ref": "#/definitions/FunctionalityClass"
},
"factor": {
"type": "integer"
},
"flow": {
"$ref": "#/definitions/ElectricityFlowName"
},
"id": {
"$ref": "#/definitions/FunctionalityId"
}
},
"required": [
"id",
"class",
"flow",
"factor"
],
"type": "object",
"x-links": [
{
"href": "/functionalities/{id}",
"rel": "full"
}
]
},
"ElectricityFlowName": {
"description": "Name of an electricity flow",
"enum": [
"battery_charge",
"battery_discharge",
"battery_grid",
"elec_total_gen",
"elec_total_usage",
"elec_feed_in",
"elec_drawn",
"elec_local",
"elec_from_household",
"elec_to_pv",
"elec_usage"
],
"minLength": 1,
"type": "string"
},
"ElectricityFlows": {
"example": {
"code": 200000,
"flows": {
"elec_local": [
{
"class": "ElecMetering",
"factor": 1,
"id": "SF4_y4SoTCpYXgGODJplJQ"
}
],
"elec_total_usage": [
{
"class": "ElecMetering",
"factor": 1,
"flow": "elec_total_gen",
"id": "SF4_y4SoTCpYXgGODJplJQ"
},
{
"class": "ElecSmartMetering",
"factor": 1,
"flow": "elec_drawn",
"id": "lvxvQ9SqXCpYSqHOJI7tIA"
},
{
"class": "ElecSmartMetering",
"factor": -1,
"flow": "elec_feed_in",
"id": "d1xvwdWKWCpYH6GPjovnLg"
}
]
}
},
"properties": {
"code": {
"$ref": "#/definitions/ElectricityStatusCode"
},
"flows": {
"$ref": "#/definitions/ElectricityVirtualFlows"
},
"message": {
"$ref": "#/definitions/ElectricityStatusMessage"
},
"missing": {
"$ref": "#/definitions/ElectricityMissingFlows"
}
},
"required": [
"code"
],
"type": "object"
},
"ElectricityFlowsSetup": {
"example": {
"elec_drawn": [
{
"class": "ElecSmartMetering",
"id": "lvxvQ9SqXCpYSqHOJI7tIA"
}
],
"elec_feed_in": [
{
"class": "ElecSmartMetering",
"id": "d1xvwdWKWCpYH6GPjovnLg"
}
],
"elec_total_gen": [
{
"class": "ElecMetering",
"id": "SF4_y4SoTCpYXgGODJplJQ"
}
]
},
"properties": {
"battery_charge": {
"$ref": "#/definitions/ElectricityFlow"
},
"battery_discharge": {
"$ref": "#/definitions/ElectricityFlow"
},
"battery_grid": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_drawn": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_feed_in": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_from_household": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_local": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_to_pv": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_total_gen": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_total_usage": {
"$ref": "#/definitions/ElectricityFlow"
},
"elec_usage": {
"$ref": "#/definitions/ElectricityFlow"
}
},
"type": "object"
},
"ElectricityFunctionality": {
"example": {
"class": "ElecMetering",
"id": "RnVuY3Rpb25hbGl0eTAwMA"
},
"properties": {
"class": {
"$ref": "#/definitions/FunctionalityClass"
},
"id": {
"$ref": "#/definitions/FunctionalityId"
}
},
"required": [
"id",
"class"
],
"type": "object",
"x-links": [
{
"href": "/functionalities/{id}",
"rel": "full"
}
]
},
"ElectricityMissingFlows": {
"description": "List of missing flows (not available either directly or indirectly)",
"properties": {
"battery_charge": {
"enum": [
true
],
"type": "boolean"
},
"battery_discharge": {
"enum": [
true
],
"type": "boolean"
},
"battery_grid": {
"enum": [
true
],
"type": "boolean"
},
"elec_drawn": {
"enum": [
true
],
"type": "boolean"
},
"elec_feed_in": {
"enum": [
true
],
"type": "boolean"
},
"elec_from_household": {
"enum": [
true
],
"type": "boolean"
},
"elec_local": {
"enum": [
true
],
"type": "boolean"
},
"elec_to_pv": {
"enum": [
true
],
"type": "boolean"
},
"elec_total_gen": {
"enum": [
true
],
"type": "boolean"
},
"elec_total_usage": {
"enum": [
true
],
"type": "boolean"
},
"elec_usage": {
"enum": [
true
],
"type": "boolean"
}
},
"type": "object"
},
"ElectricitySelfConsumption": {
"example": {
"code": 200000,
"from": "2016-03-02T10:00:00Z",
"selfConsumption": 1,
"to": "2016-03-02T11:00:00Z"
},
"properties": {
"code": {
"$ref": "#/definitions/ElectricityStatusCode"
},
"from": {
"format": "date-time",
"type": "string"
},
"message": {
"description": "Message for cases where computation is not possible (codes 200001, 200002)",
"minLength": 1,
"type": "string"
},
"selfConsumption": {
"description": "Average self-consumption rate in % (value in range [0, 1], rounded)",
"example": 0.555555,
"maximum": 1,
"minimum": 0,
"type": "number"
},
"to": {
"format": "date-time",
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"ElectricityStatusCode": {
"description": "Status code. 200000 means OK. Other codes indicate full or partial failure.",
"enum": [
200000,
200001,
200002
],
"example": 200000,
"type": "integer"
},
"ElectricityStatusMessage": {
"description": "Message for cases where computation is not possible (codes 200001, 200002)",
"minLength": 1,
"type": "string"
},
"ElectricityVirtualFlows": {
"properties": {
"battery_charge": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"battery_discharge": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"battery_grid": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_drawn": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_feed_in": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_from_household": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_local": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_to_pv": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_total_gen": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_total_usage": {
"$ref": "#/definitions/ElectricityFlowFormula"
},
"elec_usage": {
"$ref": "#/definitions/ElectricityFlowFormula"
}
},
"type": "object"
},
"ErrorEntity": {
"description": "An error related to access to an entity (400, 403, 404, 410)",
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
},
"resource": {
"$ref": "#/definitions/ResourceRef"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"ErrorGatewayUnreachable": {
"description": "The gateway of the Place is not reachable.",
"properties": {
"code": {
"enum": [
"450"
],
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"ErrorSubEntity": {
"description": "An error related to access to an sub-entity (400, 403, 404, 410)",
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
},
"resource": {
"properties": {
"entity": {
"enum": [
"Action",
"Attribute",
"Bus"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"minLength": 1,
"type": "string"
},
"parent": {
"description": "Container resource.",
"properties": {
"entity": {
"enum": [
"Place",
"Functionality"
],
"type": "string"
},
"id": {
"minLength": 1,
"type": "string"
}
},
"required": [
"entity",
"id"
],
"type": "object"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"Functionality": {
"properties": {
"actions": {
"items": {
"$ref": "#/definitions/ActionName"
},
"readOnly": true,
"type": "array",
"uniqueItems": true
},
"attributes": {
"items": {
"$ref": "#/definitions/AttributeName"
},
"readOnly": true,
"type": "array",
"uniqueItems": true
},
"class": {
"$ref": "#/definitions/FunctionalityClass"
},
"device": {
"$ref": "#/definitions/DeviceId"
},
"endpoint": {
"$ref": "#/definitions/FunctionalityEndpoint"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"$ref": "#/definitions/FunctionalityName"
},
"tags": {
"items": {
"$ref": "#/definitions/FunctionalityTag"
},
"type": "array",
"uniqueItems": true
}
},
"required": [
"class",
"endpoint",
"device",
"attributes",
"tags"
],
"type": "object",
"x-links": [
{
"href": "/devices/{id}",
"rel": "device"
}
]
},
"FunctionalityClass": {
"minLength": 2,
"pattern": "^[A-Z][A-Za-z0-9]+$",
"readOnly": true,
"type": "string"
},
"FunctionalityCreated": {
"description": "A resource has been created. The `resource` property gives its reference.",
"example": {
"code": 201,
"message": "Functionality created",
"resource": {
"entity": "Functionality",
"href": "/functionalities/RnVuY3Rpb25hbGl0eTAwMA",
"id": "RnVuY3Rpb25hbGl0eTAwMA"
}
},
"properties": {
"code": {
"enum": [
201
],
"example": 201,
"type": "integer"
},
"message": {
"enum": [
"Functionality created"
],
"type": "string"
},
"resource": {
"$ref": "#/definitions/FunctionalityResource"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"FunctionalityEndpoint": {
"maximum": 255,
"minimum": 0,
"readOnly": true,
"type": "integer"
},
"FunctionalityId": {
"description": "Unique identifier of the *Functionality*",
"example": "RnVuY3Rpb25hbGl0eTAwMA",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"FunctionalityItem": {
"properties": {
"class": {
"$ref": "#/definitions/FunctionalityClass"
},
"device": {
"$ref": "#/definitions/DeviceId"
},
"endpoint": {
"$ref": "#/definitions/FunctionalityEndpoint"
},
"id": {
"$ref": "#/definitions/FunctionalityId"
},
"metadata": {
"$ref": "#/definitions/MetadataSelected"
},
"name": {
"$ref": "#/definitions/FunctionalityName"
},
"tags": {
"items": {
"$ref": "#/definitions/FunctionalityTag"
},
"type": "array",
"uniqueItems": true
}
},
"readOnly": true,
"required": [
"id",
"device",
"class",
"endpoint"
],
"type": "object",
"x-links": [
{
"href": "/functionalities/{id}",
"rel": "full"
},
{
"href": "/devices/{device}",
"rel": "device"
}
]
},
"FunctionalityName": {
"description": "Free functionality name",
"type": "string"
},
"FunctionalityNew": {
"properties": {
"class": {
"$ref": "#/definitions/FunctionalityClass"
},
"endpoint": {
"$ref": "#/definitions/FunctionalityEndpoint"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"$ref": "#/definitions/FunctionalityName"
},
"tags": {
"items": {
"$ref": "#/definitions/FunctionalityTag"
},
"type": "array",
"uniqueItems": true
}
},
"required": [
"class",
"endpoint"
],
"type": "object"
},
"FunctionalityPatch": {
"properties": {
"name": {
"$ref": "#/definitions/FunctionalityName"
}
},
"type": "object"
},
"FunctionalityResource": {
"example": {
"entity": "Functionality",
"href": "/functionalities/RnVuY3Rpb25hbGl0eTAwMA",
"id": "RnVuY3Rpb25hbGl0eTAwMA"
},
"properties": {
"entity": {
"enum": [
"Functionality"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/FunctionalityId"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"FunctionalityTag": {
"maxLength": 21,
"minLength": 1,
"pattern": "^[a-z](?:[a-z0-9_]{0,20}|[a-z0-9_]:[a-z0-9_]{1,18}|[a-z0-9_]{2}:[a-z0-9_]{1,17}|[a-z0-9_]{3}:[a-z0-9_]{1,16}|[a-z0-9_]{4}:[a-z0-9_]{1,15})$",
"type": "string"
},
"Locale": {
"description": "Locale identifier (language, region). See https://tools.ietf.org/html/rfc5646 and https://www.iana.org/assignments/lang-subtags-templates/lang-subtags-templates.xhtml .\n",
"example": "fr-FR",
"minLength": 2,
"pattern": "^[a-z]{2}[A-Za-z0-9-]*$",
"type": "string"
},
"Metadata": {
"additionalProperties": {
"$ref": "#/definitions/AnyJSON"
},
"description": "Keys are limited to the same format as tags (up to 21 characters, [a-z0-9], starting with [a-z]). Values can be any JSON value.",
"type": "object"
},
"MetadataKey": {
"maxLength": 21,
"minLength": 1,
"pattern": "^[a-z](?:[a-z0-9_]{0,20}|[a-z0-9_]:[a-z0-9_]{1,18}|[a-z0-9_]{2}:[a-z0-9_]{1,17}|[a-z0-9_]{3}:[a-z0-9_]{1,16}|[a-z0-9_]{4}:[a-z0-9_]{1,15})$",
"type": "string"
},
"MetadataPatch": {
"properties": {
"add": {
"additionalProperties": {
"$ref": "#/definitions/AnyJSON"
},
"description": "list of pairs key/value to add/replace",
"type": "object"
},
"remove": {
"description": "list of keys to remove",
"items": {
"$ref": "#/definitions/MetadataKey"
},
"type": "array",
"uniqueItems": true
}
},
"type": "object"
},
"MetadataSelected": {
"additionalProperties": {
"$ref": "#/definitions/AnyJSON"
},
"description": "Subset of metadata attached to the resource selected using the 'embed-metadata' parameter",
"type": "object"
},
"Notification": {
"properties": {
"data": {
"type": "object"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"place": {
"$ref": "#/definitions/PlaceId"
},
"routing": {
"format": "uri",
"type": "string"
}
},
"required": [
"name",
"place"
],
"type": "object",
"x-links": [
{
"href": "/places/{place}",
"rel": "place"
}
]
},
"NotificationCreated": {
"description": "A resource has been created. The `resource` property gives its reference.",
"example": {
"code": 201,
"message": "Notification created",
"resource": {
"entity": "Notification",
"href": "/notifications/InovwcCIGM5X7KvKrJ7vJw",
"id": "InovwcCIGM5X7KvKrJ7vJw"
}
},
"properties": {
"code": {
"enum": [
201
],
"example": 201,
"type": "integer"
},
"message": {
"enum": [
"Notification created"
],
"type": "string"
},
"resource": {
"$ref": "#/definitions/NotificationResource"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"NotificationId": {
"description": "Unique identifier of the *Notification*",
"example": "InovwcCIGM5X7KvKrJ7vJw",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"NotificationItem": {
"description": "Notification",
"properties": {
"id": {
"$ref": "#/definitions/NotificationId"
},
"metadata": {
"$ref": "#/definitions/MetadataSelected"
},
"name": {
"type": "string"
}
},
"readOnly": true,
"required": [
"id",
"name"
],
"type": "object",
"x-links": [
{
"href": "/notifications/{id}",
"rel": "full"
}
]
},
"NotificationNew": {
"properties": {
"data": {
"type": "object"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"routing": {
"format": "uri",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"NotificationPatch": {
"properties": {
"data": {
"type": "object"
},
"name": {
"minLength": 1,
"type": "string"
},
"routing": {
"format": "uri",
"type": "string"
}
},
"type": "object"
},
"NotificationResource": {
"example": {
"entity": "Notification",
"href": "/notifications/InovwcCIGM5X7KvKrJ7vJw",
"id": "InovwcCIGM5X7KvKrJ7vJw"
},
"properties": {
"entity": {
"enum": [
"Notification"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/NotificationId"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"Password": {
"format": "password",
"minLength": 5,
"type": "string"
},
"PhoneNumber": {
"description": "Phone number of the *User* in international format, for SMS notifications.",
"example": "+33177494646",
"minLength": 6,
"pattern": "^\\+[0-9]{5,}$",
"type": "string"
},
"Place": {
"properties": {
"account": {
"$ref": "#/definitions/AccountId"
},
"country": {
"$ref": "#/definitions/CountryCode"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"example": "⌂ Home",
"minLength": 1,
"type": "string"
},
"timeZone": {
"$ref": "#/definitions/TimeZone"
},
"zipCode": {
"$ref": "#/definitions/ZipCode"
}
},
"required": [
"name",
"zipCode",
"country",
"timeZone"
],
"type": "object"
},
"PlaceCreated": {
"description": "A resource has been created. The `resource` property gives its reference.",
"example": {
"code": 201,
"message": "Place created",
"resource": {
"entity": "Place",
"href": "/places/3HA6YcSCTSFX6SPPrI9PxQ",
"id": "3HA6YcSCTSFX6SPPrI9PxQ"
}
},
"properties": {
"code": {
"enum": [
201
],
"example": 201,
"type": "integer"
},
"message": {
"enum": [
"Place created"
],
"type": "string"
},
"resource": {
"$ref": "#/definitions/PlaceResource"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"PlaceId": {
"description": "Unique identifier of the *Place*",
"example": "3HA6YcSCTSFX6SPPrI9PxQ",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"PlaceItem": {
"properties": {
"id": {
"$ref": "#/definitions/PlaceId"
},
"name": {
"type": "string"
}
},
"readOnly": true,
"required": [
"id",
"name"
],
"type": "object",
"x-links": [
{
"href": "/places/{id}",
"rel": "full"
}
]
},
"PlaceNew": {
"properties": {
"country": {
"$ref": "#/definitions/CountryCode"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"example": "⌂ Home",
"minLength": 1,
"type": "string"
},
"timeZone": {
"$ref": "#/definitions/TimeZone"
},
"zipCode": {
"$ref": "#/definitions/ZipCode"
}
},
"required": [
"name",
"zipCode",
"country",
"timeZone"
],
"type": "object"
},
"PlacePatch": {
"properties": {
"country": {
"$ref": "#/definitions/CountryCode"
},
"name": {
"example": "⌂ Home",
"minLength": 1,
"type": "string"
},
"timeZone": {
"$ref": "#/definitions/TimeZone"
},
"zipCode": {
"$ref": "#/definitions/ZipCode"
}
},
"type": "object"
},
"PlaceResource": {
"example": {
"entity": "Place",
"href": "/places/3HA6YcSCTSFX6SPPrI9PxQ",
"id": "3HA6YcSCTSFX6SPPrI9PxQ"
},
"properties": {
"entity": {
"enum": [
"Place"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/PlaceId"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"Program": {
"properties": {
"code": {
"$ref": "#/definitions/AnyJSON"
},
"enabled": {
"type": "boolean"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"place": {
"$ref": "#/definitions/PlaceId"
}
},
"required": [
"name",
"enabled",
"code"
],
"type": "object",
"x-links": [
{
"href": "/places/{place}",
"rel": "place"
}
]
},
"ProgramCreated": {
"description": "A resource has been created. The `resource` property gives its reference.",
"example": {
"code": 201,
"message": "Program created",
"resource": {
"entity": "Program",
"href": "/programs/3_J_6ZWICc5X_KverorNvw",
"id": "3_J_6ZWICc5X_KverorNvw"
}
},
"properties": {
"code": {
"enum": [
201
],
"example": 201,
"type": "integer"
},
"message": {
"enum": [
"Program created"
],
"type": "string"
},
"resource": {
"$ref": "#/definitions/ProgramResource"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"ProgramId": {
"description": "Unique identifier of the *Program*",
"example": "3_J_6ZWICc5X_KverorNvw",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"ProgramItem": {
"properties": {
"enabled": {
"type": "boolean"
},
"id": {
"$ref": "#/definitions/ProgramId"
},
"metadata": {
"$ref": "#/definitions/MetadataSelected"
},
"name": {
"type": "string"
}
},
"readOnly": true,
"required": [
"id",
"name",
"enabled"
],
"type": "object",
"x-links": [
{
"href": "/programs/{id}",
"rel": "full"
}
]
},
"ProgramLog": {
"properties": {
"actions": {
"items": {
"$ref": "#/definitions/ActionResult"
},
"type": "array"
},
"errors": {
"items": {
"type": "string"
},
"type": "array"
},
"notifications": {
"items": {
"$ref": "#/definitions/NotificationId"
},
"type": "array",
"uniqueItems": true
},
"when": {
"format": "date-time",
"type": "string"
}
},
"required": [
"when"
],
"type": "object"
},
"ProgramNew": {
"example": {
"code": [],
"enabled": false,
"name": "NOOP"
},
"properties": {
"code": {
"$ref": "#/definitions/AnyJSON"
},
"enabled": {
"default": true,
"type": "boolean"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"code"
],
"type": "object"
},
"ProgramPatch": {
"properties": {
"code": {
"$ref": "#/definitions/AnyJSON"
},
"enabled": {
"type": "boolean"
},
"name": {
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"ProgramResource": {
"example": {
"entity": "Program",
"href": "/programs/3_J_6ZWICc5X_KverorNvw",
"id": "3_J_6ZWICc5X_KverorNvw"
},
"properties": {
"entity": {
"enum": [
"Program"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/ProgramId"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"ResourceRef": {
"properties": {
"entity": {
"enum": [
"Device",
"Functionality",
"Notification",
"Place",
"Program",
"User",
"Account",
"AccountsBase"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"minLength": 1,
"type": "string"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"Tag": {
"maxLength": 21,
"minLength": 1,
"pattern": "^[a-z](?:[a-z0-9_]{0,20}|[a-z0-9_]:[a-z0-9_]{1,18}|[a-z0-9_]{2}:[a-z0-9_]{1,17}|[a-z0-9_]{3}:[a-z0-9_]{1,16}|[a-z0-9_]{4}:[a-z0-9_]{1,15})$",
"type": "string"
},
"Tags": {
"items": {
"$ref": "#/definitions/Tag"
},
"type": "array",
"uniqueItems": true
},
"TagsPatch": {
"properties": {
"add": {
"description": "list of tags to add",
"items": {
"$ref": "#/definitions/Tag"
},
"type": "array",
"uniqueItems": true
},
"remove": {
"description": "list of tags to remove",
"items": {
"$ref": "#/definitions/Tag"
},
"type": "array",
"uniqueItems": true
}
},
"type": "object"
},
"TimeZone": {
"description": "A time zone name from the Time Zone Database at https://www.iana.org/time-zones",
"example": "Europe/Paris",
"minLength": 2,
"pattern": "^[A-Z][A-Za-z0-9-_+]+(?:/[A-Z][A-Za-z0-9-_+]+)*$",
"type": "string"
},
"TokenId": {
"example": "dfSDdRcsd",
"minLength": 1,
"type": "string"
},
"User": {
"properties": {
"account": {
"$ref": "#/definitions/AccountId"
},
"canLogin": {
"default": false,
"description": "true if the user owning the account (can get tokens with /auth/login)",
"example": false,
"readOnly": true,
"type": "boolean"
},
"email": {
"$ref": "#/definitions/UserEmail"
},
"locale": {
"$ref": "#/definitions/Locale"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"phoneNumber": {
"$ref": "#/definitions/PhoneNumber"
}
},
"required": [
"email",
"name",
"locale",
"canLogin"
],
"type": "object"
},
"UserCreated": {
"description": "A resource has been created. The `resource` property gives its reference.",
"example": {
"code": 201,
"message": "User created",
"resource": {
"entity": "User",
"href": "/users/RGV2aWNlMDAwMDAwMDAwMZ",
"id": "RGV2aWNlMDAwMDAwMDAwMZ"
}
},
"properties": {
"code": {
"enum": [
201
],
"example": 201,
"type": "integer"
},
"message": {
"enum": [
"User created"
],
"type": "string"
},
"resource": {
"$ref": "#/definitions/UserResource"
}
},
"required": [
"code",
"message",
"resource"
],
"type": "object"
},
"UserEmail": {
"format": "email",
"minLength": 6,
"type": "string"
},
"UserId": {
"description": "Unique identifier of the *User*",
"example": "RGV2aWNlMDAwMDAwMDAwMZ",
"maxLength": 22,
"minLength": 22,
"pattern": "^[A-Za-z0-9-_]{22}$",
"readOnly": true,
"type": "string"
},
"UserItem": {
"properties": {
"canLogin": {
"default": false,
"description": "true if the user owning the account (can get tokens with /auth/login)",
"example": false,
"readOnly": true,
"type": "boolean"
},
"email": {
"$ref": "#/definitions/UserEmail"
},
"id": {
"$ref": "#/definitions/UserId"
},
"locale": {
"$ref": "#/definitions/Locale"
},
"metadata": {
"$ref": "#/definitions/MetadataSelected"
},
"name": {
"minLength": 1,
"type": "string"
},
"phoneNumber": {
"$ref": "#/definitions/PhoneNumber"
}
},
"required": [
"email",
"name",
"locale",
"id"
],
"type": "object",
"x-links": [
{
"href": "/users/{id}",
"rel": "full"
}
]
},
"UserMe": {
"properties": {
"email": {
"$ref": "#/definitions/UserEmail"
},
"id": {
"$ref": "#/definitions/UserId"
},
"locale": {
"$ref": "#/definitions/Locale"
},
"login": {
"$ref": "#/definitions/AccountLogin"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"phoneNumber": {
"$ref": "#/definitions/PhoneNumber"
}
},
"required": [
"email",
"name",
"locale",
"id"
],
"type": "object",
"x-links": [
{
"href": "/account/users/{id}",
"rel": "full"
}
]
},
"UserMePatch": {
"properties": {
"locale": {
"$ref": "#/definitions/Locale"
}
},
"type": "object"
},
"UserNew": {
"properties": {
"email": {
"$ref": "#/definitions/UserEmail"
},
"locale": {
"$ref": "#/definitions/Locale"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"name": {
"minLength": 1,
"type": "string"
},
"phoneNumber": {
"$ref": "#/definitions/PhoneNumber"
}
},
"required": [
"email",
"name",
"locale"
],
"type": "object"
},
"UserPatch": {
"properties": {
"email": {
"$ref": "#/definitions/UserEmail"
},
"locale": {
"$ref": "#/definitions/Locale"
},
"name": {
"minLength": 1,
"type": "string"
},
"phoneNumber": {
"$ref": "#/definitions/PhoneNumber"
}
},
"type": "object"
},
"UserResource": {
"example": {
"entity": "User",
"href": "/users/RGV2aWNlMDAwMDAwMDAwMZ",
"id": "RGV2aWNlMDAwMDAwMDAwMZ"
},
"properties": {
"entity": {
"enum": [
"User"
],
"type": "string"
},
"href": {
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/UserId"
}
},
"required": [
"id",
"entity",
"href"
],
"type": "object"
},
"UserTokenItem": {
"description": "Token for User API access",
"properties": {
"appName": {
"description": "Application name",
"example": "Home Eopath",
"type": "string"
},
"id": {
"$ref": "#/definitions/TokenId"
},
"lastUse": {
"description": "Time of last use of the token to access the API. Updated at most every 15 minutes. If absent, the token has never been used.",
"format": "date-time",
"type": "string"
},
"places": {
"description": "List of Places to which the User has access. If absent, it means any Place of the account are allowed.",
"items": {
"$ref": "#/definitions/PlaceItem"
},
"type": "array",
"uniqueItems": true
},
"refreshTokenExpires": {
"description": "If absent, infinite validity.",
"format": "date-time",
"type": "string"
},
"self": {
"description": "True if this token is the one used for this API request",
"type": "boolean"
},
"user": {
"$ref": "#/definitions/UserItem"
}
},
"required": [
"id",
"appName",
"user"
],
"type": "object"
},
"ZipCode": {
"description": "Postal code",
"maxLength": 10,
"minLength": 0,
"pattern": "^(?:[A-Z0-9](?:[A-Z0-9][- ]?)*[A-Z0-9])?$",
"type": "string"
}
}
}