Push Notifications
Without the Party Poopers
Create apps, generate VAPID keys, and send push notifications — all with your wallet. No email signups. No credit cards. Just crypto-native simplicity.
Everything you need to push
No bloat. No complexity. Just push notifications that work.
Your Keys, Your Control
Each app gets unique VAPID keys. No shared infrastructure means no single point of failure.
Instant Setup
Connect wallet → Create app → Copy API key. Start sending notifications in under 60 seconds.
User & Channel Targeting
Tag subscriptions with userId or channelId to send targeted notifications to specific audiences.
Built-in Rate Limiting
Protect your app and our infrastructure with per-app rate limits. Upgrade for higher limits.
Simple REST API
Three endpoints: subscribe, send, done. Works with any language or framework.
Global Edge Network
Deployed on Vercel's edge network for low-latency notification delivery worldwide.
Three steps to push bliss
Copy, paste, push. It's really that simple.
Connect & Create
Connect your wallet and create an app to get your API key and VAPID keys.
Subscribe Users
Use the Web Push API to subscribe users and register their subscriptions.
Send Notifications
Call our API to send notifications to all users or target specific ones.
// 1. Get VAPID public key from your appconst response = await fetch('https://vapid.party/api/vapid/public-key', {headers: { 'X-API-Key': 'YOUR_API_KEY' }});const { data: { publicKey } } = await response.json();// 2. Subscribe user to push notificationsconst registration = await navigator.serviceWorker.ready;const subscription = await registration.pushManager.subscribe({userVisibleOnly: true,applicationServerKey: urlBase64ToUint8Array(publicKey)});// 3. Send subscription to vapid.partyawait fetch('https://vapid.party/api/subscribe', {method: 'POST',headers: {'Content-Type': 'application/json','X-API-Key': 'YOUR_API_KEY'},body: JSON.stringify({endpoint: subscription.endpoint,keys: {p256dh: btoa(String.fromCharCode(...new Uint8Array(subscription.getKey('p256dh')))),auth: btoa(String.fromCharCode(...new Uint8Array(subscription.getKey('auth'))))},userId: 'user_123', // Optional: for targeted notificationschannelId: 'announcements' // Optional: for channel-based targeting})});