> For the complete documentation index, see [llms.txt](https://docs.codemash.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.codemash.io/cloud/push/templates.md).

# Templates

Push templates — the content your sends are built from.

> The reusable content of a push message — title, body and delivery options — written once and filled in per person at send time.

*Last updated 2026-09-11 · Applies to any project with the Push module enabled*

## Why it exists

A push message is almost never written for one person. You write it once with blanks in it — `@Model.FirstName` — and the platform fills the blanks for each recipient at send time. Templates keep that content in one place, so a campaign or a trigger only has to point at a template id (`tmpl_…`) instead of carrying its own copy of the text.

## When you'd use it

* One `Order shipped` template that every order trigger reuses, in three languages.
* A `Weekend sale` marketing template that one campaign sends and you archive on Monday.
* A `Password changed` template you clone to make a `Email changed` version in a few seconds.

## Where to find it

Push → **Templates** · `/projects/<project>/push/templates`

<figure><img src="https://760328771-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LwSkuCpTNI_AerL8J2a%2Fuploads%2Fgit-blob-32c91890ca59dbdbd9cf06a3e27f542df0859a82%2Fpush-templates.jpg?alt=media" alt=""><figcaption><p>Push → Templates.</p></figcaption></figure>

## How to use the list

Requires a role that carries `…:notifications:push:template:read-all` to see the list and `…:template:create` to add one.

1. Open **Push → Templates**. The list shows three columns: **Template Name**, **Type** (Transactional or Marketing) and **Is Active**.
2. Click **Create Template** to open the [template editor](/cloud/push/templates/editor.md) on an empty form, or click a template name to open the same editor on that template.
3. To retire a template without losing it, open it and choose **Archive** in the actions menu. **Is Active** turns off; **Unarchive** brings it back.
4. To start from an existing message, open it and choose **Clone** — a copy is created that you can rename and edit.

**What "saved" looks like:** you land back on this list and the template is in it, with **Is Active** ticked.

## Good to know

* Templates live in your project's **database**, so the list stays empty until the project database is ready. An empty list right after creating a project usually means "not ready yet", not "nothing there".
* Every send points at a template **by id**. Editing a template changes every future send that uses it — including triggers you may have forgotten about.
* Archiving is not deleting: an archived template keeps its id and its history, it just stops being offered for new sends. Deleting is permanent and is refused while something still depends on the template.
* The **Type** (Transactional or Marketing) decides which unsubscribe group the message belongs to. Marketing messages can be turned off by the user; transactional ones cannot.

## Do it in code

{% tabs %}
{% tab title="JavaScript / TypeScript" %}

```ts
const list = await norbix.hub.notifications.getPushTemplates({
  projectId: '<your-project-id>',
});

await norbix.hub.notifications.archivePushTemplate({
  projectId: '<your-project-id>',
  id: 'tmpl_5Rf3EKWEKMsihdBkPAcK0',
});
```

{% endtab %}

{% tab title="Python" %}

```python
templates = norbix.notifications.get_push_templates(projectId="<your-project-id>")

norbix.notifications.archive_push_template(
    "tmpl_5Rf3EKWEKMsihdBkPAcK0",
    projectId="<your-project-id>",
)
```

{% endtab %}

{% tab title="Go" %}

```go
var list map[string]any
_ = c.Hub.Notifications.GetPushTemplates(ctx, map[string]any{
	"projectId": "<your-project-id>",
}, &list)

var out map[string]any
err := c.Hub.Notifications.ArchivePushTemplate(ctx, "tmpl_5Rf3EKWEKMsihdBkPAcK0", map[string]any{
	"projectId": "<your-project-id>",
}, &out)
```

{% endtab %}

{% tab title=".NET" %}
Not available yet — the .NET SDK has no push client methods. Call the REST endpoints below.
{% endtab %}
{% endtabs %}

Reference: [Get Push Templates](/sdks-and-cli/notifications/push/get-push-templates.md) · [Create Push Template](/sdks-and-cli/notifications/push/create-push-template.md) · [Archive](/sdks-and-cli/notifications/push/archive-push-template.md) · [Unarchive](/sdks-and-cli/notifications/push/un-archive-push-template.md) · [Clone](/sdks-and-cli/notifications/push/clone-push-template.md) CLI: `norbix push templates --archived` · `norbix push template <id>` · `norbix push archive <id>` · `norbix push unarchive <id>` · `norbix push clone <id>` · `norbix push delete <id> --yes`

## API reference

Endpoints: [Get Push Templates](/api-reference/notifications/push/get-push-templates.md), [Get Push Template](/api-reference/notifications/push/get-push-template.md), [Create Push Template](/api-reference/notifications/push/create-push-template.md), [Update Push Template](/api-reference/notifications/push/update-push-template.md), [Clone Push Template](/api-reference/notifications/push/clone-push-template.md), [Archive Push Template](/api-reference/notifications/push/archive-push-template.md), [Un-archive Push Template](/api-reference/notifications/push/un-archive-push-template.md), [Delete Push Template](/api-reference/notifications/push/delete-push-template.md).

## Related

[Template editor](/cloud/push/templates/editor.md) · [Campaigns](/cloud/push/campaigns.md) · [Integrations](/cloud/push/integrations.md) · [Tokens binding](/other-topics/tokens-binding.md)
