For people and for code

A push notification from anything.

A tap on a link, a forwarded email, a script that finishes, or one that goes quiet: it lands on your phone.

  1. Deliveries 2h Your parcel is on its way Arriving today between 14:00 and 16:00.
  2. Mum's check-in 9h Mum Home safe. Speak tomorrow!
  3. Servers 1d Disk full on db1 /var/lib/postgres at 97%. Writes fail at 100%. ↗ grafana.example.com
  4. Backups 1d Nightly backup done restic: 2.4 GiB added, 18 snapshots kept
Try it. Who sends it?

Whoever opens your link sees this page.

Front door

Every hook has its own email address. Forward anything to it.

From Riverside School

Trip on Friday: bring a packed lunch

The bus leaves at 8:15. Please pack lunch and rain gear.

Forward to k7f2qm4x…@anypush.app

One request from a script, a server or a cron job.

$ curl -H 'X-Title: Deploy finished' \
     -H 'X-Url: https://ci.example.com/run/42' \
     -d 'web@4f2a91c is live' \
     https://api.anypush.app/h/k7f2qm4x…
{"duplicate":false,"id":1042}

Mum taps her link every morning. Her hook expects that every 24 hours.

  1. Mon
  2. Tue
  3. Wed
  4. Thu
  5. Fri
  6. Sat

Now

No app needed to ring

Print a doorbell.

Every hook comes with a sign and a QR code. Put it on the front door, the shop counter or the shed. Whoever scans it gets one big button, and you get their name and note on your phone.

  • Any phone with a camera can ring it.
  • The person ringing needs no app and no account.
  • Ticked urgent, it stands out in red in your inbox.

Front door

Scan with your phone's camera, then press the button to send a notification.

anypush

The sign that comes with every hook: its name, one line of instructions and a QR code.

Quiet alerts

Hear about the day nothing happens.

Some news is a message that never comes. Tell a hook how often to expect one. If the morning tap doesn't come, or the backup job goes quiet, you get one urgent alert. The next message clears it.

Mum's check-inA tap on her link every morning

Mum's check-in Nothing has arrived for 24 hours.

Nightly backupA message after every run

Nightly backup Nothing has arrived for 24 hours.

Email

Forward the emails that matter.

Each hook has its own email address. Set up a filter once in Gmail or Outlook, and the school, the dentist or the delivery service becomes a notification instead of one more unread email.

Gmail sends a confirmation code first. It arrives as a notification too.

From Smile Dental

Reminder: your appointment tomorrow at 10:30

Please arrive 10 minutes early. Reply to this email to change the time.

Reminder: your appointment tomorrow at 10:30now Please arrive 10 minutes early. Reply to this email to change the time.
The email from Smile Dental arrives as a notification titled with its subject.

For developers

One URL. Any language.

Send
POST text, or JSON with title, message, priority and url. Or use the headers X-Title, X-Priority and X-Url.
Retry
An Idempotency-Key makes a retry within 24 hours count once.
Limits
Up to 64 KiB a message, 60 a minute per hook. The answer is 202 with the message id.
Silence
A quiet alert per hook, checking from every hour on Free and every 5 minutes on Plus, up to 31 days: a dead man's switch for any job.
Desktop
anypush listen shows the same notifications on your computer; anypush send sends from the shell.
Example
export ANYPUSH_URL=https://api.anypush.app/h/your-token

curl -H 'X-Title: Deploy finished' \
     -H 'X-Priority: high' \
     -H 'X-Url: https://ci.example.com/run/42' \
     -d 'web@4f2a91c is live' \
     "$ANYPUSH_URL"

HTTP/2 202 {"duplicate":false,"id":1042}

# crontab: a message after every good run. With a quiet alert
# of 1 day on the hook, the run that never happens reaches you too.
ANYPUSH_URL=https://api.anypush.app/h/your-token
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 -H 'X-Priority: low' -d 'backup ok' "$ANYPUSH_URL"
- name: Notify on failure
  if: failure()
  run: |
    curl -sS -H "X-Priority: high" \
      -H "X-Url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
      -d "${{ github.workflow }} failed on ${{ github.ref_name }}" \
      ${{ secrets.ANYPUSH_URL }}
import json, os, urllib.request

def notify(message, title="", priority="normal"):
    req = urllib.request.Request(
        os.environ["ANYPUSH_URL"],
        data=json.dumps({"message": message, "title": title,
                         "priority": priority}).encode(),
        headers={"Content-Type": "application/json"},
    )
    urllib.request.urlopen(req, timeout=10)

notify("Training finished: loss 0.031", title="gpu-box")
# configuration.yaml
rest_command:
  anypush:
    url: !secret anypush_url
    method: POST
    content_type: application/json
    payload: '{"title": "{{ title }}", "message": "{{ message }}"}'

The app fills in your own URL in recipes for cron, GitHub Actions, Home Assistant, Python, PowerShell, iPhone Shortcuts, Zapier, IFTTT and Make.

Free and Plus

Free to start. Plus when you need more.

Free has no ads. Plus raises the limits: more hooks, quiet alerts that check more often, and a longer history.

  • Plus is a prepaid pass for 1 month or 12 months.
  • It never renews by itself.
  • It is sold in the app, through Google Play.

On both plans

  • Push notifications
  • Ping pages and printable signs
  • Email-to-push
  • Urgent alerts
  • Unlimited devices
Where Free and Plus differ
FreePlus
Hooks3100
Quiet alerts3 that check at most every hour100 that can check as often as every 5 minutes
Message history7 days30 days
Price€0
  • €3.99 for 1 month
  • €29.99 for 12 months

When a pass ends, everything you set up keeps running. History goes back to 7 days, and nothing new can be set up beyond the Free limits.

Your messages are yours

  • €0 to startFree plan, no ads. Plus is a prepaid pass.
  • 7 daysThen every message deletes itself. On Plus, after 30 days.
  • 0Trackers on this site. The app asks before it sends even a crash report.

The privacy notice says exactly what is stored, for how long, and who handles it.

Get it the day it launches.

anypush is coming to Google Play. Send us a line, and we'll tell you when it's live.

Notify me at launch Opens an email to hello@anypush.app