The HOOBS™ API exposes methods that allows you to monitor, configure and control your device.

Notes about this documentation. URLs are prefixed with either a GET, POST, PUT or DELETE these document what HTTP verb the request accepts. If the request requires a body it will be prefixed with a Body:.

Authentication

This is the main entry point to the API. You can use this to authenticate and receive an authorization token.

Status
Some users choose to enable authentication. To determine this you can access the status command.

Request

GET /api/auth

Response

{
    "state": "enabled"
}

Available states.

  • uninitilized
  • enabled
  • disabled

Disable
You can disable the auth system using this call.

Note. You can only disable uninitialized instances.

Request

POST /api/auth/disable

Response

{
    "state": "disabled"
}

Login
Creates a session for the given user.

Request

POST /api/auth/logon
Body: application/json

Body

{
    "username": "luke_skywalker",
    "password": "MayTheForceBeWithYou",
    "remember": false
}

Response

{
    "token": "THVrZSBTa3l3YWxrZXI="
}

The token will be null if authentication has failed. The token can now be used in the authroization header for all other requests to the API.

Logout
Removes the current user’s session from the server.

Request

GET /api/auth/logout

Response

{
    "success": true
}

Validate
Validates the current session

Request

GET /api/auth/validate

Response

{
    "valid": true
}

Users

List all users.

Request

GET /api/users

Response

[{
    "id": 1,
    "username": "admin",
    "name": "Administrator",
    "permissions": {
        "accessories": true,
        "controller": true,
        "bridges": true,
        "terminal": true,
        "plugins": true,
        "users": false,
        "reboot": true,
        "config": true
    }
}]

Create
Create a user

Request

PUT /api/users
Body: application/json

Body

{
    "name": "Full Name",
    "username": "username",
    "password": "password",
    "permissions": {
        "accessories": true,
        "controller": true,
        "bridges": true,
        "terminal": true,
        "plugins": true,
        "users": false,
        "reboot": true,
        "config": true
    }
}

User

Fetch a single user.

Request

GET /api/users/:id

Response

{
    "id": 1,
    "username": "admin",
    "name": "Administrator",
    "permissions": {
        "accessories": true,
        "controller": true,
        "bridges": true,
        "terminal": true,
        "plugins": true,
        "users": false,
        "reboot": true,
        "config": true
    }
}

Update
Updates a user record.

Request

POST /api/users/:id
Body: application/json

Body

{
    "name": "Full Name",
    "username": "username",
    "password": "password",
    "permissions": {
        "accessories": true,
        "controller": true,
        "bridges": true,
        "terminal": true,
        "plugins": true,
        "users": false,
        "reboot": true,
        "config": true
    }
}

Delete
Deletes a user.

Request

DELETE /api/users/:id

Version

Fetches information about the hoobsd service

Request

GET /api

Response

{
    "application": "hoobsd",
    "version": "4.0.37",
    "authentication": {
        "state": "/api/auth",
        "login": "/api/auth/logon",
        "validate": "/api/auth/validate"
    },
    "network": [{
        "interface": "eth0",
        "ip_address": "127.0.0.1",
        "mac_addr": "CC:22:3D:E3:CE:30"
    }]
}

Service

Fetches the current status of the hub and bridges

Request

GET /api/status

Response

