Open Push Relay
Public push notifications by topic
Open Push Relay API
Open Push Relay is a public Web Push relay. Devices subscribe to a topic ID from/subscribe. Any system can publish a notification to that topic with a title, message, and click URL. No login, token, or dashboard is required.
Base URL
https://push.submit.codes
Publish a notification
Send a JSON request to a topic. Every device subscribed to that topic receives the push.
POST /api/topic/{topicId}
Content-Type: application/json
{
"title": "New paid order",
"body": "Order #1042 was paid by Catalina R.",
"clickUrl": "https://store.example.com/admin/orders/1042"
}cURL
curl -X POST https://push.submit.codes/api/topic/store-demo \
-H "Content-Type: application/json" \
-d '{ "title": "New paid order", "body": "Order #1042 was paid by Catalina R.", "clickUrl": "https://store.example.com/admin/orders/1042"}'Request fields
| Field | Required | Description |
|---|---|---|
title | Yes | Notification title. |
body | No | Notification body text. |
clickUrl | No | URL opened when the notification is tapped. |
tag | No | Browser notification tag for replacement/grouping. |
Alternative publish endpoint
POST /api/publish
Content-Type: application/json
{
"id": "store-demo",
"title": "New paid order",
"body": "Order #1042 was paid",
"clickUrl": "https://store.example.com/admin/orders/1042"
}Device subscription endpoint
Browsers should use /subscribe. It registers the service worker, requests notification permission, creates a Push API subscription, and sends it to:
POST /api/subscribe
Content-Type: application/json
{
"id": "store-demo",
"subscription": PushSubscription
}Unsubscribe endpoint
POST /api/unsubscribe
Content-Type: application/json
{
"id": "store-demo",
"endpoint": "https://push-service.example/subscription-id"
}Response
{
"ok": true,
"id": "store-demo",
"sent": 3,
"failed": 0,
"subscribers": 3,
"payload": {
"title": "New paid order",
"body": "Order #1042 was paid by Catalina R.",
"clickUrl": "https://store.example.com/admin/orders/1042",
"tag": "topic:store-demo",
"topic": "store-demo"
}
}Topic rules
Topic IDs are normalized to lowercase and can contain letters, numbers, dots, dashes, and underscores. Maximum length is 80 characters.
Security model
This API is intentionally open. There is no authentication. Treat topic IDs like public channels. Use unguessable topic IDs if you do not want random publishers.