Authenticate with the balenaCloud API using a session token or API key obtained from the balenaCloud console (Preferences > Access tokens); include it as Authorization: Bearer YOUR_TOKEN in all requests
List current fleet environment variables: GET https://api.balena-cloud.com/v6/application_environment_variable?$filter=application/app_name eq '<fleet_name>'
Create a new fleet-wide variable: POST https://api.balena-cloud.com/v6/application_environment_variable with body {"application": <app_id>, "name": "CONFIG_KEY", "value": "config_value"}
Update an existing variable: PATCH https://api.balena-cloud.com/v6/application_environment_variable(<var_id>) with the new value; the supervisor on each device will detect the change and restart affected services
For device-specific overrides, create a device_environment_variable record linked to the device's id instead of the application; device-level variables shadow fleet-level ones with the same name
Verify the variable is visible inside the container by exec-ing into a running service and running printenv <VAR_NAME>
Known gotchas
Updating an environment variable triggers a service restart across all online devices in the fleet simultaneously; use device-level variables for staged rollouts to avoid a fleet-wide restart storm
The balenaCloud API uses OData-style query filters ($filter, $select, $expand); incorrect filter syntax returns an empty result set rather than an error
Environment variable names beginning with BALENA_ or RESIN_ are reserved for the supervisor and balenaOS; user-defined variables must not use these prefixes
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp