# Shelly v0.1.0 - Table of Contents

> Shelly smart-device client for Elixir: cloud APIs (legacy auth-key, v2, OAuth account access), real-time websocket events, and component-aware status parsing across Gen1-Gen4 hardware.

## Pages

- [Shelly](readme.md)
- [Changelog](changelog.md)

## Modules

- [Shelly](Shelly.md): Shelly smart-device client for Elixir — cloud APIs, real-time events,
and component-aware status parsing across every hardware generation.
- [Shelly.Account](Shelly.Account.md): Account-level Shelly Cloud API, authorized by an OAuth access token
(`Authorization: Bearer`) — no per-device auth keys needed.
- [Shelly.CloudV1](Shelly.CloudV1.md): The **legacy** Shelly Cloud v1 API (`/device/status`,
`/device/relay/control`). Shelly has deprecated it and announced
removal — prefer `Shelly.CloudV2` (same auth key) or the OAuth
`Shelly.Account` API. Kept as a fallback.
- [Shelly.CloudV2](Shelly.CloudV2.md): Shelly Cloud **v2** API, authorized by a per-account auth key
(Shelly app → Settings → User Settings → Access And Permissions →
"Get key" — the key and the server URI are shown together).
- [Shelly.Events](Shelly.Events.md): Real-time events socket for an OAuth-connected account
(`wss://<server>:6113/shelly/wss/hk_sock?t=<token>`).
- [Shelly.OAuth](Shelly.OAuth.md): Shelly Cloud OAuth (authorization-code) flow — the "connect your
account" path that replaces auth keys entirely.
- [Shelly.RateGate](Shelly.RateGate.md): Per-account rate gate for Shelly Cloud traffic. The cloud allows
~1 request/second/account and returns 429 for anything faster — and
polling, control commands and one-off calls all draw from the same
budget, so every call should flow through one gate.
- [Shelly.Status](Shelly.Status.md): Parses Shelly device status payloads into a flat status map — one parser for every transport (legacy v1 API,
v2 API, OAuth account API, websocket events) and every hardware shape

