Official ActivitySmith Python SDK
Project description
ActivitySmith Python Library
The ActivitySmith Python library provides convenient access to the ActivitySmith API from Python applications.
Documentation
See the API reference.
Table of Contents
Installation
This package is available on PyPI:
pip install activitysmith
Alternatively, install from source with:
python -m pip install .
Setup
import os
from activitysmith import (
ActivitySmith,
action,
alert_badge,
alert_icon,
content_state,
metric,
)
activitysmith = ActivitySmith(
api_key=os.environ["ACTIVITYSMITH_API_KEY"],
)
Push Notifications
Send a Push Notification
activitysmith.notifications.send(
title="New subscription 💸",
message="Customer upgraded to Pro plan",
)
Rich Push Notifications with Media
activitysmith.notifications.send(
title="Homepage ready",
message="Your agent finished the redesign.",
media="https://cdn.example.com/output/homepage-v2.png",
redirection="https://github.com/acme/web/pull/482",
)
Send images, videos, or audio with your push notifications, press and hold to preview media directly from the notification, then tap through to open the linked content.
What will work:
- direct image URL:
.jpg,.png,.gif, etc. - direct audio file URL:
.mp3,.m4a, etc. - direct video file URL:
.mp4,.mov, etc. - URL that responds with a proper media
Content-Type, even if the path has no extension
Actionable Push Notifications
Actionable push notifications can open a URL on tap or trigger actions when someone long-presses the notification. Webhooks are executed by the ActivitySmith backend.
activitysmith.notifications.send(
title="New subscription 💸",
message="Customer upgraded to Pro plan",
redirection="https://crm.example.com/customers/cus_9f3a1d", # Optional
actions=[ # Optional (max 4)
action(
title="Open CRM Profile",
type="open_url",
url="https://crm.example.com/customers/cus_9f3a1d",
),
action(
title="Start Onboarding Workflow",
type="webhook",
url="https://hooks.example.com/activitysmith/onboarding/start",
method="POST",
body={
"customer_id": "cus_9f3a1d",
"plan": "pro",
},
),
],
)
Live Activities
There are five types of Live Activities:
stats: best for showing business numbers side by side, such as revenue, sales, new users, conversion, refunds, or any other value you want visible at a glancemetrics: best for live percentage values that change often, like server CPU, memory usage, disk usage, or error ratesegmented_progress: best for anything that moves through clear stages, like deployments, onboarding flows, backups, ETL pipelines, migrations, and AI agent runsprogress: best for tracking real-time progress with percentage, like tasks, backups, migrations, syncs, or uploadsalert: best for status updates, such as feature adoption, reactivation, onboarding blockers, incidents, escalations, and other operational states
Start & Update Live Activity
Use a stable stream_key to identify the metric, job, deployment, or system you want to keep visible. The first stream(...) call starts the Live Activity. Later calls with the same stream_key update it.
Stats
activitysmith.live_activities.stream(
"sales-hourly",
content_state=content_state(
title="Sales",
subtitle="last hour",
type="stats",
metrics=[
metric(label="Revenue", value="$2430", color="blue"),
metric(label="Orders", value="37", color="green"),
metric(label="Conversion", value="4.8%", color="magenta"),
metric(label="Avg Order", value="$65.68", color="yellow"),
metric(label="Refunds", value="$84", color="red"),
metric(label="New Buyers", value="18", color="cyan"),
],
),
)
Metrics
activitysmith.live_activities.stream(
"prod-web-1",
content_state=content_state(
title="Server Health",
subtitle="prod-web-1",
type="metrics",
metrics=[
metric(label="CPU", value=9, unit="%"),
metric(label="MEM", value=45, unit="%"),
],
),
)
Segmented Progress
activitysmith.live_activities.stream(
"nightly-backup",
content_state=content_state(
title="Nightly Backup",
subtitle="upload archive",
type="segmented_progress",
number_of_steps=3,
current_step=2,
),
)
Progress
activitysmith.live_activities.stream(
"search-reindex",
content_state=content_state(
title="Search Reindex",
subtitle="catalog-v2",
type="progress",
percentage=42,
),
)
Alert
activitysmith.live_activities.stream(
"customer-ops",
content_state=content_state(
title="Reactivation",
message="Lumen came back after 2 weeks",
type="alert",
icon=alert_icon("cloud.sun", color="yellow"),
badge=alert_badge("Customer", color="magenta"),
),
)
End Live Activity
Call end_stream(...) with the same stream_key to dismiss the Live Activity. You can include final values before it is removed. By default, iOS removes the Live Activity after two minutes. Set auto_dismiss_minutes to choose a different dismissal time, including 0 for immediate dismissal.
activitysmith.live_activities.end_stream(
"prod-web-1",
content_state=content_state(
title="Server Health",
subtitle="prod-web-1",
type="metrics",
metrics=[
metric(label="CPU", value=7, unit="%"),
metric(label="MEM", value=38, unit="%"),
],
auto_dismiss_minutes=2,
),
)
Live Activity Action
Live Activities can include one optional action button. Use it to open a URL from the Live Activity or trigger a backend webhook.
For Alert Live Activities, set content_state.color to tint the action button. icon.color and badge.color only affect the icon and badge.
Open URL action
activitysmith.live_activities.stream(
"prod-web-1",
content_state=content_state(
title="Server Health",
subtitle="prod-web-1",
type="metrics",
metrics=[
metric(label="CPU", value=76, unit="%"),
metric(label="MEM", value=52, unit="%"),
],
),
action=action(
title="Open Dashboard",
type="open_url",
url="https://ops.example.com/servers/prod-web-1",
),
)
Webhook action
activitysmith.live_activities.stream(
"search-reindex",
content_state=content_state(
title="Reindexing product search",
subtitle="Shard 7 of 12",
type="segmented_progress",
number_of_steps=12,
current_step=7,
),
action=action(
title="Pause Reindex",
type="webhook",
url="https://ops.example.com/hooks/search/reindex/pause",
method="POST",
body={
"job_id": "reindex-2026-03-19",
"requested_by": "activitysmith-python",
},
),
)
Icons and Badges
Add more context to Live Activities with icons and badges.
Icon
Supported Live Activity types: stats, metrics, progress, segmented_progress, and alert.
activitysmith.live_activities.stream(
"prod-web-1",
content_state=content_state(
title="Server Health",
subtitle="prod-web-1",
type=activitysmith.live_activities.TYPE_METRICS,
icon=alert_icon("server.rack", color="blue"),
metrics=[
metric(label="CPU", value=18, unit="%"),
metric(label="MEM", value=42, unit="%"),
],
),
)
The icon.symbol value is an Apple SF Symbol name. Browse the catalog with one of these tools:
- ActivitySmith app - Open Settings -> SF Symbols to browse 45 hand-picked icons ready to use
- SF Symbols - Apple's official macOS app
- Interactful - free third-party iOS app listing all SF Symbols under Foundations -> Iconography
Badge
Badges are supported by alert, progress, and segmented_progress Live Activities.
activitysmith.live_activities.stream(
"nightly-database-backup",
content_state=content_state(
title="Nightly Database Backup",
subtitle="verify restore",
type=activitysmith.live_activities.TYPE_PROGRESS,
badge=alert_badge("S3", color="cyan"),
percentage=62,
),
)
Live Activity Colors
Choose from these colors for the Live Activity accent, including progress bars and action buttons, or apply them to an individual icon or badge:
lime, green, cyan, blue, purple, magenta, red, orange, yellow, gray
Channels
Channels are used to target specific team members or devices. Can be used for both push notifications and live activities.
activitysmith.notifications.send(
title="New subscription 💸",
message="Customer upgraded to Pro plan",
channels=["sales", "customer-success"], # Optional
)
Widgets
ActivitySmith lets you display any value on your Lock Screen with widgets - SaaS metrics, revenue, signups, uptime, habits, or anything else you want to track. Create a metric in the web app, then update the metric value using our API, add a widget to your lock screen and it will fetch the latest update automatically.
activitysmith.metrics.update("deploy.success_rate", 99.9)
String metric values work too.
activitysmith.metrics.update("prod.status", "healthy")
Error Handling
try:
activitysmith.notifications.send(
title="New subscription 💸",
)
except Exception as err:
print("Request failed:", err)
Request/response models are included and can be imported from activitysmith_openapi.models.
Requirements
- Python 3.9 or newer
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file activitysmith-1.6.0.tar.gz.
File metadata
- Download URL: activitysmith-1.6.0.tar.gz
- Upload date:
- Size: 55.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
024ab7a86abf0b9ee9cbea7396b2c17ad552a0d373a8c38c7962e02f73cbb23c
|
|
| MD5 |
4768d8cb2be3b6433be12da5aa02471b
|
|
| BLAKE2b-256 |
348d1b80359e23738b1dee79f0d727c9336ea9d378b98f5b1094e23631b8d8e3
|
Provenance
The following attestation bundles were made for activitysmith-1.6.0.tar.gz:
Publisher:
publish.yml on ActivitySmithHQ/activitysmith-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
activitysmith-1.6.0.tar.gz -
Subject digest:
024ab7a86abf0b9ee9cbea7396b2c17ad552a0d373a8c38c7962e02f73cbb23c - Sigstore transparency entry: 1690805521
- Sigstore integration time:
-
Permalink:
ActivitySmithHQ/activitysmith-python@21c3a563ef098d5e84f01b99b53d95c4c5255969 -
Branch / Tag:
refs/tags/v1.6.0 - Owner: https://github.com/ActivitySmithHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@21c3a563ef098d5e84f01b99b53d95c4c5255969 -
Trigger Event:
push
-
Statement type:
File details
Details for the file activitysmith-1.6.0-py3-none-any.whl.
File metadata
- Download URL: activitysmith-1.6.0-py3-none-any.whl
- Upload date:
- Size: 137.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a2d5a080170734a8a930bc8f85bce30ea4aed97850b95f1f67dc915a3b6e3fb
|
|
| MD5 |
5523dea3d17ad382648c86efdbb04230
|
|
| BLAKE2b-256 |
b72303988de76e5268044262ea8fe0cf2353dcfe38fa4492288307f932587123
|
Provenance
The following attestation bundles were made for activitysmith-1.6.0-py3-none-any.whl:
Publisher:
publish.yml on ActivitySmithHQ/activitysmith-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
activitysmith-1.6.0-py3-none-any.whl -
Subject digest:
7a2d5a080170734a8a930bc8f85bce30ea4aed97850b95f1f67dc915a3b6e3fb - Sigstore transparency entry: 1690805552
- Sigstore integration time:
-
Permalink:
ActivitySmithHQ/activitysmith-python@21c3a563ef098d5e84f01b99b53d95c4c5255969 -
Branch / Tag:
refs/tags/v1.6.0 - Owner: https://github.com/ActivitySmithHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@21c3a563ef098d5e84f01b99b53d95c4c5255969 -
Trigger Event:
push
-
Statement type: