Skip to content

Live Activity Templates Reference

Complete reference for all eight built-in Live Activity templates — their slugs, attributes (static data), content state (dynamic data), and how they render across views.

How Templates Work

Each Live Activity uses a template that defines the layout. You provide two types of data:

  • Attributes — Static data set once when the activity starts. Cannot be changed after creation.
  • Content State — Dynamic data that you update over time via the API.

All values in both attributes and contentState must be strings.


status-tracker

Slug: status-tracker

A step-by-step progress indicator with ETA. Ideal for deliveries, order fulfillment, and multi-stage workflows.

Attributes (static)

FieldTypeRequiredDescription
titlestringYesHeader text (e.g., "Order #1234")
stepsstringYesComma-separated step names (e.g., "Confirmed,Preparing,On the way,Delivered")

Content State (dynamic)

FieldTypeRequiredDescription
currentStepstringYesZero-based index of the active step (e.g., "2")
statusstringYesCurrent status text (e.g., "Driver is 5 minutes away")
etastringNoEstimated time (e.g., "12:35 PM")
statusIconstringNoSF Symbol name for the compact view (e.g., "car.fill")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Order #1234               12:35 PM │
│                                     │
│  ●━━━━●━━━━◉╌╌╌╌○                  │
│  Confirmed  Preparing  On the way  Delivered │
│                                     │
│  🚗  Driver is 5 minutes away      │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌──────────────────────────┐
│  🚗  On the way · 12:35  │
└──────────────────────────┘

Android Ongoing Notification:

┌─────────────────────────────────────┐
│  📦 YourApp                ongoing  │
│  Order #1234 · On the way           │
│  ●━━●━━◉╌╌○  ETA 12:35 PM          │
└─────────────────────────────────────┘

Example

bash
curl -X POST https://api.nativesuite.io/api/apps/{appId}/live-activities \
  -H "X-NativeSuite-Key: {secret}" \
  -H "Content-Type: application/json" \
  -d '{
    "templateSlug": "status-tracker",
    "attributes": {
      "title": "Order #1234",
      "steps": "Confirmed,Preparing,On the way,Delivered"
    },
    "contentState": {
      "currentStep": "2",
      "status": "Driver is 5 minutes away",
      "eta": "12:35 PM",
      "statusIcon": "car.fill"
    }
  }'

metric-live

Slug: metric-live

A large number with trend indicator. Ideal for stock prices, live scores, counters.

Attributes (static)

FieldTypeRequiredDescription
labelstringYesMetric label (e.g., "AAPL", "Home Team")

Content State (dynamic)

FieldTypeRequiredDescription
valuestringYesCurrent value (e.g., "$187.42", "3")
changestringNoChange amount (e.g., "+2.3%", "+1")
trendstringNoDirection: up, down, or neutral

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  AAPL                               │
│                                     │
│  $187.42                            │
│  ▲ +2.3%                            │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌───────────────────────┐
│  AAPL  $187.42  ▲     │
└───────────────────────┘

Example

bash
curl -X PATCH https://api.nativesuite.io/api/apps/{appId}/live-activities/{id} \
  -H "X-NativeSuite-Key: {secret}" \
  -H "Content-Type: application/json" \
  -d '{
    "contentState": {
      "value": "$189.10",
      "change": "+0.9%",
      "trend": "up"
    }
  }'

countdown

Slug: countdown

A live countdown timer. Ideal for auctions, reservations, event starts.

Attributes (static)

FieldTypeRequiredDescription
labelstringYesTitle (e.g., "Auction Ending")
subtitlestringNoOptional subtitle (e.g., "Lot #42 — Vintage Watch")

Content State (dynamic)

FieldTypeRequiredDescription
targetDatestringYes*ISO 8601 timestamp to count down to (e.g., "2026-04-21T18:00:00Z")
remainingstringNoFallback text if targetDate is not set (e.g., "04:32")

* Either targetDate or remaining must be provided.

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Auction Ending                     │
│  Lot #42 — Vintage Watch            │
│                                     │
│           02:14:38                   │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌─────────────────────────┐
│  ⏱  Auction  02:14:38   │
└─────────────────────────┘

Example

json
{
  "templateSlug": "countdown",
  "attributes": {
    "label": "Auction Ending",
    "subtitle": "Lot #42 — Vintage Watch"
  },
  "contentState": {
    "targetDate": "2026-04-21T18:00:00Z"
  }
}

progress-bar

Slug: progress-bar

A progress bar with percentage. Ideal for uploads, processing jobs, goals.

Attributes (static)

FieldTypeRequiredDescription
labelstringYesTitle (e.g., "Uploading report.pdf")

Content State (dynamic)

FieldTypeRequiredDescription
progressstringYesPercentage as a number string, 0–100 (e.g., "73")
detailstringNoOptional detail text (e.g., "3.2 MB of 4.4 MB")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Uploading report.pdf               │
│                                     │
│  ████████████��███░░░░░░░  73%       │
│  3.2 MB of 4.4 MB                   │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌────────────────────���────┐
│  📄  Uploading  73%     │
└─────────────────────────┘

Example

json
{
  "templateSlug": "progress-bar",
  "attributes": {
    "label": "Uploading report.pdf"
  },
  "contentState": {
    "progress": "73",
    "detail": "3.2 MB of 4.4 MB"
  }
}

