The foundation and the heart of your local smart home platform.

Table of Contents

Open API V1 Document

Please note: This document is for Open API V1. For V2, please visit this link.

1. Start to Use

1.1 Preparation

Take SONOFF iHOST as an example.

Step 1.

Please make sure the gateway (iHost) is powered on and works properly.

The BLUE led indicates a normal network connection.

The RED led indicates an abnormal network connection.

Step 2.

Make sure the gateway and the PC are connected to the same LAN. Then enter the URL http://ihost.local on your browser.

Note:

If you have several gateways, you can get the corresponding IP address to access the specified gateway in the below two ways.

1. Log in to your wireless router and check the IP address of the gateway in DHCP.

2. iHost supports local discovery via mDNS.

1.2 Get started

  • Call the [Access Token] interface, and get an error response, prompting to click <Done>.
    Note that after pressing, the interface access is valid for no more than 5 minutes.
				
					// Request
curl --location --request GET 'http://<ip address>/open-api/v1/rest/bridge/access_token' --header 'Content-Type: application/json'

// Response
{
  "error": 401,
  "data": {},
  "message": "link button not pressed" 
}
				
			
  • Click <Done> and call the [Access Token] interface again. The response is successful, and the token is obtained.
				
					// Request
curl --location --request GET 'http://<ip address>/open-api/v1/rest/bridge/access_token' --header 'Content-Type: application/json'

// Response
{
  "error": 0,
  "data": {
    "token": "376310da-7adf-4521-b18c-5e0752cfff8d"
  },
  "message": "success"
}
				
			
  • Verify token. Call the [Get Device List] interface. The response is successful, and the device list is obtained.
				
					// Request
curl --location --request GET 'http://<ip address>/open-api/v1/rest/devices' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 376310da-7adf-4521-b18c-5e0752cfff8d'

// Response
{
  "error": 0,
  "data": {
    "device_list":  [
      {
        "serial_number": "ABCDEFGHIJK",
        "name": "device name",
        "manufacturer": "manufacturer name",
        "model": "model name",
        "firmware_version": "1.1.0",
        "display_category": "switch",
        "capabilities": [
          {
            "capability": "power",
            "permission": "readWrite"
          }
        ],
        "protocal": "zigbee",
        "state": {
          "power": {
            "powerState": "on"
          }
        },
        "tags": {
          "key": "value"
        },
        "online": true
      }
    ]
  }
  "message": "success"
}
				
			

Get iHost access token method: 

After calling the [Access Token] interface, the iHost Web console page global pop-up box prompts the user to confirm the acquisition of the interface call credentials.

Note: 

If you open more than one iHost web console page, the confirmation pop-up box will appear on multiple web console pages together, and the pop-up box of other web console pages will be closed after clicking the confirmation on one of the web console pages.

2. Core Concept

2.1 Development Interface Address

The gateway Web API interface has two access methods (based on IP or domain name), usually, the root path is /open-api/v1/rest/< specific function module >

// IP access

http://<IP address>/open-api/v1/rest/bridge

// Domain name access

http://<domain address>/open-api/v1/rest/bridge

2.2 Device Display Category & Capabilities

  • Device display category (DisplayCategory). Device display category is used to identify (device) specific categories, such as switch, plug, light, etc. This information will determine the UI display effect of the device in the gateway.
  • Device Capability. Device capability is used to describe the specific sub-functions of the device. Such as power control, brightness control, color temperature control, etc. A single device can support 1 or more capabilities.
    • Ability name. Identify a specific capability. For example power, and brightness.
    • Ability permission. Identify whether the capability supports reading or writing.
      • Read-only (read). Obtain the status value or configuration information related to this capability. For example, the states of power are on (open) and off (closed).
      • Write-only (write). Update the status value or configuration information related to the capability. For example, the power status can be changed to off through the interface.
      • Read&Write (readWrite). This capability supports both reading and writing.
				
					// Device capabilities description
{
  "capabilities": [
    // Power control
    {
      "capability": "power",
      "permission": "readWrite"
    },
    // Brightness adjustment
    {
      "capability": "brightness",
      "permission": "readWrite"
    }
  ]
}

// Obtain the status state structure returned by the device list interface
{
  "state":{
    "[capability]": {
        "[capabilityState]":[value]
    }
	}	
}

{
  "state": {
    "power": {
        "powerState": "on"
    },
    "brightness": {
        "brightness": 100
    }
	}
}


// Modify device state - power off
{
  "state": {
    "power": {
        "powerState": "off"
    }
	}
}
				
			

3.Web API

Types of Data

Type Description
string
String data type. UTF8 encoded.
number
Number data type. double-precision 64-bit binary format IEEE 754
int
Integral data type.
object
Object data type. JSON-compliant object string[] Array of string
string[]
Array of string
int[]
Array of integral
object[]
Content
bool
Boolean
date
Time string. String in ISO (ISO 8601 Extended Format) format: YYYY-MM-DDTHH:mm:ss.sssZ. The time zone is always UTC (Coordinated Universal Time), identified by a suffix "Z".

Generic Response Results

Attribute Type Optional Description
error
int
N

Error code:
0: Success
400: Parameter error
401: Authentication failed
500: Server exception

data
object
N
Response data body
message
string
N

Response description:
When error is equal to 0, the content is success.
When error is not equal to 0, it is a non-empty string, and the content is an error description.

Response Example:

				
					{
  "error": 0,
  "data": {
    "token": "376310da-7adf-4521-b18c-5e0752cfff8d"
  },
  "message": "success"
}
				
			
				
					{
  "error": 400,
  "data": {},
  "message": "invalid parameters"
}
				
			

Resource List

Item Description
Supported sound

- alert1 (Alarm Sound 1)
- alert2 (Alarm Sound 2)
- alert3 (Alarm Sound 3)
- alert4 (Alarm Sound 4)
- alert5 (Alarm Sound 5)
- doorbell1 (Doorbell Sound 1)
- doorbell2 (Doorbell Sound 2)
- doorbell3 (Doorbell Sound 3)
- doorbell4 (Doorbell Sound 4)
- doorbell5 (Doorbell Sound 5)
- alarm1 (Alarm Sound 1)
- alarm2 (Alarm Sound 2)
- alarm3 (Alarm Sound 3)
- alarm4 (Alarm Sound 4)
- alarm5 (Alarm Sound 5)

Supported deep

- bootComplete (System startup completed)
- networkConnected (Network connected)
- networkDisconnected (Network disconnected)
- systemShutdown (System shutdown)
-deviceDiscovered (Discover device)
- system Armed (System armed enable)
- system Disarmed (System armed disable)
- factoryReset (Reset device)

3.1 The Gateway Function

a. Access Token

