Summary
HTTP/REST control interface for the Hubitat Elevation hub via the built-in Maker API app. Endpoints expose authorized device lists, device detail/attributes/commands/events, command dispatch (including parameterized commands like setLevel and setColor), room management, hub variables, modes, Hubitat Safety Monitor (HSM) state, and an HTTP POST callback URL for real-time event streaming. All endpoints require an access_token query parameter.
Transport
protocols:
- http
addressing:
base_url: "http://[hub_ip_address]/apps/api/[app_id]"
port: null # UNRESOLVED: port number not stated in source
auth:
type: token
description: "access_token query parameter required on every endpoint. Treated as authorization token equivalent to username/password. Configured per Maker API instance; resettable via UI."
Traits
# - queryable # inferred: numerous query endpoints (/devices, /devices/[id], attribute reads, /modes, /hsm, /hubvariables)
# - levelable # inferred: setLevel command example documented
# - powerable # inferred: on/off command examples documented for switch devices
Actions
# All endpoints invoked as HTTP GET against path segments appended to base_url,
# with ?access_token=[access_token]. Source does not document a distinct HTTP
# method per endpoint; every documented endpoint is expressed as a URL path.
- id: list_devices
label: List Authorized Devices
kind: query
command: "GET /devices"
params: []
- id: list_all_devices_detail
label: List All Devices (Detail)
kind: query
command: "GET /devices/all"
params: []
- id: get_device_detail
label: Get Device Detail
kind: query
command: "GET /devices/{device_id}"
params:
- name: device_id
type: string
description: Authorized device ID
- id: get_device_events
label: Get Device Events
kind: query
command: "GET /devices/{device_id}/events"
params:
- name: device_id
type: string
description: Authorized device ID
- id: get_device_commands
label: Get Device Commands
kind: query
command: "GET /devices/{device_id}/commands"
params:
- name: device_id
type: string
description: Authorized device ID
- id: send_device_command
label: Send Device Command
kind: action
command: "GET /devices/{device_id}/{command}/{secondary_value}"
params:
- name: device_id
type: string
description: Authorized device ID
- name: command
type: string
description: Command name as exposed by device (e.g. on, off, refresh, setLevel, setCode, setColor)
- name: secondary_value
type: string
required: false
description: Optional parameter(s); multiple values comma-separated (e.g. setLevel/50, setCode/3,4321,Guest). May be JSON object (URL-encoded) for setColor.
- id: get_attribute_value
label: Get Device Attribute Value
kind: query
command: "GET /devices/{device_id}/{attribute_name}"
params:
- name: device_id
type: string
description: Authorized device ID
- name: attribute_name
type: string
description: Attribute name (e.g. switch)
- id: set_device_label
label: Set Device Label
kind: action
command: "GET /devices/{device_id}/setLabel?label={label}"
params:
- name: device_id
type: string
description: Authorized device ID
- name: label
type: string
description: New display label (URL-encode spaces/special chars)
- id: set_device_driver
label: Set Device Driver
kind: action
command: "GET /devices/{device_id}/setDriver?namespace={namespace}&name={name}"
params:
- name: device_id
type: string
description: Authorized device ID
- name: namespace
type: string
description: Driver namespace (e.g. hubitat for built-in drivers)
- name: name
type: string
description: Driver name (URL-encode spaces)
- id: list_rooms
label: List Rooms
kind: query
command: "GET /rooms"
params: []
- id: get_room
label: Get Room Detail
kind: query
command: "GET /room/select/{room_id}"
params:
- name: room_id
type: string
description: Room ID
- id: create_room
label: Create Room
kind: action
command: "GET /room/insert?name={room_name}&deviceIds={device_id_list}"
params:
- name: room_name
type: string
description: New room name (URL-encode)
- name: device_id_list
type: string
description: Comma-separated device IDs to add to the room
- id: update_room
label: Update Room
kind: action
command: "GET /room/update/{room_id}?name={room_name}&deviceIds={device_id_list}"
params:
- name: room_id
type: string
description: Existing room ID to update
- name: room_name
type: string
description: Room name (URL-encode)
- name: device_id_list
type: string
description: Comma-separated device IDs
- id: delete_room
label: Delete Room
kind: action
command: "GET /room/delete/{room_id}"
params:
- name: room_id
type: string
description: Room ID to delete
- id: list_hub_variables
label: List Hub Variables
kind: query
command: "GET /hubvariables"
params: []
- id: get_hub_variable
label: Get Hub Variable
kind: query
command: "GET /hubvariables/{variable_name}"
params:
- name: variable_name
type: string
description: Authorized hub variable name (case-sensitive)
- id: set_hub_variable
label: Set Hub Variable
kind: action
command: "GET /hubvariables/{variable_name}/{value}"
params:
- name: variable_name
type: string
description: Authorized hub variable name (case-sensitive)
- name: value
type: string
description: New value (case-sensitive; URL-encode spaces/special chars)
- id: set_post_url
label: Set HTTP POST Event URL
kind: action
command: "GET /postURL/{url}"
params:
- name: url
type: string
description: URL to receive POST of device/location event JSON (URL-encode). Enables event streaming.
- id: clear_post_url
label: Clear HTTP POST Event URL
kind: action
command: "GET /postURL"
params: []
- id: get_modes
label: Get Current Mode / Mode List
kind: query
command: "GET /modes"
params: []
- id: set_mode
label: Set Hub Mode
kind: action
command: "GET /modes/{mode_id}"
params:
- name: mode_id
type: string
description: Numeric ID of mode to set
- id: get_hsm
label: Get HSM Status
kind: query
command: "GET /hsm"
params: []
- id: set_hsm
label: Set HSM Status
kind: action
command: "GET /hsm/{value}"
params:
- name: value
type: string
description: HSM arm status (e.g. armAway). See hsmSetArm values in Hubitat Safety Monitor interface docs.
Feedbacks
# Query responses documented in source:
- id: device_list
type: json_array
description: Array of {id, name, label} for /devices
- id: device_detail
type: json_object
description: Object with name, label, type, id, date, model, manufacturer, capabilities[], attributes{}, commands[] for /devices/[id] and /devices/all entries
- id: device_events
type: json_array
description: Array of event objects {device_id, label, name, value, date, isStateChange, source}
- id: device_commands
type: json_array
description: Array of {command} objects
- id: attribute_value
type: json_object
description: "{id, attribute, value} from attribute read endpoint"
- id: hub_variable_value
type: json_object
description: "{name, value, type} from /hubvariables/[name]"
- id: send_command_response
type: json_object
description: Full-detail JSON for the targeted device returned after send_device_command
Variables
# Hub variables are user-defined at runtime (name + type + value); schema not
# fixed by source. Exposed dynamically via list_hub_variables / get_hub_variable.
# UNRESOLVED: no static variable enumeration possible from source
Events
# Unsolicited HTTP POST to user-configured URL (set via set_post_url). Body JSON:
# {
# "content": {
# "name": "<event.name>",
# "value": "<event.value>",
# "displayName": "<event.displayName>",
# "deviceId": "<event.device.id>",
# "descriptionText":"<event.descriptionText>",
# "unit": "<event.unit>",
# "data": "<event.data>"
# }
# }
# Sent for every device event of selected devices; location events (mode, HSM,
# hub variable) optional and configurable in Maker API UI.
- id: device_event_post
type: http_post
description: Device state-change event pushed to configured postURL
- id: location_event_post
type: http_post
description: Location event (mode/HSM/hub variable) pushed to configured postURL when enabled
Macros
# UNRESOLVED: no multi-step sequences explicitly documented in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings or interlock procedures.
# NOTE (non-safety, operational): access_token is equivalent to username/password
# per source; compromise enables full control of authorized devices.
Notes
- All endpoints are HTTP GET-based per source; no POST/PUT/DELETE methods documented for control paths (event delivery to user URL is the only documented POST, sent by the hub).
send_device_commandis the generic command dispatcher. Source examples:/devices/1/on,/devices/1/setLevel/50,/devices/1321/setCode/3,4321,Guest. Available commands vary per device driver and are discoverable viaget_device_commands. Source warns a command appearing in the list is not guaranteed to work via the API.setColorextension accepts either standard HSB JSON ({"hue":1,"saturation":100,"level":50}) or shorthand{"hex":"FF0400"}(RGB hex auto-converted to HSB). JSON payloads require URL-encoding.- Path segments and query values containing spaces or special characters require URL-encoding on the sending system (e.g.
%20for space). - HSM settable values documented as referenced externally (Hubitat Safety Monitor interface
hsmSetArmsection), not enumerated verbatim in this source.
Provenance
source_domains:
- docs2.hubitat.com
source_urls:
- https://docs2.hubitat.com/en/apps/maker-api
- https://docs2.hubitat.com/en/developer
retrieved_at: 2026-07-06T06:14:44.851Z
last_checked_at: 2026-07-07T11:42:09.546Z
Verification Summary
verdict: verified
checked_at: 2026-07-07T11:42:09.546Z
matched_actions: 23
action_count: 23
confidence: medium
summary: "All 23 spec actions match documented Maker API endpoints one-to-one; HTTP transport and token auth fully supported in source. (11 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "TCP port not stated in source (HTTP default not assumed). No firmware version range stated. No rate limits or timing constraints documented."
- "port number not stated in source"
- "no static variable enumeration possible from source"
- "no multi-step sequences explicitly documented in source"
- "source contains no safety warnings or interlock procedures."
- "TCP port not stated (HTTP default 80 not assumed per policy)."
- "app_id and hub_ip_address are deployment-specific, not fixed by source."
- "firmware version compatibility not stated in source."
- "full enumeration of per-device commands not possible — driver-dependent."
- "HSM arm value enum not enumerated in this source (linked externally)."
- "no rate limits, timeouts, or retry semantics documented."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0