---
title: Live Activities · BuzzKit
description: Start, update and end iOS Live Activities through the same API that sends your push.
canonical: https://buzzkit.dev/features/live-activities
last-updated: 2026-09-02
---

# Live Activities on the lock screen. Start, update, end.

A Live Activity keeps a delivery, a ride or a match score on the lock screen and in the Dynamic Island. The SDK registers the tokens, and your backend drives every state change through one endpoint with the same credentials as your push.

## One endpoint for the whole lifecycle

Send a start event with the attributes and the first content state, an update event as it progresses, and an end event when it is over. Each call reports the APNs outcome per token.

```
POST /v1/live-activities/send
{
  "to": "user_42",
  "event": "update",
  "activityId": "order_9f2",
  "contentState": { "stopsAway": 4, "eta": "12 min" },
  "alert": {
    "title": "Out for delivery",
    "body": "4 stops away."
  }
}
```

## Tokens handled by the SDK

Activity tokens change, and push-to-start tokens arrive before any activity exists. The SDK registers both against the subscriber and refreshes them on every update, so your backend only addresses a subscriber and an activity id.

```
POST /v1/client/live-activities
{
  "externalId": "user_42",
  "kind": "activity",
  "activityId": "order_9f2",
  "attributesType": "DeliveryAttributes",
  "token": "…"
}
```

## Ended activities and the event stream

When the app or the user ends an activity, the SDK marks it ended and the timeline records it, alongside started, dismissed and stale events. A segment or workflow reacts to them like any other event.

```
POST /v1/live-activities/send
{
  "to": "user_42",
  "event": "end",
  "activityId": "order_9f2",
  "contentState": { "status": "delivered" },
  "alert": {
    "title": "Delivered",
    "body": "Left at the front door."
  }
}
```

## Capabilities

- **Start from the server.** Open an activity on a device with a push-to-start token.
- **Per-token outcomes.** Each send reports what APNs answered per token.
- **Attributes and content state.** ActivityKit attributes and dynamic state as plain JSON.
- **Alerts on update.** Attach an alert so an update also notifies.
- **Sandbox and production.** The environment picks the APNs credential, like any push.
- **Ledger like everything else.** The same delivery span and error taxonomy as push.

## Questions

### How do I update a Live Activity from my backend?

Post to /v1/live-activities/send with the subscriber id, the activity id, event update and the new content state. BuzzKit finds the token and reports what APNs answered.

### Can I start a Live Activity without the user opening the app?

Yes, once the SDK has registered a push-to-start token for that activity type. Send a start event with the attributes and the first content state.

### Does this work for Android?

Live Activities are an iOS feature, and iOS is where BuzzKit starts. Android follows on the same core.

## Related

- [iOS SDK](https://buzzkit.dev/features/ios-sdk.md): Registration, identity, events, action buttons and a notification settings screen in one Swift package.
- [Sending](https://buzzkit.dev/features/sending.md): One POST sends to a subscriber, a topic or a segment and lands on every device.
- [Delivery](https://buzzkit.dev/features/delivery.md): A durable queue, progressive retries, and a ledger of every attempt to every device.

## Start

- [Start sending](https://buzzkit.dev/dashboard)
- [API Reference](https://docs.buzzkit.dev)
- [BuzzKit on GitHub](https://github.com/buzzkit-dev/buzzkit)
