Creating an in-app message

You can create an in-app message or in-browser message using the Braze platform using campaigns, Canvas, or as an API campaign. We highly recommend planning out your messages and preparing all materials ahead of time using our handy In-App Message Prep Guide.

Step 1: Choose where to build your message

Click Create Campaign to open a new messaging wizard for in-app message campaigns. Then, follow the flow of the messaging wizard to quickly create and launch your in-app message campaign.

Platform Picker

  1. Name your campaign something clear and meaningful.
  2. Add Teams and Tags, as necessary.
  3. Add and name as many Variants as you need for this campaign.
    • You can choose different platforms, message types, and layouts for each of your added Variants.

After you have created and set up your Canvas using the Canvas wizard,

  1. Name your step something clear and meaningful.
  2. Add a Delay, as necessary. Note that steps containing in-app messages cannot be action-based.
  3. Filter your Audience, as necessary.
  4. Choose your advancement options, as necessary.
  5. Choose all other messaging channels which you would like to pair with your message.

Step 2: Specify delivery platforms

Start by choosing which platforms should receive the message. Use this selection to limit the delivery of a campaign to a specific set of apps. You might choose Web Browsers for an in-browser message encouraging users to download your mobile app to ensure they do not receive the message after already getting your app. Because platform selections are specific to each variant, you could try testing message engagement per platform!

Web Email Capture and Web Modal with CSS are both unique to the Web SDK and can only be used after selecting Web Browsers.

Platform Message Delivery
Mobile Apps iOS & Android SDKs
Web Browsers Web SDK
Both Mobile Apps & Web Browsers iOS, Android & Web SDKs

Step 3: Specify your message types

Once you’ve selected a sending platform, browse the Message Types, Layouts, and other options associated with it. Learn more about the expected behavior and look of each of these messages on our Creative Details page, or by clicking on the linked message types in the following tables.

Message types

These in-app messages are accepted by both mobile apps and web applications.

Message Type Type Description Available Layouts Other Options
Full-Screen Messages that cover the entire screen with a message block. Image & Text and Image Only Enforced Device Orientation (Portrait or Landscape)
Modal Messages that cover the entire screen with a screen overlay and a message block. Text (with Optional Image) and Image Only None
Slideup Messages that slide into view in a designated place without blocking the rest of the screen. None None

Advanced message types

These in-app messages are customizable to your needs.

Message Type Type Description Available Layouts Other Options
Custom Web Message Custom messages that perform as defined in your custom code (HTML, CSS, and/or JavaScript). None Must set allowUserSuppliedJavascript initialization option to true for your In-App Message to work.
Email Capture Form Typically used to capture the viewer’s email. None Must set allowUserSuppliedJavascript initialization option to true for your IAM to work.
Web Modal with CSS Modal messages for web with customizable CSS. Text (with Optional Image) and Image Only None

Step 4: Compose in-app message

The Compose tab allows you to edit all aspects of your message’s content and behavior.

Compose your in-app message

The content of the Compose tab varies based on your chosen message options in the previous step, but may include any of the options below:

Content Options Description
Language See our full list of available languages. Click Add Languages and select your desired languages from the provided list. This will insert Liquid into your message. We recommend selecting your languages before writing your content so you can fill in your text where it belongs in the Liquid.
Image Upload Image, Pick a Badge, or use Font Awesome. Where applicable, click Include Image or Upload Image and follow the presented instructions. Each message type and platform may have its own suggested proportions and requirements - be sure to check what those are before commissioning or making an image from scratch!
Button Text & On Click Behavior Add up to two buttons. You can create and edit custom button text and color. You can also add Terms of Service Link within Web Email Capture forms.
Device Options Restrict send to only iOS devices. Click Change and check the box as desired.
Message Close Options Dismiss Automatically or Wait for User Swipe or Touch. Dismiss Automatically allows you to select how many seconds the message will remain on the screen. Wait for User Swipe or Touch will require a dismissal or close option.
Header & Body Text Completely custom copy (often with custom HTML capabilities) with the options to include Liquid and other types of personalization. Some message types do not need and therefore do not ask for headers.
Position From Bottom of App Screen or From Top of App Screen. This only exists in the Universal Slideup message builder.
HTML & Assets Completely custom via upload, URL, or copy and paste. Copy and paste HTML into the available space and upload your assets via ZIP.
Email Capture Input Placeholder Custom copy. This is used solely in the Web Email Capture Form and will direct your users to input the desired content into the space.

Additional settings


When available for your message type, you can have up to two buttons appear below your body of text.


If you choose to only use one button, it will automatically adjust to take over the available space at the bottom of your message instead of leaving room for an additional button.


Braze has three generations of in-app messages available. You can fine-tune to which devices your messages should be sent, based on which generation they support, in the preview section while composing your in-app message.


Depending on what SDK versions your users are on, you may or may not see this option. You are only asked to select a generation when you have users on more than one generation.

What is a generation?

A Generation is defined as a collection of SDK versions that contain a large number of major upgrades. For example, Generation 3 is the latest one that encompasses the latest style updates.

By selecting Send to all Generations that support this message, Braze will deliver to users that can receive any form of the message. For example, if you have users on all three Generations, a modal will deliver to users on Generations 2 and 3, as Generation 1 doesn’t support modals. The message will look different for your two groups of users: Generation 3 users will receive the message in the latest styles, while Generation 2 users will see the older styles (cosmetic differences and absence of button border).

You could clear the Send to all Generations that support this message checkbox and select Send only to users on Generation 3 (the latest) if you do not want to allow users to receive the older message styles. Users on Generation 3 will be the only ones to receive the message.

Step 5: Style your in-app message

