Cashier: suscripciones de pago para Jellyfin

Vende suscripciones mensuales o anuales a tu servidor de Jellyfin a través de Stripe; el pago activa la cuenta y el impago la suspende.

Cashier convierte tu servidor de Jellyfin en un servicio de pago. Un visitante elige un plan, paga con Stripe y la cuenta de Jellyfin se activa al momento; cuando una renovación no se paga, la cuenta se suspende hasta que se paga la factura. Funciona junto con Registration, que aporta la página de registro y la creación de cuentas.

Qué hace

  • Planes que defines tú, mensuales y anuales, según el número de dispositivos que pueden reproducir a la vez (por ejemplo, de 1 a 4 pantallas), con una prueba gratuita opcional para la primera suscripción.
  • Pagos con tu propia cuenta de Stripe: tarjeta, Apple Pay / Google Pay y los métodos locales que ofrezca Stripe; los datos de la tarjeta nunca pasan por tu servidor. Códigos promocionales, dirección de facturación y Stripe Tax opcionales.
  • Cuenta activa al pagar: en cuanto Stripe confirma el pago, la cuenta se activa con los límites del plan.
  • El impago suspende: tras un pago fallido, la cuenta sigue activa durante un período de gracia (3 días por defecto) mientras Stripe reintenta el cobro, y después se desactiva; al pagar la factura se vuelve a activar. Borrar las cuentas suspendidas desde hace mucho tiempo es opcional y está desactivado por defecto.
  • Control del límite de streams: la reproducción que supera el número de dispositivos del plan se detiene.
  • Correos a los suscriptores: recordatorio de factura, recibo, pago fallido, suspensión con el enlace de pago y reactivación, a través de los ajustes SMTP de Registration.
  • Administración: suscriptores, pagos y un diario en el panel de Jellyfin; Stripe se concilia cada 15 minutos por si se pierde un webhook.

Requisitos

  • Jellyfin Server 12.2 o posterior.
  • Registration, instalado y con licencia (Cashier usa su página de registro, sus ajustes de correo y su creación de cuentas).
  • Una cuenta de Stripe (abrirla es gratis; Stripe cobra su propia comisión por pago) y el servidor accesible por HTTPS, para que Stripe pueda llamar al webhook.

Preguntas frecuentes

¿Puedo cobrar por el acceso a mi servidor de Jellyfin? Sí: Registration aporta la página de registro y Cashier la suscripción. Los visitantes eligen un plan, pagan a través de tu cuenta de Stripe y su cuenta se activa al momento; una renovación impagada la suspende. Consulta la guía.

Sin una licencia válida de Cashier, ¿qué pasa con los suscriptores existentes? No se aceptan nuevos registros de pago hasta que la licencia vuelva a ser válida; no se borra nada.

Qué envía y adónde

  • Stripe (api.stripe.com, con la clave secreta o restringida de tu propia cuenta de Stripe), el único proveedor de pagos:
    • Sesión de Stripe Checkout (página alojada por Stripe; suscripción): el precio del plan, las URL de retorno a tu servidor, el id de usuario de Jellyfin, el id del servidor y el nombre de usuario (metadatos), la dirección de correo del cliente (de Cashier o de la solicitud de registro) o el id de cliente de Stripe existente, el idioma; opcional: período de prueba, códigos promocionales, dirección de facturación e impuestos automáticos (desactivados por defecto).
    • La creación del producto y los precios (nombre del servicio, importe, moneda, intervalo, número de dispositivos) y la configuración del Stripe Customer Portal (cambiar tarjeta o plan, facturas, cancelar).
    • El webhook de Stripe hacia tu servidor, solo si pulsas "create webhook automatically" (necesita una dirección HTTPS pública); si no, el servidor lee los eventos de Stripe cada 15 min (no hace falta abrir ningún puerto).
    • La cancelación de la suscripción de Stripe cuando borras un usuario con una suscripción activa.
    • Los datos de la tarjeta nunca llegan a tu servidor: los datos de pago se introducen solo en las páginas de Stripe.
  • Webhook entrante (/Cashier/Stripe/Webhook): firma de Stripe verificada, máximo 256 KB.
  • Correo (a través del SMTP del plugin Registration): al cliente: factura próxima (3 días antes), pago fallido, pago correcto, cuenta suspendida, cuenta reactivada (todos activados por defecto), con el nombre del servicio, el nombre de usuario, el importe, la fecha, el enlace a la factura de Stripe y un enlace de pago firmado (7 días); al administrador: pagos y fallos, por los canales de Registration (correo / Telegram).
  • La página de pago y el QR para la TV los sirve el plugin (QR generado en el servidor, sin recursos externos). La página de administración solo tiene enlaces al Stripe Dashboard.
  • Además, el cliente de licencias, igual en todos los plugins: consulta Licencias y privacidad en nuestros plugins.

Guardado localmente:

  • data/secrets.json (fuera de la configuración que se envía al navegador): clave secreta de Stripe, secreto del webhook, clave HMAC de los enlaces de pago.
  • data/subscriptions.json: por suscriptor: id y nombre de usuario, correo, ids de cliente y de suscripción de Stripe, estado, plan, fechas del período; pagos (id de factura, importe, moneda, resultado, enlace a la factura; máximo 5000), diario (máximo 2000), ids de eventos procesados (30 días).
  • Configuración: planes y precios, ids de Stripe (producto, portal, webhook, cuenta), dirección pública.
  • Conservación: la fila del suscriptor se borra junto con el usuario del servidor; las cuentas suspendidas no se borran automáticamente (por defecto).

