platforms/devplace/rest_web_push.md

DevPlace REST: Web Push Registration

Registering browser and APNs push subscriptions: discovering enabled providers via push.json, fetching the public VAPID key, posting a PushSubscription, and the client-side unsubscribe model with no server endpoint.

Push notifications are delivered by one or more providers. webpush is the default and implements the Web Push protocol: fetch the public VAPID key, then register a PushSubscription obtained from the browser's PushManager. apns delivers to an Apple Push Notification service device token and is only offered when an administrator has configured it.

GET /push.json lists the providers that currently accept registrations. A registration body without a provider field is a webpush registration, so existing clients need no change.

There is no server-side unsubscribe endpoint: unsubscription is handled entirely in the browser by calling PushManager.unsubscribe() on the subscription. The server stops delivering to a subscription once its push endpoint reports it as gone. These mirror the in-app Notifications feed.

Every endpoint follows the shared Conventions & Errors (auth, content negotiation, pagination, status codes); see Authentication for the four ways to sign requests.

GET /push.json - Get the public key

Return the VAPID public key and the providers that accept registrations.

Minimal role: Public

Sample response

{
  "publicKey": "BASE64_VAPID_KEY",
  "providers": {
    "webpush": {
      "publicKey": "BASE64_VAPID_KEY"
    }
  }
}

POST /push.json - Register a subscription

Register a push subscription. Sends a welcome notification.

Minimal role: Member

Parameters

NameInTypeRequiredDescription
providerjsonstringnoProvider to register with. Omit for webpush.
endpointjsonstringnoSubscription endpoint URL. Required for webpush.
keysjsonstringnoSubscription keys object. Required for webpush.
tokenjsonstringnoHexadecimal device token. Required for apns.

A webpush body is JSON: {"endpoint": "...", "keys": {"p256dh": "...", "auth": "..."}}.

An APNs body is JSON: {"provider": "apns", "token": "..."}.

A provider that is unknown, disabled or unconfigured returns 400.

Sample response

{
  "registered": true
}