{
    "product": "box",
    "mdns": true,
    "broadcast": "hoobs",
    "version": "4.0.37",
    "current": "4.0.37",
    "upgraded": true,
    "cli_version": "4.0.17",
    "cli_current": "4.0.17",
    "cli_upgraded": true,
    "gui_version": "4.0.36",
    "gui_current": "4.0.37",
    "gui_upgraded": false,
    "node_version": "14.16.0",
    "node_current": "14.16.0",
    "node_upgraded": true,
    "bridges": [{
        "version": "4.0.37",
        "running": true,
        "status": "running",
        "uptime": 123456,
        "product": "hoobsd",
        "bridge_name": "testbridge",
        "bridge_username": "CC:22:3D:E3:CE:30",
        "bridge_port": 51826,
        "setup_pin": "123-45-67",
        "setup_id": "//:123456",
        "bridge_path": "/var/lib/hoobs/testbridge"
    }],
    "cpu": {
        "avgLoad": 22,
        "currentLoad": 22,
        "currentLoadUser": 22,
        "currentLoadSystem": 22,
        "currentLoadNice": 22,
        "currentLoadIdle": 22,
        "currentLoadIrq": 22
    },
    "memory": {
        "total": 4028,
        "free": 1024,
        "used": 1024,
        "active": 1024,
        "buffcache": 1024,
        "buffers": 1024,
        "cached": 1024,
        "slab": 1024,
        "available": 1024,
        "swaptotal": 1024,
        "swapused": 1024,
        "swapfree": 1024
    },
    "temp": {
        "main": 42,
        "cores": 42,
        "max": 42,
        "socket": 42,
        "chipset": 42
    }
}

Hostname

Fetch or set the current mDNS broadcast hostname.

Request

GET /api/system/hostname

Response

{
    "hostname": "hoobs"
}

Update
Change the broadcasted hostname

Request

POST /api/system/hostname
Body: application/json

Body

{
    "hostname": "hoobs-second"
}

Response

{
    "success": true
}

System

Fetch basic system information

Request

GET /api/system

Response

{
    "mac": "CC:22:3D:E3:CE:30",
    "ffmpeg_enabled": false,
    "system": {
        "manufacturer": "HOOBS.org",
        "model": "P3X-995",
        "version": "4.0.15",
        "sku": "0-9999-9999-0"
    }
}

CPU
Fetch CPU information.

Request

GET /api/system/cpu

Response

{
    "information": {
        "manufacturer": "Cortex",
        "brand":    "Cortex A5",
        "speed": "3.40",
        "speedMin": "0.80",
        "speedMax": "3.90",
        "governor": "powersave",
        "cores": 8,
        "physicalCores": 4,
        "processors": 1,
        "socket": "LGA1356",
        "vendor": "123456",
        "family": "ARM",
        "model": "A5",
        "voltage": 1.3
    },
    "speed": {
        "avg": "3.40",
        "min": "3.40",
        "max": "3.40",
        "cores": 4
    },
    "load": {
        "avgLoad": 22,
        "currentLoad": 22,
        "currentLoadUser": 22,
        "currentLoadSystem": 22,
        "currentLoadNice": 22,
        "currentLoadIdle": 22,
        "currentLoadIrq": 22
    },
    "cache": {
        "l1d": 123,
        "l1i": 123,
        "l2": 123,
        "l3": 123
    }
}

Memory
Fetch memory information.

Request

GET /api/system/memory

Response

{
    "information": [{
        "size": 1234,
        "bank": "A2",
        "type": "DDR4",
        "clockSpeed": 1.3,
        "formFactor": "DIMM",
        "manufacturer": "Samsung",
        "partNum": "123456",
        "serialNum": "123456",
        "voltageConfigured": 1.3,
        "voltageMin": 1.0,
        "voltageMax": 1.6
    }],
    "load": {
        "total": 4028,
        "free": 1024,
        "used": 1024,
        "active": 1024,
        "buffcache": 1024,
        "buffers": 1024,
        "cached": 1024,
        "slab": 1024,
        "available": 1024,
        "swaptotal": 1024,
        "swapused": 1024,
        "swapfree": 1024
    }
}

Network
Fetch network information.

Request

GET /api/system/network

Response

[
    "127.0.0.1"
]

File System
Fetch disk information.

Request

GET /api/system/filesystem

Response

[{
    "fs": "root",
    "type": "ext4",
    "size": 123456,
    "used": 123456,
    "available": 123456,
    "use": 123456,
    "mount": "/"
}]

Activity
Fetch process information.

Request

GET /api/system/activity

Response

