Live Activities for real-time business updates

Keep revenue, sales, uptime, deploys, jobs, AI agent runs, and any other live data from your business visible on your iPhone Lock Screen in real time.

Six Live Activity types

Choose the Live Activity type that best fits what you want to keep visible, then send updates whenever the underlying state changes.

Stats

Best for showing business numbers side by side: revenue, sales, new users, conversion, uptime, refunds, or any other value you want visible at a glance.

Stats Live Activity on iPhone

Progress

Best for tracking real-time progress with percentage, like tasks, backups, migrations, syncs, or uploads.

Progress Live Activity on iPhone

Alert

Best for status updates with a clear message, badge, or icon: incidents, escalations, feature adoption, reactivation, onboarding friction, and customer journey moments.

Alert Live Activity on iPhone

Timer

Use it when you need a countdown or timer to stay visible on the Lock Screen.

Timer Live Activity showing a benchmark run countdown

Start or update with PUT

Use PUT /api/live-activity/stream/:stream_key to start a Live Activity, then call it again with fresh data whenever something changes.

The stream_key is your name for the thing being tracked, like daily-revenue, prod-web-1, or nightly-backup. Use the same key each time so ActivitySmith knows which Live Activity to update.

The response tells you whether ActivitySmith started, updated, or skipped the update because nothing changed.

Metrics Live Activity on iPhone
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: "%" },
],
},
});

End the Live Activity with DELETE

When the tracked metric, job, deploy, or incident is done, call DELETE /api/live-activity/stream/:stream_key with the same key to dismiss the Live Activity.

You can include an optional content_state with the final values. 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.

Finished Metrics Live Activity on iPhone
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,
},
});

Add action buttons

Live Activities can include an action button. Alert, progress, and segmented progress Live Activities can also include a secondary action button beside the primary action.

Metrics Live Activity with an action button

Action types

  • - open_url: open a dashboard, runbook, GitHub run, or Apple Shortcut with a shortcuts:// URL.
  • - webhook: trigger a backend GET/POST workflow, like retrying a job, pausing a deploy, or acknowledging an incident.

Use Apple Shortcuts when the next step lives on your device. A Live Activity can open an app or start a local automation on your iPhone or iPad.

Open URL Action

Open the GitHub run, deploy page, dashboard, or runbook behind the Live Activity.

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: "Open Workflow",
type: "open_url",
url: "https://github.com/acme/payments/actions/runs/123456789",
},
});

Apple Shortcut Action

Run a Shortcut when the next step should happen on your iPhone or iPad.

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",
},
});

Webhook Action

Call a backend endpoint from the Live Activity button.

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: "Pause Deploy",
type: "webhook",
url: "https://hooks.example.com/deployments/pause",
method: "POST",
body: {
deployment: "payments-api",
run_id: "123456789",
},
},
});

Secondary Action

Use secondary_action when you want a second button beside the primary action. The secondary action button is supported for alert, progress, and segmented_progress Live Activities. Both buttons use the same open_url, webhook, and Apple Shortcut payload shapes.

Alert Live Activity with primary and secondary action buttons
await activitysmith.liveActivities.stream("agent-approval", {
content_state: {
title: "Approval Needed",
message: "Should I send the follow-up email to Brightlane?",
type: "alert",
color: "green",
icon: {
symbol: "sparkles",
color: "green",
},
badge: {
title: "Agent",
color: "green",
},
},
action: {
title: "Send",
type: "webhook",
url: "https://agent.example.com/live-activity/approve",
method: "POST",
body: {
approval_id: "approval_01JY3J7Q9S0P8M1V5PZK7DR4M2",
decision: "send",
},
},
secondary_action: {
title: "Deny",
type: "webhook",
url: "https://agent.example.com/live-activity/deny",
method: "POST",
body: {
approval_id: "approval_01JY3J7Q9S0P8M1V5PZK7DR4M2",
decision: "deny",
},
},
});

Integrate in minutes

Pick your stack and start triggering Live Activities from your backend in a few lines of code.

Frequently asked questions

Can I show business metrics in iOS Live Activities?

Yes. If you can send the value through an API, ActivitySmith can show it in a Live Activity. Common examples include revenue, sales, signups, uptime, server health, job progress, and AI agent runs.

How does ActivitySmith know which Live Activity to update?

You choose a stable stream_key for the metric, process, or system you are tracking, such as daily-revenue, prod-web-1, or nightly-backup. Send the same stream_key again whenever the value changes.

What happens when I send a stream update?

If there is no active Live Activity for that stream_key, ActivitySmith starts one. If one already exists, ActivitySmith updates it with the new content_state.

Can I use ActivitySmith Live Activities for deployments, CI jobs, and AI agent runs?

Yes. Live Activities also work well for deployments, build pipelines, cron jobs, ETL runs, and AI agent workflows where teams want persistent lock-screen visibility while work is in progress.

Can Live Activities include action buttons?

Yes. Use action for a primary button. alert, progress, and segmented_progress Live Activities can also include secondary_action for a second button. Buttons can open HTTP or HTTPS URLs, run Apple Shortcuts with shortcuts:// URLs, or trigger backend webhooks.

Do I need to build my own iOS app to send Live Activities?

No. ActivitySmith provides the iOS app and delivery plumbing. Your backend sends the event data, and ActivitySmith delivers the Live Activity to your team's paired iPhone and iPad devices.

Keep the numbers that matter visible on your team's iOS devices

Give your team one persistent view of revenue, sales, uptime, jobs, and operational progress. When the work is done, the Live Activity is automatically dismissed. Pair it with Push Notifications for final outcomes and one-off alerts.