Bolrach Push

Say a customer named Dana has your app on an iPhone and a Huawei tablet, and has also allowed notifications in Chrome on her work laptop. Your server sends one message addressed to her user id, user_8123, and Bolrach Push hands a copy to Apple, to Huawei and to the browser's push service. When a device shows it, the app tells us, and the console marks that copy received, then opened if she taps it. A message Google took but no phone ever showed looks different from one that reached a screen.

Base URL https://api.bolrach.com/push/v1Operations 410Spec openapi.json

How it fits together

  1. Make an app at bolrach.com/push. On its page, add a key for every platform you ship to. Browsers use a pair of Web Push keys that we generate for you, Android takes the Firebase service account file, and iPhones take the .p8 file from your Apple account.
  2. Each browser or phone registers itself as an installation. The web SDK does it from the page; a mobile app does it with the app id, or your backend does it with a server key.
  3. When the person signs in, the device is linked to your user id. Sign-out unlinks it, so a shared phone stops showing the last person's messages.
  4. Your server sends with POST /messages to that user id, a list of users, a topic or one device. Instead of writing each message, the server can report what happened, such as order 8123 shipping, and a journey picks the wording and the timing.
  5. Devices post receipts. Webhooks and the message trace show each step: accepted by the provider, received, displayed, opened.

Every call goes to https://api.bolrach.com/push/v1. The machine-readable contract is at api.bolrach.com/push/v1/openapi.json, and the API reference lists all of it.

Pick a starting point

Accepted is not delivered

When Google, Apple or a browser vendor takes a message, all we know is that they took it. A phone that is switched off shows provider_accepted until it comes back online and the app confirms. Once a provider has accepted a push it cannot be recalled, so pause and cancel only stop deliveries that have not been handed over yet.

Machine-readable: openapi.json. Console: bolrach.com/push.