{
    "total": 4028,
    "free": 1024,
    "used": 1024,
    "active": 1024,
    "buffcache": 1024,
    "buffers": 1024,
    "cached": 1024,
    "slab": 1024,
    "available": 1024,
    "swaptotal": 1024,
    "swapused": 1024,
    "swapfree": 1024
}

Temprature
Fetch CPU temprature.

Request

GET /api/system/temp

Response

{
    "main": 42,
    "cores": 42,
    "max": 42,
    "socket": 42,
    "chipset": 42
}

Backup
Generates a backup file.

Request

GET /api/system/backup

Response

{
    "success": true,
    "filename": "hoobs.backup",
}

Backups
Fetch a list of stored backups.

Request

GET /api/system/backup/catalog

Response

[{
    "date": "",
    "filename": "hoobs.backup"
}]

Files are located in the http://[ip address]/backups/

Restore
Restore from a stored backup.

Request

GET /api/system/restore

Upload a backup file and restore.

Request

POST /api/system/restore
Body: multipart/binary

Upgrade
Upgrade to latest software.

Request

POST /api/system/upgrade

Reboot
Reboot the device.

Request

PUT /api/system/reboot

Shutdown
Shutdown the device.

Request

PUT /api/system/shutdown

Factory Reset
Factorey reset.

Request

PUT /api/system/reset

This will remove all plugins and configs. It will not delete stored backups.

Log

Fetch the log.

Request

GET /api/log/:tail

Tail is not required. It will default to 500

Response

{
    "level": "info",
    "bridge": "testbridge",
    "display": "Test Bridge",
    "timestamp": 123456,
    "plugin": "homebridge-dummy",
    "prefix": "Dummy",
    "message": "Dummy plugin loaded"
}

Hub

Fetches the hub configuration.

Request

GET /api/config

Response

{
    "api": {
        "origin": "*",
        "gui_path": "/usr/lib/hoobs"
    }
}

Reconfigure
Update the hub configuration.

Request

POST /api/config
Body: application/json

Body

{
    "api": {
        "origin": "*",
        "gui_path": "usri/lib/hoobs"
    }
}

Cache
Fetches the cache from all bridges.

Request

GET /api/cache

Response

[{
    "bridge": "testbridge",
    "parings": [{
        "id": "",
        "version": "xx.xx",
        "username": "AB:CD:EF:GH:IJ",
        "display": "",
        "category": "",
        "setup_pin": "xxx-xxx-xx",
        "setup_id": "://",
        "clients": "",
        "permissions": "rw",
    }],
    "accessories": [],
}]

Purge
This clears the hub cache.

Request

DELETE /api/cache/purge

Note. This clears the hub cache, not the bridge cache. The hub caches information like sessions, plugin definitions, etc…

Extensions

List extensions and their status.

Request

GET /api/extentions

Response

{
    "feature": "gui",
    "description": "enables the gui",
    "enabled": true
}

Note. Extentions are different from plugins. Extentions act on the hub not the bridge.

Enable
Enable an extension.

Request

PUT /api/extentions/:name

Response

{
    "success": true
}

Disable
Disable and extension.

Request

DELETE /api/extentions/:name

Response

{
    "success": true
}

Bridges

List all bridges.

Request

GET /api/bridges

Response

[{
    "id": "testbridge",
    "type": "bridge",
    "display": "Test Bridge",
    "port": 50826,
    "pin": "123-45-67",
    "username": "AB:CD:EF:GH:IJ:KL",
    "ports": {
        "start": 2345,
        "end": 3345
    },
    "autostart": 0,
    "advertiser": "bonjour"
}]

Create
Creates a bridge.

Request

PUT /api/bridges
Body: application/json

Body

{
    "name": "Test Bridge",
    "port": 51826,
    "pin": "031-45-154",
    "username": "AB:CD:EF:GH:IJ:KL",
    "autostart": 0,
    "advertiser": "bonjour"
}

Count
Return a bridge count.

Request

