Skip to content
This repository has been archived by the owner on Feb 21, 2022. It is now read-only.

Protocol HTTPS

Alexander Thoukydides edited this page Aug 29, 2020 · 27 revisions

SkyBell HD App ↔ Cloud HTTPS Usage

⚠️ The following description is based on Wil Schrader's skybellpy plus some additional experimentation. There may be significant errors and omissions.

The SkyBell HD app uses HTTPS requests to communicate with the cloud services, including retrieval of recorded videos. The video and audio streams for Watch Live calls are carried over SRTP.

Refer to the protocol overview and details of SRTP streams for more information.

Note:

  • Responses shown below have been reformatted to be more readable. The actual responses from the SkyBell cloud services do not have whitespace (unless part of values).
  • All identifiers and keys have been consistently replaced by random values of the same format.

Request Headers

Each HTTPS request should include the following headers:

Header Value Comments
Content-Type: application/json The body of the request (if any) and response is always JSON encoded.
Authorization: Bearer <Access_Token> The <Access_Token> is obtained from the Login request, and is specific to a single <App_UUID> and <Client_UUID>. This header may be omitted from the Login request itself.
user-agent <Project>/<Version> A description of the software being used to access the API. This is used by SkyBell Technologies to analyse usage of their servers by third-party projects.
x-skybell-app-id: <App_UUID> This identifies a particular mobile device that can receive mobile push notifications. It can be an arbitrary string. The SkyBell HD app uses a version 5 UUID (RFC 4122). If notifications are being used then this needs to be constant for a particular device, otherwise any random identifier can be used that is constant during a sessions.
x-skybell-client-id: <Client_UUID> This is used to distinguish between concurrent calls to the same doorbell. Any random identifier can be used that is constant during a session.

Response Status

Successful requests return a 2xx status code:

  • 200 OK
  • 202 Accepted

Errors are indicated by a 4xx status code:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 410 Gone

Error Message

An additional message description is sometimes available in the response body. However, the format of the response can vary.

The error message is usually available as message:

{
    "message": "No room is setup for this device"
}

A name for the error may also be included:

{
    "name":    "NotFound",
    "message": "Invalid device ID."
}

Sometimes the message includes escaped JSON encoding:

{
    "name":    "StatusCodeError",
    "message": "401 - {\"error\":\"invalid_client\",\"error_description\":\"User not found\"}"
}

However, occasionally the error message appears as error.message:

{
    "error": {
        "message": "Can not query users besides /me "
    }
}

Misleading Error Messages

Malformed requests frequently trigger an error message that looks like:

{
    "message": "'ae5ecc79f15c193ee322de514982af67995692121d2cdabd7f8157fc9edb2bc7e6c135bcbbf85fb532a531310e94d3b65399b49ecc6d7a7bd712d144feda7417531c94b0fab7d0267d3fbf0a9445a7417914a72f25e74829015b5eb44e1e2f2c708b2ef42554f9b7cb7d56df31ed90a708169c74be3337779f44fdb4b8d32754' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer ae5ecc79f15c193ee322de514982af67995692121d2cdabd7f8157fc9edb2bc7e6c135bcbbf85fb532a531310e94d3b65399b49ecc6d7a7bd712d144feda7417531c94b0fab7d0267d3fbf0a9445a7417914a72f25e74829015b5eb44e1e2f2c708b2ef42554f9b7cb7d56df31ed90a708169c74be3337779f44fdb4b8d32754'."
}

This error is misleading. There should not be an equal-sign in the Authorization header. A space is used to separate Bearer and <Token>.

Requests

The following requests are supported:

The Login request must be used to obtain an <Access_Token> before any of the other requests can be used.

Login

POST https://cloud.myskybell.com/api/v3/login/

This request is primarily used to obtain the <Access_Token> for all other requests. It also returns the user's real name and details of third-party integrations (including their OAuth 2.0 access tokens).

The values of username and password should be set to the email address and password used to log into the SkyBell HD app.

Example request body:

{
    "username": "skybell@gmail.com",
    "password": "Passw0rd!"
}

Example response body:

