---
title: "Create a push campaign"
method: POST
path: "/push/campaigns"
tags: ["Push"]
---

# Create a push campaign

`POST /push/campaigns`

## Request

- Base URL: `https://api.sequenzy.com/api/v1`
- URL: `https://api.sequenzy.com/api/v1/push/campaigns`
- Auth: HTTP bearer

Creates a push campaign draft. Content and audience can be set now or later. Requires the campaigns:write scope.

## Request body

- object
  - `name` string
  - `targetLists` object: Audience, same shape as campaign targetLists, for example {"type":"all"}, {"type":"lists","listIds":["..."]}, {"type":"segment","segmentId":"..."} or {"type":"rules","include":[...]}. Only contacts with an active push device receive the campaign.
  - `title` string: Notification title. Merge tags such as {{FIRST_NAME|there}} are supported.
  - `body` string: Notification message. Merge tags are supported.
  - `url` string, nullable: Link opened on tap. An https URL, an app deep link (myapp://...), or a merge tag. Browsers only open https links. null clears it.
  - `imageUrl` string, nullable: Optional https image shown in the notification.
  - `iconUrl` string, nullable: Optional https icon for web push. Defaults to the workspace icon.
  - `platforms` string[]: Limit delivery to these platforms. Omit or pass an empty array for every platform.

## Response `201`

Campaign created

- object
  - `success` boolean
  - `campaign` PushCampaign
    - `id` string
    - `name` string
    - `type` 'push'
    - `status` 'draft' | 'scheduled' | 'sending' | 'sent' | 'cancelled'
    - `content` object
      - `title` string: Notification title. Merge tags such as {{FIRST_NAME|there}} are supported.
      - `body` string: Notification message. Merge tags are supported.
      - `url` string, nullable: Link opened on tap. An https URL, an app deep link (myapp://...), or a merge tag. Browsers only open https links. null clears it.
      - `imageUrl` string, nullable: Optional https image shown in the notification.
      - `iconUrl` string, nullable: Optional https icon for web push. Defaults to the workspace icon.
      - `platforms` string[]: Limit delivery to these platforms. Omit or pass an empty array for every platform.
    - `targetLists` object, nullable
    - `scheduledAt` string, date-time, nullable
    - `sentAt` string, date-time, nullable
    - `estimatedRecipientCount` integer, nullable
    - `labelIds` string[]
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Missing campaigns:write scope
- `500`: Server error

## Changes

- **2026-10-16** `db3873ca3d4d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/push/campaigns/post.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) - [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sequenzy/apis/sequenzy-api/revisions/8156dc12d8b4?raw)
