> This page is part of the [Customer.io documentation](https://docs-customerio.netlify.app). For the complete index, see [llms.txt](https://docs-customerio.netlify.app/llms.txt).
> Last updated: June 26, 2026

# Compose JSON messages in the advanced editor

This page is part of the [build-your-own inbox](/journeys/channels/in-app/inbox/advanced/overview/) approach.

When you send an inbox message from a campaign or broadcast—or [from your backend](/journeys/channels/in-app/inbox/send-inbox-txnl/)—you author its content in the **advanced editor**. The advanced editor delivers your message as the [JSON payload](/journeys/channels/in-app/inbox/advanced/overview/#the-message-payload) that you render from your bespoke inbox client.

1.  Add an **Inbox message** to your campaign or broadcast workflow (or create an **Inbox** transactional message), then choose the **Advanced** editor.
    
2.  Define your message settings: [*Topics*, *Type*](/journeys/channels/in-app/inbox/advanced/overview/#topics-and-types), and [*Expiration*](/journeys/channels/in-app/inbox/send-inbox/#message-expiration).
    
    *   **Topics**: help you filter the inbox for specific messages.
    *   **Type**: acts as a signal to your inbox client about how to render the message.
    *   **Expiration**: the time between when the message is sent and when it expires. Messages only expire if they’re sent but not delivered. **By default, messages expire after 60 days**, which is also the maximum.
        
        [![The inbox message settings screen with the message settings filled in](https://docs.customer.io/images/inbox-message.png)](#bf49584b3c7088f0b198a5f9671d34e2-lightbox)
        
3.  In the JSON area, provide the payload that represents your message. By default we include a `title` and `body`, but you can add any fields your client expects, like an `image` or `link`.
    
    Personalize content 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): use `{{customer.<attribute_name>}}` for 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/), `{{event.<attribute_name>}}` for event data, and `{{trigger.<attribute_name>}}` for broadcast or transactional trigger data.
    
    ```json
    {
     "title": "Hey, {{customer.first_name}}, your order shipped!",
     "body": "You can track your order #{{event.order_number}} here:",
     "link": "https://example.com/orders/{{event.order_number}}"
    }
    ```
    
4.  Save your message.
    

For the full campaign and broadcast flow, see [send inbox messages](/journeys/channels/in-app/inbox/send-inbox/). To trigger messages from your backend, see [trigger inbox messages from your backend](/journeys/channels/in-app/inbox/send-inbox-txnl/).
