Back to wiki
Bytesized Hosting

Pushbullet

Name: pushbullet

Website: https://www.pushbullet.com/

Last reviewed by: Clipper, April 2026


Getting started with Pushbullet

Email is a very unreliable way of communication — once it leaves our mail server it can end up blocked at the ISP level or land in your spam filter.

That's why we offer a secondary form of communication through Pushbullet. Pushbullet is a notification service that pushes alerts directly to your phone or browser.

Note: Pushbullet does not offer a native account registration. You must sign in using Google or Facebook.


Requirements

To receive notifications you will need the Pushbullet app installed on your device(s):

Part 1 — Bytesized notifications

This allows Bytesized to send you notifications directly for platform events such as invoice creation or ticket replies.

  1. Go to the Pushbullet website and sign in with Google or Facebook.
  2. Install the app or browser extension on your device(s).
  3. On the Bytesized site, click your name in the top right and select Settings.
  4. You should see a green Authorise with Pushbullet button.
  5. Press it and click the big Approve button on the Pushbullet page.
  6. Within a few seconds you should receive a confirmation notification.
  7. Back in settings, select which of your registered devices you want notifications pushed to.

Once set up, Bytesized will appear in your Pushbullet Settings → Connected Apps as a connected source.

Whenever an invoice is created or a ticket receives a reply, you will receive a push notification directly to your device.

Part 2 — Deluge torrent completion notifications

You can also use Pushbullet to receive a notification on your device every time a torrent finishes downloading in Deluge.

Setup

  1. In the Pushbullet web interface, go to Settings → Account and scroll down to Access Tokens. Click Create Access Token — the token is generated immediately. Copy it and store it securely.

Note: Access tokens have no expiry date and cannot be named or given a logo. They will appear as "Pushbullet API Access" in your Connected Apps. To revoke access at any time, go to Settings → Connected Apps and click Delete.

Pushbullet Connected Apps

  1. On your Appbox, create a token file:
echo "YOUR_ACCESS_TOKEN" > ~/.pushbullet_token
chmod 600 ~/.pushbullet_token
  1. Create the notification script at ~/bin/pushbullet_notify.py — see the script below.
  2. Make it executable:
chmod +x ~/bin/pushbullet_notify.py
  1. Add it to the Deluge Execute plugin by adding a second torrent_complete entry in ~/.config/deluge/execute.conf:
{
    "file": 1,
    "format": 1
}{
    "commands": [
        [
            "torrent_complete",
            "/home/HD/USERNAME/venvs/deluge/bin/python",
            "/home/HD/USERNAME/.config/deluge/filebot.py"
        ],
        [
            "torrent_complete",
            "/home/HD/USERNAME/venvs/deluge/bin/python",
            "/home/HD/USERNAME/bin/pushbullet_notify.py"
        ]
    ]
}

Note: Replace /home/HD/USERNAME/ with your actual home path, found on your box control panel.

Once a torrent completes, you will receive a notification like this:

Pushbullet notification example


Script — ~/bin/pushbullet_notify.py

#!/home/HD/USERNAME/venvs/deluge/bin/python
# -*- coding: utf-8 -*-
#
# .SYNOPSIS
#   Sends a Pushbullet notification on Deluge torrent completion.
#   Called by the Deluge Execute plugin.
#
# .PARAMETER sys.argv[1]   torrent_id
# .PARAMETER sys.argv[2]   torrent_name
# .PARAMETER sys.argv[3]   save_path
#
# .NOTES
#   Token is read from ~/.pushbullet_token (one line, no whitespace).
#   Replace /home/HD/USERNAME/ in the shebang with your actual home path.
#

import sys
import json
import urllib.request
import urllib.error
from pathlib import Path

TOKEN_FILE = Path.home() / ".pushbullet_token"
API_URL    = "https://api.pushbullet.com/v2/pushes"

def read_token():
    """Read the Pushbullet access token from ~/.pushbullet_token."""
    if not TOKEN_FILE.exists():
        print(f"ERROR: Token file not found at {TOKEN_FILE}", file=sys.stderr)
        sys.exit(1)
    token = TOKEN_FILE.read_text().strip()
    if not token:
        print("ERROR: Token file is empty.", file=sys.stderr)
        sys.exit(1)
    return token

def send_push(token, title, body):
    """Send a Pushbullet note to all devices."""
    payload = json.dumps({
        "type":  "note",
        "title": title,
        "body":  body,
    }).encode("utf-8")

    request = urllib.request.Request(
        API_URL,
        data    = payload,
        headers = {
            "Access-Token": token,
            "Content-Type": "application/json",
        },
        method  = "POST",
    )

    try:
        with urllib.request.urlopen(request, timeout=10) as response:
            print(f"Pushbullet: notification sent (HTTP {response.status})")
    except urllib.error.HTTPError as e:
        print(f"ERROR: Pushbullet HTTP {e.code}: {e.reason}", file=sys.stderr)
        sys.exit(1)
    except urllib.error.URLError as e:
        print(f"ERROR: Pushbullet connection failed: {e.reason}", file=sys.stderr)
        sys.exit(1)

def main():
    if len(sys.argv) >= 3:
        torrent_name = sys.argv[2]
        save_path    = sys.argv[3] if len(sys.argv) >= 4 else "unknown"
    else:
        print("Usage: pushbullet_notify.py <torrent_id> <torrent_name> <save_path>")
        sys.exit(1)

    token = read_token()
    title = "✅ Download complete"
    body  = f"{torrent_name}\n📁 {save_path}"

    send_push(token, title, body)

if __name__ == "__main__":
    main()

Test manually

~/bin/pushbullet_notify.py fake_id "The.Matrix.1999.2160p.mkv" "~/torrents/data"

You should receive a notification on all your registered Pushbullet devices within a few seconds.

Last Author
Clipper
Versions
26
Last Update
Fri, 10 Apr 2026 21:10:17 +0200