The Style tab allows you to adjust all visual aspects of your message. Upload an image or badge, or pick a pre-designed badge icon. Change the colors of the header and body text, buttons, and background by selecting from a palette or entering a hex, RGB, or HSB code.

The content of the Style tab varies based on your chosen Message Options in the last step, but may include any of the options below:

Formatting Input Description
Color Profile Apply from In-App Message Templates Gallery. Click Apply Template and select from the gallery. Then, click Save.
Text Alignment Left, Center, or Right. Only available for newer Braze SDK versions.
Header HEX color code. Your desired HEX color will display. You will also be able to choose the opacity of the color.
Text HEX color code. Your desired HEX color will display. You will also be able to choose the opacity of the color.
Buttons HEX color code. Your desired HEX colors will display. You will also be able to choose the opacity of the colors. You can choose colors for: the message’s Close Button Background as well as each button’s Background, Text, and Border.
Button Border HEX color code. New! This will allow you to set your primary and secondary buttons apart from one another. We suggest outlining buttons with contrasting colors.
Background Color HEX color code. Your desired HEX color will display. You will also be able to choose the opacity of the color. This is the background of the entire message and will clearly display behind your text body.
Screen Overlay HEX color code. Your desired HEX color will display. You will also be able to choose the opacity of the color. Only available for newer Braze SDK versions. This is the frame around the entire message.
Chevron or other Close Message Option HEX color code. Your desired HEX color will display. You will also be able to choose the opacity of the color.

Always preview and test your message before sending.

Step 6: Configure additional settings

Key-value pairs

Add key-value pairs to send extra custom fields to user devices.

Re-evaluate campaign eligibility and Liquid

In some scenarios, you may want to re-evaluate a user’s eligibility as they trigger an in-app message to display. Examples include campaigns that target a custom attribute that frequently changes or messages that should reflect any last-minute profile changes.

Re-evaluate IAM Membership

When you select Re-evaluate campaign eligibility before displaying, an additional request to Braze will be made to confirm that the user is still eligible for this message before sending. Additionally, any Liquid variables or Connected Content will be templated at that moment before the message is displayed.

Step 7: Build the remainder of your campaign or Canvas

Build the remainder of your campaign or Canvas; see the sections below for further guidance on how to best use our tools to build in-app messages. For more information on Canvas-specific in-app messaging options like expiry and steps, refer to In-app messages in Canvas.


Select the action you’d like to trigger your message off of, as well as the start and end times for your campaign or Canvas.


In-app message delivery is entirely based on the following action triggers:

  • Making a purchase
  • Opening the app/webpage
  • Performing a custom event (only works with events sent via the SDK)
  • Opening a specific push message
  • Automatically schedule campaigns to send at a certain time with respect to the local time of each of your users.
  • Messages can also be configured to recur on a daily, weekly (optionally on specific days), or monthly basis.

A start date and time must be selected; however, an end date is optional. An end date will stop that specific in-app message from showing up on devices after the specified date/time.

Please refer to our developer documentation for server-side event triggering and local in-app message delivery.

Online vs. offline triggering

In-app messages work by sending the message and triggers to the user’s device. Once the in-app messages are on a device, it waits to display until the trigger condition is met. If the in-app messages are already cached on the user’s device, you can even trigger in-app messages offline with no connection to Braze (for example, in Airplane mode).


Finally, once you’ve selected the action the in-app message will be triggered off of, you should also set a priority. If two messages are triggered off of the same action, high priority messages will be scheduled to appear on users’ devices before messages with lower priorities.

Event Prioritization

The high, medium, and low options for triggered message priorities are buckets, and as such multiple messages could have the same selected priority. To set priorities within these buckets, click Set Exact Priority, and you will be able to drag and drop campaigns to order them with the correct priority.

Bucket Prioritization

A customer may trigger two in-app messages within your Canvas at the same time. When this occurs, Braze will follow the priority order below to determine which in-app message is displayed. Drag different Canvas steps to re-order their priority. By default, steps earlier in a Canvas variant will display before later steps.


Navigate to the Send Settings of the Canvas section to prioritize in-app messages from a Canvas against in-app messages from other Canvases and campaigns.

By default, Canvas step priority is set to medium, with the most recently created steps having the highest relative priority. Canvas and campaign-level priorities also default to medium, with the highest relative priority defaulting to the most recently created items.


Target segment

Next, you need to choose the target segment from the dropdown menu. You are automatically given a snapshot of what that approximate segment population looks like right now. Keep in mind that exact segment membership is always calculated just before the message is sent.

Target Page

Conversion events

Braze allows you to track how often users perform specific actions (conversion events) after receiving a campaign. You can specify any of the following actions as a conversion event”:

  • Opens App
  • Makes Purchase (This can be a generic purchase or a specific item)
  • Performs specific custom event

You can allow up to a 30-day window during which a conversion will be counted if the user takes the specified action.

Conversion Event

After you’ve finished building the last of your campaign or Canvas, review its details, then send it!

Active in-app message campaign limits

Braze values reliability and speed. Just like we suggest you send only the data you need to Braze, we also recommend turning off any campaigns that are no longer adding any value to your brand.

Processing action-based in-app message campaigns that are still in an active state but no longer sending messages or are no longer needed slows down the overall performance of the Braze services for you and other customers. This extra time needed to process these large numbers of idle campaigns means that any in-app messages will take longer to appear on the end-user’s devices, which impacts the end user’s experience.

There is a limit of 200 active, action-based in-app message campaigns per app group to optimize the speed of message delivery and to prevent timeouts.

The 200 count includes active IAM campaigns that have not yet reached end time and those that have no end time. Active IAM campaigns that have passed their end times will not be counted. The average Braze customer has a total of 26 campaigns active at once—so it’s unlikely that this limitation will impact you.

New Stuff!