two-column

Slug: two-column

Two side-by-side metrics. Ideal for comparisons, versus scores, before/after.

Attributes (static)

FieldTypeRequiredDescription
titlestringYesHeader text (e.g., "Lakers vs Celtics")

Content State (dynamic)

FieldTypeRequiredDescription
leftValuestringYesLeft metric value (e.g., "102")
leftLabelstringYesLeft metric label (e.g., "LAL")
rightValuestringYesRight metric value (e.g., "98")
rightLabelstringYesRight metric label (e.g., "BOS")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Lakers vs Celtics                  │
│                                     │
│      LAL          BOS               │
│      102    —     98                │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌───────────────────────────┐
│  LAL 102  —  BOS 98       │
└───────────────────────────┘

Example

json
{
  "templateSlug": "two-column",
  "attributes": {
    "title": "Lakers vs Celtics"
  },
  "contentState": {
    "leftValue": "102",
    "leftLabel": "LAL",
    "rightValue": "98",
    "rightLabel": "BOS"
  }
}

key-value-list

Slug: key-value-list

A list of key-value pairs. Ideal for flight info, booking details, order summaries.

Attributes (static)

FieldTypeRequiredDescription
titlestringYesHeader text (e.g., "Flight BA204")

Content State (dynamic)

FieldTypeRequiredDescription
itemsstringYesComma-separated key:value pairs (e.g., "Gate:B12,Boarding:12:45 PM,Status:Boarding")
primaryValuestringNoValue shown in compact views (e.g., "Gate B12")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Flight BA204                       │
│                                     │
│  Gate         B12                   │
│  Boarding     12:45 PM              │
│  Status       Boarding              │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌──────────────────────��────┐
│  ✈  BA204  Gate B12       │
└───────────────────────────┘

Example

json
{
  "templateSlug": "key-value-list",
  "attributes": {
    "title": "Flight BA204"
  },
  "contentState": {
    "items": "Gate:B12,Boarding:12:45 PM,Status:Boarding",
    "primaryValue": "Gate B12"
  }
}

image-banner

Slug: image-banner

A title and subtitle with status text. Ideal for events, promotions, live broadcasts.

Attributes (static)

This template has no static attributes.

Content State (dynamic)

FieldTypeRequiredDescription
titlestringYesMain title (e.g., "Summer Sale")
subtitlestringNoSubtitle text (e.g., "Up to 40% off all items")
statusstringNoStatus badge text (e.g., "LIVE NOW")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Summer Sale             LIVE NOW   │
│                                     │
│  Up to 40% off all items            │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌───────────────────────────┐
│  🔴 LIVE  Summer Sale     │
└───────────────────────────┘

Example

json
{
  "templateSlug": "image-banner",
  "contentState": {
    "title": "Summer Sale",
    "subtitle": "Up to 40% off all items",
    "status": "LIVE NOW"
  }
}

mini-table

Slug: mini-table

A small grid of stats. Ideal for sports box scores, dashboards, multi-metric summaries.

Attributes (static)

FieldTypeRequiredDescription
titlestringYesHeader text (e.g., "Box Score")

Content State (dynamic)

FieldTypeRequiredDescription
rowsstringYesComma-separated label:value pairs (e.g., "Q1:28-24,Q2:31-27,Q3:22-25,Q4:21-22")
primaryValuestringNoValue shown in compact views (e.g., "102-98")

Views

Lock Screen / Expanded Notification:

┌─────────────────────────────────────┐
│  Box Score                          │
│                                     │
│  Q1      28-24                      │
│  Q2      31-27                      │
│  Q3      22-25                      │
│  Q4      21-22                      │
└─────────────────────────────────────┘

Dynamic Island (Compact):

┌─────────────────────────┐
│  🏀  Box Score  102-98  │
└─────────────────────────┘

Example

json
{
  "templateSlug": "mini-table",
  "attributes": {
    "title": "Box Score"
  },
  "contentState": {
    "rows": "Q1:28-24,Q2:31-27,Q3:22-25,Q4:21-22",
    "primaryValue": "102-98"
  }
}

Template Quick Reference

SlugBest ForAttributesContent State
status-trackerDeliveries, order fulfillmenttitle, stepscurrentStep, status, eta, statusIcon
metric-liveStock prices, scores, counterslabelvalue, change, trend
countdownAuctions, reservations, eventslabel, subtitletargetDate, remaining
progress-barUploads, processing, goalslabelprogress, detail
two-columnComparisons, versus scorestitleleftValue, leftLabel, rightValue, rightLabel
key-value-listFlight info, booking detailstitleitems, primaryValue
image-bannerEvents, promotions, broadcaststitle, subtitle, status
mini-tableBox scores, dashboardstitlerows, primaryValue

General Notes

  • All values are strings — both attributes and contentState use string values, not numbers or booleans
  • Attributes are immutable — set once when the activity starts, cannot be changed via update
  • Content state replaces entirely — each update sends the full content state, not a partial diff
  • Compact views use primaryValue (where available) or the most prominent dynamic field
  • Dynamic Island is iOS-only (16.1+). Android renders all templates as ongoing notifications
  • See the Live Activities guide for usage patterns and best practices
  • See the Live Activities API reference for endpoint details

Ship native mobile experiences without building an app.