GET /api/bridges/count

Response

{
    "bridges": 2
}

Import
Upload and create a bridge from an export file.

Request

POST /api/bridges/import
Body: multipart/binary

Bridge

Update a single bridge.

Request

GET /api/bridge/:bridge

Response

{
    "id": "testbridge",
    "type": "bridge",
    "display": "Test Bridge",
    "port": 50826,
    "pin": "123-45-67",
    "username": "AB:CD:EF:GH:IJ:KL",
    "ports": {
        "start": 2345,
        "end": 3345
    },
    "autostart": 0,
    "advertiser": "bonjour"
}

Update
Edit a bridge record.

Request

POST /api/bridge/:id
Body: application/json

Body

{
    "display": "Test Bridge",
    "pin": "031-45-154",
    "username": "AB:CD:EF:GH:IJ:KL",
    "autostart": 0,
    "advertiser": "bonjour"
}

Delete
Remove a bridge.

Request

DELETE /api/bridge/:id

Note. Deleting a bridge also removes plugins and stops it from running.

Ports
Update the accessory ports.

Request

POST /api/bridge/:id/ports
Body: application/json

Body

{
    "start": 2345,
    "end": 3345
}

Configuration
Fetches a bridge configuration.

Request

GET /api/config/:bridge

Response

{
    "accessories": [],
    "platforms": [],
}

Reconfigure
Update a bridge configuration.

Request

POST /api/config/:bridge
Body: application/json

Body

{
    "accessories": [],
    "platforms": [],
}

Plugins
Fetches a list of plugins on a bridge.

Request

GET /api/plugins/:bridge

Response

[{
    "identifier": "plugin-name",
    "scope": "scope",
    "name": "name",
    "icon": "http://icon.url",
    "alias": "Plugin Alias",
    "version": "1.0.1",
    "latest": "1.0.1",
    "certified": false,
    "rating": 4.0,
    "keywords": ["plugin-keywords"],
    "details": [{
        "alias": "Plugin Alias",
        "type": "platform"
    }],
    "schema": {},
    "description": "plugin description",
}]

Cache
Fetches a bridge configuration.

Request

GET /api/cache/:bridge

Response

{
    "parings": [{
        "id": "",
        "version": "xx.xx",
        "username": "AB:CD:EF:GH:IJ",
        "display": "",
        "category": "",
        "setup_pin": "xxx-xxx-xx",
        "setup_id": "://",
        "clients": "",
        "permissions": "rw",
    }],
    "accessories": [],
}

Purge
Update a bridge configuration.

Request

DELETE /api/cache/:bridge/purge/:uuid

The UUID field is not required. If it is not defined this will purge all accessories and parings.

Export
Export a bridge.

Request

GET /api/bridge/:id/export

Response

{
    "success": true,
    "filename": "testbridge.backup"
}

Start
Starts a stopped bridge.

Request

POST /api/bridge/:bridge/start

Stop
Stops a running bridge.

Request

POST /api/bridge/:bridge/stop

Restart
Restarts a running or stopped bridge.

Request

POST /api/bridge/:bridge/restart

Plugins

List all installed plugins.

Request

GET /api/plugins

Response

[{
    "bridge": "testbridge",
    "identifier": "plugin-name",
    "scope": "scope",
    "name": "name",
    "icon": "http://icon.url",
    "alias": "Plugin Alias",
    "version": "1.0.1",
    "latest": "1.0.1",
    "certified": false,
    "rating": 4.0,
    "keywords": ["plugin-keywords"],
    "details": [{
        "alias": "Plugin Alias",
        "type": "platform"
    }],
    "schema": {},
    "description": "plugin description",
}]

Install
Install a plugin on a bridge.

Request

PUT /api/plugins/:bridge/:name

Response

{
    "success": true
}

Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash like @hoobs/plugin. The name field also supports versions @hoobs/[email protected]. If a version is not set it defaults to latest.

Uninstall
Uninstall a plugin from a bridge.

