Pushover
MESSAGING · MESSAGING
Push notifications sent to their own devices, users, or delivery groups.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
pushover_add_user_to_groupWRITEAdd a user to a delivery group. POST /1/groups/{group_key}/add_user.json. Adds a Pushover user to the group, so messages addressed to the group key reach them too. `target_user_key` names the person being added, which in the ordinary case is SOMEBODY ELSE's user key -- this connection's own key is used only when none is given. `device` pins the membership to one of their devices; `memo` records up to 200 characters about them, such as their name or email address.
pushover_assign_licenseWRITEAssign a purchased licence credit to a user. POST /1/licenses/assign.json. Spends one of the licence credits bought against this application to license a Pushover client for somebody -- named either by `target_user_key` or by `email`, and optionally restricted to one platform by `os`. Left unrestricted, the licence lands on whichever platform they first register a device on; assigned to an email address, it waits until somebody signs up with it. IRREVERSIBLE AND PAID: Pushover states that credits are not refundable and that 'Once a license has been assigned to a Pushover user account, it cannot be revoked or reassigned to another user', and every call spends exactly one credit for one platform. Pushover's own advice is to surface any error here rather than retry.
pushover_cancel_receiptWRITEStop retrying one emergency notification. POST /1/receipts/{receipt}/cancel.json. Ends the repeat delivery of one emergency-priority notification before its `expire` window runs out, so it stops sounding on the recipient's devices. What was already delivered is not withdrawn -- only the retries stop -- and cancelling cannot be undone.
pushover_cancel_receipts_by_tagWRITEStop retrying every emergency notification carrying a tag. POST /1/receipts/cancel_by_tag/{tag}.json. Ends the repeat delivery of ALL of this application's still-active emergency-priority notifications that were sent with the given tag -- possibly many messages, to many different recipients, in one call. Pushover's own example is a monitor tagging each alert `l=chicago` and clearing the lot once the outage is correlated. What was already delivered is not withdrawn, and cancelling cannot be undone.
pushover_check_license_creditsREADCheck how many licence credits remain. GET /1/licenses.json. Answers the number of unassigned licence `credits` left on this application WITHOUT spending one -- the same response shape as assigning a licence. Credits are bought on pushover.net under the application, and are not refundable.
pushover_create_groupWRITECreate a delivery group. POST /1/groups.json. Creates an empty delivery group on the account that owns this application token and answers its `group` key. A group key looks exactly like a user key and is used in the same place: a message addressed to it reaches every active member at once. Any application on the account or team may create one.
pushover_disable_user_in_groupWRITETemporarily disable a user in a delivery group. POST /1/groups/{group_key}/disable_user.json. Stops group messages reaching one member while keeping their membership, device pin and memo intact -- the reversible counterpart to removing them, and the right call for somebody on holiday or off shift. `target_user_key` names the member.
pushover_enable_user_in_groupWRITERe-enable a disabled user in a delivery group. POST /1/groups/{group_key}/enable_user.json. Undoes a disable: group messages reach the member again, with their existing device pin and memo. `target_user_key` names the member.
pushover_get_app_limitsREADCheck this month's message quota. GET /1/apps/limits.json. Answers `limit`, `remaining` and `reset` -- the monthly message allowance (plus any purchased capacity), how many are left, and the Unix timestamp the count resets at, which is 00:00:00 US Central on the 1st. Despite the endpoint's name the quota belongs to the WHOLE user or team account rather than to one application: Pushover keeps the old wording for historical reasons. Once it is spent, every application on the account is refused with 429.
pushover_get_groupREADList one delivery group's members. GET /1/groups/{group_key}.json. Answers the group's `name` and a `users` array naming each member -- their user key, the `device` their membership is pinned to if any, the free-text `memo` recorded against them, and whether they are currently disabled.
pushover_get_receiptREADCheck whether an emergency notification was acknowledged. GET /1/receipts/{receipt}.json. Answers the state of one emergency-priority (priority 2) notification: whether it was `acknowledged` and when, `acknowledged_by` and on which device, when it was `last_delivered_at`, whether it has `expired` and when it `expires_at`, and whether Pushover has `called_back` to the callback URL. The receipt id comes back from the message tool when priority is 2, and stays pollable for one week. Pushover asks for no more than one poll every 5 seconds -- or supply a `callback` URL on the message instead and be told.
pushover_list_groupsREADList this account's delivery groups. GET /1/groups.json. Answers a `groups` array giving each group's `group` key and `name`, for the account that owns this application token.
pushover_list_soundsREADList the notification sounds this application may use. GET /1/sounds.json. Answers a `sounds` hash whose keys are exactly the values the `sound` parameter accepts and whose values name each one -- Pushover's 23 built-in tones plus any custom sounds uploaded to the account that owns this application token. Pushover's own advice is to offer this list to the person choosing, along with a blank option that omits `sound` and lets their default tone play. This is also the endpoint the credential check uses when a key is pasted.
pushover_migrate_subscriptionWRITEMigrate a user key to a subscription key. POST /1/subscriptions/migrate.json. Exchanges a Pushover user key an application already holds for a subscription-scoped key under the subscription named in `subscription`, and answers `subscribed_user_key` to store in its place -- the original key can then be discarded. Migrates this connection's own key unless `target_user_key` names another, and naming another is the ordinary case: this endpoint exists to move an application's existing collection of collected user keys onto subscriptions, one request per user.
pushover_push_messageWRITESend a push notification. POST /1/messages.json. Delivers a message to this connection's own Pushover account, or to the user or group key named in `target_user_key`, and answers `{status: 1, request: <id>}`. `message` is required; `title` defaults to the application's name. Priority 2 (emergency) also requires `retry` and `expire`, repeats until somebody acknowledges it, and returns a `receipt` the receipt tools can poll or cancel. Messages are limited to 1024 UTF-8 characters and a title to 250; each account may send 10,000 messages a month for free, and past that EVERY application on the account is refused with 429 until the 1st.
pushover_remove_user_from_groupWRITERemove a user from a delivery group. POST /1/groups/{group_key}/remove_user.json. Removes a member, so messages addressed to the group key stop reaching them, and discards the `memo` and device pin recorded against that membership. `target_user_key` names the person being removed. Removal is not reversible -- re-adding them creates a fresh membership with nothing carried over -- so to pause somebody temporarily, disable them instead.
pushover_rename_groupWRITERename a delivery group. POST /1/groups/{group_key}/rename.json. Changes the group's display name. The group key does not change, so nothing that already addresses the group needs updating.
pushover_update_glanceWRITEUpdate a widget's glance data. POST /1/glances.json. Pushes a short piece of text or a number to the recipient's Pushover widget -- an Apple Watch complication today -- WITHOUT generating a notification, a sound, or a stored message. Send at least one of `title`, `text`, `subtext`, `count` or `percent`; fields you leave out keep whatever they held before, and a field sent as an empty string is cleared. Updates this connection's own account unless `target_user_key` names another. The recipient must already have a widget registered, watchOS caps updates at about 50 a day and Pushover throttles nothing itself -- it recommends at least 20 minutes between calls -- and data can take up to 10 minutes to appear.
pushover_validate_userREADValidate a user or group key. POST /1/users/validate.json. Checks that a Pushover user or group key exists and has at least one active device, and answers with `devices` (that account's active device names) and `licenses` (the platforms it is licensed for). Checks this connection's own key unless `target_user_key` names another -- checking somebody else's is the documented purpose, as a way to confirm a person copied their key correctly before you store it. MEASURED 2026-09-16: an account that exists but has registered NO device answers 400 `user is valid but has no active devices`. The key is correct and the account is real; it simply has nothing to deliver to yet, so that response is not a credential failure and re-pasting will not change it.
Often connected alongside
Put Pushover behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.