---
title: "Send or schedule a push campaign"
method: POST
path: "/push/campaigns/{campaignId}/send"
tags: ["Push"]
---

# Send or schedule a push campaign

`POST /push/campaigns/{campaignId}/send`

## Request

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

Sends a draft or scheduled push campaign now, or schedules it when scheduledAt is a future ISO 8601 time. Requires content, an audience with at least one contact that has an active device, and at least one selected platform set up in push settings. The audience is re-evaluated when delivery starts. Requires the campaigns:send scope.

## Path parameters

- `campaignId` string, required

## Request body

- object
  - `scheduledAt` string, date-time, nullable: Future ISO 8601 time. Omit or null to send immediately.

## Response `200`

Campaign sending or scheduled

- 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
  - `message` string

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Missing campaigns:send scope
- `404`: Not found
- `409`: Campaign is not in a status that allows this action, or its status changed
- `500`: Server error

## Changes

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

[Operation history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/push/campaigns/:campaignId/send/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/3d816357b738?raw)
