Zapier
By ActivitySmith
Use the official Node.js SDK to send immediate Push Notifications and update Live Activities from JavaScript and TypeScript backends.
npm i activitysmithimport ActivitySmith from "activitysmith";const activitysmith = new ActivitySmith({ apiKey: process.env.ACTIVITYSMITH_API_KEY!,});Send an immediate notification for a completed task or event:

await activitysmith.notifications.send({ title: "New subscription 💸", message: "Customer upgraded to Pro plan",});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.

await 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",});
.jpg, .png, .gif, etc..mp3, .m4a, etc..mp4, .mov, etc.Content-Type, even if the path has no extensionmedia can be combined with redirection, but not with actions.
Push notification redirection and actions are optional. Use them to open HTTPS URLs, run a specific iPhone Shortcut with a shortcuts://run-shortcut?name=... URL, or trigger backend webhook workflows.

await activitysmith.notifications.send({ title: "New subscription 💸", message: "Customer upgraded to Pro plan", redirection: "https://crm.example.com/customers/cus_9f3a1d", actions: [ { title: "Open CRM Profile", type: "open_url", url: "https://crm.example.com/customers/cus_9f3a1d", }, { title: "Chat with Jarvis", type: "open_url", url: "shortcuts://run-shortcut?name=Jarvis", }, { title: "Start Onboarding Workflow", type: "webhook", url: "https://hooks.example.com/activitysmith/onboarding/start", method: "POST", body: { customer_id: "cus_9f3a1d", plan: "pro", }, }, ],});Choose the Live Activity type that matches what you want to show:

Show up to 8 labeled values on your Lock Screen, from revenue and orders to uptime and conversion.

Track two related values with segmented bars, such as CPU and memory.

Show progress through a known set of steps, like build, test, deploy, and verify.

Show percentage progress for jobs that move continuously toward completion.

Show status updates with a clear message, badge, and icon. When you add an action button, color controls the button tint.

Count down from a duration, or count up from 00:00 while a job runs.
Use a stable streamKey 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 streamKey update it.

await activitysmith.liveActivities.stream("sales-hourly", { content_state: { title: "Sales", subtitle: "last hour", type: "stats", metrics: [ { label: "Revenue", value: "$2430", color: "blue" }, { label: "Orders", value: "37", color: "green" }, { label: "Conversion", value: "4.8%", color: "magenta" }, { label: "Avg Order", value: "$65.68", color: "yellow" }, { label: "Refunds", value: "$84", color: "red" }, { label: "New Buyers", value: "18", color: "cyan" }, ], },});
await activitysmith.liveActivities.stream("prod-web-1", { content_state: { title: "Server Health", subtitle: "prod-web-1", type: "metrics", metrics: [ { label: "CPU", value: 9, unit: "%" }, { label: "MEM", value: 45, unit: "%" }, ], },});
await activitysmith.liveActivities.stream("nightly-backup", { content_state: { title: "Nightly Backup", subtitle: "upload archive", type: "segmented_progress", number_of_steps: 3, current_step: 2, },});
await activitysmith.liveActivities.stream("search-reindex", { content_state: { title: "Search Reindex", subtitle: "catalog-v2", type: "progress", percentage: 42, },});
await activitysmith.liveActivities.stream("customer-ops", { content_state: ActivitySmith.contentState({ title: "Reactivation", message: "Lumen came back after 2 weeks", type: "alert", icon: ActivitySmith.alertIcon("cloud.sun", { color: "yellow" }), badge: ActivitySmith.alertBadge("Customer", { color: "magenta" }), }),});The icon.symbol value is an Apple SF Symbol name. Browse the catalog with one of these tools:

await activitysmith.liveActivities.stream("benchmark-run", { content_state: { title: "Benchmark Run", subtitle: "sampling", type: "timer", duration_seconds: 300, color: "cyan", },});For a countdown, send duration_seconds. You can update title, subtitle, color, or any other visible field as the work changes. Leave duration_seconds out unless you want to change the timer.
To start at 00:00 and count up, set counts_down: false and leave out duration_seconds.
Call endStream(...) with the same streamKey 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.
await activitysmith.liveActivities.endStream("prod-web-1", { content_state: { title: "Server Health", subtitle: "prod-web-1", type: "metrics", metrics: [ { label: "CPU", value: 7, unit: "%" }, { label: "MEM", value: 38, unit: "%" }, ], auto_dismiss_minutes: 2, },});Live Activities can include one optional action button.
open_url: open an HTTPS URL.open_url with a shortcuts:// URL: run an Apple Shortcut, for example to open an app.webhook: trigger a backend GET/POST workflow.
await activitysmith.liveActivities.stream("prod-web-1", { content_state: { title: "Server Health", subtitle: "prod-web-1", type: "metrics", metrics: [ { label: "CPU", value: 76, unit: "%" }, { label: "MEM", value: 52, unit: "%" }, ], }, action: { title: "Dashboard", type: "open_url", url: "https://ops.example.com/servers/prod-web-1", },});await activitysmith.liveActivities.stream("deploy-payments-api", { content_state: { title: "Deploying payments-api", subtitle: "Running database migrations", type: "segmented_progress", number_of_steps: 5, current_step: 3, }, action: { title: "Chat with Jarvis", type: "open_url", url: "shortcuts://run-shortcut?name=Jarvis", },});await activitysmith.liveActivities.stream("search-reindex", { content_state: { title: "Reindexing product search", subtitle: "Shard 7 of 12", type: "segmented_progress", number_of_steps: 12, current_step: 7, }, 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-node", }, },});Add more context to Live Activities with icons and badges.
Supported Live Activity types: stats, metrics, progress, segmented_progress, and alert.
await activitysmith.liveActivities.stream("prod-web-1", { content_state: ActivitySmith.contentState({ title: "Server Health", subtitle: "prod-web-1", type: "metrics", icon: ActivitySmith.alertIcon("server.rack", { color: "blue" }), metrics: [ { label: "CPU", value: 18, unit: "%" }, { label: "MEM", value: 42, unit: "%" }, ], }),});The icon.symbol value is an Apple SF Symbol name. Browse the catalog with one of these tools:
Badges are supported by alert, progress, and segmented_progress Live Activities.

await activitysmith.liveActivities.stream("nightly-database-backup", { content_state: ActivitySmith.contentState({ title: "Nightly Database Backup", subtitle: "verify restore", type: "progress", badge: ActivitySmith.alertBadge("S3", { color: "cyan" }), percentage: 62, }),});Choose from these colors for the Live Activity accent, including progress bars and action buttons, or apply them to an individual icon or badge:

ActivitySmith lets you display any value on your Lock Screen with widgets - SaaS metrics, revenue, number of users, uptime, 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.

await activitysmith.metrics.update("deploy.success_rate", 99.9);String metric values work too.
await activitysmith.metrics.update("prod.status", "healthy");Keep your team aligned with immediate event delivery across incidents, business signals, and automation outcomes.
Connect ActivitySmith to automation and delivery platforms, then route runtime events to Push Notifications and Live Activities on your iOS devices.
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith

By ActivitySmith
By ActivitySmith
By ActivitySmith

By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith
By ActivitySmith