Sequenzy In App API
In-app messages and content cards created by sequence steps - a contact's feed, engagement events and step stats
In-app messages and content cards created by sequence steps - a contact's feed, engagement events and step stats
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/sequenzy:sequenzy-in-app-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Sequenzy In App API
description: Sequenzy API for managing subscribers, tags, events, sequences, and transactional emails
version: 1.0.0
servers:
- url: https://api.sequenzy.com/api/v1
description: Production server
- url: https://api.sequenzy.com/v1
description: Legacy production server alias
security:
- bearerAuth: []
tags:
- name: In App
description: In-app messages and content cards created by sequence steps - a contact's feed, engagement events and step stats
paths:
/in-app/messages:
get:
operationId: listInAppMessages
summary: List a contact's in-app messages
description: 'Lists a contact''s in-app messages and content cards, created by in_app sequence steps. With status open (default) it returns what the app should show now: messages not yet displayed, clicked or dismissed, and cards not dismissed, excluding expired items, messages first, then pinned cards, then newest. With status all it returns history, newest first. Identify the contact with email, externalId or subscriberId. Requires the subscribers:read scope.'
tags:
- In App
parameters:
- name: email
in: query
schema:
type: string
description: Contact email (case-insensitive).
- name: externalId
in: query
schema:
type: string
description: Contact external ID.
- name: subscriberId
in: query
schema:
type: string
- name: kind
in: query
schema:
type: string
enum:
- message
- card
- name: status
in: query
schema:
type: string
enum:
- open
- all
default: open
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 50
responses:
'200':
description: The contact's items
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
subscriberId:
type: string
status:
type: string
enum:
- open
- all
messages:
type: array
items:
$ref: '#/components/schemas/InAppMessage'
'400':
description: No contact identifier, or an invalid email
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing subscribers:read scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Contact not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/in-app/messages/{messageId}/events:
post:
operationId: recordInAppEvent
summary: Record an in-app event
description: Records that the app displayed, clicked, dismissed or read an item. The first report of each type sets its timestamp; repeats change nothing except clickCount, and recorded is false. Clicks, dismissals and reads also mark the item displayed. Messages leave the open feed once displayed, clicked or dismissed; cards once dismissed. Requires the subscribers:write scope.
tags:
- In App
parameters:
- name: messageId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- type
properties:
type:
type: string
enum:
- displayed
- clicked
- dismissed
- read
responses:
'200':
description: Event recorded (or already recorded)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
recorded:
type: boolean
description: True when this report set the timestamp; false for a repeat.
message:
$ref: '#/components/schemas/InAppMessage'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing subscribers:write scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Item not found in this workspace
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unknown event type
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/in-app/messages/{messageId}:
delete:
operationId: deleteInAppMessage
summary: Delete an in-app message
description: Deletes an item so the contact's app stops showing it the next time it fetches the feed. Its engagement no longer counts in step stats. Requires the subscribers:write scope.
tags:
- In App
parameters:
- name: messageId
in: path
required: true
schema:
type: string
responses:
'200':
description: Deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
messageId:
type: string
message:
type: string
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing subscribers:write scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Item not found in this workspace
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/in-app/templates:
get:
operationId: listInAppTemplates
summary: List in-app templates
description: Built-in starting points for in_app sequence steps. Each config is a complete step without a label; link buttons have no url until you add one. Requires the sequences:read scope.
tags:
- In App
responses:
'200':
description: Templates
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
templates:
type: array
items:
type: object
properties:
id:
type: string
example: trial-ending
name:
type: string
category:
type: string
enum:
- Conversion
- Onboarding
- Announcement
- Engagement
description:
type: string
config:
type: object
description: An in_app step config without a label.
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing sequences:read scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/in-app/copy:
post:
operationId: writeInAppCopy
summary: Write in-app copy
description: Writes an in-app message's eyebrow, title, message and button labels with AI from a brief. Nothing is saved. Requires the sequences:write scope; limited to 20 requests a minute per workspace.
tags:
- In App
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- brief
properties:
brief:
type: string
minLength: 3
maxLength: 1000
kind:
type: string
enum:
- message
- card
default: message
format:
type: string
enum:
- modal
- banner
- fullscreen
default: modal
hasImage:
type: boolean
default: false
responses:
'200':
description: Written copy
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
copy:
type: object
properties:
eyebrow:
type: string
title:
type: string
body:
type: string
buttons:
type: array
items:
type: object
properties:
label:
type: string
action:
type: string
enum:
- open_url
- dismiss
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing sequences:write scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Invalid body, such as a brief shorter than 3 characters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: More than 20 requests a minute for this workspace
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: The model failed or returned unusable copy; retry
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/in-app/steps/{stepId}/stats:
get:
operationId: getInAppStepStats
summary: Get in-app step stats
description: Created, displayed, clicked and dismissed counts for one in_app sequence step. Requires the sequences:read scope.
tags:
- In App
parameters:
- name: stepId
in: path
required: true
schema:
type: string
description: The step's node ID from Get Sequence.
responses:
'200':
description: Step stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
stepId:
type: string
sequenceId:
type: string
stats:
type: object
properties:
created:
type: integer
displayed:
type: integer
clicked:
type: integer
dismissed:
type: integer
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Missing sequences:read scope
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No in-app step with this ID in the workspace
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
InAppStyle:
type: object
description: Colors, corners and font to draw the item with. Resolved from the step's style preset and overrides against your brand (Email design settings) when the item was created. Colors are
properties:
preset:
type: string
enum:
- brand
- soft
- bold
- dark
backgroundColor:
type: string
textColor:
type: string
description: Title color.
mutedTextColor:
type: string
description: Body text color.
buttonColor:
type: string
description: Fill of the first link button. Other buttons are outlined in the text color.
buttonTextColor:
type: string
cornerRadius:
type: integer
minimum: 0
maximum: 32
buttonRadius:
type: integer
minimum: 0
maximum: 40
fontFamily:
type: string
description: CSS font stack from your brand settings.
InputIssue:
type: object
properties:
path:
type: string
description: Dotted field path, such as `audience.subscriberIds[0]`. Empty when the problem is with the request body itself.
example: kind
message:
type: string
description: What is wrong with the field.
example: must be "add_tags"
allowedValues:
type: array
description: Accepted values when the field only takes a fixed set of values.
items: {}
example:
- add_tags
required:
- path
- message
InAppMessage:
type: object
description: One item in a contact's in-app feed, with merge tags already resolved.
properties:
id:
type: string
kind:
type: string
enum:
- message
- card
description: 'message: modal, banner or fullscreen, shown once. card: stays in the card feed until dismissed.'
format:
type:
- string
- 'null'
enum:
- modal
- banner
- fullscreen
- null
description: How a message is shown; null for cards.
position:
type:
- string
- 'null'
enum:
- top
- bottom
- center
- null
description: 'Banners: top or bottom. Modals: bottom (a sheet rising from the bottom edge) or center. Null for full screens and cards.'
eyebrow:
type: string
description: Short line above the title, such as "3 days left"; empty when the step has none.
title:
type: string
body:
type: string
description: Plain text; may contain line breaks.
imageUrl:
type:
- string
- 'null'
imagePlacement:
type:
- string
- 'null'
enum:
- top
- background
- null
description: 'Modals and full screens with an image: top (image above the text) or background (image fills the message, text on a dark scrim over it). Null otherwise.'
buttons:
type: array
items:
type: object
properties:
label:
type: string
action:
type: string
enum:
- open_url
- dismiss
url:
type:
- string
- 'null'
description: https URL or app deep link for open_url buttons; null for dismiss.
data:
type: object
additionalProperties:
type: string
description: String key/values set on the step for your app's own logic.
style:
$ref: '#/components/schemas/InAppStyle'
pinned:
type: boolean
description: Cards only. Pinned cards sort first.
sequenceId:
type:
- string
- 'null'
stepId:
type:
- string
- 'null'
description: The sequence step (node) that created it.
createdAt:
type: string
format: date-time
expiresAt:
type:
- string
- 'null'
format: date-time
description: After this the item leaves the open feed. Messages default to 30 days; cards never expire unless the step sets it.
displayedAt:
type:
- string
- 'null'
format: date-time
clickedAt:
type:
- string
- 'null'
format: date-time
clickCount:
type: integer
dismissedAt:
type:
- string
- 'null'
format: date-time
readAt:
type:
- string
- 'null'
format: date-time
Error:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: Error message
code:
type: string
description: Optional stable machine-readable error discriminator when available.
example: COMPANY_CREATE_REQUIRES_PERSONAL_KEY
retryable:
type: boolean
description: Whether retrying the request can recover from the error.
issues:
type: array
description: Field-level problems with the request, when the endpoint reports them. Up to ten entries; `error` summarizes the first three.
items:
$ref: '#/components/schemas/InputIssue'
required:
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: API key passed as Bearer token