Skip to content

Moving from Pushover

PushBell accepts Pushover’s message API as is:

  1. In the dashboard, API keys → Create key, tick Pushover compatible (30 characters).
  2. Change the URL from https://api.pushover.net/1/messages.json to https://api.pushbell.app/1/messages.json.
  3. Use the new key as token and your PushBell user key (u_…, on the Account page) as user.

Parameters (title, message, priority, sound, url, retry, expire, callback, html, attachment…) and responses ({"status":1,"request":"…"}, an errors array on failure) are the same. Pushover sound names (cashregister, siren, persistent…) map to the closest PushBell sound.

Pushover’s other endpoints work at the same paths:

Endpoint What it does
GET /1/receipts/{receipt}.json, POST /1/receipts/{receipt}/cancel.json, POST /1/receipts/cancel_by_tag/{tag}.json Emergency receipts: status, cancel, cancel by tag
POST /1/users/validate.json Validates a user or group key; returns the device names (devices) and platforms (licenses)
GET /1/sounds.json Built-in sounds and your custom sounds
GET /1/apps/limits.json Monthly quota: limit, remaining, reset
POST /1/glances.json Widget data: title, text, subtext, count, percent; an empty value clears a field
/1/groups.json, /1/groups/{key}.json, …/add_user.json, delete_user, disable_user, enable_user, rename Groups
POST /1/subscriptions/migrate.json Turns a user key into a subscribed key
GET /1/teams.json, POST /1/teams/add_user.json, revoke_invitation.json, remove_user.json Pushover for Teams: team info, invite, revoke an invitation, remove from the team. Create the key in the dashboard with Team management ticked (admins only); this key can’t send notifications. add_user sends an email invitation and someone without an account creates one from the link without a password; password isn’t used, and the person joins the team group automatically

Desktop and Linux clients written for Pushover’s Open Client API, or your own software, can receive notifications from PushBell. Change the addresses:

Pushover PushBell
https://api.pushover.net/1/… https://api.pushbell.app/1/…
wss://client.pushover.net/push wss://ws.pushbell.app/push
https://api.pushover.net/icons/…, /sounds/… https://api.pushbell.app/icons/…, /sounds/…
  1. Log in: POST /1/users/login.json (email, password). If two-factor authentication is on, the response is HTTP 412. Send the request again with twofa (the code from your authenticator app, or a recovery code). Store the secret from the response, not the password. The login shows up in your account’s Sessions list. If you end it there, the client has to log in again.
  2. Register a device: POST /1/devices.json (secret, name, os=O). The name is up to 25 letters, digits, _ or -. A name that is taken returns an error. To reuse a device you registered earlier with this client, send force=1.
  3. Listen: connect to wss://ws.pushbell.app/push and send login:<device>:<secret> followed by a newline. The server sends single-byte frames:
    • # keep-alive
    • ! new notifications: download them (also sent right after login, for anything that arrived while you were offline)
    • R reconnect
    • E permanent error: log in again or register the device again
    • A the device connected from another session: don’t reconnect
  4. Download: GET /1/messages.json?secret=…&device_id=…. Up to 100 notifications per call. Fields match Pushover: id, umid, title, message, app (the project), icon, date, priority, sound, url, url_title, acked, receipt, html.
  5. Delete: POST /1/devices/<device>/update_highest_message.json (secret, message: the highest id from your last download). Anything you don’t delete comes back in the next download.
  6. Acknowledge an emergency notification: POST /1/receipts/<receipt>/acknowledge.json (secret). Send it only when the person presses a button on the notification, not when it times out.
  7. Log out (PushBell extension): POST /1/users/logout.json (secret). The session ends on the server and the device is disabled, so it gets no more notifications. Deleting the local file is not enough: the secret stays valid for a year.
  • An empty icon means the client asks for default.png (the PushBell icon). If the project or type has a logo, icon is the logo’s code: /icons/<code>.png.
  • sound is a built-in sound name or a custom sound’s code: /sounds/<name>.mp3.
  • Icon and sound files are returned directly, without redirects. Files named by code never change, so you can cache them.
  • End-to-end encrypted notifications don’t send their text to the client. It shows “Encrypted notification”; open the PushBell app to read it.