Compatibilidad con clientes

  • La suspensión y reactivación de cuentas y el límite de streams simultáneos por plan se aplican en el servidor: 🟢 cualquier cliente. El límite se aplica de forma nativa (MaxActiveSessions) al iniciar sesión o al empezar la reproducción.
  • Página del cliente (/Cashier/Page): cualquier navegador; los televisores pagan desde el móvil mediante QR. ✅ de extremo a extremo contra un simulador de Stripe (25/25, incluido TV → móvil → pago → TV con sesión iniciada automáticamente).
  • ❔ Todavía no se ha probado contra el Stripe real en la batería automática (solo con el simulador); apps nativas de Jellyfin: ❔ no probadas.

Leyenda: ✅ verificado (prueba de extremo a extremo o en el dispositivo) · 🟢 en el servidor, funciona con cualquier cliente (por diseño, sin prueba específica para cada cliente) · ➖ no aplicable · ❔ no probado.

Licencia

El plugin es de código abierto (GPL-3.0). Las compilaciones listas para instalar son públicas, igual que el código fuente. Lo que compras es la suscripción: la licencia para usar el plugin en un servidor de Jellyfin, las actualizaciones que incluye tu plan y el soporte: cada actualización mientras la suscripción esté activa, a través de tu repositorio privado de plugins, y ayuda cuando algo no funcione. El plugin comprueba la clave de suscripción una vez al día; sin una suscripción válida se detiene hasta que renueves (no se borra nada). Mensual, anual o de por vida (la de por vida incluye un año de actualizaciones), o incluido en el paquete para Jellyfin. 30 días de prueba gratis.

Código fuente. Para cada versión, el código fuente correspondiente completo es público, junto a la compilación, en el registro de cambios, y también en tu cuenta (Cuenta → Licencias, Código fuente); cada archivo comprimido contiene el texto completo de la GPL-3.0 (LICENSE). Si necesitas el código fuente de una versión que ya no puedes descargar, pídenoslo y te lo enviamos. Consulta la sección 10 del EULA.

Derechos sobre el contenido

Cashier cobra a tus usuarios a través de tu propia cuenta de Stripe. Solo tú eres responsable de tener los derechos sobre el contenido o el servicio por el que cobras (por ejemplo, las películas, series o canales de tu servidor); MediaLab Works solo proporciona el software y no es parte de tus ventas. Stripe puede cerrar o restringir una cuenta que cobre por contenido sin tener los derechos: consulta la lista de negocios restringidos de Stripe.

Funciona mejor con medialab Server

Este plugin funciona en Jellyfin oficial 12.2 o posterior. En medialab Server, nuestro servidor basado en Jellyfin con los mismos datos, bibliotecas, usuarios y apps, funciona mejor:

  • Verified – medialab. El servidor comprueba la firma de nuestros plugins y te muestra que los archivos son exactamente los que publicamos. Si un plugin se modifica después de publicarse, se marca.
  • Integrado en la interfaz. Los plugins pueden añadir botones y enlaces al menú de tus usuarios (por ejemplo, "TV", "Share") sin configurar nada a mano en la web.
  • Prioridad de forma predeterminada. Los plugins de medialab aparecen primero donde importa: sintonizadores de TV en directo, fuentes de guía y proveedores de subtítulos. El orden lo decides tú: puedes cambiarlo en cualquier momento.
  • El catálogo de medialab.works incluido, con instalación sin confirmaciones adicionales.
  • Actualizaciones desde la interfaz web, sin terminal (con Self-Update de MediaLab): comprueba, actualiza y vuelve a la versión anterior desde el panel de control; si una versión nueva no arranca, el servidor vuelve por sí solo a la anterior con tus datos intactos.
  • El mismo Jellyfin, al día. medialab Server sigue cada semana las versiones estables de Jellyfin 12.x; una versión nueva solo se publica después de superar todas las pruebas, incluidas las de nuestros plugins.

Las apps de Jellyfin (Android, iOS, TV, web) se conectan exactamente igual que a Jellyfin oficial.

Para instalarlo, ejecuta la imagen del contenedor (guía) o, en Debian 12, los paquetes apt, que sustituyen a jellyfin-server y jellyfin-web y conservan tus datos donde están (guía).

medialab Server es software libre (GPL-2.0), basado en Jellyfin. El código fuente es público: medialab-server y medialab-server-web.

Requisitos

  • Jellyfin Server 12.2 o posterior (Linux, Windows o Docker)
  • Registration by MediaLab, instalado y con licencia
  • Una cuenta de Stripe y el servidor accesible por HTTPS (para el webhook)
  • Código abierto (GPL-3.0): el código fuente de cada versión está en tu cuenta

Última versión

0.1.6
publicada el 20 oct 2026
Ver todos los cambios →

La compilación es pública; para usar el plugin necesitas una licencia o la prueba gratuita de 30 días.