{
    "firstName":           "Jane",
    "lastName":            "Doe",
    "resourceId":          "fc154a179d696d988068409a",
    "createdAt":           "2017-01-05T13:29:48.847Z",
    "updatedAt":           "2017-01-05T13:29:48.847Z",
    "id":                  "734645249844ae47b3e020db",
    "userLinks": [{
        "user":            "734645249844ae47b3e020db",
        "type":            "oauth2",
        "partnerName":     "nest",
        "accessToken":     "c.RmFyIG91dCBpbiB0aGUgdW5jaGFydGVkIGJhY2t3YXRlcnMgb2YgdGhlIHVuZmFzaGlvbmFibGUgZW5kIG9mIHRoZSB3ZXN0ZXJuDQpzcGlyYWwgYXJtIG9mIHRoZSBHYWxheHkgbGllcyBh",
        "ttl":             null,
        "createdAt":       "2017-02-23T08:43:24.723Z",
        "updatedAt":       "2017-05-12T13:23:01.920Z",
        "meta": [{
            "deviceId":    "ebe04fdd543efab2674f5349",
            "structureId": "VGhlIG9ubHkgcGVyc29uIGZvciB3aG9tIHRoZSBob3VzZSB3YXMgaW",
            "deviceType":  "co_smoke_alarm"
        }],
        "id":              "e2448c262326ad63cc6bac07"
    }],
    "access_token":        "ae5ecc79f15c193ee322de514982af67995692121d2cdabd7f8157fc9edb2bc7e6c135bcbbf85fb532a531310e94d3b65399b49ecc6d7a7bd712d144feda7417531c94b0fab7d0267d3fbf0a9445a7417914a72f25e74829015b5eb44e1e2f2c708b2ef42554f9b7cb7d56df31ed90a708169c74be3337779f44fdb4b8d32754"
}

The returned access_token should be included in the Authorization: header of all other requests, prefixed by "Bearer " (see Request Headers).

The top-level id value (734645249844ae47b3e020db in this example) can be used for the <User_ID> in other requests that need to identify a specific user.

Logout

POST https://cloud.myskybell.com/api/v3/logout

Logout from the SkyBell cloud. The <App_UUID> (see Request Headers) needs to be provided.

Example request body:

{
    "appId": "B3A12056-1830-5AAD-BC8D-57790E5A476A"
}

Example response body:

{}

Call Start

POST https://cloud.myskybell.com/api/v3/devices/<Device_ID>/calls/

Start a Watch Live call to the doorbell identified by <Device_ID>. This returns the SRTP settings and initiates the camera (incomingVideo) and microphone (incomingAudio) streams from the doorbell.

Only a single call to each doorbell is supported per <Client_UUID> (see Request Headers).

This request is not used to retrieve recorded videos; use the Get Activity Video request instead.

Example response body:

{
    "deviceId":        "ebe04fdd543efab2674f5349",
    "incomingAudio": {
        "server":      "52.11.170.183",
        "encoding":    "S16LE",
        "protocol":    "SRTP",
        "sampleRate":  8000,
        "channels":    1,
        "payloadType": 97,
        "key":         "MTIzNDU2Nzg5MDEyMzQ1NjEyMzQ1Njc4OTAxMjM0",
        "ssrc":        3619938510,
        "port":        23742
    },
    "audio": {
        "server":      "52.11.170.183",
        "port":        23742,
        "encoding":    "S16LE",
        "protocol":    "SRTP",
        "sampleRate":  8000,
        "channels":    "1",
        "payloadType": 97,
        "key":         "MTIzNDU2Nzg5MDEyMzQ1NjEyMzQ1Njc4OTAxMjM0",
        "ssrc":        692684419
    },
    "incomingVideo": {
        "server":      "52.11.170.183",
        "encoding":    "H264",
        "protocol":    "SRTP",
        "sampleRate":  90000,
        "payloadType": 96,
        "key":         "MTIzNDU2Nzg5MDEyMzQ1NjEyMzQ1Njc4OTAxMjM0",
        "ssrc":        606897290,
        "port":        23740
    }
}

The streams use the SRTP default AES Counter Mode cipher (AES_CM_128_HMAC_SHA1_80). The key fields are the Base64-encoded representation of the 16-byte key concatenated with the 14-byte salt.

The ssrc values are the Synchronisation Source identifier for the SRTP streams.

Use the Call Stop request to terminate the SRTP streams.

Call Stop

DELETE https://cloud.myskybell.com/api/v3/devices/<Device_ID>/calls/

Terminate the SRTP streams initiated using the Call Start request for the combination of <Device_ID> and <Client_UUID>.

Neither the request nor the response has a body.

Change Device Settings

PATCH https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/settings/
PATCH https://cloud.myskybell.com/api/v3/devices/<Device_ID>/settings/

Modify any combination of a doorbell's settings, identified either by <Subscription_ID> or <Device_ID>.

The following settings correspond to configuration items within the SkyBell HD app:

