Save any web dashboard as an app. Get native push notifications via webhook. Tap to open.
Add Grafana, Home Assistant, n8n, or any web tool. Give it a name, icon, and accent colour.
Each app gets a unique webhook URL. POST to it from anywhere — Relay delivers a native push notification.
Tap a notification to jump straight to the dashboard it came from. Full-screen WebView, no browser chrome.
Three steps to get push notifications from any system to your phone.
Enter a URL, name, and icon. Relay saves it as a launchable app and generates a webhook token.
Copy the webhook URL. Add it to your CI pipeline, monitoring alerts, cron jobs, or automation scripts.
When your system fires, you get a native push notification. Tap it to open the dashboard instantly.
Send notifications to your phone with a single HTTP request.
Send a push notification to all devices registered to the app matching the webhook token.
| Field | Type | Description | |
|---|---|---|---|
| token | string | required | Your app's webhook token. Found in app settings. |
| title | string | required | Notification title. Shown as the headline in the push alert. |
| body | string | optional | Notification body text. Additional detail shown below the title. |
| eventType | string | optional | Machine-readable event type, e.g. deploy.success, alert.critical. |
| metadata | object | optional | Arbitrary JSON object stored with the notification for reference. |
curl -X POST https://relayapp.dev/webhook \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_WEBHOOK_TOKEN",
"title": "Build completed",
"body": "All tests passed. Ready for review."
}'{ "success": true, "notificationId": "550e8400-...", "pushed": 2 }{ "error": "Invalid webhook token" }{ "error": "title is required" }{ "error": "Notifications disabled for this app" }Drop these into your existing workflows.
#!/bin/bash
RELAY_URL="https://relayapp.dev/webhook"
RELAY_TOKEN="YOUR_WEBHOOK_TOKEN"
relay_notify() {
curl -s -X POST "$RELAY_URL" \
-H "Content-Type: application/json" \
-d "{\"token\": \"$RELAY_TOKEN\", \"title\": \"$1\", \"body\": \"$2\"}"
}
# Usage
relay_notify "Backup complete" "Finished at $(date)"import requests
requests.post(
"https://relayapp.dev/webhook",
json={
"token": "YOUR_WEBHOOK_TOKEN",
"title": "Task finished",
"body": "Processing complete",
"eventType": "task.done",
}
)await fetch("https://relayapp.dev/webhook", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
token: "YOUR_WEBHOOK_TOKEN",
title: "New order",
body: "Order #1234 received",
eventType: "order.created",
}),
});