Live Activities EndpointsView Markdown ↗

End Live Activity

End a Live Activity (legacy manual lifecycle)

Legacy manual lifecycle endpoint. For new integrations, use DELETE /live-activity/stream/{stream_key} to end a managed Live Activity stream. This endpoint remains supported for existing integrations and advanced lifecycle control. Ends a Live Activity and archives its lifecycle. Supports segmented_progress, progress, metrics, stats, alert, timer, and value activity types. For segmented_progress activities, you can send the latest number_of_steps here if the workflow changed after start. Use secondary_action for a second button on alert, progress, segmented_progress, and value Live Activities.

POST https://activitysmith.com/api/live-activity/end

Authentication#

Use your API key in the request header.

Authorization: Bearer $YOUR_API_KEY

Request examples#

import ActivitySmith from "activitysmith";
const activitysmith = new ActivitySmith({
apiKey: process.env.ACTIVITYSMITH_API_KEY,
});
await activitysmith.liveActivities.end({
activity_id: "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
content_state: {
title: "Nightly database backup",
subtitle: "verify restore",
number_of_steps: 3,
current_step: 3,
auto_dismiss_minutes: 2,
},
});

Bodyapplication/json

End an existing Live Activity by activity_id.

metadataMetadata
activity_idstringrequired
tagsarray of string
Tags for notification history. Omit to keep existing Tags, supply an array to replace them, or send an empty array to clear them.
Max Items: 20 Item constraints:
Min Length: 1
Max Length: 64
content_stateContentStateEndrequired
actionLiveActivityAction
secondary_actionLiveActivityAction
Optional secondary action button. Supported for alert, progress, segmented_progress, and value Live Activities. Uses the same open_url, shortcuts://, and webhook shapes as action.

Additional Properties: false

segmented progress

{
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"content_state": {
"title": "Nightly database backup",
"subtitle": "verify restore",
"number_of_steps": 3,
"current_step": 3,
"auto_dismiss_minutes": 2
}
}

progress

{
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"content_state": {
"title": "EV Charging",
"subtitle": "Added 200 mi range",
"percentage": 100,
"auto_dismiss_minutes": 2
}
}

metrics

{
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"content_state": {
"title": "Server Health",
"subtitle": "prod-web-1",
"type": "metrics",
"metrics": [
{
"label": "CPU",
"value": 0,
"unit": "%"
},
{
"label": "MEM",
"value": 0,
"unit": "%"
}
],
"auto_dismiss_minutes": 2
}
}

open url action

{
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"content_state": {
"title": "Deploying payments-api",
"subtitle": "Production rollout complete",
"number_of_steps": 5,
"current_step": 5,
"auto_dismiss_minutes": 10
},
"action": {
"title": "Open Workflow",
"type": "open_url",
"url": "https://github.com/acme/payments-api/actions/runs/1234567890"
}
}

timer

{
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"content_state": {
"title": "Benchmark Run",
"subtitle": "complete",
"type": "timer",
"auto_dismiss_minutes": 2
}
}

Responses#

200#

Live Activity ended

Content type: application/json

Schema: LiveActivityEndResponse#

Returned after a Live Activity end event is sent or queued.

successbooleanrequired
activity_idstringrequired
devices_queuedinteger
devices_notifiedinteger
timestampstring<date-time>required

Additional Properties: false

segmented progress

{
"success": true,
"activity_id": "pLAr-Hnq9ZFW4sxlk43Lhbuok4GLh7UW",
"devices_notified": 2,
"devices_queued": 0,
"timestamp": "2026-01-28T09:57:29.258Z"
}

403#

Forbidden (activity not owned by this API key account)

Content type: application/json

Schema: ForbiddenError#

errorstringrequired
messagestringrequired

Additional Properties: true

forbidden

{
"error": "Forbidden",
"message": "This API key cannot end this Live Activity"
}

429#

Rate limit exceeded

Content type: application/json

Schema: RateLimitError#

codestring
Enum: ["rate_limited"]
errorstringrequired
messagestringrequired

Additional Properties: false

rate limited

{
"error": "Rate limit exceeded",
"message": "Too many requests, please try again later."
}

Download the OpenAPI specification