Name Configures Value
green_r LED 0 - 255
green_g LED 0 - 255
green_b LED 0 - 255
led_intensity LED 0 (off), 25 (low), 62 (medium), or 100 (high)
do_not_disturb Indoor Chime true (indoor chime disabled) or false
digital_doorbell Indoor Chime true or false
chime_level Outdoor Chime 0 (outdoor chime off), 1 (low), 2 (medium), or 3 (high)
motion_policy Motion Detection disabled or call
motion_threshold Motion Detection 100 (low), 50 (medium), or 32 (high)
video_profile Image Quality 0 (1080p), 1 (720p better), 2 (720p good), or 3 (480p)

These additional settings are not normally user-accessible (and hence should probably not be modified):

Name Value
low_front_led_dac integer
med_front_led_dac integer
high_front_led_dac integer
low_lux_threshold integer
med_lux_threshold integer
high_lux_threshold integer
do_not_ring true or false
ring_tone integer
mic_volume integer
speaker_volume integer

Example request body (to set the LED to maximum brightness cold white):

{
    "green_r":       "255",
    "green_g":       "247",
    "green_b":       "235",
    "led_intensity": "100"
}

Example response body:

{}

Get Activity List

GET https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/activities/
GET https://cloud.myskybell.com/api/v3/devices/<Device_ID>/activities/

Poll the list of videos that have been recorded by a doorbell, identified either by <Subscription_ID> or <Device_ID>. This is updated after the doorbell has finished its recording and pushed the video to the cloud services.

Example response body:

[{
    "_id":          "936017acd9d0af411ce7a93b",
    "updatedAt":    "2017-05-12T13:23:01.920Z",
    "createdAt":    "2017-05-12T13:23:01.920Z",
    "device":       "ebe04fdd543efab2674f5349",
    "callId":       "a075fece-0afd-5cb7-ba18-37f575007729",
    "event":        "device:sensor:button",
    "state":        "ready",
    "ttlStartDate": "2017-05-12T13:23:01.920Z",
    "videoState":   "download:ready",
    "id":           "936017acd9d0af411ce7a93b",
    "media":        "https://skybell-thumbnails-stage.s3.amazonaws.com/ebe04fdd543efab2674f5349/a075fece-0afd-5cb7-ba18-37f575007729_ebe04fdd543efab2674f5349.jpeg?AWSAccessKeyId=ASIAJE3OFQLDLDZANIVA&Expires=1514057338&Signature=VGhlIGJ1bGxkb3plciBvdXRzaWRl&response-content-type=image/jpeg&x-amz-security-token=QXQgZWlnaHQgb%2BKAmWNsb2NrIG9uIFRodXJzZGF5IG1vcm5pbmcgQXJ0aHVyIGRpZG7igJl0IGZlZWwgdmVyeSBnb29kLiBIZQp3b2tlIHVwIGJsZWFyaWx5LCBnb3QgdXAsIHdhbmRlcmVkIGJsZWFyaWx5IHJvdW5kIGhpcyByb29tLCBvcGVuZWQgYSB3aW5kb3csCnNhdyBhIGJ1bGxkb3plciwgZm91bmQgaGlzIHNsaXBwZXJzLCBhbmQgc3RvbXBlZCBvZmYgdG8gdGhlIGJhdGhyb29tIHRvIHdhc2guClRvb3RocGFzdGUgb24gdGhlIGJydXNoIOKAkyBzby4gU2NydWIuClNoYXZpbmcgbWlycm9yIOKAkyBwb2ludGluZyBhdCB0aGUgY2VpbGluZy4gSGUgYWRqdXN0ZWQgaXQuIEZvciBhIG1vbWVudAppdCByZWZsZWN0ZWQgYSBzZWNvbmQgYnVsbGRvemVyIHRocm91Z2ggdGhlIGJhdGhyb29tIHdpbmRvdy4gUHJvcGVybHkgYWRqdXN0ZWQsCml0IHJlZmxlY3RlZCBBcnRodXIgRGVudOKAmXMgYnJpc3RsZXMuIEhlIHNoYXZ",
    "mediaSmall":   "https://skybell-thumbnails-stage.s3.amazonaws.com/ebe04fdd543efab2674f5349/a075fece-0afd-5cb7-ba18-37f575007729_ebe04fdd543efab2674f5349_small.jpeg?AWSAccessKeyId=ASIAJE3OFQLDLDZANIVA&Expires=1514057338&Signature=VGhlIGJ1bGxkb3plciBvdXRzaWRl&response-content-type=image/jpeg&x-amz-security-token=QXQgZWlnaHQgb%2BKAmWNsb2NrIG9uIFRodXJzZGF5IG1vcm5pbmcgQXJ0aHVyIGRpZG7igJl0IGZlZWwgdmVyeSBnb29kLiBIZQp3b2tlIHVwIGJsZWFyaWx5LCBnb3QgdXAsIHdhbmRlcmVkIGJsZWFyaWx5IHJvdW5kIGhpcyByb29tLCBvcGVuZWQgYSB3aW5kb3csCnNhdyBhIGJ1bGxkb3plciwgZm91bmQgaGlzIHNsaXBwZXJzLCBhbmQgc3RvbXBlZCBvZmYgdG8gdGhlIGJhdGhyb29tIHRvIHdhc2guClRvb3RocGFzdGUgb24gdGhlIGJydXNoIOKAkyBzby4gU2NydWIuClNoYXZpbmcgbWlycm9yIOKAkyBwb2ludGluZyBhdCB0aGUgY2VpbGluZy4gSGUgYWRqdXN0ZWQgaXQuIEZvciBhIG1vbWVudAppdCByZWZsZWN0ZWQgYSBzZWNvbmQgYnVsbGRvemVyIHRocm91Z2ggdGhlIGJhdGhyb29tIHdpbmRvdy4gUHJvcGVybHkgYWRqdXN0ZWQsCml0IHJlZmxlY3RlZCBBcnRodXIgRGVudOKAmXMgYnJpc3RsZXMuIEhlIHNoYXZ"
}]

