Skip to content

⫻ Web Push API

Notify any browser with one request

Connect a browser once with a click, then POST a title and a link from any script, server or cron job. It lands as a native notification on desktop and mobile.

5,000 free attempts every month · Chrome · Edge · Firefox · Safari

⫻ your server

⫻

POST /push/v1/notifications

curl https://api.meslzy.com/push/v1/notifications \  -H "Authorization: Bearer $PUSH_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "recipient": "me",    "title": "Deploy finished",    "body": "api@4f2c1a is live in production",    "url": "https://example.com/deploys/4f2c1a"  }'

⫻ their browser

meslzy.com

now

Deploy finished

api@4f2c1a is live in production

Open deploy

02 / 04

how it works

⫻ how it works

Three steps, then one request

No SDK to install and no app to publish. The browser is the client.

01

Create a recipient

A recipient is a name like me or ops. You send to the name; Push fans out to every browser connected to it.

02

Connect a browser

Open the connect page or share a link. The person clicks Enable and allows notifications. Nothing is asked on page load.

03

Send one request

POST to /push/v1/notifications on the API host with an API key. You get an id back at once and can check every attempt’s status later.

⫻ Use it for

Deploys that finished or failed

Cron jobs and backups that broke

A new form submission or sign-up

Uptime and threshold alerts

New orders and payments

Long builds and exports that are done

03 / 04

statuses

⫻ statuses

Accepted is not the same as displayed

Push reports exactly what it can know, and never calls anything delivered.

⫻ One attempt, one browser

queued

Created and waiting for a sender.

processing

Being handed to the browser’s push service.

accepted

final

The push service took the message for that browser.

failed

final

Rejected for good, or every retry ran out.

expired

final

The TTL passed before it could be handed over.

invalid_subscription

final

The browser is gone. It is disconnected and the attempt is not counted.

accepted means the push service took it

Google, Mozilla, Apple or Microsoft accepted the message for that browser. Whether it appears depends on the device: it may be offline, muted, or in a focus mode. Messages wait until the TTL runs out.

Clicks and closes come from the browser

When the person clicks, picks an action or dismisses the notification, the browser reports it. You see those as clickedAt, actionClicked and closedAt on each attempt.

clickedAt

actionClicked

closedAt

04 / 04

pricing

⫻ pricing

5,000 attempts free, every month

One attempt is one notification to one browser. Past the free allowance, attempts are paid from your meslzy credits, the same balance every meslzy app uses. No subscription.

⫻ Every month

5,000

attempts free

The allowance starts over each calendar month. Unused attempts do not carry over.

⫻ After that

1 credit

per 1,000 attempts

One credit is taken as each new block of 1,000 starts, from your meslzy balance.

⫻ Test keys

0

credits, always

Test-mode sends are recorded with their status but never delivered and never counted.

⫻ The fine print

01

A send to a recipient with three connected browsers is three attempts.

02

Attempts to a browser that turned out to be gone are taken off the month’s count.

03

With no free attempts and no credits left, a send is refused with QUOTA_EXCEEDED. Nothing is dropped silently.