Allow users to access token.
💡Notice: The token will be cleared after device reset.
  • URL/open-api/v1/rest/bridge/access_token
  • MethodGET
  • Header
    • Content-Type: application/json

Request Parameters: none
Successful data response:

Attribute Type Optional Description
token
string
N

The interface access token. It's valid for a long time, please save it.

Condition: User trigger the < command key > and access this interface within the valid time.

Status Code: 200 OK

Response Example:

				
					{
  "error": 401,
  "data": {},
  "message": "link button not pressed" 
}
				
			

b. Get the State of Gateway

Allow authorized users to obtain the status of gateway through this interface

  • URL: /open-api/v1/rest/bridge/runtime
  • Method: GET
  • Header:
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request Parameters: none
Successful data response:

Attribute Type Optional Description
ram_used
int
N

ram usage percent.[0-100]

cpu_used
int
N

cpu usage percentage. [0-100]

power_up_time
date
N
The last power-on time
  • Conditions: The request parameters are legal, and the user identity verification is passed.

    Status Code: 200 OK

Response Example:

				
					{
  "error": 0,
  "data": {
    "ram_used": 40,
    "cpu_used": 30,
    "power_up_time": "2022-10-12T02:58:09.989Z"
  },
  "message": "success"
}
				
			

c. Set the Gateway

Allow authorized users to set the gateway through this interface​

    • URL: /open-api/v1/rest/bridge/config
    • Method: PUT
    • Header: 
      • Content-Type: application/json
      • Autorization: Bearer <token>

Request parameters:

Attribute Type Optional Description
volume
int
Y

System volume. [0-100]

Successful data response:empty Object {}

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

Response Example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

3.2 Hardware Function

a. Restart Gateway (iHost)

Allow authorized user to restart the gateway through this interface

  • URL: /open-api/v1/rest/hardware/reboot
  • Method: POST
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request Parameters: none
Successful data response: empty Object {}

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

b. Speaker Control

Allow authorized users to control the speaker through this interface

    • URL: /open-api/v1/rest/hardware/speaker
    • Method: POST
    • Header: 
      • Content-Type: application/json
      • Authorization: Bearer <token>

Request parameters:

Attribute Type Optional Description
type
string
N

Optional parameters:

1.play_sound (play the sound)

2.play_beep (play the beep)

sound
SoundObject
Y (N if type is play_sound.)
The sound.
beep
BeepObject
Y (N if type is play_beep.)
The beep

SoundObject Object

Attribute Type Optional Description
name
string
N

The sound name. The supported values can be checked in [Resource List - Supported sound]

volume
int
N
The sound volume. [0-100]
countdown
int
N

The duration for the speaker to play the sound, and it will stop playing automatically after the time is up. Unit: second. [0,1799]

BeepObject Object

Attribute Type Optional Description
name
string
N

The beep name. The supported values can be checked in [Resource List - Supported deep]

volume
int
N
The beep volume. [0-100]

Successful data response: empty Object {}

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

Response Example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

3.3 Device Management Function

a. Supported Device Type

Device TypeValue
Plugplug
Switchswitch
Lightlight
Curtaincurtain
Door/Window SensorcontactSensor
Motion sensormotionSensor
Temperature sensortemperatureSensor
Humidity sensorhumiditySensor
Temperature and humidity sensortemperatureAndHumiditySensor
Water leak detectorwaterLeakDetector
Smoke detectorsmokeDetector
Wireless buttonbutton
Cameracamera
General sensorsensor

b. Supported Device Capabilities

Name

Description

Capability&Permission Example

Attribute(Status)

Protocol(Status inquiry&Control command)

power

Power control

[ { “capability”: “power”, “permission”: “readWrite” }]