Request

DELETE /api/plugins/:bridge/:name

Response

{
    "success": true
}

Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash like @hoobs/plugin.

Update
Update a plugin on a bridge.

Request

POST /api/plugins/:bridge/:name

Response

{
    "success": true
}

Note. The name field supports scopes, so if you have a scoped plugin just enter it complete with the slash like @hoobs/plugin. The name field also supports versions @hoobs/[email protected]. If a version is not set it defaults to latest.

Plugin

This section is for UI plugins included with a plugin or via a sidecar. A plugin consists of a routes.js file and a ui folder that contains static files like index.html and app.js. Refer to the UI Plugin Documentation for further details.

Static
Fetch a static file.

Request

GET /ui/plugin/:identifier/*

This returns any static file included with the plugin. It will default to index.html is no file is defined.

Note. If you try to access index.html without a file the trailing slash is important, and must be included.

Action
This section is for UI plugins included with a plugin or via a sidecar.

Request

POST /api/plugin/:identifier/:action
Body: application/json

The response and body is determined by the registered route from the plugin’s routes.js file.

Note. Access to the bridge is restricted. If you need to modify values in the bridge use either the API, SDK, or your main plugin.

Accessories

Fetches a list of rooms and accessories.

Request

GET /api/accessories

Response

[{
    "id": "livingroom",
    "name": "Living Room",
    "sequence": 1,
    "devices": 5,
    "accessories": [{
        "accessory_identifier": "123456",
        "bridge_identifier": "123456",
        "bridge": "testbridge",
        "plugin": "plugin-name",
        "room": "livingroom",
        "sequence": 1,
        "hidden": false,
        "type": "light",
        "characteristics": [{
            "type": "on",
            "service_type": "on",
            "value": true,
            "format": "boolean",
            "unit": 1,
            "max_value": 1,
            "min_value": 0,
            "min_step": 1,
            "read": true,
            "write": true
        }],
        "manufacturer": "Lutron",
        "model": "Caseta",
        "name": "Main Light",
        "serial_number": "123456",
        "firmware_revision": "123456",
        "hardware_revision": "123456",
        "icon": "floor-lamp"
    }]
}]

Get
Fetch a single accessory.

Request

GET /api/accessory/:bridge/:id

Response

{
    "id": "livingroom",
    "name": "Living Room",
    "sequence": 1,
    "devices": 5,
    "accessories": [{
        "accessory_identifier": "123456",
        "bridge_identifier": "123456",
        "bridge": "testbridge",
        "plugin": "plugin-name",
        "room": "livingroom",
        "sequence": 1,
        "hidden": false,
        "type": "light",
        "characteristics": [{
            "type": "on",
            "service_type": "on",
            "value": true,
            "format": "boolean",
            "unit": 1,
            "max_value": 1,
            "min_value": 0,
            "min_step": 1,
            "read": true,
            "write": true
        }],
        "manufacturer": "Lutron",
        "model": "Caseta",
        "name": "Main Light",
        "serial_number": "123456",
        "firmware_revision": "123456",
        "hardware_revision": "123456",
        "icon": "floor-lamp"
    }]
}

Stream
Fetches a video stream for a given camera accessory. This is not available for non camera types.

This requires that the FFMpeg extension is installed, and only supports camera accessories configured with an RTSP stream, for example the Camera FFMpeg plugin.

Request

GET /api/accessory/:bridge/:id/stream

Response
A binary mp4 stream that can be consumed by most video players.

Snapshot
This fetches a snapshot from a camera accessory. This is not available for non camera types.

Request

GET /api/accessory/:bridge/:id/snapshot

Response

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV/TSkWqgn
YQdchQnSyIijhKFYtgobQVWnUwufRDaNKQpLg4Cq4FBz8Wqw4uzro6uAqC4AeIm5uToouU+L+k0CLGg+N+vLv3uHsHCPUy
U83AOKBqlpGKx8RsbkUMviKAPgQxhB6JmXoivZCB5/i6h4+vd1Ge5X3uz9Gt5E0G+ETiWaYbFvE68fSmpXPeJw6zkqQQnx
OPGXRB4keuyy6/cS46LPDMsJFJzRGHicViG8ttzEqGSjxFHFFUjfKFrMsK5y3OarnKmvfkLwzlteU012kOI45FJJCECBlV
bKAMC1FaNVJMpGg/5uEfdPxJcsnk2gAjxzwqUCE5fvA/+N2tWZiccJNCMaDjxbY/RoDgLtCo2fb3sW03TgD/M3CltfyVOj
DzSXqtpUWOgN5t4OK6pcl7wOUOMPCkS4bkSH6aQqEAvJ/RN+WA/luga9XtrbmP0wcgQ10t3QAHh8BokbLXPN7d2d7bv2ea
/f0AO8NykaOwp3oAAAAGYktHRAAAAK0A+eyCP/QAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflBBIHHAkfKeo5AA
AAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAAxJREFUCNdjYKATAAAAaQABwB3y+AAAAABJRU5ErkJg

This returns a base64 encoded image, if the camara is unavailable, the image will be undefined.

Characteristics
Fetch an array of characteristics for a given accessory.

Request

GET /api/accessory/:bridge/:id/characteristics

Response

[
    "on",
    "brightness",
    "hue",
    "saturation"
]

Update
Updates an accessory including device control.

Request

PUT /api/accessory/:bridge/:id/:service
Body: application/json

Body

{
    "value": true
}

You can also change the name, room, sequence, or hidden field using this method.

Hidden
Shows a list of hidden accessories.

Request

GET /api/accessories/hidden

Response

[{
    "id": "livingroom",
    "name": "Living Room",
    "accessories": [{
        "accessory_identifier": "123456",
        "bridge_identifier": "123456",
        "bridge": "testbridge",
        "plugin": "plugin-name",
        "room": "livingroom",
        "sequence": 1,
        "hidden": true,
        "type": "light",
        "manufacturer": "Lutron",
        "model": "Caseta",
        "name": "Main Light",
        "serial_number": "123456",
        "firmware_revision": "123456",
        "hardware_revision": "123456",
        "icon": "floor-lamp"
    }]
}]

Rooms

Fetches a list of rooms.

Request

GET /api/rooms

Response

[{
    "id": "livingroom",
    "name": "Living Room",
    "sequence": 1,
    "devices": 5,
    "types": ["light"],
    "characteristics": ["on"]
}]

Create
Creates a room.

Request

PUT /api/room
Body: application/json

Body

{
    "name": "Living Room",
    "sequence": 1
}

Room

Fetch a single room.

Request

GET /api/room/:id

Response

{
    "id": "livingroom",
    "name": "Living Room",
    "sequence": 1,
    "devices": 5,
    "accessories": [{
        "accessory_identifier": "123456",
        "bridge_identifier": "123456",
        "bridge": "testbridge",
        "plugin": "plugin-name",
        "room": "livingroom",
        "sequence": 1,
        "hidden": false,
        "type": "light",
        "characteristics": [{
            "type": "on",
            "service_type": "on",
            "value": true,
            "format": "boolean",
            "unit": 1,
            "max_value": 1,
            "min_value": 0,
            "min_step": 1,
            "read": true,
            "write": true
        }],
        "manufacturer": "Lutron",
        "model": "Caseta",
        "name": "Main Light",
        "serial_number": "123456",
        "firmware_revision": "123456",
        "hardware_revision": "123456",
        "icon": "floor-lamp"
    }],
    "types": ["light"],
    "characteristics": ["on"]
}

Update
Updates a room, including device control like all off.

Request

PUT /api/room/:id/:service
Body: application/json

Body

{
    "value": true
}

You can also change the name, or sequence using this method.

Remove
Removes a room.

Request

DELETE /api/room/:id

Themes

Fetch a theme.

Request

GET /api/theme/:name

Response

{
    "name": "custom",
    "display": "Custom",
    "auto": false,
    "mode": "dark",
    "transparency": "blur(6px)",
    "application": {
        "text": {
            "default": "#999",
            "highlight": "#fff",
            "input": "#fff",
            "error": "#e30505",
        },
        "background": "#141414",
        "highlight": "#feb400",
        "accent": "#f5ff66",
        "dark": "#252525",
        "drawer": "#111111d2",
        "input": {
            "background": "#262626",
            "accent": "#444",
        },
        "border": "#252525",
    },
    "button": {
        "background": "#252525",
        "text": "#fff",
        "border": "#1a1a1a",
        "primary": {
            "background": "#feb400",
            "text": "#fff",
            "border": "#feb400",
        },
        "light": {
            "background": "#fff",
            "text": "#777",
            "border": "#e5e5e5",
        },
    },
    "modal": {
        "text": {
            "default": "#999",
            "input": "#fff",
            "error": "#e30505",
        },
        "background": "#111111d2",
        "dark": "#000",
        "form": "#11111100",
        "mask": "#14141400",
        "highlight": "#feb400",
        "input": "#262626",
        "accent": "#303030",
        "border": "#252525",
    },
    "widget": {
        "text": {
            "default": "#999",
        },
        "background": "#181818d2",
        "highlight": "#feb400",
        "border": "#252525",
    },
    "menu": {
        "text": {
            "default": "#b4b4b4",
            "highlight": "#fff",
        },
        "background": "#1111119d",
        "highlight": "#1d1d1d9d",
        "border": "#1d1d1d",
    },
    "navigation": {
        "text": {
            "default": "#999",
            "highlight": "#fff",
            "active": "#feb400",
        },
        "background": "#141414",
        "highlight": "#feb400",
        "border": "#4b4b4b",
    },
    "accessory": {
        "text": "#ffffff3d",
        "background": "#302f2f",
        "highlight": "#fff",
        "input": "#414141",
        "border": "#444",
    },
    "backdrop": "url('/defaults/backdrops/default.jpg')",
    "elevation": {
        "default": "0 1px 1px 1px rgba(0, 0, 0, 0.44), 0 -3px 1px -1px ...",
        "button": "0 1px 1px 0 rgba(0, 0, 0, 0.44), 0 2px 1px -1px rgba...",
    },
}

Update
Update a custom theme.

Request

POST /api/theme/:name
Body: application/json

This accepts a theme as defined above.

The light and dark themes are built in and can not be changed.

Backdrop
Upload a custom backdrop image.

Request

POST /api/theme/:name
Body: multipart/binary

Response

{
    "filename": "custom.jpeg"
}

Location

Searches for a location by text.

Request

GET /api/weather/location?query=denver&count=10

Response

[{
    "id": "123456",
    "name": "Denver",
    "country": "United States"
}]

Weather

Fetches the current weather.

Request

GET /api/weather/current

Response

{
    "units": "celsius",
    "weather": 32,
    "description": "sunny",
    "icon": "sunny",
    "temp": 32,
    "min": 32,
    "max": 32,
    "windchill": 31,
    "pressure": 15,
    "humidity": 20,
    "visibility": 10,
    "wind": {
        "speed": 2,
        "direction": 270
    }
}

Note. To get the current weather, you must first set the city id in the hub config.

Forecast
Fetches a weather forecast.

Request

GET /api/weather/forecast

Response

[{
    "units": "celsius",
    "weather": 32,
    "description": "sunny",
    "icon": "sunny",
    "temp": 32,
    "min": 32,
    "max": 32,
    "windchill": 31,
    "pressure": 15,
    "humidity": 20,
    "visibility": 10,
    "wind": {
        "speed": 2,
        "direction": 270
    }
}]

Note. To get the weather forecast, you must first set the city id in the hub config.

Still need Help?

The HOOBS Support Team
is here for you!