Widgets
Update Popup
Update, publish, or unpublish a saved popup
PATCH
/
api
/
v1
/
popups
/
{popupId}
Update Popup
curl --request PATCH \
--url https://api.sequenzy.com/api/v1/popups/{popupId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"status": "<string>",
"listIds": [
"<string>"
],
"tagIds": [
"<string>"
],
"duplicateStrategy": "<string>",
"headline": "<string>",
"description": "<string>",
"buttonText": "<string>",
"successMessage": "<string>",
"redirectUrl": "<string>",
"presentation": "<string>",
"placement": "<string>",
"trigger": {},
"targeting": {},
"schedule": {},
"frequency": {},
"visual": {},
"theme": {},
"blocks": [
{}
]
}
'import requests
url = "https://api.sequenzy.com/api/v1/popups/{popupId}"
payload = {
"name": "<string>",
"status": "<string>",
"listIds": ["<string>"],
"tagIds": ["<string>"],
"duplicateStrategy": "<string>",
"headline": "<string>",
"description": "<string>",
"buttonText": "<string>",
"successMessage": "<string>",
"redirectUrl": "<string>",
"presentation": "<string>",
"placement": "<string>",
"trigger": {},
"targeting": {},
"schedule": {},
"frequency": {},
"visual": {},
"theme": {},
"blocks": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
status: '<string>',
listIds: ['<string>'],
tagIds: ['<string>'],
duplicateStrategy: '<string>',
headline: '<string>',
description: '<string>',
buttonText: '<string>',
successMessage: '<string>',
redirectUrl: '<string>',
presentation: '<string>',
placement: '<string>',
trigger: {},
targeting: {},
schedule: {},
frequency: {},
visual: {},
theme: {},
blocks: [{}]
})
};
fetch('https://api.sequenzy.com/api/v1/popups/{popupId}', 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/popups/{popupId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'status' => '<string>',
'listIds' => [
'<string>'
],
'tagIds' => [
'<string>'
],
'duplicateStrategy' => '<string>',
'headline' => '<string>',
'description' => '<string>',
'buttonText' => '<string>',
'successMessage' => '<string>',
'redirectUrl' => '<string>',
'presentation' => '<string>',
'placement' => '<string>',
'trigger' => [
],
'targeting' => [
],
'schedule' => [
],
'frequency' => [
],
'visual' => [
],
'theme' => [
],
'blocks' => [
[
]
]
]),
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/popups/{popupId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.sequenzy.com/api/v1/popups/{popupId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/popups/{popupId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"popup": {
"id": "pop_123",
"name": "Welcome offer",
"status": "published",
"viewCount": 1840,
"conversionCount": 96
},
"embed": {
"scriptUrl": "https://sequenzy.com/embed/popups/pop_123?v=capture-runtime-20260716-14"
},
"message": "Popup updated."
}
{ "error": "Click-triggered popups require a click selector." }
{
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "error": "API key is missing required scope: widgets:write" }
{ "error": "Popup not found" }
{ "error": "Failed to update popup." }
Update a saved popup. Only the fields you send change.
Set
Unpublish a popup without deleting it:
status to published to make the popup live, or draft to stop it
showing while keeping the popup, its stats, and its embed script. The
trigger, targeting, schedule, frequency, and visual objects are merged
key by key, so patching one key keeps the rest.
Request
string
Internal popup name.
string
draft or published.string[]
Replacement list targeting. Pass an empty array to capture into every list.
string[]
Replacement tag IDs. Pass an empty array to clear tags.
string
skip, merge, or overwrite.string
New text for the popup’s first heading block. Fails when the popup has no
heading block; edit
blocks instead.string
New text for the popup’s first paragraph block. Fails when the popup has no
paragraph block; edit
blocks instead.string
Submit button label.
string
Success screen message.
string
HTTP or HTTPS success redirect. Pass an empty string to switch back to the
confirmation message.
string
modal, slide-in, floating-bar, or fullscreen.string
center, left, right, top, or bottom.object
Partial trigger patch, merged into the current trigger.
object
Partial targeting patch, merged into the current targeting.
object
Partial schedule patch, merged into the current schedule.
object
Partial frequency patch, merged into the current frequency.
object
Partial visual patch, merged into the current visual.
object
Theme overrides merged into the current theme.
object[]
Complete replacement for the popup’s content blocks. Read the current blocks
with Get Popup first. The popup must keep
exactly one required email field and one submit button.
curl -X PATCH "https://api.sequenzy.com/api/v1/popups/pop_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"headline": "Take 15% off your first order",
"targeting": { "paths": ["/pricing"], "device": "desktop" }
}'
curl -X PATCH "https://api.sequenzy.com/api/v1/popups/pop_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "draft" }'
Responses
{
"success": true,
"popup": {
"id": "pop_123",
"name": "Welcome offer",
"status": "published",
"viewCount": 1840,
"conversionCount": 96
},
"embed": {
"scriptUrl": "https://sequenzy.com/embed/popups/pop_123?v=capture-runtime-20260716-14"
},
"message": "Popup updated."
}
{ "error": "Click-triggered popups require a click selector." }
{
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "error": "API key is missing required scope: widgets:write" }
{ "error": "Popup not found" }
{ "error": "Failed to update popup." }
⌘I
Update Popup
curl --request PATCH \
--url https://api.sequenzy.com/api/v1/popups/{popupId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"status": "<string>",
"listIds": [
"<string>"
],
"tagIds": [
"<string>"
],
"duplicateStrategy": "<string>",
"headline": "<string>",
"description": "<string>",
"buttonText": "<string>",
"successMessage": "<string>",
"redirectUrl": "<string>",
"presentation": "<string>",
"placement": "<string>",
"trigger": {},
"targeting": {},
"schedule": {},
"frequency": {},
"visual": {},
"theme": {},
"blocks": [
{}
]
}
'import requests
url = "https://api.sequenzy.com/api/v1/popups/{popupId}"
payload = {
"name": "<string>",
"status": "<string>",
"listIds": ["<string>"],
"tagIds": ["<string>"],
"duplicateStrategy": "<string>",
"headline": "<string>",
"description": "<string>",
"buttonText": "<string>",
"successMessage": "<string>",
"redirectUrl": "<string>",
"presentation": "<string>",
"placement": "<string>",
"trigger": {},
"targeting": {},
"schedule": {},
"frequency": {},
"visual": {},
"theme": {},
"blocks": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
status: '<string>',
listIds: ['<string>'],
tagIds: ['<string>'],
duplicateStrategy: '<string>',
headline: '<string>',
description: '<string>',
buttonText: '<string>',
successMessage: '<string>',
redirectUrl: '<string>',
presentation: '<string>',
placement: '<string>',
trigger: {},
targeting: {},
schedule: {},
frequency: {},
visual: {},
theme: {},
blocks: [{}]
})
};
fetch('https://api.sequenzy.com/api/v1/popups/{popupId}', 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/popups/{popupId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'status' => '<string>',
'listIds' => [
'<string>'
],
'tagIds' => [
'<string>'
],
'duplicateStrategy' => '<string>',
'headline' => '<string>',
'description' => '<string>',
'buttonText' => '<string>',
'successMessage' => '<string>',
'redirectUrl' => '<string>',
'presentation' => '<string>',
'placement' => '<string>',
'trigger' => [
],
'targeting' => [
],
'schedule' => [
],
'frequency' => [
],
'visual' => [
],
'theme' => [
],
'blocks' => [
[
]
]
]),
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/popups/{popupId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.sequenzy.com/api/v1/popups/{popupId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/popups/{popupId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"status\": \"<string>\",\n \"listIds\": [\n \"<string>\"\n ],\n \"tagIds\": [\n \"<string>\"\n ],\n \"duplicateStrategy\": \"<string>\",\n \"headline\": \"<string>\",\n \"description\": \"<string>\",\n \"buttonText\": \"<string>\",\n \"successMessage\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"presentation\": \"<string>\",\n \"placement\": \"<string>\",\n \"trigger\": {},\n \"targeting\": {},\n \"schedule\": {},\n \"frequency\": {},\n \"visual\": {},\n \"theme\": {},\n \"blocks\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"popup": {
"id": "pop_123",
"name": "Welcome offer",
"status": "published",
"viewCount": 1840,
"conversionCount": 96
},
"embed": {
"scriptUrl": "https://sequenzy.com/embed/popups/pop_123?v=capture-runtime-20260716-14"
},
"message": "Popup updated."
}
{ "error": "Click-triggered popups require a click selector." }
{
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "error": "API key is missing required scope: widgets:write" }
{ "error": "Popup not found" }
{ "error": "Failed to update popup." }