---
title: "Update a live notification"
method: POST
path: "/v1/live_notifications/update"
tags: ["Live Notifications"]
---

# Update a live notification

`POST /v1/live_notifications/update`

Push a new content state to a running activity, referenced by its `instance_id`. The device re-renders the activity from the state you send.

Send the **full** content state on every update, not just the fields that changed—the platforms don't support partial updates.

`push_payload` is optional on updates, whether Customer.io delivers directly through APNs or relays through Firebase Cloud Messaging (FCM). If you include a `push_payload.alert`, it must contain both a `title` and a `body`.

## Request body

- object
  - `instance_id` string, required — The activity's instance ID (ULID), returned when you started it.
  - `content_state` union, required — The complete new content state for the activity. The content state's shape depends on the activity's `notification_type`. For iOS or a free form Android activity, pick the free form variant. For other Android notification types, pick the matching variant below. Date fields are epoch seconds.
    - object — Your own dynamic fields. On iOS, field names must match your `ContentState` type. For Android custom types, fields pass through to your app's renderer as-is. Date fields are epoch seconds.
    - object — Dynamic fields for the multi-step tracker template. `notification_type`: `io.customer.livenotifications.segments`.
      - `status` string, required — Primary status line, like `Out for delivery`.
      - `substatus` string — Secondary line under the status.
      - `segmentsTotal` integer, required — The total number of segments in the progress bar. Values above 20 are capped at 20.
      - `segmentsComplete` integer, required — How many segments are filled; the remainder render as incomplete. Values above segmentsTotal are capped at segmentsTotal.
      - `trailingText` string — Short text on the Dynamic Island trailing edge, e.g. \"5 min\". Keep it brief; the trailing region is narrow.
    - object — Dynamic fields for the countdown timer template. `notification_type`: `io.customer.livenotifications.countdowntimer`.
      - `title` string, required — Primary status line.
      - `statusMessage` string — Secondary line under the title.
      - `endTime` integer — Countdown target, in whole seconds since 1970 UTC. A time in the future renders a live countdown; omit it to render no timer. The countdown does not clear itself when it reaches zero — it rests at \"0:00\" until you send an update with a finished title and no endTime.
  - `attributes` object — Static activity fields, for renderers that need them alongside the content state. On iOS, attributes can't change after start.
  - `push_payload` object — The alert to accompany the update. Optional whether Customer.io delivers directly through APNs or relays through Firebase Cloud Messaging (FCM). If you include an alert, provide both its `title` and `body`.
    - `alert` object
      - `title` string, required — The alert title.
      - `body` string, required — The alert body.
      - `sound` string — The sound to play with the update.
  - `deep_link` string — A link to open when the person taps the activity.

## Response `200`

The update was queued.

- object
  - `instance_id` string — The activity's instance ID.

## Other responses

- `400` — The request was malformed, `instance_id` isn't a valid ULID, or a `push_payload.alert` was missing a `title` or `body`.
- `404` — Live notifications aren't enabled for this workspace.

---

[API](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference.md) · [All operations](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/customer/customer-io-journeys-api-reference/revisions/5da2740beeb5/schema)
