> This page is part of the [Customer.io documentation](https://docs.customer.io). For the complete index, see [llms.txt](https://docs.customer.io/llms.txt).
> Last updated: July 10, 2026

# Send inbox messages

You send inbox messages from a campaign or broadcast workflow the same way you send other in-app messages. This page covers the process for the **visual** editor, which is the default editor for most users.

If you [built your own inbox](/messaging/channels/in-app/inbox/advanced/overview/), you’ll use the **advanced** editor. See [compose JSON messages](/messaging/channels/in-app/inbox/advanced/compose-json/) for more information.

## Add an inbox message to your workflow

Before you send an inbox message, make sure you’ve [set up your inbox](/messaging/channels/in-app/inbox/get-started/).

1.  In your campaign or broadcast workflow, drag an **Inbox message** block into your workflow.
    
    [![The inbox message block in the campaign editor](https://docs.customer.io/images/inbox-message-campaign-block.png)](#43a9a76a71a01a8f0533be7e2fd3b571-lightbox)
    
2.  Click the message and choose an editor. For most users (and the process on this page), choose the **Visual editor**.
    
    If you [built your own inbox](/messaging/channels/in-app/inbox/advanced/overview/), choose the **Advanced editor** and see [compose JSON messages](/messaging/channels/in-app/inbox/advanced/compose-json/) for more information.
    
    [![The inbox message content screen in the campaign editor](https://docs.customer.io/images/inbox-message-add-content.png)](#003c3ef856d6eb6b97641798b4aa2d9b-lightbox)
    

Now you’re ready to build your inbox message.

## Build a message in the visual editor

The visual editor opens a Design Studio canvas with a live preview. Your message inherits the styles you set when you [styled your inbox](/messaging/channels/in-app/inbox/get-started/#style-and-publish-your-inbox).

1.  Choose a **layout**:
    *   **Basic**: a heading, body, and timestamp.
    *   **Image**: a heading, image, body, and timestamp.
    *   **Call to action**: a heading, body, timestamp, and a button.
2.  Add your content. You can [personalize](#personalize-your-message) any text with [liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable `{{customer.first_name}}`.](/journeys/liquid/using-liquid).
3.  Set the message’s **expiration**. By default, messages expire 60 days after you send them. See [message expiration](#message-expiration) to set a relative or specific date, or to base the expiration on a [liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable `{{customer.first_name}}`.](/journeys/liquid/using-liquid) expression.
4.  When you’re ready, click **Publish changes**. Your message is ready, and it’ll send when you send your campaign or broadcast.
    
    [![inbox-visual-add-content.png](https://docs.customer.io/images/inbox-visual-add-content.png)](#a3a553ea1cfcb1ac456c013c7458a87a-lightbox)
    

## Personalize your message

You can use [liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable `{{customer.first_name}}`.](/journeys/liquid/using-liquid) to include dynamic content in your message. You can use profile [attributesA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages.](/journeys/people/manage/attributes/) in any message in the format `{{customer.<attribute_name>}}`. You can use event data in messages triggered by an event or an API call.

Source

Example

Campaign

Broadcast

Newsletter

Description

Profile attributes

`{{customer.first_name}}`

Yes

Yes

Yes

Attributes belonging the message recipient.

Event data

`{{event.order_number}}`

When triggered by an event

N/A

N/A

Data from an event that triggered the message.

Trigger data

`{{trigger.order_number}}`

N/A

Yes

N/A

Data sent in the `message_data` object when you trigger a broadcast or a [transactional message](/messaging/channels/in-app/inbox/send-inbox-txnl/).

## Message expiration

Inbox messages expire after a certain amount of time and disappears from the inbox. **Messages can expire up to 60 days after you send them**.

In the visual editor, two settings control expiration:

*   **Expiration**: choose **A relative date**—a duration after the message is sent, in minutes, hours, or days—or **A specific date**, a fixed point in time.
*   **Value type**: choose **Fixed** to enter the duration or date yourself, or **Liquid** to base the expiration on a [liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable `{{customer.first_name}}`.](/journeys/liquid/using-liquid) expression referencing a value you pass in the data that triggers the message (an event property or a broadcast/transactional message trigger).

### Use liquid for expiration

If you want to set an expiration for a message dynamically based on data, you can use the liquid option for your message expiration.

When you set **Value type** to **Liquid**, your expression resolves at send time, so each recipient’s message will expire based on data—either a profile attribute or a value you pass in the message trigger. For a relative date, the expression resolves to a duration (like `{{ trigger.ttl }} hours`); for a specific date, it resolves to a timestamp (like `{{ event.expires_at }}`).

The data you can reference depends on how you send the message:

Send type

Data you can reference

Example

Event-triggered campaign

Profile attributes and event data

`{{ event.expires_at }}`

Broadcast

Profile attributes and trigger data

`{{ trigger.expires_at }}`

Transactional ([from your backend](/messaging/channels/in-app/inbox/send-inbox-txnl/))

Profile attributes and trigger data (from `message_data`)

`{{ trigger.expires_at }}`

Profile attributes (`{{ customer.<attribute> }}`) are available for every send type. See [personalize your message](#personalize-your-message) for more on these data sources.

 If you don’t set an expiration, it expires after 30 days

If you use the liquid option, where you expect to set your expiration based on data from your trigger, but you don’t actually set the liquid value representing your expiration period, the message will expire after 30 days.

## Troubleshooting

Inbox messages follow the same [delivery patterns](/messaging/channels/in-app/getting-started/#in-app-warming-and-polling) as regular in-app messages. Check our [in-app messaging FAQ](/messaging/channels/in-app/faq/) for additional troubleshooting.

### My message doesn’t appear

1.  Verify that [you’ve enabled in-app and inbox messaging](/messaging/channels/in-app/getting-started/) in workspace settings.
2.  Confirm that your inbox is [published](/messaging/channels/in-app/inbox/get-started/#style-and-publish-your-inbox)—a draft inbox doesn’t display on your website.
3.  Check that the person is [identified](/integrations/data-in/connections/javascript/method-reference/#identify).
4.  Confirm that the message you intend for people to see hasn’t expired. You may need to investigate a specific deliveryThe instance of a message sent to a person. When you set up a message, you determine an audience for your message. Each individual “send”—the version of a message sent to a single member of your audience—is a delivery. to see the expiration date.

If you [build your own inbox](/messaging/channels/in-app/inbox/advanced/overview/), see [display inbox messages in your app](/messaging/channels/in-app/inbox/advanced/display-messages/#troubleshooting) for troubleshooting topics, filtering, and the `inbox()` API.

*   *   [Add an inbox message to your workflow](#add-an-inbox-message-to-your-workflow)
    *   [Build a message in the visual editor](#build-a-message-in-the-visual-editor)
    *   [Personalize your message](#personalize-your-message)
    *   [Message expiration](#message-expiration)
        *   [Use liquid for expiration](#use-liquid-for-expiration)
    *   [Troubleshooting](#troubleshooting)
        *   [My message doesn’t appear](#my-message-doesnt-appear)

Copy page

Copy page [Download .md](/messaging/channels/in-app/inbox/send-inbox.md)

Is this page helpful?

![](https://docs.customer.io/images/export-success.png) ![](https://docs.customer.io/images/export-failure.png)

# How can we make it better?

Close

Do you need help from Customer.io support?  No  
 Yes

What part of Customer.io do you need help with? 

How can we improve this page?

Email (optional):  Please provide a valid email address

 I am not a bot

 

We appreciate your feedback!

Our support team will contact you as soon as possible
