Ring

Note: uses the unofficial API.

Setting up

Here I use HTTPie for the http command.

First, log in with your email and password:

http 'https://oauth.ring.com/oauth/token' scope=client client_id=ring_official_android grant_type=password username="…" password='…'

If you have the 2-factor authentication enabled (you do, right?), you’ll get HTTP 412 back and an SMS with a code:

HTTP/1.1 412 Precondition Failed

{
    "next_time_in_secs": 60,
    "phone": "+3xxxxxxxx44"
}

Repeat the log-in step with the additional headers added:

http 'https://oauth.ring.com/oauth/token' scope=client client_id=ring_official_android grant_type=password  username="…" password='…' 2fa-support:true 2fa-code:123456

You should get a refresh_token back, which you then specify as the service initial_refresh_token setting value:

{
    "access_token": "…",
    "expires_in": 3600,
    "refresh_token": "…",
    "scope": "client",
    "token_type": "Bearer"
}

My IoT doesn’t need an access_token, because it will obtain a new one immediately via a refresh_token.