> 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/campaigns/details.md).

# Campaign details

One push campaign's content, audience, and progress.

> One campaign end to end — what was sent, to whom, through which provider, and how every batch and message did.

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

## Why it exists

A bulk send is not one event, it is thousands. This screen is where you find out what actually happened: which batches finished, which messages failed, whether anyone read or tapped the notification — and it is the only place you can stop a send that is already running.

## When you'd use it

* A campaign has been "Processing" for twenty minutes and you want to see which batch is stuck.
* You sent to the wrong audience and need to stop the rest of the send now.
* You want the delivery result of one particular recipient.

## Where to find it

Push → Campaigns → click a row · `/projects/<project>/push/campaigns/<id>/view`

## How to read the screen

Requires a role that carries `…:notifications:push:campaigns:read`.

1. **General Information** — the **Template** (a link to its editor), the **Requested Language** (shown as a flag), when the campaign was **Initiated**, the **Deliver strategy** (All users, Specified Users or Recipients from a collection), **Plan to deliver** (Instantly, or the scheduled time) and whether it delivers **with respect to user time zone**.
2. **Push Provider** — the integration this campaign goes through, with a **See integration details** link, and four tiles with delivery counts and the success rate.
3. **Batches** — one row per batch: recipient count, batch id, status (Registered, Processing, Completed or Failed) and the time of the last status change.
4. Open a batch to list its **messages** — recipients, notification id and status (Viewed, Clicked, Completed or Failed).
5. Open a message to reach the [message log](/cloud/push/campaigns/log.md).

## Actions

* **Stop campaign** — shown while the campaign is in flight (Scheduled, Registered, Started or Processing). After a confirmation, batches already being sent finish, but no new recipients are notified. **This cannot be undone**, and the campaign's final status becomes **Stopped**.
* **Send Now** — shown on a scheduled campaign. Its handler is not wired yet.
* The actions menu adds **Create new from this**, **Export recipients…** and **Delete campaign…**, plus **See documentation**.

{% hint style="danger" %}
Several parts of this screen are not finished. The four statistics tiles are not wired — they always show 0, and the first tile is labelled "Delivered to OneSignal" whatever the real provider is. The **Template** and **See integration details** links open the **Email** module's editor routes, not the push ones. **Send Now**, **Create new from this**, **Export recipients…** and **Delete campaign…** are placeholders that do nothing. Tracked in testing-plan area **15-push**. Until they land, read a campaign's real numbers through the statistics endpoint below.
{% endhint %}

## Good to know

* Batch statuses answer "did we hand it to the provider", not "did it reach the phone". A Completed batch with a dead device token is still Completed.
* **Viewed** and **Clicked** only appear if your app reports them back. An app that never calls the read/click endpoints will leave every message at Completed.
* Stopping is not deleting: the campaign, its batches and its messages stay for the record.
* A **Failed** batch does not stop the others — the campaign keeps going and ends as Failed only if a batch could not be completed.

## Do it in code

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

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

const stats = await norbix.hub.notifications.getPushCampaignStatistics({
  projectId: '<your-project-id>',
  id: 'cmp_4RXMBq6T24SOIilOBtkao9',
});
```

{% endtab %}

{% tab title="Python" %}

```python
campaign = norbix.notifications.get_push_campaign(
    "cmp_4RXMBq6T24SOIilOBtkao9", projectId="<your-project-id>"
)

batches = norbix.notifications.get_push_campaign_batches(
    "cmp_4RXMBq6T24SOIilOBtkao9", projectId="<your-project-id>"
)
```

{% endtab %}

{% tab title="Go" %}

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

{% 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 Campaign](/sdks-and-cli/notifications/push/get-push-campaign.md) · [Get Push Campaign Batches](/sdks-and-cli/notifications/push/get-push-campaign-batches.md) · [Get Push Campaign Statistics](/sdks-and-cli/notifications/push/get-push-campaign-statistics.md) · [Stop Push Campaign](/sdks-and-cli/notifications/push/stop-push-campaign.md) CLI: `norbix push campaign <id> --stats` · `norbix push stop <id> --yes`

## API reference

Endpoints: [Get Push Campaign](/api-reference/notifications/push/get-push-campaign.md), [Get Push Campaign Batches](/api-reference/notifications/push/get-push-campaign-batches.md), [Get Push Campaign Batch Notifications](/api-reference/notifications/push/get-push-campaign-batch-notifications.md), [Get Push Campaign Statistics](/api-reference/notifications/push/get-push-campaign-statistics.md), [Stop Push Campaign](/api-reference/notifications/push/stop-push-campaign.md).

## Related

[Campaigns list](/cloud/push/campaigns.md) · [Create a Campaign](/cloud/push/campaigns/new.md) · [Message log](/cloud/push/campaigns/log.md) · [Integrations](/cloud/push/integrations.md)
