Skip to content

Apprise API Notifications

Overview

Set up a self-hosted Apprise API instance, then use this service to send notifications to it.

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}
VariableRequiredDescription
hostnameYesWeb server hostname
portNoWeb server port. The default is 80 for apprise:// and 443 for apprises://.
userNoUsername used when the server requires HTTP Basic Auth.
passwordNoPassword used when the server requires HTTP Basic Auth.
tagsNoOptional tags sent with the request.
versionNoVersion 2 sends the token in X-Apprise-Config-ID and is the default. Version 1 keeps it in the HTTP path for older servers.
VariableDescription
overflowControls 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.
formatThis 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.
verifyExternal 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.
redirectBy 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.
ctoThis 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.
rtoThis 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.
emojisEnable 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.
tzIdentify 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.
retryThe 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.
waitThe 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.
optionalWhen 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.

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:

Terminal window
apprise --body="Test Message" \
"apprise://apprise.server.local/token?v=1"

Send a notification along to an Apprise API server listening on port 80:

Terminal window
# Assuming our {hostname} is apprise.server.local
# Assuming our {token} is token
apprise -vv --body="Test Message" \
"apprise://apprise.server.local/token"

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.

Terminal window
# Configuration login with a username and password
apprise -vv --body="Test Message" \
"apprises://user:password@apprise.server.local/token"
# Password-only administrator login
apprise -vv --body="Test Message" \
"apprises://:password@apprise.server.local/token"

You can also select services by tag:

Terminal window
# Assuming our {hostname} is apprise.server.local
# Assuming our {token} is token
# Send to services associated with the {tag} email
apprise -vv --body="Test Message" \
"apprise://apprise.server.local/token?tags=email"

Tags support AND and OR expressions:

tags= valueSelected services
TagAHas TagA
TagA TagBHas TagA AND TagB
TagA+TagBHas TagA AND TagB
TagA&TagBHas TagA AND TagB
TagA,TagBHas TagA OR TagB
TagA|TagBHas TagA OR TagB
TagA TagC,TagBHas (TagA AND TagC) OR TagB
Terminal window
# OR example
apprise -vv --body="Test Message" \
"apprise://apprise.server.local/token?tags=devops,finance"
# AND example
apprise -vv --body="Test Message" \
"apprise://apprise.server.local/token?tags=devops alerts"
# Mixed example: (comment AND create) OR admin
apprise -vv --body="Test Message" \
"apprise://apprise.server.local/token?tags=comment create,admin"

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 apprise command line tool always does this: it uses text unless you pick another one with --input-format (or -i).
  • When the message has no format of its own (for example a Python notify() call without body_format), you can add ?format= to the URL (text, html or markdown) 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.
Terminal window
# Our message is written in Markdown; let the server know
apprise -vv --input-format=markdown --body="**Server** is back up" \
"apprise://apprise.server.local/token"

Prefix a URL parameter with a plus sign (+) to send it as an HTTP header.

Terminal window
# Below would set the header:
# X-Token: abcdefg
#
# Assuming our {hostname} is localhost
# Assuming our {port} is 8080
# Assuming our {token} is apprise
apprise -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 instead
apprise -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.

Terminal window
# 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 apprise
apprise --body="test message" --config=http://localhost:8080/get/apprise
# Authenticated remote configuration
apprise --body="test message" \
--config="http://user:password@localhost:8080/get/apprise"
Questions or Feedback?

Documentation

Notice a typo or an error?

Technical Issues

Having trouble with the code? Open an issue on GitHub:

Made with love from Canada