Apprise API Notifications
Account Setup
Section titled “Account Setup”Set up a self-hosted Apprise API instance, then use this service to send notifications to it.
Syntax
Section titled “Syntax”Valid syntax is as follows:
apprise://{host}/{token}apprise://{host}:{port}/{token}apprise://:{password}@{host}:{port}/{token}apprise://{user}@{host}:{port}/{token}apprise://{user}:{password}@{host}:{port}/{token}
For a secure connection, just use apprises instead.
apprises://{host}/{token}apprises://{host}:{port}/{token}apprises://:{password}@{host}:{port}/{token}apprises://{user}@{host}:{port}/{token}apprises://{user}:{password}@{host}:{port}/{token}
Parameter Breakdown
Section titled “Parameter Breakdown”| Variable | Required | Description |
|---|---|---|
| hostname | Yes | Web server hostname |
| port | No | Web server port. The default is 80 for apprise:// and 443 for apprises://. |
| user | No | Username used when the server requires HTTP Basic Auth. |
| password | No | Password used when the server requires HTTP Basic Auth. |
| tags | No | Optional tags sent with the request. |
| version | No | Version 2 sends the token in X-Apprise-Config-ID and is the default. Version 1 keeps it in the HTTP path for older servers. |
Global Parameters
Section titled “Global Parameters”| Variable | Description |
|---|---|
| overflow | Controls messages that exceed a service’s documented limit. The default is upstream.👉 upstream: Send one message without splitting or truncating it for that limit.👉 truncate: Keep the portion that fits and discard the rest.👉 split: Prefer a readable break, fall back to a hard boundary, and send every part in order.Splitting undeclared or structured content is best effort. Use upstream when the body must remain one intact document. |
| format | This parameter can be set to either text, html, or markdown. Some services support the ability to post content by several different means. The default of this varies (it can be one of the 3 mentioned at any time depending on which service you choose). You can optionally force this setting to stray from the defaults if you wish. If the service doesn’t support different types of transmission formats, then this field is ignored. |
| verify | External requests made to secure locations (such as through the use of https) will have certificates associated with them. By default, Apprise will verify that these certificates are valid; if they are not then no notification will be sent to the source. In some occasions, a user might not have a certificate authority to verify the key against or they trust the source; in this case you will want to set this flag to no. By default it is set to yes. |
| redirect | By default, Apprise will follow HTTP redirects (3xx responses) issued by the remote server, matching the behaviour of the underlying requests library. If you want to prevent custom headers and credentials from being forwarded to destinations that differ from the original URL, set this to no. By default it is set to yes. |
| cto | This stands for Socket Connect Timeout. This is the number of seconds Requests will wait for your client to establish a connection to a remote machine (corresponding to the connect()) call on the socket. The default value is 4.0 seconds. |
| rto | This stands for Socket Read Timeout. This is the number of seconds the client will wait for the server to send a response. The default value is 4.0 seconds. |
| emojis | Enable Emoji support (such as providing :+1: would translate to 👍). By default this is set to no. Note: Depending on server side settings, the administrator has the power to disable emoji support at a global level; but default this is not the case. |
| tz | Identify the IANA Time Zone Database you wish to operate as. By default this is detected based on the configuration the server hosting Apprise is running on. You can set this to things like America/Toronto, or any other properly formated Timezone describing your area. |
| retry | The number of additional delivery attempts to make after the first failure before giving up. Accepts an integer in the range 0 to 10. The default is 0 (no retries — a single attempt is made). When combined with wait, Apprise pauses the specified number of seconds between each attempt. |
| wait | The number of seconds to pause between retry attempts. Accepts a decimal value in the range 0.0 to 20.0; integer values are promoted to float automatically. The default is 0.5. This value is only meaningful when retry is greater than zero — a service with retry=0 makes exactly one attempt regardless of the wait value. |
| optional | When set to yes, a delivery failure for this service is silently absorbed. The overall notify() call still evaluates as true even if this endpoint was unreachable, provided that every required (non-optional) service in the same batch succeeded. Setting this flag does not skip delivery or bypass retry logic — all configured retry attempts are still made before the failure is absorbed. By default this is set to no, meaning every failure is propagated to the caller. |
Examples
Section titled “Examples”Version 2 is used unless v=1 is specified. The token remains part of the apprise:// plugin URL, but version 2 sends it to the server in a header instead of the HTTP request path. Use version 1 when connecting to an older Apprise API server:
apprise --body="Test Message" \ "apprise://apprise.server.local/token?v=1"Without Authentication
Section titled “Without Authentication”Send a notification along to an Apprise API server listening on port 80:
# Assuming our {hostname} is apprise.server.local# Assuming our {token} is tokenapprise -vv --body="Test Message" \ "apprise://apprise.server.local/token"With Authentication
Section titled “With Authentication”Place the saved username and password before the hostname. A password-only administrator login starts with a colon. Version 2 sends the configuration key in X-Apprise-Config-ID automatically.
# Configuration login with a username and passwordapprise -vv --body="Test Message" \ "apprises://user:password@apprise.server.local/token"
# Password-only administrator loginapprise -vv --body="Test Message" \ "apprises://:password@apprise.server.local/token"You can also select services by tag:
# Assuming our {hostname} is apprise.server.local# Assuming our {token} is token# Send to services associated with the {tag} emailapprise -vv --body="Test Message" \ "apprise://apprise.server.local/token?tags=email"Tags support AND and OR expressions:
tags= value | Selected services |
|---|---|
TagA | Has TagA |
TagA TagB | Has TagA AND TagB |
TagA+TagB | Has TagA AND TagB |
TagA&TagB | Has TagA AND TagB |
TagA,TagB | Has TagA OR TagB |
TagA|TagB | Has TagA OR TagB |
TagA TagC,TagB | Has (TagA AND TagC) OR TagB |
# OR exampleapprise -vv --body="Test Message" \ "apprise://apprise.server.local/token?tags=devops,finance"
# AND exampleapprise -vv --body="Test Message" \ "apprise://apprise.server.local/token?tags=devops alerts"
# Mixed example: (comment AND create) OR adminapprise -vv --body="Test Message" \ "apprise://apprise.server.local/token?tags=comment create,admin"Message Formats
Section titled “Message Formats”This service hands your message to another Apprise server, which then formats it for its own services. To avoid changing your message twice, the title and body are always forwarded exactly as you wrote them. Nothing is converted along the way.
- When you tell Apprise what your message is written in, that format is passed along to the server with the message. The
apprisecommand line tool always does this: it usestextunless you pick another one with--input-format(or-i). - When the message has no format of its own (for example a Python
notify()call withoutbody_format), you can add?format=to the URL (text,htmlormarkdown) to tell the server what your message is written in. The message itself is still sent unchanged. - When neither is set, no format is passed along and the server uses its own default.
# Our message is written in Markdown; let the server knowapprise -vv --input-format=markdown --body="**Server** is back up" \ "apprise://apprise.server.local/token"Header Manipulation
Section titled “Header Manipulation”Prefix a URL parameter with a plus sign (+) to send it as an HTTP header.
# Below would set the header:# X-Token: abcdefg## Assuming our {hostname} is localhost# Assuming our {port} is 8080# Assuming our {token} is appriseapprise -vv -t "Test Message Title" -b "Test Message Body" \ "apprise://localhost:8080/apprise/?+X-Token=abcdefg"
# Multiple headers just require more entries defined:# Below would set the headers:# X-Token: abcdefg# X-Apprise: is great## Assuming our {hostname} is localhost# Assuming our {port} is 8080# Assuming our {token} is apprise# In this example we allow for a custom URL path to be defined# in the event we're hosting our Apprise API here insteadapprise -vv -t "Test Message Title" -b "Test Message Body" \ "apprise://localhost:8080/path/apprise/?+X-Token=abcdefg&+X-Apprise=is%20great"Note: The CLI --config option and the AppriseConfig() class can also load configuration from an Apprise API server.
# A simple example of the Apprise CLI using a Config file instead:# pulling down previously stored configuration# Assuming our {hostname} is localhost# Assuming our {port} is 8080# Assuming our {token} is appriseapprise --body="test message" --config=http://localhost:8080/get/apprise
# Authenticated remote configurationapprise --body="test message" \ --config="http://user:password@localhost:8080/get/apprise" Questions or Feedback?
Technical Issues
Having trouble with the code? Open an issue on GitHub: