Push
End a Live Activity
End a contact’s Live Activity on every device running it
POST
/
api
/
v1
/
push
/
live-activities
/
end
End a Live Activity
curl --request POST \
--url https://api.sequenzy.com/api/v1/push/live-activities/end \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activityId": "<string>",
"email": "<string>",
"subscriberId": "<string>",
"contentState": {},
"dismissalDate": {},
"alert": {},
"priority": "<string>",
"staleDate": {},
"relevanceScore": 123
}
'import requests
url = "https://api.sequenzy.com/api/v1/push/live-activities/end"
payload = {
"activityId": "<string>",
"email": "<string>",
"subscriberId": "<string>",
"contentState": {},
"dismissalDate": {},
"alert": {},
"priority": "<string>",
"staleDate": {},
"relevanceScore": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
activityId: '<string>',
email: '<string>',
subscriberId: '<string>',
contentState: {},
dismissalDate: {},
alert: {},
priority: '<string>',
staleDate: {},
relevanceScore: 123
})
};
fetch('https://api.sequenzy.com/api/v1/push/live-activities/end', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sequenzy.com/api/v1/push/live-activities/end",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'activityId' => '<string>',
'email' => '<string>',
'subscriberId' => '<string>',
'contentState' => [
],
'dismissalDate' => [
],
'alert' => [
],
'priority' => '<string>',
'staleDate' => [
],
'relevanceScore' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/push/live-activities/end"
payload := strings.NewReader("{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/push/live-activities/end")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/push/live-activities/end")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"event": "end",
"activityId": "order-1234",
"tokenCount": 1,
"jobIds": ["liveact-0d2e-0"],
"message": "End queued for 1 device."
}
{
"error": "dismissalDate: Use Unix seconds or an ISO 8601 date"
}
{
"error": "Invalid API key"
}
{ "success": false, "error": "Expected property 'contentState' to be object" }
{
"error": "API key is missing required scope: transactional:send"
}
{
"error": "Subscriber not found."
}
Ends a contact’s activity on every device running it. Each token is marked
ended once APNs accepts the push, so you can send an end again if one failed. Requires the transactional:send scope.
Without dismissalDate, iOS keeps an ended activity on the Lock Screen for up to four hours. Pass 0 or a past date to remove it right away.
Request
string
required
The activity to end.
string
Contact whose activity it is. Provide
email or subscriberId.string
Subscriber whose activity it is.
object
required
Final content shown until the activity is removed. Apple’s end payloads
always include it, and iOS can drop an end without it.
integer | string
When to remove it: Unix seconds or an ISO 8601 date.
object
Optional
title, body and sound.string
default:"high"
high or low, as for updates.integer | string
Unix seconds or an ISO 8601 date.
number
Orders a person’s concurrent activities.
curl -X POST "https://api.sequenzy.com/api/v1/push/live-activities/end" \
--header "Authorization: Bearer $SEQUENZY_API_KEY" \
--header "Content-Type: application/json" \
--data '{"email":"jane@example.com","activityId":"order-1234","contentState":{"status":"delivered","minutesAway":0},"dismissalDate":"2026-10-20T18:00:00Z"}'
Responses
A body with a missing or mistyped field is rejected with422 before any other check; invalid ids, dates and the missing contact return 400.
{
"success": true,
"event": "end",
"activityId": "order-1234",
"tokenCount": 1,
"jobIds": ["liveact-0d2e-0"],
"message": "End queued for 1 device."
}
{
"error": "dismissalDate: Use Unix seconds or an ISO 8601 date"
}
{
"error": "Invalid API key"
}
{ "success": false, "error": "Expected property 'contentState' to be object" }
{
"error": "API key is missing required scope: transactional:send"
}
{
"error": "Subscriber not found."
}
⌘I
End a Live Activity
curl --request POST \
--url https://api.sequenzy.com/api/v1/push/live-activities/end \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activityId": "<string>",
"email": "<string>",
"subscriberId": "<string>",
"contentState": {},
"dismissalDate": {},
"alert": {},
"priority": "<string>",
"staleDate": {},
"relevanceScore": 123
}
'import requests
url = "https://api.sequenzy.com/api/v1/push/live-activities/end"
payload = {
"activityId": "<string>",
"email": "<string>",
"subscriberId": "<string>",
"contentState": {},
"dismissalDate": {},
"alert": {},
"priority": "<string>",
"staleDate": {},
"relevanceScore": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
activityId: '<string>',
email: '<string>',
subscriberId: '<string>',
contentState: {},
dismissalDate: {},
alert: {},
priority: '<string>',
staleDate: {},
relevanceScore: 123
})
};
fetch('https://api.sequenzy.com/api/v1/push/live-activities/end', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sequenzy.com/api/v1/push/live-activities/end",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'activityId' => '<string>',
'email' => '<string>',
'subscriberId' => '<string>',
'contentState' => [
],
'dismissalDate' => [
],
'alert' => [
],
'priority' => '<string>',
'staleDate' => [
],
'relevanceScore' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/push/live-activities/end"
payload := strings.NewReader("{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/push/live-activities/end")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/push/live-activities/end")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"activityId\": \"<string>\",\n \"email\": \"<string>\",\n \"subscriberId\": \"<string>\",\n \"contentState\": {},\n \"dismissalDate\": {},\n \"alert\": {},\n \"priority\": \"<string>\",\n \"staleDate\": {},\n \"relevanceScore\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"event": "end",
"activityId": "order-1234",
"tokenCount": 1,
"jobIds": ["liveact-0d2e-0"],
"message": "End queued for 1 device."
}
{
"error": "dismissalDate: Use Unix seconds or an ISO 8601 date"
}
{
"error": "Invalid API key"
}
{ "success": false, "error": "Expected property 'contentState' to be object" }
{
"error": "API key is missing required scope: transactional:send"
}
{
"error": "Subscriber not found."
}