Pushover Push Notifications

Total CMS integrates with Pushover to send push notifications to your phone, tablet, or desktop when form actions are triggered. This is a Pro edition feature.

Setup

1. Create a Pushover Account

Sign up at pushover.net and install the Pushover app on your device. Pushover charges a one-time $5 fee per platform (iOS, Android, Desktop).

2. Create an Application

Go to pushover.net/apps/build and create a new application for your Total CMS site. This gives you an Application Token.

3. Get Your User Key

Your User Key is displayed on your Pushover dashboard.

4. Configure Total CMS

Go to Settings > Push Notifications in the Total CMS admin and enter your Application Token and User Key.

5. Test Your Configuration

Use the Test Push Notifications section at the bottom of the settings page to send a test notification and verify everything is working.

Form Action

The pushover action sends a push notification when a form is saved or an object is deleted. Add it to your collection's formSettings in .meta.json.

Basic Example

{
    "action": "pushover",
    "title": "New Submission",
    "message": "A new form was submitted."
}

Properties

Property Type Required Default Description
action string Yes Must be "pushover"
title string No App name Notification title (max 250 characters). Supports Twig.
message string Yes Notification body (max 1024 characters). Supports Twig.
priority int No 0 Notification priority level (see below)
sound string No User default Notification sound (see below)
link string No Supplementary clickable URL (max 512 characters). Supports Twig.
linkTitle string No Label for the supplementary URL (max 100 characters). Supports Twig.
image object No Image attachment from a collection (max 5MB, see below)
group bool No false Send to group key instead of user key (see below)
continue bool No false Continue to next action even if notification fails

Twig Variables

All text fields (title, message, link, linkTitle) support Twig template syntax with access to:

  • {{ data.fieldName }} - Form field values from the submitted object
  • {{ user.fieldName }} - The authenticated user who triggered the action
{
    "action": "pushover",
    "title": "{{ data.schema }} Updated",
    "message": "{{ user.name }} updated {{ data.title }}",
    "link": "https://mysite.com/admin/collections/blog/{{ data.id }}",
    "linkTitle": "View in Admin"
}

Priority Levels

Value Name Behavior
-2 Lowest No notification generated, badge increment only
-1 Low No sound or vibration, popup notification only
0 Normal Sound, vibration, and alert per device settings
1 High Bypasses quiet hours, always sounds and vibrates
2 Emergency Repeats every 60 seconds until acknowledged (up to 1 hour)

Sounds

Value Sound
(empty) User's default sound
pushover Pushover (default)
bike Bike
bugle Bugle
cashregister Cash Register
classical Classical
cosmic Cosmic
falling Falling
gamelan Gamelan
incoming Incoming
intermission Intermission
magic Magic
mechanical Mechanical
pianobar Piano Bar
siren Siren
spacealarm Space Alarm
tugboat Tugboat
alien Alien Alarm (long)
climb Climb (long)
persistent Persistent (long)
echo Pushover Echo (long)
updown Up Down (long)
vibrate Vibrate Only
none None (silent)

Users can also upload custom sounds to their Pushover account and reference them by name.

Image Attachments

You can attach an image from a collection to the notification. The image is processed through ImageWorks (resized to 1920x1920 max, converted to JPEG) before sending. Pushover supports attachments up to 5MB.

Property Type Required Description
image.collection string Yes Collection name
image.id string Yes Object ID. Supports Twig (e.g., {{ data.id }})
image.property string Yes Image or gallery property name
image.name string No Gallery image name. Use first, last, random, featured, or a specific filename

Single Image Property

{
    "action": "pushover",
    "title": "New Product",
    "message": "{{ data.title }} was added",
    "image": {
        "collection": "products",
        "id": "{{ data.id }}",
        "property": "photo"
    }
}

Gallery Property

{
    "action": "pushover",
    "title": "Gallery Updated",
    "message": "{{ data.title }}",
    "image": {
        "collection": "products",
        "id": "{{ data.id }}",
        "property": "gallery",
        "name": "first"
    }
}

If the image cannot be generated (missing property, empty gallery, etc.), the notification is sent without an attachment.

Delivery Groups

Pushover delivery groups let you broadcast the same notification to multiple users with a single key. To use groups:

  1. Create a delivery group at pushover.net/groups/build and add your team members
  2. Enter the group key in Settings > Push Notifications > Pushover Group Key
  3. Add "group": true to your action config
{
    "action": "pushover",
    "title": "New Order",
    "message": "{{ data.customerName }} placed an order",
    "group": true
}

When group is true, the notification is sent to the group key. When false (default), it uses the user key. This lets you configure both keys in settings and choose per-action which audience receives the notification.

Complete Examples

Blog Notification on New Post

{
    "formSettings": {
        "newActions": [
            {
                "action": "pushover",
                "title": "New Blog Post",
                "message": "{{ user.name }} published: {{ data.title }}",
                "sound": "magic",
                "link": "https://mysite.com/blog/{{ data.slug }}",
                "linkTitle": "Read Post"
            },
            {
                "action": "redirect-object",
                "link": "/admin/collections/blog/{id}"
            }
        ]
    }
}

E-commerce Order Notifications

{
    "formSettings": {
        "newActions": [
            {
                "action": "pushover",
                "title": "New Order #{{ data.id }}",
                "message": "{{ data.customerName }} placed an order for ${{ data.total }}",
                "priority": 1,
                "sound": "cashregister",
                "link": "https://mysite.com/admin/collections/orders/{{ data.id }}",
                "linkTitle": "View Order"
            },
            {
                "action": "mailer",
                "mailerId": "order-confirmation"
            },
            {
                "action": "redirect-object",
                "link": "/admin/collections/orders/{id}"
            }
        ],
        "deleteActions": [
            {
                "action": "pushover",
                "title": "Order Cancelled",
                "message": "Order #{{ data.id }} was cancelled by {{ user.name }}",
                "priority": 1,
                "continue": true
            },
            {
                "action": "redirect",
                "link": "/admin/collections/orders"
            }
        ]
    }
}

Non-Critical Analytics with Continue

{
    "action": "pushover",
    "title": "Content Updated",
    "message": "{{ data.title }} was modified",
    "priority": -1,
    "continue": true
}

Using continue: true ensures that if the Pushover API is unreachable, the remaining form actions (like redirects) still execute.

Rate Limits

Pushover allows 10,000 messages per month on the free tier. Each successful API call counts as one message regardless of how many devices the user has. The quota resets on the 1st of each month.

See Also

See also