> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a Push Campaign

> Edit a draft or scheduled push campaign

# Update a Push Campaign

Updates a draft or scheduled push campaign. Only the fields you pass change; content fields merge over the stored content. A scheduled campaign keeps its schedule, and cannot have its content cleared; unschedule it first. Requires the `campaigns:write` scope.

## Request

<ParamField path="campaignId" type="string" required>
  The push campaign ID.
</ParamField>

<ParamField body="name" type="string">
  Campaign name.
</ParamField>

<ParamField body="targetLists" type="object">
  Audience, same shape as campaign `targetLists`.
</ParamField>

<ParamField body="title" type="string">
  Notification title, up to 120 characters. Merge tags such as `{{FIRST_NAME|there}}` work.
</ParamField>

<ParamField body="body" type="string">
  Notification message, up to 500 characters. Merge tags work.
</ParamField>

<ParamField body="url" type="string | null">
  Link opened on tap: an https URL, an app deep link (`myapp://...`), or a merge
  tag. Browsers only open https links. `null` clears it.
</ParamField>

<ParamField body="imageUrl" type="string | null">
  Optional https image shown in the notification.
</ParamField>

<ParamField body="iconUrl" type="string | null">
  Optional https icon for web push. Defaults to the icon in push settings.
</ParamField>

<ParamField body="platforms" type="string[]">
  Limit delivery to `web`, `ios`, and/or `android`. Omit or pass `[]` for every
  platform.
</ParamField>

```bash theme={null}
curl -X PATCH "https://api.sequenzy.com/api/v1/push/campaigns/cmp_abc123" \
  --header "Authorization: Bearer $SEQUENZY_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{"body":"40% off everything"}'
```

## Responses

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "campaign": {
      "id": "cmp_abc123",
      "name": "Flash sale",
      "type": "push",
      "status": "draft",
      "content": {
        "title": "24h sale",
        "body": "40% off everything",
        "url": "https://shop.example.com/sale",
        "imageUrl": null,
        "iconUrl": null,
        "platforms": [
          "web",
          "ios"
        ]
      },
      "targetLists": {
        "type": "all"
      },
      "scheduledAt": null,
      "sentAt": null,
      "estimatedRecipientCount": null,
      "labelIds": [],
      "createdAt": "2026-10-01T12:00:00.000Z",
      "updatedAt": "2026-10-01T12:00:00.000Z"
    }
  }
  ```

  ```json 400 theme={null}
  {
    "error": "name must be between 1 and 255 characters."
  }
  ```

  ```json 401 theme={null}
  {
    "error": "Invalid API key"
  }
  ```

  ```json 403 theme={null}
  {
    "error": "API key is missing required scope: campaigns:write"
  }
  ```

  ```json 404 theme={null}
  {
    "error": "Campaign not found."
  }
  ```

  ```json 409 theme={null}
  {
    "error": "Only draft or scheduled push campaigns can be edited."
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.