Skip to main content
In-app messages let you show modals, banners, and bottom sheets inside your mobile app. Templates are created in the Masivo dashboard; your app fetches eligible messages and reports impressions through the Storefront API.

How in-app messages work

Messages are materialized per customer when a template is scheduled to an audience, sent as a test, or delivered through a journey. Each row in inapp_messages stores the rendered content, display rules, and delivery metadata. Your mobile app:
  1. Calls GET /inapp/capabilities to know whether in-app is enabled and which journey event types support real-time delivery.
  2. Calls GET /customers/{id}/inapp-messages after app open or when a trigger event fires.
  3. Renders the message using the type and content fields.
  4. Calls POST /customers/{id}/inapp-messages/{messageId}/events for each impression action.

Message lifecycle

StatusDescription
pendingEligible for display; may still accept more shown events if under max_impressions
shownLast action was shown and impression cap was reached
clickedCustomer tapped a button or primary action
dismissedCustomer closed the message
expiredexpires_at is in the past

Message types

TypeUse case
modalCentered dialog over the current screen
fullscreenFull-screen takeover
slideupBottom sheet style panel
bannerTop or bottom banner

Template configuration

FieldTypeDescription
namestringUnique template name per account
message_typeenumOne of the message types above
content.titlestringHeadline text
content.bodystringMain copy (required in dashboard)
content.image_urlstringOptional hero image URL
content.buttonsarrayPrimary, dismiss, and deeplink buttons
display_rules.max_impressionsnumberMax times a customer can see the message (default 1)
display_rules.min_interval_secondsnumberMinimum gap between shown events
display_rules.prioritynumberHigher values win when multiple messages are eligible
team_idsstring[]Restrict analytics visibility to assigned teams

Delivery sources

SourceTrigger
scheduledAudience schedule from the dashboard
testTest send to a selected audience
journeyJourney node with an in-app action
Journey-connected templates can also trigger real-time delivery: when a qualifying event is emitted, Masivo materializes the message and sends a silent push to customers with a registered device token and push consent. Your app should handle that payload and refresh via GET /customers/{id}/inapp-messages. Use GET /inapp/capabilities to read the supported eventTypes.

Tracking events

Each impression action emits a resolved tracking event:
ActionEvent type
shownINAPP_SHOWN
clickedINAPP_CLICKED
dismissedINAPP_DISMISSED
Pass optional metadata (for example button_id) on click events for button-level analytics.

Comparison with push notifications

In-app messagesPush notifications
SurfaceInside the app UIOS notification tray
Requires device tokenOnly for real-time silent push (journeys); not for on-open fetchYes
Rich layoutFull templates (modal, banner, slideup, fullscreen)Title, body, image, deeplink
Real-time triggerJourney events + silent push refreshFCM/APNs delivery
Impression trackingExplicit API eventsOpen/delivery analytics