Introducing App Inbox

A persistent, in-app message store — now available in the Zeta iOS and Android SDKs.

Published: June 9, 2026

App Inbox is a new messaging surface in the Zeta Marketing Platform. Unlike push notifications (which are transient) or in-app messages (which appear once in the foreground), App Inbox delivers messages to a persistent store inside your app that users can browse, revisit, and act on at their own pace.

Think of it as a notification center built into your app — powered by your ZMP campaigns.

What App Inbox enables

  • Persistent messages — inbox messages stay available until the user reads, dismisses, or they expire. No more missed one-time notifications.
  • Rich content — each message supports a title, body, optional media (images, GIFs), and one or more call-to-action buttons with deep links or web URLs.
  • Full lifecycle control — your app can fetch messages, query by read/unread status, mark messages as read or deleted, track CTA clicks, and clear the inbox on logout.
  • Campaign-driven — messages are created and targeted in ZMP using the same segmentation, scheduling, and personalization tools you already use for push and in-app.
  • Your UI, your rules — the SDK provides the data layer. Your app owns the view — list rows, detail screens, unread badges, and swipe-to-dismiss are all yours to design.

Available now in 1.0.0

App Inbox ships as part of the 1.0.0 release for both native SDKs:

PlatformSDKVersionStatus
iOSZetaCore1.0.0Available
Androidcore1.0.0Available
React Nativezeta-reactnative-sdk1.0.0Coming soon
Flutterzeta-flutter-sdk1.0.0Coming soon

React Native and Flutter SDKs are actively in development and will include App Inbox in their upcoming 1.0.0 releases.

Quick look at the API

The API follows the same callback pattern (Android) and async/throws pattern (iOS) used across the rest of the SDK.

iOS (Swift)

let messages = try await ZetaClient.shared.inbox?.fetchMessages() ?? []

for message in messages where message.status == .UNREAD {
    // Render in your UI
}

try await ZetaClient.shared.inbox?.markMessageAsRead(messageId: message.messageId)

Android (Kotlin)

ZetaClient.inbox.fetchMessages(
    onSuccess = { messages ->
        val unread = messages.filter { it.status == ZTAppInboxMessageStatus.UNREAD }
        // Render in your UI
    },
    onError = { error -> /* handle error */ }
)

ZetaClient.inbox.markMessageAsRead(
    messageId = message.messageId,
    onSuccess = { /* updated */ },
    onError = { /* handle error */ }
)

Get started

What else shipped in 1.0.0

App Inbox is the headline feature, but 1.0.0 also includes:

For the complete API-level record, see the platform changelogs linked above.