In-app
List In-App Messages
Get a contact’s in-app messages and content cards
GET
/
api
/
v1
/
in-app
/
messages
List In-App Messages
curl --request GET \
--url https://api.sequenzy.com/api/v1/in-app/messages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/in-app/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/in-app/messages', 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/in-app/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/in-app/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sequenzy.com/api/v1/in-app/messages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/in-app/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"subscriberId": "sub_456",
"status": "open",
"messages": [
{
"id": "iam_123",
"kind": "message",
"format": "banner",
"position": "top",
"title": "Your trial ends in 3 days, Jane",
"body": "Upgrade to keep your sequences running.",
"imageUrl": null,
"buttons": [
{
"label": "Upgrade",
"action": "open_url",
"url": "https://app.example.com/billing"
}
],
"data": { "screen": "billing" },
"pinned": false,
"sequenceId": "seq_789",
"stepId": "node_321",
"createdAt": "2026-10-11T09:00:00.000Z",
"expiresAt": "2026-11-10T09:00:00.000Z",
"displayedAt": null,
"clickedAt": null,
"clickCount": 0,
"dismissedAt": null,
"readAt": null
}
]
}
{
"error": "Provide email, externalId or subscriberId to identify the contact."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: subscribers:read"
}
{
"error": "Subscriber not found."
}
Returns a contact’s in-app messages and content cards, which in-app sequence steps create. Call it from your backend (or a backend that serves your mobile app) and render the items in your app. Requires the
subscribers:read scope.
With status=open (the default) you get what the app should show now:
- messages that were not yet displayed, clicked or dismissed
- cards that were not dismissed
- nothing that has expired
status=all you get the contact’s history, newest first.
For browser apps that call Sequenzy directly, use the public feed instead.
Request
Identify the contact with one ofemail, externalId or subscriberId.
string
Contact email (case-insensitive).
string
Contact external ID, for example your user ID.
string
Sequenzy subscriber ID.
string
message for modals, banners and full-screen messages, or card for content
cards. Omit for both.string
default:"open"
open for what to show now, or all for history.number
default:"50"
Maximum items, 1 to 100.
curl "https://api.sequenzy.com/api/v1/in-app/messages?email=jane@example.com" \
--header "Authorization: Bearer $SEQUENZY_API_KEY"
Response
array
Items with merge tags already filled in. Render
title and body as plain text.Show item
Show item
string
Item ID, used when reporting events.
string
message or card.string | null
modal, banner or fullscreen for messages; null for cards.string | null
top or bottom for banners; otherwise null.string
Title text.
string
Message text; may contain line breaks.
string | null
https image.
array
Up to 2
{ label, action, url } buttons. action is open_url (open url, an https link or app deep link) or dismiss.object
String key/values set on the step for your app’s own logic.
boolean
Cards only; pinned cards sort before other cards. Open messages come before all cards.
string | null
Sequence that created it.
string | null
Sequence step that created it.
string
ISO timestamp.
string | null
When it leaves the open feed. Messages default to 30 days; cards never expire unless the step sets it.
string | null
First displayed report.
string | null
First clicked report.
number
Every clicked report.
string | null
First dismissed report.
string | null
First read report.
{
"success": true,
"subscriberId": "sub_456",
"status": "open",
"messages": [
{
"id": "iam_123",
"kind": "message",
"format": "banner",
"position": "top",
"title": "Your trial ends in 3 days, Jane",
"body": "Upgrade to keep your sequences running.",
"imageUrl": null,
"buttons": [
{
"label": "Upgrade",
"action": "open_url",
"url": "https://app.example.com/billing"
}
],
"data": { "screen": "billing" },
"pinned": false,
"sequenceId": "seq_789",
"stepId": "node_321",
"createdAt": "2026-10-11T09:00:00.000Z",
"expiresAt": "2026-11-10T09:00:00.000Z",
"displayedAt": null,
"clickedAt": null,
"clickCount": 0,
"dismissedAt": null,
"readAt": null
}
]
}
{
"error": "Provide email, externalId or subscriberId to identify the contact."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: subscribers:read"
}
{
"error": "Subscriber not found."
}
⌘I
List In-App Messages
curl --request GET \
--url https://api.sequenzy.com/api/v1/in-app/messages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/in-app/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/in-app/messages', 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/in-app/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/in-app/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sequenzy.com/api/v1/in-app/messages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/in-app/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"subscriberId": "sub_456",
"status": "open",
"messages": [
{
"id": "iam_123",
"kind": "message",
"format": "banner",
"position": "top",
"title": "Your trial ends in 3 days, Jane",
"body": "Upgrade to keep your sequences running.",
"imageUrl": null,
"buttons": [
{
"label": "Upgrade",
"action": "open_url",
"url": "https://app.example.com/billing"
}
],
"data": { "screen": "billing" },
"pinned": false,
"sequenceId": "seq_789",
"stepId": "node_321",
"createdAt": "2026-10-11T09:00:00.000Z",
"expiresAt": "2026-11-10T09:00:00.000Z",
"displayedAt": null,
"clickedAt": null,
"clickCount": 0,
"dismissedAt": null,
"readAt": null
}
]
}
{
"error": "Provide email, externalId or subscriberId to identify the contact."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: subscribers:read"
}
{
"error": "Subscriber not found."
}