The event can be any of:

  • device:sensor:motion
  • device:sensor:button
  • application:on-demand

The id can be used as the <Activity_ID> in a Get Activity Video request to obtain the URL for downloading the associated video recording.

media and mediaSmall provide URLs for 1280×720 and 248×140 thumbnail images for the activity.

Get Activity Video

GET https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/activities/<Activity_ID>/video/
GET https://cloud.myskybell.com/api/v3/devices/<Device_ID>/activities/<Activity_ID>/video/

Obtain the URL for downloading video <Activity_ID> recorded by the doorbell identified either by <Subscription_ID> or <Device_ID>.

This request is not used to start a Watch Live call; use the Call Start request instead.

Example response body:

{
    "url": "https://production-video-download.s3.amazonaws.com/ebe04fdd543efab2674f5349/a075fece-0afd-5cb7-ba18-37f575007729_ebe04fdd543efab2674f5349.mp4?AWSAccessKeyId=ASIAJE3OFQLDLDZANIVA&Expires=1514057338&Signature=VGhlIGJ1bGxkb3plciBvdXRzaWRl&x-amz-security-token=QXQgZWlnaHQgb%2BKAmWNsb2NrIG9uIFRodXJzZGF5IG1vcm5pbmcgQXJ0aHVyIGRpZG7igJl0IGZlZWwgdmVyeSBnb29kLiBIZQp3b2tlIHVwIGJsZWFyaWx5LCBnb3QgdXAsIHdhbmRlcmVkIGJsZWFyaWx5IHJvdW5kIGhpcyByb29tLCBvcGVuZWQgYSB3aW5kb3csCnNhdyBhIGJ1bGxkb3plciwgZm91bmQgaGlzIHNsaXBwZXJzLCBhbmQgc3RvbXBlZCBvZmYgdG8gdGhlIGJhdGhyb29tIHRvIHdhc2guClRvb3RocGFzdGUgb24gdGhlIGJydXNoIOKAkyBzby4gU2NydWIuClNoYXZpbmcgbWlycm9yIOKAkyBwb2ludGluZyBhdCB0aGUgY2VpbGluZy4gSGUgYWRqdXN0ZWQgaXQuIEZvciBhIG1vbWVudAppdCByZWZsZWN0ZWQgYSBzZWNvbmQgYnVsbGRvemVyIHRocm91Z2ggdGhlIGJhdGhyb29tIHdpbmRvdy4gUHJvcGVybHkgYWRqdXN0ZWQsCml0IHJlZmxlY3RlZCBBcnRodXIgRGVudOKAmXMgYnJpc3RsZXMuIEhlIHNoYXZ"
}

The video is H.264 encoded 1280×720 resolution (regardless of the configured video_profile), accompanied by 8ksps MPEG AAC audio.

Get Application Subscriptions

GET https://cloud.myskybell.com/api/v3/users/<User_ID>/app_installs/<App_ID>/subscriptions/<Subscription_ID>/settings

