> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fyno.io/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fyno.io/docs/_mcp/server.

# Push Templates

> Create and manage push notification templates with Android and iOS-specific settings, actions, media, dynamic content, testing, versioning, and approval workflows.

When you add the **Push** channel to a template, the **Create your Push Template** screen opens. The Preview on the right shows how the notification looks on a device.

![](/docs/_fern-img/632c4a41fde7f3ac04ff4dfe392050acbec99be33f44e1251c07b5b60030e882.webp)

## Create a push template

#### Title (optional)

Enter the push notification title. It helps summarize the notification and give it context.

#### Content

Enter the body of the notification. This is a required field. You can add placeholders within `{{ }}`.

#### Buttons (optional)

Click **Add Button** to add an action button. For each button, enter:

* **Button**: The button text.
* **Link**: Where clicking the button takes the user. Enter a valid HTTP or HTTPS URL, a deeplink, or a route starting with `/` to route the user within the same path.

Use the delete icon to remove a button.

> **Note**
>
> Buttons can only be used with Fyno Push, Xiaomi Push and OneSignal Push.

#### Platform, other settings and additional data (optional)

Expand **Platform Settings**, **Other Settings** or **Additional Data** to configure them. See the sections below.

> **Tip**
>
> To use any user property in your templates, add it in this format: `{{$user.$<user_property>}}`. For example, to add Name as a placeholder from the User profile, add it as `{{$user.$name}}`.

> **Warning**
>
> You cannot use only numeric values as placeholder keys.

## Platform Settings (optional)

Choose the **Android** or **iOS** tab to set platform-specific options.

#### Android

![](/docs/_fern-img/a1db14d93ad6137fcc36a2f3de5986626a1a2a6f1ad8310423d9ab5f4b550f9f.webp)

| Field                     | What it does                                                                                                                                                                                               |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Image URL**             | URL of an image that is downloaded on the device and shown in the notification. You can also upload an image. Supported file formats are JPEG, PNG and BMP. WebP and HEIF support varies across platforms. |
| **Destination Url**       | Clicking the notification redirects the user to the HTTPS link or deeplink provided here.                                                                                                                  |
| **Icon**                  | Name of the icon file stored in your app's drawable resources.                                                                                                                                             |
| **Icon Background Color** | Hex code of the background color around the small icon.                                                                                                                                                    |
| **Notification Sound**    | Filename of a sound resource bundled in the app. If it is not set, the device's default sound plays. Allowed formats are .wav, .aiff and .caf. Don't include the file extension.                           |
| **Notification Badge**    | The number of items this notification represents. It may be shown as a badge count on launchers that support badging.                                                                                      |
| **Tag**                   | Only the latest notification with the same Tag ID is shown on the device. Use the same ID to update an existing notification instead of showing a new one. Maximum 64 characters.                          |
| **Ticker**                | Text sent to accessibility services, and displayed in the status bar when the notification first arrives.                                                                                                  |
| **Collapse Key**          | An identifier of a group of messages that can be collapsed, so that only the last message is sent when delivery can be resumed.                                                                            |
| **Channel ID**            | Adds this notification to a predefined channel ID to categorize it, so users only receive the types of messages they've opted in for.                                                                      |

#### iOS

| Field            | What it does                                                                                                                                                                           |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Image**        | URL of an image that is downloaded on the device and shown in the notification. Supported file formats are JPEG, PNG and BMP. WebP and HEIF support depends on the recipient's device. |
| **Subtitle**     | Additional information that explains the purpose of the notification.                                                                                                                  |
| **Icon**         | The icon shown in the top status bar and to the left of the notification text, unless a large icon is set. A bell icon is shown by default. Don't include the file extension.          |
| **Sound**        | The name of a sound file in your app's main bundle or in the Library/Sounds folder of your app's container directory. Enter `default` to play the system sound.                        |
| **Badge**        | The number to show in a badge on your app's icon. Enter `0` to remove the current badge, if any.                                                                                       |
| **Collapse Key** | An identifier of a group of messages that can be collapsed, so that only the last message is sent when delivery can be resumed.                                                        |

## Other Settings (optional)

![](/docs/_fern-img/8617c1b0fe8618873f85b4a19f83610a2bb7ad5dbf1382bd2022f53f142d5a06.webp)

| Field               | What it does                                                                                                                                                                      |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **TTL**             | How long the push message is preserved for delivery if the device is offline. Enter the value in the first field and select the unit of time, such as **Seconds**, in the second. |
| **Analytics Label** | A label to track the analytics of this push template in Google Analytics.                                                                                                         |
| **Priority**        | The priority of the message sent to devices, for example **Normal**. Priority controls when the message is delivered.                                                             |

## Additional Data (optional)

Use **Additional Data** to send extra information with the notification, for example to render something on the device or to send a data (payload) push notification. If you use event listeners instead of deeplinks, add a payload your app can use for redirection.

![](/docs/_fern-img/03af4b04091f97af5d7e45a241a8a4410ed0f83b61f42a6ab4ad3622202d1f03.webp)

Enter the data as JSON. Placeholders in additional data must be inside double quotes, in the format `"{{ }}"`. For example:

```json
{
  "screen": "order_details",
  "order_id": "{{order_id}}"
}
```

## How to add dynamic content

You can add dynamic content to your templates using one of the four options below:

* [Placeholders](./template-dynamic-content#placeholders)
* [System Variables](./template-dynamic-content#system-variables)
* [Handlebars](./template-dynamic-content#handlebars)
* [Components](./template-dynamic-content#components)

## How to test a push template

Use this feature to test a template thoroughly before including it in any Notification Event. This ensures early detection and resolution of any potential issues, for a seamless user experience.

Click **Run Test** at the top right of the template. The **Test Push template** pop-up opens.

![](/docs/_fern-img/e59b820e3d1cb06415f000096e820e1f902a42ddf7d5c7fde7f7dd122207f6fb.webp)

From the dropdown, choose **Push Token** and enter the recipient's push token, or choose **Distinct ID** and enter it. **Make sure to enter the distinct_id of a Test User profile.**

In **Push Integration**, select a push integration that is already configured in Fyno.

**Auto-fill empty placeholders** (optional, AI assistance): If your template has placeholders with no sample values, Fyno can fill them using AI so you can test the notification. Click **Yes** to let Fyno fill sample values for the empty placeholders.

Click **Run Test** to send the push notification to the recipient with the selected integration. You see the success or failure message along with a link to the Sent Logs.

## Save and go live

Click **Save** to save the template as a **Test** version. You can save different versions of the template this way. Use **Go Live** when you are ready to move your template to the **Live** version.

> **Note**
>
> If template approvals are enabled in your workspace, **Go Live** needs an additional approval step. Choose from your designated approvers, who review and authorize the template changes. See [Approval flow](./approval-flow) for the steps.