Tus claves VAPID
Un proyecto por producto, app o web, cada uno con su par de claves; la privada se guarda cifrada. Expórtalas cuando quieras, junto con tus suscriptores.
Web push con tus propias claves VAPID
Web push y notificaciones en PWA con una sola llamada a la API. Cada proyecto tiene sus propias claves VAPID y puedes exportarlas cuando quieras: sin ataduras con ningún proveedor.
Plan Free para siempre · 10.000 pushes al mes · Sin tarjeta de crédito
Empieza en minutos
Sin librerías que mantener ni claves que generar a mano. Crea un proyecto en el panel, copia su clave pública y listo.
Carga el SDK e inicialízalo con la clave pública del proyecto (pk_live_…, segura en el navegador). Llama a subscribe() desde un clic: los navegadores solo piden permiso tras un gesto del usuario.
<button id="notify">Avisarme</button>
<script src="https://castly.sh/sdk/v1/castly.js"></script>
<script>
Castly.init({ publicKey: 'pk_live_…' });
document.querySelector('#notify').addEventListener('click', async () => {
await Castly.subscribe({ userId: 'user_123', tags: { plan: 'pro' } });
});
</script>
Un archivo /castly-sw.js en la raíz de tu web con una sola línea. Si ya tienes un service worker, añade la línea al tuyo y pasa su ruta en swPath.
importScripts('https://castly.sh/sdk/v1/sw.js');
Una petición con tu clave secreta (sk_live_…). La API responde 202 al momento y la cola entrega en segundo plano.
curl https://castly.sh/v1/notifications \
-H "Authorization: Bearer $CASTLY_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": { "type": "users", "userIds": ["user_123"] },
"title": "Tu pedido ha salido",
"body": "Llega hoy entre las 17:00 y las 19:00.",
"url": "https://tienda.example/pedidos/8421"
}'
Qué incluye
Un proyecto por producto, app o web, cada uno con su par de claves; la privada se guarda cifrada. Expórtalas cuando quieras, junto con tus suscriptores.
La API responde 202 al instante y Cloudflare Queues reparte el envío en lotes de 100. Tu petición nunca espera a los navegadores.
Cada push deja su recorrido: enviado → entregado → clic, o el error del servicio push. Se guardan 30 días.
Envía a todos, a tus IDs de usuario, a suscriptores concretos, a quien tenga ciertas etiquetas (como plan=pro) o a tus dispositivos de prueba.
Entregas, clics, envíos completados y suscripciones caducadas, firmados con HMAC-SHA256.
Diseña el aviso previo en el panel, con vista previa: posición, textos, colores, rutas y frecuencia. Los cambios llegan a tu web sin desplegar.
Un script desde nuestro CDN o un módulo ESM. Detecta el soporte, gestiona permisos y te avisa cuando iOS necesita instalar la web.
La API corre en Cloudflare Workers, cerca de quien la llama, y el reparto en Cloudflare Queues. Tus datos se quedan en Cloudflare.
Cómo funciona
Tu petición termina en milisegundos. El reparto, la firma y el cifrado de cada push ocurren después, en colas.
Antes de enviarEl SDK suscribe cada navegador con tu clave VAPID pública y lo registra con tu clave pk_live_….
POST /v1/notifications
Con tu clave secreta y un destino: todos, usuarios, suscriptores o un segmento.
202 · queued
Valida, comprueba tu cuota y encola. Responde al momento.
lotes de 100
Reparte a los destinatarios por páginas y firma cada push con tu clave VAPID privada.
FCM · Mozilla · Apple
El del navegador de cada suscriptor. Si responde 404 o 410, la suscripción pasa a caducada.
castly-sw.js
Tu service worker muestra la notificación y confirma la entrega y el clic.
De vueltaCada delivered y clicked queda en el log del dispositivo y te llega como webhook firmado.
Precios
Todos los planes tienen las mismas funciones. Solo cambian los pushes al mes y los proyectos.
Para probar y para proyectos pequeños.
0 US$ para siempre
Para productos en producción.
15 US$ / mes
Para mucho volumen y varios productos.
79 US$ / mes
Precios en dólares estadounidenses, facturados cada mes con Stripe. Cancela cuando quieras. La cuota es por mes natural (UTC) y la comparten todos los proyectos de tu organización.
Preguntas frecuentes
Sí, desde iOS y iPadOS 16.4, con una condición de Apple: la persona tiene que añadir tu web a la pantalla de inicio y abrirla desde ahí, como PWA (tu web necesita un manifest con display: standalone). En una pestaña normal de Safari en iPhone no hay push. Castly.needsInstall() te dice cuándo mostrar las instrucciones para instalarla.
Chrome, Edge, Firefox, Opera, Samsung Internet y los demás navegadores basados en Chromium, en escritorio y en Android; Safari 16 o posterior en macOS; y en iPhone y iPad, las webs añadidas a la pantalla de inicio. Castly.isSupported() lo comprueba en cada navegador.
Son tuyos. GET /v1/project/export (o Exportar, en el panel) te da el par de claves VAPID, pública y privada, y todos los suscriptores con su endpoint y sus claves. Con eso puedes seguir enviando con cualquier librería de web push, sin que tus usuarios tengan que volver a suscribirse.
Un intento de entrega a un dispositivo. Enviar una notificación a 5.000 suscriptores consume 5.000 pushes. Registrar suscriptores y las llamadas de lectura a la API no consumen cuota.
Te avisamos por correo al pasar del 80 %. Al llegar al 100 %, los envíos se detienen: la API responde 429 quota_exceeded hasta que empiece el mes siguiente (UTC) o subas de plan. Mientras tanto, tus suscriptores se siguen registrando con normalidad.
Para los datos de tus suscriptores, tu organización es la responsable del tratamiento y castly es la encargada: los tratamos solo para entregar tus notificaciones. Guardamos el endpoint y las claves de la suscripción, el navegador y el sistema, el ID de usuario y las etiquetas si los envías, y los eventos de entrega, que se borran a los 30 días. Todo vive en Cloudflare. El encargo de tratamiento está en los términos.
Sí. Se configura en el panel con vista previa en vivo: posición, textos en español e inglés, colores, retraso, a partir de qué visita, en qué rutas y cuántos días esperar tras «Ahora no». El SDK lo lee al cargar, así que los cambios llegan a tu web en unos 5 minutos, sin desplegar. Si prefieres decidir tú cuándo aparece, usa autoPrompt: false y Castly.showPrompt().
Sí: crea un proyecto por producto, app o web (1, 5 o 25 según el plan). Cada uno tiene sus claves VAPID, claves de API, suscriptores, webhook, aviso de permiso y dispositivos de prueba. La cuota de pushes es de la organización y la comparten todos.
No hace falta tener dos: añade importScripts('…/sdk/v1/sw.js') al principio del tuyo y pasa su ruta en Castly.init({ swPath }). Funciona con service workers clásicos, también los generados por Workbox.
Cada notificación tiene un log por dispositivo: enviado, entregado (el service worker la recibió) y clic, o el código de error del servicio push. Lo ves en el panel, en GET /v1/notifications/:id y, si lo configuras, por webhook.
Sí. Los planes de pago se facturan cada mes con Stripe y se cancelan desde Facturación, en el panel, sin permanencia.
Plan Free para siempre con 10.000 pushes al mes. Sin tarjeta de crédito.