Carson Living Python API
Python Carson Living is a library written in Python that exposes the carson.live devices as Python objects.
Tutorial
This walks through installing the library, logging in, and opening a unit door end to end.
Install the package
Carson Living Python requires Python 3.11 or newer.
pip install carson-living-electric-boogaloo
Log in and inspect the account
from carson_living import Carson
carson = Carson("account@email.com", "your password")
print(carson.user)
# >> Martin
print(carson.token)
# >> ey...
Carson Living issues long-lived JWT tokens. Copy the printed carson.token value now; Reuse a saved token below covers skipping the login request on future runs.
Open a unit door
for door in carson.first_building.doors:
if door.is_unit_door:
print("Opening Unit Door {}".format(door.name))
door.open()
How-to guides
Reuse a saved token
Pass a saved JWT token during initialization to skip the login request:
carson = Carson("account@email.com", "your password", "ey....")
print(carson.token)
# >> ey...
Save a live camera image
for camera in building.cameras:
with open("image_{}.jpeg".format(camera.entity_id), "wb") as file:
camera.get_image(file)
Save a live camera video
for camera in building.cameras:
with open("video_{}.flv".format(camera.entity_id), "wb") as file:
camera.get_video(file, timedelta(seconds=10))
Download a recorded image from a timestamp
three_hours_ago = datetime.utcnow() - timedelta(hours=3)
for camera in building.cameras:
with open("image_{}.jpeg".format(camera.entity_id), "wb") as file:
camera.get_image(file, three_hours_ago)
Download a recorded video from a timestamp
three_days_ago = datetime.utcnow() - timedelta(days=3)
for cam in building.cameras:
with open("video_{}.flv".format(cam.entity_id), "wb") as file:
cam.get_video(file, timedelta(seconds=5), three_days_ago)
Generate an authenticated camera URL
camera.get_image_url() and camera.get_video_url() build a URL with an embedded auth_key (A=c000....) that something outside this library can fetch directly. Call building.eagleeye_api.update_session_auth_key() first if the building’s key may be stale; get_image() and get_video() don’t need this since they refresh internally.
building.eagleeye_api.update_session_auth_key()
for cam in building.cameras:
img_url = cam.get_image_url(three_days_ago)
print(img_url)
# >> https://cXXX.eagleeyenetworks.com/asset/prev/image.jpeg?id=c0×tamp=20200122211442.575&asset_class=pre&A=c000~...
response = requests.get(img_url)
with open("image_{}_with_url.jpeg".format(cam.entity_id), "wb") as file:
file.write(response.content)
break # only fetch one camera in this example
Use cam.get_video_url() the same way.
Use the CLI tool
./scripts/carsoncli.py has further API usage examples.
Reference
Supported entities
User (carson.user): read
Building (carson.buildings): read
Doors (building.doors): read, open
Cameras (building.cameras): read, images, video
Not yet supported
Visitor functionality (/visitors)
Thread / messaging functionality (/threads)
Delivery functionality (/deliveries)
Dashboard functionality (/dashboard)
Service functionality (/service)
Twilio integration (twilio/access-token/)
A separate EagleEye API package
Install the development version
pip install git+https://github.com/lowlydba/python-carson-living@main
Explanation
Why tokens are long-lived
Carson Living issues JWT tokens with a long validity window, so this library treats carson.token as reusable across process restarts rather than something to re-fetch on every run. It also handles expired tokens and the resulting 401 responses internally, so a caller doesn’t need to check token validity before making a request.
Why Eagle Eye auth keys need refreshing
get_image() and get_video() refresh the Eagle Eye auth_key on demand, but a pre-generated URL from get_image_url()/get_video_url() embeds whatever key was current at call time and stops working once that key expires. The key is scoped to a building rather than a single camera, so one update_session_auth_key() call covers every camera in that building.
Code documentation style
Docstrings follow the Google Python Style Guide.
Git branching strategy
This project uses gitflow as its branching model.
Credits
This project is a fork of pbrink231/python-carson-living, itself forked from Martin Riedel’s original rado0x54/python-carson-living.
Project setup and the API object design were inspired by, and partly launched off, python-ring-doorbell, which saved a lot of headaches with tox, setuptools, and Travis.
Metadata
Release files for carson-living-electric-boogaloo 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| carson_living_electric_boogaloo-0.1.1.tar.gz | 28.1 kB | With provenance | Details for carson_living_electric_boogaloo-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| carson_living_electric_boogaloo-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for carson_living_electric_boogaloo-0.1.1-py3-none-any.whl |
Total release size: 51.6 kB
Release files / carson_living_electric_boogaloo-0.1.1.tar.gz
| Download URL | carson_living_electric_boogaloo-0.1.1.tar.gz |
|---|---|
| Size | 28.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
04a2c7ee2c2eb6963c3cd64720ac074e8b9ec0ad1d695a626137514211e31ece
|
|
BLAKE2b-256 checksum How to use checksums |
cf42d6541b5b7b63605caaf6fe9289133851941c1bdf4a83001f0692d638afb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / carson_living_electric_boogaloo-0.1.1-py3-none-any.whl
| Download URL | carson_living_electric_boogaloo-0.1.1-py3-none-any.whl |
|---|---|
| Size | 23.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b7ab294d0df9652969b137415359e93bf275bec71aca908eb7bbed5ebe3a3a03
|
|
BLAKE2b-256 checksum How to use checksums |
671c66c56b4160fc1d5e36b173d7b09fda0dfee63bb83e3aefda0a6783e66948
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logSecurity for carson-living-electric-boogaloo 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for carson_living_electric_boogaloo-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.