ruvnet/RuView · error · HTTPException
Router '{router_id}' is disabled
Error message
Router '{router_id}' is disabled What it means
validate_router_access raises 403 "Router '<router_id>' is disabled" when the router exists in domain configuration but has enabled=False. Existence was confirmed first; this is a per-router administrative kill switch.
Source
Thrown at archive/v1/src/api/dependencies.py:230
# Router access dependencies
async def validate_router_access(
router_id: str,
current_user: Optional[Dict[str, Any]] = Depends(get_current_user)
) -> str:
"""Validate user access to a specific router."""
domain_config = get_domain_config()
# Check if router exists
router = domain_config.get_router(router_id)
if not router:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Router '{router_id}' not found"
)
# Check if router is enabled
if not router.enabled:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=f"Router '{router_id}' is disabled"
)
# If authentication is enabled, check user access
if current_user:
# Admin users have access to all routers
if current_user.get("is_admin", False):
return router_id
# Check user's router permissions
user_routers = current_user.get("routers", [])
if user_routers and router_id not in user_routers:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=f"Access denied to router '{router_id}'"
)
View on GitHub (pinned to 4685618388)
Solutions
- Set enabled=True for the router in the domain configuration and reload
- Update clients to stop referencing the disabled router
- Surface disabled vs missing distinctly in client error handling
Defensive patterns
Strategy: validation
Validate before calling
# Only target enabled routers
routers = client.get('/api/routers', headers=auth).json()
enabled = [r['id'] for r in routers if r.get('enabled', True)]
if router_id not in enabled:
skip_or_alert(router_id) Try / catch
try:
r = client.get(f'/api/routers/{router_id}', headers=auth)
r.raise_for_status()
except httpx.HTTPStatusError as e:
if e.response.status_code == 403 and 'disabled' in e.response.text:
mark_router_offline(router_id) # maintenance state; stop polling
raise Prevention
- Reflect the enabled flag in device dashboards
- Treat router-disabled 403 as expected during maintenance windows
- Alert on disabled-but-polled routers to find stale clients
When it happens
Trigger: A router node deliberately disabled (maintenance, decommissioned hardware) still receiving API traffic; config edits flipping enabled accidentally.
Common situations: Taking an ESP32 node offline while dashboards keep polling it; staged hardware rollouts with disabled flags; config merge mistakes.
Related errors
- Zone '{zone_id}' is disabled
- Router '{router_id}' not found
- Access denied to router '{router_id}'
- JWT authentication is not configured. In development mode, e
- Inactive user
AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16).
Data as JSON: /api/errors/ae528f7565adaea5.
Report an issue: GitHub.