Web push con tus propias claves VAPID

Notificaciones push para developers

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

Tres pasos y tu web ya envía notificaciones.

Sin librerías que mantener ni claves que generar a mano. Crea un proyecto en el panel, copia su clave pública y listo.

  1. 01

    Añade el SDK

    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.

    index.html
    <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>
  2. 02

    Crea el service worker

    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.

    castly-sw.js
    importScripts('https://castly.sh/sdk/v1/sw.js');
  3. 03

    Envía desde tu servidor

    Una petición con tu clave secreta (sk_live_…). La API responde 202 al momento y la cola entrega en segundo plano.

    bash
    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"
      }'

Guía completa en la documentación

Qué incluye

Lo que necesitas para enviar push en serio, y nada que te ate.

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.

Entrega en cola

La API responde 202 al instante y el envío a cada dispositivo ocurre después, en segundo plano. Tu petición nunca espera a los navegadores.

Logs por dispositivo

Cada push deja su recorrido: enviado → entregado → clic, o el error del servicio push. Se guardan 30 días.

Segmentación avanzada

Filtra por país, idioma, dispositivo, navegador, sistema, etiquetas (también numéricas) y actividad, o guarda segmentos en el panel y envía por su id. También a todos, a tus IDs de usuario o a tus dispositivos de prueba.

Webhooks firmados

Entregas, clics, envíos completados y suscripciones caducadas, firmados con HMAC-SHA256.

Aviso de permiso desde el panel

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.

SDK de menos de 3 KB

Un script desde nuestro CDN o un módulo ESM. Detecta el soporte, gestiona permisos y te avisa cuando iOS necesita instalar la web.

Reintentos y limpieza automáticos

Si un servicio push está saturado lo volvemos a intentar, y las suscripciones que ya no existen se marcan solas como caducadas.

Cómo funciona

De tu servidor al dispositivo, sin esperas.

Tu petición termina en milisegundos. La entrega a cada dispositivo ocurre después, en segundo plano.

Antes de enviarEl SDK suscribe cada navegador con tu clave VAPID pública y lo registra con tu clave pk_live_….

  1. 01 Tu servidor POST /v1/notifications

    Con tu clave secreta y un destino: todos, usuarios, suscriptores, un filtro o un segmento.

  2. 02 API de castly 202 · queued

    Valida, comprueba tu cuota y encola. Responde al momento.

  3. 03 Entrega en segundo plano

    Envía a cada dispositivo de tu destino, identificado con las claves VAPID de tu proyecto.

  4. 04 Servicio push FCM · Mozilla · Apple

    El del navegador de cada suscriptor. Si responde 404 o 410, la suscripción pasa a caducada.

  5. 05 Dispositivo 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

Empieza gratis. Paga cuando envíes más.

Todos los planes tienen las mismas funciones. Solo cambian los pushes al mes, los proyectos y los segmentos guardados.

Free

Para probar y para proyectos pequeños.

0 US$ para siempre

  • 10.000 pushes al mes
  • 1 proyecto
  • 3 segmentos guardados por proyecto
Empezar gratis

Scale

Para mucho volumen y varios productos.

79 US$ / mes

  • 2.000.000 pushes al mes
  • 25 proyectos
  • 100 segmentos guardados por proyecto
Elegir Scale

Todos los planes incluyen

  • Suscriptores ilimitados
  • Segmentación por país, idioma, dispositivo, navegador, sistema, etiquetas y actividad
  • Tus claves VAPID, exportables
  • Webhooks firmados
  • Logs por dispositivo durante 30 días
  • Aviso de permiso configurable en el panel
  • Playground y dispositivos de prueba

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

Lo que suelen preguntarnos.

¿Funciona en iPhone y iPad?

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.

¿Qué navegadores son compatibles?

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.

¿De quién son las claves y los suscriptores? ¿Puedo irme?

Son tuyos. 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. GET /v1/project/export devuelve lo mismo sin los secretos.

¿Qué cuenta como un push?

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.

¿Qué pasa si llego al límite de mi plan?

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.

¿Cumple el RGPD?

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, el sistema y el tipo de dispositivo, el país aproximado (sin guardar la IP) y el idioma, el ID de usuario y las etiquetas si los envías, y los eventos de entrega y el registro de las llamadas a la API, que se borran a los 30 días. Todo vive en Cloudflare. El encargo de tratamiento está en los términos.

¿Puedo cambiar el aviso de permiso sin tocar mi web?

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().

¿Sirve para varios productos?

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.

Ya tengo un service worker. ¿Tengo que cambiarlo?

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.

¿Cómo sé si una notificación ha llegado?

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.

¿Puedo enviar solo a una parte de mis suscriptores?

Sí. En cada envío puedes filtrar por país, idioma, tipo de dispositivo (escritorio, móvil o tableta), navegador, sistema, etiquetas (también con comparaciones numéricas), si el usuario está identificado y su actividad en los últimos días. Los filtros que repites puedes guardarlos como segmentos en el panel (3, 25 o 100 por proyecto según el plan) y enviar a ellos por su id. POST /v1/audience te dice a cuántos dispositivos llegará un envío antes de hacerlo.

¿Puedo cancelar cuando quiera?

Sí. Los planes de pago se facturan cada mes con Stripe y se cancelan desde Facturación, en el panel, sin permanencia.

Envía tu primera notificación hoy.

Plan Free para siempre con 10.000 pushes al mes. Sin tarjeta de crédito.