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_command is 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 via get_device_commands. Source warns a command appearing in the list is not guaranteed to work via the API.
  • setColor extension 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. %20 for space).
  • HSM settable values documented as referenced externally (Hubitat Safety Monitor interface hsmSetArm section), 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