Retrieve a list of topics for which the app identified by <User_ID> and <App_ID> has subscribed to receive mobile push notifications from the device identified by <Subscription_ID>.

Example response body:

{
    "device:status:up": {
        "eventType":    "device:status:up",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "enabled",
        "rule":         "enabled"
    },
    "device:status:down": {
        "eventType":    "device:status:down",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "enabled",
        "rule":         "enabled"
    },
    "device:sensor:api": {
        "eventType":    "device:sensor:api",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "application:on-demand": {
        "eventType":    "application:on-demand",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:ota:https:download": {
        "eventType":    "device:ota:https:download",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:ota:verified": {
        "eventType":    "device:ota:verified",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:ota:process": {
        "eventType":    "device:ota:process",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:sensor:button": {
        "eventType":    "device:sensor:button",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "enabled",
        "rule":         "enabled"
    },
    "device:sensor:motion": {
        "eventType":    "device:sensor:motion",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "enabled",
        "rule":         "disabled"
    },
    "device:sensor:motion:initial": {
        "eventType":    "device:sensor:motion:initial",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:sensor:sound": {
        "eventType":    "device:sensor:sound",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:update": {
        "eventType":    "device:update",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "device:destroy": {
        "eventType":    "device:destroy",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "activity:video:ready": {
        "eventType":    "activity:video:ready",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "application:button:lock:lock": {
        "eventType":    "application:button:lock:lock",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "application:button:lock:unlock": {
        "eventType":    "application:button:lock:unlock",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "application:button:light:on": {
        "eventType":    "application:button:light:on",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "application:button:light:off": {
        "eventType":    "application:button:light:off",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    },
    "avatar:ready": {
        "eventType":    "avatar:ready",
        "subscription": "7686c1d0e6d4757bc52bcf20",
        "device":       "ebe04fdd543efab2674f5349",
        "default_rule": "disabled",
        "rule":         "disabled"
    }
}

Get Applications List

GET https://cloud.myskybell.com/api/v3/users/<User_ID>/app_installs/

Retrieve a list of all apps that have registered with the SkyBell cloud services via the Register Application request by the user identified by their User_ID.

Example response body:

[{
    "appId":       "A31E7DF3-E0A1-5422-B7C9-68526B43EDF9",
    "currentUser": "734645249844ae47b3e020db",
    "token":       "FC69F14EDDADD554614AADE4AD06B6AB7E0DEE8163C7E14BBDB6D3E74B2B2B62",
    "protocol":    "apns",
    "state":       "enabled",
    "createdAt":   "2017-01-05T13:29:48.847Z",
    "updatedAt":   "2017-01-05T13:29:48.847Z",
    "endpointArn": "arn:aws:sns:us-west-2:394986918768:endpoint/APNS/skybell-v3/c2b82795-849e-3dfe-be21-281290257d06",
    "id":          "6792a8b9a80d64ff86237008"
},
{
    "appId":       "B3A12056-1830-5AAD-BC8D-57790E5A476A",
    "currentUser": "734645249844ae47b3e020db",
    "token":       "APA91bHPRgkF3JUikC4ENAHEeMrd41Zxv3hVZjC9KtT8OvPVGJ-hQMRKRrZuJAEcl7B338qju59zJMjw2DELjzEvxwYv7hH5Ynpc1ODQ0aT4U4OFEeco8ohsN5PjL1iC2dNtk2BAokeMCg2ZXKqpc8FXKmhX94kIxQ",
    "protocol":    "gcm",
    "state":       "enabled",
    "createdAt":   "2017-02-23T08:43:24.723Z",
    "updatedAt":   "2017-05-12T13:23:01.920Z",
    "endpointArn": "arn:aws:sns:us-west-2:394986918768:endpoint/GCM/skybell-v3-google/1a7864ac-d0a4-3a7a-9ebf-f875a748ccb2",
    "id":          "895dc5e56c5f3be0780e3e8d"
}]

The id values can be used for the <App_ID> (combined with the same User_ID) in other requests that identify a specific app. This is different from the <App_UUID> which is provided as the appId value.

Get Device Avatar

GET https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/avatar/
GET https://cloud.myskybell.com/api/v3/devices/<Device_ID>/avatar/

Obtain the URL for the most recent avatar that a doorbell has provided, identified either by <Subscription_ID> or <Device_ID>. The avatar is typically updated once an hour. If there is a more recent activity then the media (and mediaSmall) values from the Get Activity List request may provide a more up to date image.

Example response body:

{
    "createdAt": "2017-05-12T13:23:01.920Z",
    "url":       "https://v3-production-devices-avatar.s3-us-west-2.amazonaws.com/ebe04fdd543efab2674f5349/1514057831865-1345.jpg?AWSAccessKeyId=ASIAJE3OFQLDLDZANIVA&Expires=1514057338&Signature=VGhlIGJ1bGxkb3plciBvdXRzaWRl&response-content-type=image/jpeg&x-amz-security-token=QXQgZWlnaHQgb%2BKAmWNsb2NrIG9uIFRodXJzZGF5IG1vcm5pbmcgQXJ0aHVyIGRpZG7igJl0IGZlZWwgdmVyeSBnb29kLiBIZQp3b2tlIHVwIGJsZWFyaWx5LCBnb3QgdXAsIHdhbmRlcmVkIGJsZWFyaWx5IHJvdW5kIGhpcyByb29tLCBvcGVuZWQgYSB3aW5kb3csCnNhdyBhIGJ1bGxkb3plciwgZm91bmQgaGlzIHNsaXBwZXJzLCBhbmQgc3RvbXBlZCBvZmYgdG8gdGhlIGJhdGhyb29tIHRvIHdhc2guClRvb3RocGFzdGUgb24gdGhlIGJydXNoIOKAkyBzby4gU2NydWIuClNoYXZpbmcgbWlycm9yIOKAkyBwb2ludGluZyBhdCB0aGUgY2VpbGluZy4gSGUgYWRqdXN0ZWQgaXQuIEZvciBhIG1vbWVudAppdCByZWZsZWN0ZWQgYSBzZWNvbmQgYnVsbGRvemVyIHRocm91Z2ggdGhlIGJhdGhyb29tIHdpbmRvdy4gUHJvcGVybHkgYWRqdXN0ZWQsCml0IHJlZmxlY3RlZCBBcnRodXIgRGVudOKAmXMgYnJpc3RsZXMuIEhlIHNoYXZ"
}

Get Device Information

GET https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/info/
GET https://cloud.myskybell.com/api/v3/devices/<Device_ID>/info/

Read details of a doorbell's hardware, software and network connection. The doorbell is identified either by <Subscription_ID> or <Device_ID>.

Example response body:

{
    "serialNo":         "448046263",
    "proxy_port":       "5683",
    "deviceId":         "ebe04fdd543efab2674f5349",
    "localHostname":    "ip-10-0-20-237.us-west-2.compute.internal",
    "firmwareVersion":  "1128",
    "port":             "5683",
    "timestamp":        "63681243536",
    "address":          "17.178.96.59",
    "proxy_address":    "52.35.62.157",
    "wifiNoise":        "-80",
    "wifiBitrate":      "72",
    "wifiLinkQuality":  "100",
    "wifiSnr":          "35",
    "mac":              "d0:c1:93:57:57:1a",
    "wifiTxPwrEeprom":  "12",
    "hardwareRevision": "SKYBELL_HD_3_1_1008848-009",
    "wifiSignalLevel":  "-45",
    "essid":            "Skynet Global Defense Network",
    "checkedInAt":      "2017-05-12T13:23:01.920Z",
    "status": {
        "wifiLink":     "good"
    }
}

Get Device Settings

GET https://cloud.myskybell.com/api/v3/subscriptions/<Subscription_ID>/settings/
GET https://cloud.myskybell.com/api/v3/devices/<Device_ID>/settings/

Read the current configuration of a doorbell, identified either by <Subscription_ID> or <Device_ID>.

Example response body:

{
    "ring_tone":          "0",
    "do_not_ring":        "false",
    "do_not_disturb":     "false",
    "digital_doorbell":   "false",
    "video_profile":      "1",
    "mic_volume":         "63",
    "speaker_volume":     "96",
    "chime_level":        "1",
    "motion_threshold":   "100",
    "low_lux_threshold":  "50",
    "med_lux_threshold":  "150",
    "high_lux_threshold": "400",
    "low_front_led_dac":  "220",
    "med_front_led_dac":  "195",
    "high_front_led_dac": "170",
    "green_r":            "255",
    "green_g":            "247",
    "green_b":            "235",
    "led_intensity":      "62",
    "motion_policy":      "disabled"
}

Refer to the description of Change Device Settings for an explanation of the returned values.

Get Devices List

GET https://cloud.myskybell.com/api/v3/devices/

Obtain a list of all devices associated with the account.

Example response body:

[{
    "user":              "734645249844ae47b3e020db",
    "uuid":              "448046263",
    "resourceId":        "785cc085bbe8627a59dfd304",
    "deviceInviteToken": "5d1218f62374f93c7969491c3f99dda4c5492f8b6e75a57d52fe4549585a310b",
    "location": {
        "lat":           "37.331686",
        "lng":           "-122.030656"
    },
    "name":              "Doorbell",
    "type":              "skybell hd",
    "status":            "up",
    "createdAt":         "2017-02-23T08:43:24.723Z",
    "updatedAt":         "2017-05-12T13:23:01.920Z",
    "timeZone": {
        "dstOffset":     3600,
        "rawOffset":     36000,
        "status":        "OK",
        "timeZoneId":    "Australia/Sydney",
        "timeZoneName":  "Australian Eastern Daylight Time"
    },
    "avatar": {
        "bucket":        "v3-production-devices-avatar",
        "key":           "ebe04fdd543efab2674f5349/1514057831865-1345.jpg",
        "createdAt":     "2017-05-12T13:23:01.920Z",
        "url":           "https://v3-production-devices-avatar.s3-us-west-2.amazonaws.com/ebe04fdd543efab2674f5349/1514057831865-1345.jpg?AWSAccessKeyId=ASIAJE3OFQLDLDZANIVA&Expires=1514057338&Signature=VGhlIGJ1bGxkb3plciBvdXRzaWRl&response-content-type=image/jpeg&x-amz-security-token=QXQgZWlnaHQgb%2BKAmWNsb2NrIG9uIFRodXJzZGF5IG1vcm5pbmcgQXJ0aHVyIGRpZG7igJl0IGZlZWwgdmVyeSBnb29kLiBIZQp3b2tlIHVwIGJsZWFyaWx5LCBnb3QgdXAsIHdhbmRlcmVkIGJsZWFyaWx5IHJvdW5kIGhpcyByb29tLCBvcGVuZWQgYSB3aW5kb3csCnNhdyBhIGJ1bGxkb3plciwgZm91bmQgaGlzIHNsaXBwZXJzLCBhbmQgc3RvbXBlZCBvZmYgdG8gdGhlIGJhdGhyb29tIHRvIHdhc2guClRvb3RocGFzdGUgb24gdGhlIGJydXNoIOKAkyBzby4gU2NydWIuClNoYXZpbmcgbWlycm9yIOKAkyBwb2ludGluZyBhdCB0aGUgY2VpbGluZy4gSGUgYWRqdXN0ZWQgaXQuIEZvciBhIG1vbWVudAppdCByZWZsZWN0ZWQgYSBzZWNvbmQgYnVsbGRvemVyIHRocm91Z2ggdGhlIGJhdGhyb29tIHdpbmRvdy4gUHJvcGVybHkgYWRqdXN0ZWQsCml0IHJlZmxlY3RlZCBBcnRodXIgRGVudOKAmXMgYnJpc3RsZXMuIEhlIHNoYXZ"
    },
    "id":                "ebe04fdd543efab2674f5349",
    "acl":               "owner"
}]

The id value can be used for the <Device_ID> in other requests that identify a specific doorbell.

⚠️ The last update to the avatar returned via this request appears to have been on the 17th October 2018. Use the Get Device Avatar request instead.

Get Subscriptions List

GET https://cloud.myskybell.com/api/v3/subscriptions?include=owner

Obtain a list of subscriptions (combination of <User_ID> and <Device_ID>) from which an app may register to receive mobile push notifications.

Example response body:

[{
    "user":           "734645249844ae47b3e020db",
    "owner": {
        "_id":        "734645249844ae47b3e020db",
        "firstName":  "Jane",
        "lastName":   "Doe",
        "resourceId": "fc154a179d696d988068409a",
        "createdAt":  "2017-01-05T13:29:48.847Z",
        "updatedAt":  "2017-01-05T13:29:48.847Z"
    },
    "device": {
        "uuid":       "448046263",
        "resourceId": "785cc085bbe8627a59dfd304",
        "name":       "Doorbell",
        "type":       "skybell hd",
        "status":     "up",
        "createdAt":  "2017-02-23T08:43:24.723Z",
        "updatedAt":  "2017-05-12T13:23:01.920Z",
        "id":         "ebe04fdd543efab2674f5349"
    },
    "acl":            "owner",
    "id":             "7686c1d0e6d4757bc52bcf20"
}]

The top-level id value (7686c1d0e6d4757bc52bcf20 in this example) can be used for the <Subscription_ID> in other requests.

Get User Information

GET https://cloud.myskybell.com/api/v3/users/me/
GET https://cloud.myskybell.com/api/v3/users/<User_ID>

Request information about either the logged-in user or a specific user identified by their User_ID. The response is the same as for the Login request except that it does not include an access_token value.

Example response body:

{
    "firstName":           "Jane",
    "lastName":            "Doe",
    "resourceId":          "fc154a179d696d988068409a",
    "createdAt":           "2017-01-05T13:29:48.847Z",
    "updatedAt":           "2017-01-05T13:29:48.847Z",
    "id":                  "734645249844ae47b3e020db",
    "userLinks": [{
        "user":            "734645249844ae47b3e020db",
        "type":            "oauth2",
        "partnerName":     "nest",
        "accessToken":     "c.RmFyIG91dCBpbiB0aGUgdW5jaGFydGVkIGJhY2t3YXRlcnMgb2YgdGhlIHVuZmFzaGlvbmFibGUgZW5kIG9mIHRoZSB3ZXN0ZXJuDQpzcGlyYWwgYXJtIG9mIHRoZSBHYWxheHkgbGllcyBh",
        "ttl":             null,
        "createdAt":       "2017-02-23T08:43:24.723Z",
        "updatedAt":       "2017-05-12T13:23:01.920Z",
        "meta": [{
            "deviceId":    "ebe04fdd543efab2674f5349",
            "structureId": "VGhlIG9ubHkgcGVyc29uIGZvciB3aG9tIHRoZSBob3VzZSB3YXMgaW",
            "deviceType":  "co_smoke_alarm"
        }],
        "id":              "e2448c262326ad63cc6bac07"
    }]
}

Register Application

POST https://cloud.myskybell.com/api/v3/register/

Register an application to receive mobile push notifications from Amazon SNS Mobile Push Notifications. Use the <App_UUID> (see Request Headers) for appId.

Example request body for APNs (Apple Push Notification service), with token set to the device token:

{
    "appId":    "A31E7DF3-E0A1-5422-B7C9-68526B43EDF9",
    "protocol": "apns",
    "token":    "FC69F14EDDADD554614AADE4AD06B6AB7E0DEE8163C7E14BBDB6D3E74B2B2B62"
}

Example request body for GCM (Google Cloud Messaging for Android), with token set to the registration ID:

{
    "appId":    "B3A12056-1830-5AAD-BC8D-57790E5A476A",
    "protocol": "gcm",
    "token":    "APA91bHPRgkF3JUikC4ENAHEeMrd41Zxv3hVZjC9KtT8OvPVGJ-hQMRKRrZuJAEcl7B338qju59zJMjw2DELjzEvxwYv7hH5Ynpc1ODQ0aT4U4OFEeco8ohsN5PjL1iC2dNtk2BAokeMCg2ZXKqpc8FXKmhX94kIxQ"
}

Example response body:

{
    "appId":       "A31E7DF3-E0A1-5422-B7C9-68526B43EDF9",
    "currentUser": "734645249844ae47b3e020db",
    "token":       "FC69F14EDDADD554614AADE4AD06B6AB7E0DEE8163C7E14BBDB6D3E74B2B2B62",
    "protocol":    "apns",
    "state":       "enabled",
    "createdAt":   "2017-01-05T13:29:48.847Z",
    "updatedAt":   "2017-01-05T13:29:48.847Z",
    "id":          "6792a8b9a80d64ff86237008",
    "endpointArn": "arn:aws:sns:us-west-2:394986918768:endpoint/APNS/skybell-v3/c2b82795-849e-3dfe-be21-281290257d06"
}

Unregister Application

POST https://cloud.myskybell.com/api/v3/unregister/

Unregister an application that was previously registered using the Register Application request. Use the <App_UUID> (see Request Headers) for appId.

Example request body:

{
    "appId": "A31E7DF3-E0A1-5422-B7C9-68526B43EDF9"
}

Example response body:

{
    "appId":       "A31E7DF3-E0A1-5422-B7C9-68526B43EDF9",
    "currentUser": null,
    "token":       "FC69F14EDDADD554614AADE4AD06B6AB7E0DEE8163C7E14BBDB6D3E74B2B2B62",
    "protocol":    "apns",
    "state":       "enabled",
    "createdAt":   "2017-01-05T13:29:48.847Z",
    "updatedAt":   "2017-01-05T13:29:48.847Z",
    "endpointArn": "arn:aws:sns:us-west-2:394986918768:endpoint/APNS/skybell-v3/c2b82795-849e-3dfe-be21-281290257d06",
    "id":          "6792a8b9a80d64ff86237008"
}