Skip to content

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.

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).

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

Your User Key is displayed on your Pushover dashboard.

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

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

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.

{
"action": "pushover",
"title": "New Submission",
"message": "A new form was submitted."
}
PropertyTypeRequiredDefaultDescription
actionstringYesMust be "pushover"
titlestringNoApp nameNotification title (max 250 characters). Supports Twig.
messagestringYesNotification body (max 1024 characters). Supports Twig.
priorityintNo0Notification priority level (see below)
soundstringNoUser defaultNotification sound (see below)
linkstringNoSupplementary clickable URL (max 512 characters). Supports Twig.
linkTitlestringNoLabel for the supplementary URL (max 100 characters). Supports Twig.
imageobjectNoImage attachment from a collection (max 5MB, see below)
groupboolNofalseSend to group key instead of user key (see below)
continueboolNofalseContinue to next action even if notification fails

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"
}
ValueNameBehavior
-2LowestNo notification generated, badge increment only
-1LowNo sound or vibration, popup notification only
0NormalSound, vibration, and alert per device settings
1HighBypasses quiet hours, always sounds and vibrates
2EmergencyRepeats every 60 seconds until acknowledged (up to 1 hour)
ValueSound
(empty)User’s default sound
pushoverPushover (default)
bikeBike
bugleBugle
cashregisterCash Register
classicalClassical
cosmicCosmic
fallingFalling
gamelanGamelan
incomingIncoming
intermissionIntermission
magicMagic
mechanicalMechanical
pianobarPiano Bar
sirenSiren
spacealarmSpace Alarm
tugboatTugboat
alienAlien Alarm (long)
climbClimb (long)
persistentPersistent (long)
echoPushover Echo (long)
updownUp Down (long)
vibrateVibrate Only
noneNone (silent)

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

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.

PropertyTypeRequiredDescription
image.collectionstringYesCollection name
image.idstringYesObject ID. Supports Twig (e.g., {{ data.id }})
image.propertystringYesImage or gallery property name
image.namestringNoGallery image name. Use first, last, random, featured, or a specific filename
{
"action": "pushover",
"title": "New Product",
"message": "{{ data.title }} was added",
"image": {
"collection": "products",
"id": "{{ data.id }}",
"property": "photo"
}
}
{
"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.

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.

{
"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}"
}
]
}
}
{
"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"
}
]
}
}
{
"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.

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.