{ “powerState”: “on”, //The field powerState indicates the power on/off state, which is required. string type, ”on“ means on, ”off“ means off, ”toggle“ means reverse.}

Turn on:{ “powerState”: “on”}Turn off:{ “powerState”: “off”}

toggle

Toggle control

[ // Single toggle example { “capability”: “toggle”, “permission”: “readWrite”, “name”: “1” }, // Multiple toggle example[ { “capability”: “toggle”, “permission”: “readWrite”, “name”: “1” }, { “capability”: “toggle”, “permission”: “readWrite”, “name”: “2” }]

{ “toggleState”: “on”, // The field “toggleState” indicates the toggle state of the {name} attribute of {device_id}. Required. String type. “on” means open, “off” means close, “toggle” means reverse.}

toggle format is special{ [capability] :{ [toggle-name]:{ [toggleState]:[value] } }}toggle 1 on, toggle 2 off{ “toggle”: { “1”: { “toggleState”: “on” }, “2”: { “toggleState”: “off” } }}

brightness

Brightness Control

[ { “capability”: “brightness”, “permission”: “readWrite” }]

{ “brightness”: 100, // The field “brightness” indicates the percentage of brightness. Int type. An integer with a value range of 0~100.}

0 is the darkest and 100 is the brightest. Set the brightness to 80%. { “brightness”: { “brightness”: 80, }}

color-temperature

Color temperature control

[ { “capability”: “color-temperature”, “permission”: “readWrite” }]

{ “colorTemperature”: 100, // 字段 “colorTemperature” Indicates the percentage of color temperature. Int type. An integer with a value range of 0~100. 0 means warm light, 50 means neutral light, and 100 means cold light.}

Set the Color temperature to 80%. { “color-temperature”: { “colorTemperature”: 50 }}

color-rgb

Color control

[ { “capability”: “color-rgb”, “permission”: “readWrite” }]

{ “red”: 255, // The field “red” represents red in the RGB color space. Required. Int type. An integer with a value range of 0~255. “green”: 0, // The field “green” represents green in the RGB color space. Required. Int type. An integer with a value range of 0~255. “blue”: 255, // The field “blue” represents blue in the RGB color space. Required. Int type. An integer with a value range of 0~255.}

Set the color.{ “color-rgb”: { “red”: 255, “green”: 0, “blue”: 255, }}

percentage

Percentage control

[ { “capability”: “percentage”, “permission”: “readWrite” }]

{ “percentage”: 100, // The field “percentage” represents a percentage of a certain degree, and the field percentageDelta can be selected as one of the two. int type. An integer with a value range of 0~100.}

Set to 40%{ “percentage”: { “percentage”: 40 }}

motor-control

Motor control

[ { “capability”: “motor-control”, “permission”: “readWrite” }]

{ “motorControl”: “stop”, // The field “motor-control“ indicates the open or close state of the motor。 Required. String type. Optional values, “open” (open), “close” (close), “stop” (stop), “lock” (lock).}

Turn on the motor{ “motor-control”: { “motorControl”: “open” }}

motor-reverse

Motor reverse

[ { “capability”: “motor-reverse”, “permission”: “readWrite” }]

{ “motorReverse”: true, // The field “motor-reverse” indicates the forward and reverse setting of the motor. Required. boolean type. true means forward rotation, false means reverse rotation.}

Set the motor reverse{ “motor-reverse”: { “motorReverse”: false }}

startup

Power on state (Power Supply)

[ { “capability”: “startup”, “permission”: “readWrite” }]

{ “startup”: “on” // String type. Required. Optional values, “on” (power on) ,“stay“ (stay power on),”off“ (power off)}

Set the power on state to always stay on when powered on{ “startup”: { “startup”: “on” }}

startup

Toggle power on state (can use with toggle)

[ { “capability”: “startup”, “permission”: “readWrite”, “components”: [ //Components that support power on retention. If the device with the toggle sub-channel needs to support power on retention, this field is mandatory. In particular, the toggle capability supports separate power-on retention settings. For details, see the update protocol of toggle. // toggle 1 power on state { “capability”: “toggle”, // String type. Required. Represents the name of the component capability that supports power-on retention. Only “power” and “toggle” are supported. “name”: “1”, // The field “name” indicates the attribute name that can be toggled. Required. String type. Only uppercase and lowercase letters and numbers are allowed. Taking the multi-channel switch as an example, it should be the channel number, that is, 1, 2, 3, 4 } ] }]

{ “startup”: “on” // String type. Required. Optional values, “on” (power on) ,“stay“ (stay power on),”off“ (power off)}

When channel 1 power on, the power state is always on{ “toggle”: { “1”: { “startup”: “on” } }}

camera-stream

Camera stream

{ “capability”: “camera-stream”, // The field “capability” indicates the name of the specific function. Rrequired. String type. camera-stream indicates the video streaming capability of the camera. “permission”: “read”, // The field “permission” indicates the use of specific functions. Required. String type. Optional values: “read” (readable), “write” (writable), “readWrite” (readable and writable)。 “configuration”: { “streamUrl”: “rtsp://<username>:<password>@<hostname>:<port>/streaming/channel01″, //stream url. String type. Required. } }

/

{ “camera-stream”: { “configuration”: { “streamUrl”: “rtsp://<username>:<password>@<hostname>:<port>/streaming/channel01″, // stream url. String type. Required. } }}

motor-clb

Motor calibration detection

[ { “capability”: “motor-clb”, “permission”: “read” }]

{ “motorClb”: “calibration”, // The field “motor-clb” indicates that the motor has been calibrated Required. String type, normal means normal mode (calibrated), calibration means it is being calibrated.}

The motor is being calibrated.{ “motor-clb”: { “motorClb”: “calibration” }}

detect

State detection

[ { “capability”: “detect”, “permission”: “read” }]

{ “detected”: true, // The field “detected” indicates the current detection result. Required. Boolean type, true indicates that the condition is detected, false indicates that the condition is not detected.}

The current state is the result detected.{ “detect”: { “detected”: true }}

humidity

Humidity detection

[ { “capability”: “humidity”, “permission”: “read” }]

{ “humidity”: 50, // The field “humidity” indicates the current relative humidity (percentage). Required. Int type. An integer with a value range of 0~100.}

Current humidity is 20{ “humidity”: { “humidity”: 20 }}

temperature

Temperature detection

[ { “capability”: “temperature”, “permission”: “read” }]

{ “temperature”: 26.5, // The field “temperature” indicates the current temperature. Required. Number type. The unit is Celsius.}

Current temperature is 20 Celsius{“temperature”: {“temperature”: 20}}

battery

Remaining battery detection

[{ “capability”: “battery”, “permission”: “read” }]

{ “battery”: 95, // The field “battery” indicates the percentage of remaining battery power. Required. Int type. An integer with a value range of -1~100. -1 means that the battery level is unknown.}

Current remaining power is 40.{ “battery”: { “battery”: 40 }}

press

Press detection

[ { “capability”: “press”, “permission”: “read” }]

{ “press”: “singlePress”, // The field “press” indicates the method of pressing the button. Required. String type. ptional values: “singlePress” (single-click/single short press), “doublePress” (double-click/two consecutive short presses), “longPress” (long press).}

A single click was detected{ “press”: { “press”: “singlePress” }}

rssi

Wireless signal strength detection

[ { “capability”: “rssi”, “permission”: “read” }]

{ “rssi”: -65, // The field “rssi” indicates the wireless signal strength (received signal strength indication). Required. int type. The unit is dBm, and the optional value is a negative integer.}

{ “rssi”: {“rssi”: -65 }}

c. Tags Description

  • The special key toggle is used to set the name of the toggle subcomponent.
				
					{
    "toggle": {
        '1': 'Chanel1',
        '2': 'Chanel2',
        '3': 'Chanel3',
        '4': 'Chanel4',
    },
}
				
			
  • The special key temperature_unit is used to set the temperature unit.
				
					{
    "temperature_unit":'c' // c-Celsius; f-Fahrenheit
}
				
			

d. Special Error Code and Description

Error Code

Description

110000

The sub-device/group corresponding to the id does not exist

110001

The gateway is in the state of discovering zigbee devices

110002

Devices in a group do not have a common capability

110003

Incorrect number of devices

110004

Incorrect number of groups

110005

Device Offline

110006

Failed to update device status

110007

Failed to update group status

110008

The maximum number of groups has been reached. Create up to 50 groups

110009

The IP address of the camera device is incorrect

110010

Camera Device Access Authorization Error

110011

Camera device stream address error

110012

Camera device video encoding is not supported

110013

Device already exists

110014

Camera does not support offline operation

110015

The account password is inconsistent with the account password in the RTSP stream address

110016

The gateway is in the state of discovering onvif cameras

110017

Exceeded the maximum number of cameras added

110018

The path of the ESP camera is wrong

e. Search for Sub-device

Allow authorized users to enable or disable gateway search for sub-devices through this interface

  • 💡Note: Only supports searching for Zigbee sub-devices now.
  • 💡Note: Zigbee sub-devices will be added automatically after searching. Do not need to use the “Manually Add Sub-devices” interface
  • URL: /open-api/v1/rest/devices/discovery
  • Method: PUT
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request parameters:

Attribute

Type

Optional

Description

enable

boolean

N

true (Start paring);

false (Pause pairing)

type

string

N

Searching Type: Zigbee

Successful data response:empty Object {}

Conditions: The request parameters are legal, and the user identity verification is passed.
Status Code: 200 OK
Response Example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

f. Manually Add the Sub-device

Allow authorized users to add a single sub-device through this interface

info💡 Note: Only RTSP Camera and ESP32 Camera are supported now

  • URL: /open-api/v1/rest/devices
  • Method: POST
  • Header
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request parameters:

Attribute

Type

Optional

Description

name

string

N

Sub-device name

display_category

string

N

Device Type. Only support camera。

capabilities

CapabilityObject[]

N

Capability list. When display_category = camera, capabilities only include camera-stream capabilities.

protocal

string

N

Device protocol. RTSP; ESP32-CAM

manufacturer

string

N

Manufacturer.

model

string

N

Device model

firmware_version

string

N

Device firmware version

CapabilityObject Object

Attribute

Type

Optional

Description

capability

string

N

Capability name. Only support “camera-stream”

permission

string

N

Device permission. Only support read.

configuration

CameraStreamConfigurationObject

Y

Camera stream configuration.

CameraStreamConfigurationObject Object

Attribute

Type

Optional

Description

stream_url

string

N

Stream url,<schema>://<hostname>:<port>/<username>:<password>@<service_path>,e.g.: rtsp://admin:[email protected]:554/streaming/channel01

 

schema optional

  • rtsp
  • http (For ESP32-Camera)

Note: Some cameras don’t have account numbers and passwords, so you can leave the username and password blank. 

Successful data response:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique serial number

Conditions: The request parameters are legal, and the user identity verification is passed.
Status Code: 200 OK
Response Example:

				
					{
  "error": 0,
  "data": {
    "serial_number": "serial_number"
  },
  "message": "success"
}
				
			

Failure data response: empty Object

Condition

  1. Camera stream address access error (format error, authorization failure, network exception, etc.)
  2. Device already exists
  3. If a single device fails to add, returns all devices fail to add.

Status Code: 200 OK
Error code
● 110009 Camera IP address error
● 110010 Camera access authorization error
● 110011 Camera stream address error
● 110012 The Camera video encoding does not support
● 110013 Device already exists
● 110014 Camera offline
● 110015 The account password is inconsistent with the account password in the RTSP stream address

Response Example:

				
					{
  "error": 110009,
  "data": {},
  "message": "camera ip access failed" 
}
				
			

g. Get List of Sub-devices

Allow authorized users to obtain the list of gateway sub-device through this interface.

  • URL: /open-api/v1/rest/devices
  • Method: GET
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request Parameters: none

Successful data response:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique serial number

third_serial_number

string

“N” when a third-party device is connected, otherwise “Y”

Third-party device unique serial number

service_address

string

“N” when a third-party device is connected, otherwise “Y”

Third-party service address

name

string

N

Device name, if it is not renamed, will be displayed by the front end according to the default display rules.

manufacturer

string

N

Manufacturer

model

string

N

Device model

firmware_version

string

N

Firmware version. Can be an empty string.

hostname

string

Y

Device hostname

mac_address

string

Y

Device mac address

app_name

(ihost >= 1.3.1)

string

Y

The name of the application. If app_name is filled in when obtaining access token, this field will be written to all subsequent devices accessed through this token.

display_category

string

N

Device category

capabilities

CapabilityObject[]

N

Device capabilities

protocol

string

“N” when a third-party device is connected, otherwise “Y”

Device protocol: zigbee, onvif, rtsp, esp32-cam

state

object

Y

Device state object. For state examples of different capabilities, please check 【Support Device Capabilities】

tags

object

Y

JSON format key-value, custom device information. The function is as follows:– Used to store device channels– Used to store temperature units– Custom information for other third-party devices

online

boolean

N

Online status: True for onlineFalse is offline

subnet

boolean

Y

Whether it is in the same subnet as the gateway

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

Response Example:

				
					{
  "error": 0,
  "data":{
    "device_list":  [
      {
        "serial_number": "ABCDEFGHIJK",
        "name": "My Device",
        "manufacturer": "SONOFF",
        "model": "BASICZBR3",
        "firmware_version": "1.1.0",
        "display_category": "switch",
        "capabilities": [
          {
            "capability": "power",
            "permission": "readWrite"
          },
          {
            "capability": "rssi",
            "permission": "read"
          }
        ],
        "protocal": "zigbee",
        "state": {
          "power": {
            "powerState": "on"
          }
        },
        "tags": {
          "key": "value"
        },
        "online": true
      }
    ],
  }
  "message": "success"
}
				
			

h. Update Specified Device Information or State

Allow authorized users to modify the basic information of sub-device and issue control commands through this interface.

  • URL: /open-api/v1/rest/devices/{serial_number}
  • Method: PUT
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request parameters:

Attribute

Type

Optional

Description

name

string

Y

Device name

tags

object

Y

JSON format key-value, custom device information.

state

object

Y

Device state object. For state examples of different capabilities, please check [Support Device Capabilities]

configuration

object

Y

Capability configuration information, currently only the camera_stream capability supports modification.

Successful data response:

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

Error Code:

  • 110000 The sub-device/group corresponding to the id does not exist
  • 110006 Failed to update device status

Response Example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			
				
					import axios from 'axios';

const serial_number = 'serial_number';
const access_token = 'access_token';

(async function main() {
    // turn on device
    await axios({
        url: `http://ihost.local/open-api/v1/rest/devices/${serial_number}`,
        method: 'PUT',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${access_token}`
        },
        data: {
            state: {
                power: {
                    powerState: 'on'
                }
            }
        }
    });
})()
				
			

i. Delete Sub-device

Allow authorized users to delete sub-devices through this interface.

  • URL: /open-api/v1/rest/devices/{serial_number}
  • Method: DELETE
  • Header:
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request Parameters: none

Successful data response:

Conditions: The request parameters are legal, and the user identity verification is passed.

Status Code: 200 OK

Response Example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

4. Third-party Device Access

4.1 Access Instruction

Device Access

Third-party gateway Access

Access steps

  1. Determine the classification of the device in the gateway. For the detail please check the [Supported Device Type].
  2. Determine the capabilities that the device can access. For the detail please check the [Supported Device Capabilities].
  3. Request the [Discovery Request] interface to add the device to the gateway.
    • Attention: You need to provide the service address for receiving the instructions issued by the gateway, which is used to receive the device control instructions issued by the gateway.
  1. If the status of the third-party device changes, you need to call the [Device States Change Report] interface to send the latest status back to the gateway.
  2. After adding, the third-party device will appear in the Device List, with most of the functions of the gateway (other non-third-party devices). The common open interfaces related to the device can be used normally.

💡Select the appropriate device category. The classification will affect the final display result of the UI after the device is connected to the gateway.

💡Choose the right device capability. The capability list will determine the status of the device state protocol.

Program Process

a. Device Access

b. Third-party Gateway Access

4.2 Access Example

Switch, Plug

Sync third-party devices

				
					// Request Example
URL:/open-api/v1/rest/thirdparty/event
Method:POST
Header:
  Content-Type: application/json
  Autorization: Bearer  <token>
Body:
{
  "event": {
    "header": {
      "name": "DiscoveryRequest",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "payload": {
      "endpoints": [
        {
          "third_serial_number": "third_serial_number_1",
          "name": "my plug",
          "display_category": "plug",
          "capabilities": [
            {
              "capability": "power",
              "permission" "readWrite"
            }
          ],
          "state": {
            "power": {
              "powerState": "on"
            }
          },
          "tags": {
            "key": "value"
          },
          "manufacturer": "manufacturer name",
          "model": "model name",
          "firmware_version": "firmware version",
          "service_address": "http://192.168.31.14/webhook"
        }
      ]
    }
  }
}
				
			
				
					//Response Example
{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {
    "endpoints": [
      {
        "third_serial_number": "third_serial_number",
        "serial_number": "serial number"
      }
    ]
  }
}
				
			

Report device status

				
					//Request Example
URL:/open-api/v1/rest/thirdparty/event
Method:POST
Header:
  Content-Type: application/json
  Autorization: Bearer  <token>
Body:

{
  "event": {
    "header": {
      "name": "DeviceStatesChangeReport",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number"
    },
    "payload": {
       "state": {
        "power": {
          "powerState": "on"
        }
      }
    }
  }
}
				
			
				
					//Response Example
{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

Report offline/online

				
					//Request Example
{
  "event": {
    "header": {
      "name": "DeviceStatesChangeReport",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number"
    },
    "payload": {
       "online": true
    }
  }
}
				
			
				
					//Response Example
{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

Receive the instructions about the gateway control device

				
					//Request Example
URL:<service address>
Method:POST
Header:
  Content-Type: application/json
B

{
  "directive": {
    "header": {
      "name": "UpdateDeviceStates",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "third_serial_number": "third_serial_number",
      "serial_number": "serial_number"
    },
    "payload": {
       "state": : {
         "power": {
           "powerState": "on"
         }
       }
    }
  }
}
				
			
				
					//Response Example
{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

Query device

				
					//Request Example
URL:/open-api/v1/rest/devices
Method:GET
Header:
  Content-Type: application/json
  Autorization: Bearer  <token>
Body: none
				
			
				
					//Response Example
{
  "error": 0,
  "data": {
    "device_list": [
      {
        "serial_number": "serial number",
        "third_serial_number": "third_serial_number",
        "name": "my plug",
        "manufacturer": "manufacturer name",
        "model": "model name",
        "firmware_version": "firmware version",
        "display_category": "plug",
        "capabilities": [
          {
            "capability": "power",
            "permission": "readWrite"
          }
        ],
        "state": {
          "power": {
            "powerState": "on"
          }
        },
        "tags": {
          "key": "value"
        },
        "online": true
      }
    ]
  },
  "message": "success"
}
				
			

4.3 Web API

Third-Party Request Gateway Interface

Request Format

Allow authorized users to send event requests to the gateway through this interface.

  • URL: /open-api/v1/rest/thirdparty/event
  • Method: POST
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request parameters:

Attribute

Type

Optional

Description

event

EventObject

N

Request event object structure information

EventObject Object

Attribute

Type

Optional

Description

header

HeaderObject

N

Request header structure information

endpoint

EndpointObject

Y

Request endpoint structure informationNote: This field is empty when sync a new device list.

payload

PayloadObject

N

Request payload structure information

HeaderObject Object

Attribute

Type

Optional

Description

name

string

N

Request name. optional parameter: DiscoveryRequest: Sync new devices DeviceStatesChangeReport: Device status update report DeviceOnlineChangeReport: Device online status report

message_id

string

N

Request message ID, UUID_V4

version

string

N

Request protocol version number. Currently fixed at 1

EndpointObject Object

Attribute

Type

Optional

Description

serial_number

string

N

Device unique serial number

third_serial_number

string

N

Third-party device unique serial number

tags

object

Y

JSON format key-value, custom device information. [Device Management Function] – [Tags Description]

PayloadObject Object:

According to the different header.name have different request structure.

Response Format

Status Code: 200 OK

Response parameters:

Attribute

Type

Optional

Description

header

HeaderObject

N

Response header structure information

payload

PayloadObject

N

Response payload structure information

HeaderObject Object

Attribute

Type

Optional

Description

name

string

N

Response header name. optional parameters:Response: Successful response ErrorResponse: Error response

message_id

string

N

Response header message ID, UUID_V4. Pass in the request message header.message_id here*If the request input parameter lacks message_id, this field will be an empty string when responding.

version

string

N

– Request protocol version number. Currently fixed at 1.

-Successful response–PayloadObject Object:

Depending on the request type, the response structure is different. For details, please refer to the specific request instruction document.

-Failure response–PayloadObject Object:

Attribute

Type

Optional

Description

type

string

N

Error Type: INVALID_PARAMETERS: Parameter error INTERNAL_ERROR :Service internal error

description

string

N

Error description

DiscoveryRequest

Sync a new device list

💡Note: After the device is synchronized to the gateway, it is online by default, that is, online=true. Subsequent online changes are completely dependent on synchronization with the third party through the DeviceOnlineChangeReport interface.

Request parameters:

EndpointObject Object

None

PayloadObject Object:

Attribute

Type

Optional

Description

endpoints

EndpointObject[]

N

Device List

EndpointObject Object:

Attribute

Type

Optional

Description

third_serial_number

string

N

Third-party device unique serial number

name

string

N

Device name

display_category

string

N

Device Category. See the [Supported Device Type] for details. *Three-party devices don’t support adding cameras now.

capabilities

CapabilityObject[]

N

Capabilities list

state

object

N

Initial state information

manufacturer

string

N

Manufacturer

model

string

N

Device model

tags

object

Y

JSON format key-value, custom device information:Be used to store device channelsBe used to store temperature unitsOther third-party custom data

firmware_version

string

N

Firmware version

service_address

string

N

Service address. Such as http://192.168.31.14/service_address

Example of Request :

				
					//Discovery
{
  "event": {
    "header": {
      "name": "DiscoveryRequest",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "payload": {
      "endpoints": [
        {
          "third_serial_number": "third_serial_number_1",
          "name": "my plug",
          "display_category": "plug",
          "capabilities": [
            {
              "capability": "power",
              "permission" "readWrite"
            }
          ],
          "state": {
            "power": {
              "powerState": "on"
            }
          },
          "tags": {
            "key": "value"
          },
          "manufacturer": "manufacturer name",
          "model": "model name",
          "firmware_version": "firmware version",
          "service_address": "http://192.168.31.14/service_address"
        }
      ]
    }
  }
}
				
			

Response parameters:

PayloadObject Object:

Attribute

Type

Optional

Description

endpoints

EndpointObject[]

N

Device list

EndpointObject Object:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique serial number

third_serial_number

string

N

Third-party device unique serial number

Example of a correct response:

				
					{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {
    "endpoints": [
      {
        "serial_number": "serial number",
        "third_serial_number": "third_serial_number"
      }
    ]
  }
}
				
			

Example of an error response:

				
					{
  "header": {
    "name": "ErrorResponse",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {
    "type": "INVALID_PARAMETERS",
    "description": "webhook cannot be empty" 
  }
}
				
			

DeviceStatesChangeReport

Device status update report

💡Note: Repeated status reports may falsely trigger associated scene.

Request parameters:

PayloadObject Object:

Attribute

Type

Optional

Description

state

object

N

Devicce state, See [Supported device cabilities] for detail

Example of Request :

				
					{
  "event": {
    "header": {
      "name": "DeviceStatesChangeReport",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number"
    },
    "payload": {
       "state": {
        "power": {
          "powerState": "on"
        }
      }
    }
  }
}
				
			

Response parameters:

PayloadObject Object: Empty Object

Example of a successful response:

				
					{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

DeviceOnlineChangeReport

Device online status report

💡Note: Repeated status reports may falsely trigger associated scene.

Request parameters:

PayloadObject Object:

Attribute

Type

Optional

Description

online

boolean

N

Device online status true: Online false: Offline

Example of Request :

				
					{
  "event": {
    "header": {
      "name": "DeviceStatesChangeReport",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number"
    },
    "payload": {
       "online": true
    }
  }
}
				
			

Response parameters:

PayloadObject Object: Empty Object

Example of a successful response:

				
					{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

Interface for sending command via device service address

💡Note:

  1. The third-party needs to respond to the gateway’s request within 3s. Otherwise will be timeout.

Request format

Gateway sends commands to the third-party through the device service address interface.

  • URL<service address>
  • MethodPOST
  • Header
    • Content-Type: application/json

Request parameters:

Attribute

Type

Optional

Description

directive

DirectiveObject

N

Directive object structure information

DirectiveObject Object

Attribute

Type

Optional

Description

header

HeaderObject

N

Request header structure information

endpoint

EndpointObject

N

Request endpoint structure information

payload

PayloadObject

N

Request payload structure information

HeaderObject Object

Attribute

Type

Optional

Description

name

string

N

Request name. Optional parameters:UpdateDeviceStates: Update device states

message_id

string

N

Request message ID, UUID_V4

version

string

N

Request protocol version number. Currently fixed at 1.

EndpointObject Object

Attribute

Type

Optional

Description

serial_number

string

N

Device unique serial number

third_serial_number

string

N

Third-party device unique serial number

tags

object

N

JSON format key-value, custom device information. [Device Management Function] – [Tags Description]

Example of Request :

				
					{
  "directive": {
    "header": {
      "name": "UpdateDeviceStates",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number",
      "third_serial_number": "third_serial_number",
      "tags": {}
    },
    "payload": {
      "state": {
        "power": {
          "powerState": "on"
        }
      }
    }
  }
}
				
			

Response format

HTTP Status Code: 200 OK

HTTP Response Attribute:

Attribute

Type

Optional

Description

event

EventObject

N

Response event structure information

EventObject Object

Attribute

Type

Optional

Description

header

HeaderObject

N

Request header structure information

payload

PayloadObject

N

Request payload structure information

HeaderObject Object

Attribute

Type

Optional

Description

name

string

N

Response header name. Optional parameter: UpdateDeviceStatesResponse: Update device states response ErrorResponse: Error response

message_id

string

N

Response header message ID, UUID_V4. Pass in the request message header.message_id here

version

string

N

Request protocol version number. Currently fixed at 1.

Successful response–PayloadObject Object:

Depending on the request type, the response structure is different. For details, please refer to the specific request instruction document.

Failure response–PayloadObject Object:

Attribute

Type

Optional

Description

type

string

N

Error type:– ENDPOINT_UNREACHABLE: Device is unreachable or offline– ENDPOINT_LOW_POWER: Device is in a low battery state and cannot be controlled– INVALID_DIRECTIVE: Command issued by the gateway is abnormal– NO_SUCH_ENDPOINT: Device doesn’t exist– NOT_SUPPORTED_IN_CURRENT_MODE: Current mode is not supported– INTERNAL_ERROR: Service internal error

 

Conditions: The request parameters are legal.

Status Code: 200 OK

Response parameters:

Successful response

				
					{
  "event": {
    "header": {
      "name": "UpdateDeviceStatesResponse",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "payload": {}
  }
}
				
			

Successful response

				
					{
  "event": {
    "header": {
      "name": "ErrorResponse",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "payload": {
      "type": "ENDPOINT_UNREACHABLE"
    }
  }
}
				
			

UpdateDeviceStates

Request parameters:

PayloadObject Object:

Attribute

Type

Optional

Description

state

object

N

Devicce state, See [Supported device cabilities] for detail.

Example of Request :

				
					{
  "directive": {
    "header": {
      "name": "UpdateDeviceStates",
      "message_id": "Unique identifier, preferably a version 4 UUID",
      "version": "1"
    },
    "endpoint": {
      "serial_number": "serial_number"
    },
    "payload": {
       "state": : {
         "power": {
           "powerState": "on"
         }
       }
    }
  }
}
				
			

 

Response parameters:

PayloadObject Object:empty Object

Example of Successful Response

				
					{
  "header": {
    "name": "Response",
    "message_id": "Unique identifier, preferably a version 4 UUID",
    "version": "1"
  },
  "payload": {}
}
				
			

Get Debug Logs Interface

Allow authorized users to obtain device debugging logs through this interface.

💡The Gateway log storage limit is as follows.

  1. event_log: Third-party report request log. A single device only saves the latest 3000 logs.
  2. directive_log: Gateway sends request logs. A single device only saves the latest 3000 logs.

💡You can download the interface access logs within the selected time range through this interface. The file name is {start timestamp}{end timestamp}{device serial number}.json, format is:

				
					[
{
"message_id": "message_id", //Message ID
"ip": "", // Remote IP. Required.
"req": {  // Request record.
"method": "GET", //  Request method. Required.
"url": "", // Request url. Required.
"body": "", // Request body, json string.Required. An empty string is allowed.
"header": "" , // Request header, json string. Required.
},
"res": { // Response record.
		"status_code":  200, // Status code. Required.
"body": "" , // Response body, json string.Required. An empty string is allowed.
"header": "" , // Response header, json string. Required.}
}
}
]
				
			
  • URL: /open-api/v1/rest/thirdparty/debug-log/{serial_number}
  • Method: GET
  • Header: 
    • Content-Type: application/json
    • Autorization: Bearer <token>

Request parameters:

Attribute

Type

Optional

Description

type

string

N

Log type:event_log: Third-party report request logdirective_log: The directive log sent by the gateway

from_index

int

Y

Start sequence number. Default is 0. An integer in the range [0,3000].

start_time

date

Y

Start timestamp, query specific time. If empty, default is 1 minute ago.

end_time

date

Y

End timestamp, query specific time. If iempty, default is current time.

limit

int

Y

The limit messages to be pulled, the range is an integer of [1,50]. If empty, default is 50.

order

string

Y

Sort by time range,DESC: Descending orderASC: Ascending orderDefault is DESC

Successful Response

  • Status Code: 200 OK

    Response header

    • Content-Type: application/octet-stream
    • Content-Disposition: attachment; filename={Start timestamp}{End timestamp}{device serial number}.json

Abnormal response

  • Status Code:

    • 400 Parameter error
    • 500 Gateway service exception

5. Server-sent events

5.1 Instruction

The gateway supports pushing messages to the client using SSE (Server-sent events). The client can monitor SSE messages after obtaining the access credentials and can parse the content of the push messages according to the development interface event notification protocol after receiving the messages pushed by the gateway. It should be noted that the gateway currently uses the HTTP1.1 protocol, so SSE on the browser side there will be a maximum of no more than 6 connections limit (Specific instructions can be found in the MDN EventSource interface description.)

5.2 Common Format

    • URL:/open-api/v1/sse/bridge
    • MethodGET

Request parameters:

Name

Type

Optional

Description

access_token

string

N

Access Token

Note:

When requesting an SSE connection, the gateway will check the access_token, and it will return an authentication failure error if it is invalid. { “error”: 401, “data”: {}, “message”: “invalid access_token”}

<Module Name>#<Version>#<Message Type>

For example:

Module Name: device

Version: v1,v2,v3

Message Type: addDevice

Example:

				
					const evtSource = new EventSource("http://ihost.local/open-api/v1/sse/bridge?access_token=xxxxxx");

evtSource.addEventListener('device#v1#addDevice',function (event) {
  try {
    const data = JSON.parse(event.data);
    console.log('data', data);
  } catch (error) {
    console.error(`parse error`,error);
  }
}
				
			

5.3 Device Module

a. Add Device Event

Module Name:device

Version:v1

Message Type:addDevice

event.data parameters

Name

Type

Optional

Description

payload

ResponseDeviceObjectObject – Interface the same with the Get Device List

N

device information

Example:
				
					//Event:device#v1#addDevice
// event.data
{
  "payload": {
    "serial_number": "ABCDEFGHIJK",
    "third_serial_number": "third_serial_number",
    "name": "My device",
    "manufacturer": "SONOFF",
    "model": "BASICZBR3",
    "firmware_version": "1.1.0",
    "display_category": "switch",
    "capabilities": [
      {
        "capability": "power",
        "permission": "readWrite"
      },
      {
        "capability": "rssi",
        "permission": "read"
      }
    ],
    "protocal": "zigbee",
    "state": {
      "power": {
        "powerState": "on"
      }
    },
    "tags": {
      "key": "value"
    },
    "online": true
  }
}
				
			

b. Update Device State Event

Module Name:device

Version:v1

Message Type:updateDeviceState

event.data parameters

Name

Type

Optional

Description

endpoint

EndpointObject

N

Device Information

payload

object。 Structure the same as the device state

N

Device Status Data

EndpointObject Object:

Parameter

Type

Optional

Description

serial_number

string

N

Device unique Serial Number

third_serial_number

string

Y

The unique serial number of the third-party device. For devices connected through open interfaces, this field is required.

 

Example:

				
					//Event:device#v1#updateDeviceState
// event.data
{
  "endpoint": {
    "serial_number": "serial_number",
    "third_serial_number": "third_serial_number"
  },
  "payload": {
    "power": {
      "powerState": "on"
    },
    "brightness": {
      "brightness": 100
    }
  }
}
				
			

c. Update Device Info Event

Module Name:device

Version:v1

Message Type:updateDeviceInfo

event.data parameters

Name

Type

Optional

Description

endpoint

EndpointObject

N

Device Information

payload

DeviceChangeObject

N

Device Change Data

EndpointObject Object:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique Serial Number

third_serial_number

string

Y

The unique serial number of the third-party device. For devices connected through open interfaces, this field is required.

DeviceChangeObject Object

Name

Type

Optional

Description

name

string

N

Device Name

Example:

				
					//Event:device#v1#updateDeviceInfo
// event.data
{
  "endpoint": {
    "serial_number": "serial_number",
    "third_serial_number": "third_serial_number"
  },
  "payload": {
    "name": "device name"
  }
}
				
			

d. Delete Device Event

Module Name:device

Version:v1

Message Type:deleteDevice

event.data parameters

Name

Type

Optional

Description

endpoint

EndpointObject

N

Device Information

EndpointObject Object:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique Serial Number

third_serial_number

string

Y

The unique serial number of the third-party device. For devices connected through open interfaces, this field is required.

Example:

				
					//Event:device#v1#deleteDevice
// event.data
{
  "endpoint": {
    "serial_number": "serial_number",
    "third_serial_number": "third_serial_number"
  }
}
				
			

e. Update Device Online Event

Module Name:device

Version:v1

Message Type:updateDeviceOnline

event.data parameters

Name

Type

Optional

Description

endpoint

EndpointObject

N

Device Information

payload

DeviceChangeObject

N

Device Change Data

EndpointObject Object:

Attribute

Type

Optional

Description

serial_number

string

N

Device unique Serial Number

third_serial_number

string

Y

The unique serial number of the third-party device. For devices connected through open interfaces, this field is required.

DeviceChangeObject Object

Name

Type

Optional

Description

online

boolean

N

Device Online Status

Example:

				
					//Event:device#v1#updateDeviceOnline
// event.data
{
  "endpoint": {
    "serial_number": "serial_number",
    "third_serial_number": "third_serial_number"
  },
  "payload": {
    "online": false
  }
}
				
			

6. Custom Cards

Supports displaying any content you want in cards, such as a webpage, image or any UI service. Just pass the URL of the content to display.

The UI card adapts its width and height automatically. The content is rendered using iFrame.

6.1 Usage

Key Points

  • UI Service Provider: Custom UI card service provider, responsible for creating custom UI cards in iHost.
  • Gateway Server: Gateway server side (iHost).
  • Gateway Open API Client: Gateway(iHost) Open API client.

Creating a Custom UI Card

  1. [UI Service Provider] Call the API to create a custom UI card in the gateway(iHost).
  2. [Gateway Server] After successful registration, the gateway stores basic UI card information (including size configuration, resource URL) and assigns an internal UI card ID.

Getting the UI Card List

  1. [UI Service Provider] Call the API to get the UI card list.
  2. [Gateway Server] Returns the stored UI card list, including custom UI cards created by others.

Modify Specific UI Card Config

  1. [UI Service Provider] Call the API to modify the card size configuration, resource URL.
  2. [Gateway Server] After successful modification, the gateway stores the updated UI card information (size config, resource URL).

Delete Custom UI Card

  1. [UI Service Provider] Call the API to delete the specified UI card.
  2. [Gateway Server] The gateway clears all information of the UI card.

6.2 Custom UI Card Module

Create Custom UI Card

Sent by UI Service Provider to gateway

  • URL: /open-api/v1/rest/ui/cards
  • Method: POST
  • Header:
    • Content-Type: application/json
    • Authorization: Bearer <token>

Request Parameters:

Parameter

Type

Allow Null

Description

label

string

Y

card label, describe the card. card alias.

cast_settings

CastSettingsObject

Y

cast card settings

web_settings

WebSettingsObject

N

web card settings

CastSettingsObject object:

Parameter

Type

Allow Null

Description

dimensions

DimensionObject []

N

size configuration, at lease one.

default

string

N

default size, optional size:

2×2

WebSettingsObject object:

Parameter

Type

Allow Null

Description

dimensions

DimensionObject []

N

size configuration, at lease one.

drawer_component

DrawerObject

Y

draw widget display settings

default

string

N

default size, optional size:

  • 1×1
  • 2×1

DimensionObject object:

Parameter

Type

Allow Null

Description

src

string

N

resource url.

example: http://example.html

size

string

N

size configuration.

CastSettingsObject optional size:

  • 2×2

WebSettingsObject optional size:

  • 1×1
  • 2×1

 

DrawerObject object:

Parameter

Type

Allow Null

Description

src

string

N

resource url.

example: http://example.html

Successful data response:

Parameter

Type

Allow Null

Description

id

string

N

UI card unique id

Condition: Valid request, authorized user.

Status code: 200 OK

Request example:

				
					{
  "label": "ewelink cube card",
  "cast_settings": {
    "dimensions": [
      {
        "src": "https://ewelink.cc/ewelink-cube/",
        "size": "2×2"
      }
    ],
    "default": "2×2"
  },
  "web_settings": {
    "dimensions": [
      {
        "src": "https://ewelink.cc/ewelink-cube/",
        "size": "2×1"
      },
      {
        "src": "https://ewelink.cc/ewelink-cube/",
        "size": "1×1"
      }
    ],
    "drawer_component": {
      "src": "https://ewelink.cc/ewelink-cube/"
    },
    "default": "2×1"
  }
}
				
			

Response example:

				
					{
  "error": 0,
  "data": {
    "id": "72cc5a4a-f486-4287-857f-b482d7818b16"
  },
  "message": "success"
}
				
			

Get UI Card List

  • URL/open-api/v1/rest/ui/cards
  • MethodGET
  • Header
    • Content-Type: application/json
    • Authorization: Bearer <token>

Request Parameters: None

Response Parameters:

Parameter

Type

Allow Null

Description

data

CardObject[]

N

UI card list

 

CardObject object:

Parameter

Type

Allow Null

Description

id

string

N

Card ID, unique identifier.

label

string

Y

Card label, describe the card. Card alias.

cast_settings

CastSettingsObject

Y

cast card settings

web_settings

WebSettingsObject

N

web card settings

app_name

string

Y

app name

 

CastSettingsObject object:

Parameter

Type

Allow Null

Description

dimensions

DimensionObject []

N

Size configurations, at least 1.

default

string

N

Default size, optional:

2×2

used

string

N

Current used size, optional:

2×2

 

WebSettingsObject object:

Parameter

Type

Allow Null

Description

dimensions

DimensionObject []

N

Size configurations, at least 1.

drawer_component

DrawerObject

Y

Drawer widget display settings

default

string

N

Default size, optional:

  • 1×1
  • 2×1

used

string

N

Current used size, optional:

  • 1×1
  • 2×1

 

DimensionObject object:

Parameter

Type

Allow Null

Description

src

string

N

Resource URL e.g.

http://example.html

size

string

N

Size, optional:

  • 1×1
  • 2×1

note, currently CAST card supports only 2×2

 

DrawerObject object:

Parameter

Type

Allow Null

Description

src

string

N

Resource URL e.g.

http://example.html

Response example:

				
					{
  "error": 0,
  "data": [
    {
      "id": "72cc5a4a-f486-4287-857f-b482d7818b16",
      "label": "ewelink cube card",
      "cast_settings": {
        "dimensions": [
          {
            "src": "https://ewelink.cc/ewelink-cube/",
            "size": "2×2"
          }
        ],
        "default": "2×2",
        "used": "2×2"
      },
      "web_settings": {
        "dimensions": [
          {
            "src": "https://ewelink.cc/ewelink-cube/",
            "size": "2×1"
          },
          {
            "src": "https://ewelink.cc/ewelink-cube/",
            "size": "1×1"
          }
        ],
        "drawer_component": {
          "src": "https://ewelink.cc/ewelink-cube/"
        },
        "default": "2×1",
        "used": "2×1"
      },
      "appName": "ewelink-cube"
    }
  ],
  "message": "success"
}
				
			

Modify Specified UI Card Config

Allow authorized users to modify created UI cards via this API. Custom UI service providers can only modify their own cards.

  • URL/open-api/v1/rest/ui/cards/{id}
  • MethodPUT
  • Header
    • Content-Type: application/json
    • Authorization: Bearer <token>

Request Parameters:

Parameter

Type

Allow Null

Description

label

string

Y

Card label, describe the card. Card alias.

cast_settings

CastSettingsObject

Y

cast card settings

web_settings

WebSettingsObject

Y

web card settings

CastSettingsObject object:

Parameter

Type

Allow Null

Description

used

string

Y, at least one of used and src

Current used size, optional:

  • 2×2

 

src

string

Y, at least one of used and src

Resource URL e.g.

http://example.html

WebSettingsObject object:

Parameter

Type

Allow Null

Description

used

string

Y, at least one of used and src

Current used size, optional:

  • 1×1
  • 2×1

src

string

Y, at least one of used and src

Resource URL e.g.

http://example.html

 

Successful data response:

Condition: Valid request, authorized user, modifying own UI card.

Status code: 200 OK

Error codes:

  • 406 Not authorized

Response example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

Request example:

				
					{
  "cast_settings": {
    "used": "2×2"
  },
  "web_settings": {
    "used": "1×1"
  }
}
				
			

Delete Custom UI Card

Allow authorized users to delete created UI cards via this API. Custom UI service providers can only delete their own cards.

  • URL: /open-api/v1/rest/ui/cards/{id}
  • Method: DELETE
  • Header:
    • Content-Type: application/json
    • Authorization: Bearer <token>

 

Request Parameters: None

 

Successful data response:

Condition: Valid request, authorized user, deleting own UI card.

Status code: 200 OK

Error codes:

  • 406 Not authorized

Response example:

				
					{
  "error": 0,
  "data": {},
  "message": "success"
}
				
			

This website use cookies to ensure you get the best experience on our website.