ha-api
Integrates with Home Assistant's REST and WebSocket APIs for efficient API calls and real-time event management.
Install this skill
Security score
The ha-api skill was audited on Feb 12, 2026 and we found 54 security issues across 4 threat categories. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 45 | ```bash |
Template literal with variable interpolation in command context
| 82 | ```bash |
Template literal with variable interpolation in command context
| 88 | ```bash |
Template literal with variable interpolation in command context
| 525 | "Authorization": `Bearer ${HA_TOKEN}`, |
Template literal with variable interpolation in command context
| 531 | const response = await fetch(`${HA_URL}/api/states`, { headers }); |
Template literal with variable interpolation in command context
| 533 | throw new Error(`HTTP ${response.status}: ${response.statusText}`); |
Template literal with variable interpolation in command context
| 540 | const response = await fetch(`${HA_URL}/api/states/${entityId}`, { headers }); |
Template literal with variable interpolation in command context
| 542 | throw new Error(`Entity ${entityId} not found`); |
Template literal with variable interpolation in command context
| 545 | throw new Error(`HTTP ${response.status}`); |
Template literal with variable interpolation in command context
| 548 | console.log(`${entityId}: ${state.state}`); |
Template literal with variable interpolation in command context
| 556 | `${HA_URL}/api/services/${domain}/${service}`, |
Template literal with variable interpolation in command context
| 565 | throw new Error(`HTTP ${response.status}: ${error}`); |
Template literal with variable interpolation in command context
| 574 | console.log(`Found ${states.length} entities`); |
Template literal with variable interpolation in command context
| 596 | const ws = new WebSocket(`${HA_URL}/api/websocket`); |
Template literal with variable interpolation in command context
| 621 | console.log(`${data.entity_id} changed:`); |
Template literal with variable interpolation in command context
| 622 | console.log(` ${data.old_state.state} → ${data.new_state.state}`); |
Template literal with variable interpolation in command context
| 643 | ```bash |
Curl to non-GitHub URL
| 83 | curl -X GET "http://ha:8123/api/states" \ |
Curl to non-GitHub URL
| 89 | curl -X GET "http://ha:8123/api/states" \ |
Curl to non-GitHub URL
| 645 | curl -X GET "http://localhost:8123/api/states" \ |
Curl to non-GitHub URL
| 649 | curl -X GET "http://localhost:8123/api/states/light.living_room" \ |
Curl to non-GitHub URL
| 653 | curl -X POST "http://localhost:8123/api/services/light/turn_on" \ |
Curl to non-GitHub URL
| 663 | curl -X POST "http://localhost:8123/api/services/light/turn_off" \ |
Curl to non-GitHub URL
| 669 | curl -X POST "http://localhost:8123/api/services/climate/set_temperature" \ |
Curl to non-GitHub URL
| 678 | curl -X GET "http://localhost:8123/api/services/light" \ |
Curl to non-GitHub URL
| 682 | curl -X POST "http://localhost:8123/api/services/automation/trigger" \ |
Curl to non-GitHub URL
| 688 | curl -X POST "http://localhost:8123/api/template" \ |
Curl to non-GitHub URL
| 862 | curl -X POST "http://ha:8123/api/services/light/turn_on" \ |
Curl to non-GitHub URL
| 866 | curl -X POST "http://ha:8123/api/services/light/turn_on/light.living_room" |
Access to .env file
| 521 | const HA_URL = process.env.HA_URL || "http://localhost:8123"; |
Access to .env file
| 522 | const HA_TOKEN = process.env.HA_TOKEN; |
Access to .env file
| 592 | const HA_URL = (process.env.HA_URL || "http://localhost:8123").replace(/^http/, "ws"); |
Access to .env file
| 593 | const HA_TOKEN = process.env.HA_TOKEN; |
External URL reference
| 38 | export HA_URL="http://192.168.1.100:8123" |
External URL reference
| 83 | curl -X GET "http://ha:8123/api/states" \ |
External URL reference
| 89 | curl -X GET "http://ha:8123/api/states" \ |
External URL reference
| 424 | HA_URL = os.getenv("HA_URL", "http://localhost:8123") |
External URL reference
| 478 | HA_URL = os.getenv("HA_URL", "http://localhost:8123").replace("http", "ws") |
External URL reference
| 521 | const HA_URL = process.env.HA_URL || "http://localhost:8123"; |
External URL reference
| 592 | const HA_URL = (process.env.HA_URL || "http://localhost:8123").replace(/^http/, "ws"); |
External URL reference
| 645 | curl -X GET "http://localhost:8123/api/states" \ |
External URL reference
| 649 | curl -X GET "http://localhost:8123/api/states/light.living_room" \ |
External URL reference
| 653 | curl -X POST "http://localhost:8123/api/services/light/turn_on" \ |
External URL reference
| 663 | curl -X POST "http://localhost:8123/api/services/light/turn_off" \ |
External URL reference
| 669 | curl -X POST "http://localhost:8123/api/services/climate/set_temperature" \ |
External URL reference
| 678 | curl -X GET "http://localhost:8123/api/services/light" \ |
External URL reference
| 682 | curl -X POST "http://localhost:8123/api/services/automation/trigger" \ |
External URL reference
| 688 | curl -X POST "http://localhost:8123/api/template" \ |
External URL reference
| 792 | - [Home Assistant REST API](https://developers.home-assistant.io/docs/api/rest) |
External URL reference
| 793 | - [Home Assistant WebSocket API](https://developers.home-assistant.io/docs/api/websocket) |
External URL reference
| 794 | - [Home Assistant Authentication](https://developers.home-assistant.io/docs/auth_api) |
External URL reference
| 795 | - [Home Assistant Integration API](https://www.home-assistant.io/integrations/api/) |
External URL reference
| 862 | curl -X POST "http://ha:8123/api/services/light/turn_on" \ |
External URL reference
| 866 | curl -X POST "http://ha:8123/api/services/light/turn_on/light.living_room" |