La facturación basada en asientos cobra a los clientes según el número de usuarios de su cuenta. Dodo Payments la implementa mediante el sistema de add-on: un producto de suscripción base más un add-on por asiento cuya cantidad representa el número de asientos.
Implementation Tutorial
Guía paso a paso con ejemplos de código.
Add-ons Documentation
Conoce el sistema de complementos que impulsa la facturación basada en asientos.
Subscription Management
Gestiona suscripciones basadas en asientos y cambios de plan.
Webhooks
Rastrea los cambios de asientos con webhooks de suscripción.
¿Qué es la Facturación por Asiento?
La facturación basada en asientos cobra a los clientes según el número de usuarios que acceden a tu producto. En lugar de una tarifa fija, el precio aumenta según el tamaño del equipo.Casos de Uso Comunes
Beneficios de la Facturación por Asiento
Para tu negocio:- Los ingresos aumentan a medida que crecen los clientes
- Los clientes pueden prever sus gastos
- Ruta de actualización clara: de individual a equipo y a empresa
- Mayor valor de vida del cliente a medida que los equipos se expanden
- Pagan solo por los usuarios que tienen
- Costes fáciles de entender y prever
- Pueden añadir o eliminar usuarios según sea necesario
- Precios justos que se ajustan al tamaño del equipo
Cómo funciona
Dodo Payments implementa la facturación basada en asientos mediante el sistema de Add-ons. Una suscripción basada en asientos tiene dos partes:
El total mensual del cliente es:
Estrategias de Precios
Elige la estrategia de precios por asiento que se ajuste a tu negocio:Estrategia 1: Base + Complemento por Asiento
Incluye un número fijo de asientos en el plan base, cobra por asientos adicionales.Estrategia 2: Precios exclusivamente por asiento
Cobra una tarifa fija por asiento sin cuota base.Estrategia 3: Precios escalonados por asiento
Diferentes planes base con distintas tarifas por asiento.Estrategia 4: Paquetes de asientos
Vende asientos en paquetes en lugar de venderlos individualmente.Configuración de la facturación basada en asientos
Paso 1: Planifica tus precios
Antes de la implementación, define tu estructura de precios:1
Define Base Plan
Decide qué incluye la suscripción base:
- Precio base (puede ser $0 para un modelo puro por asiento)
- Número de asientos incluidos
- Funciones disponibles en este nivel
2
Set Seat Pricing
Determina el costo del add-on por asiento:
- Precio por cada asiento adicional
- Descuentos por volumen (mediante varios add-ons)
- Número máximo de asientos permitidos (si corresponde)
3
Consider Billing Frequency
Alinea los precios por asiento con tu ciclo de facturación:
- Suscripciones mensuales → cargos mensuales por asiento
- Suscripciones anuales → cargos anuales por asiento (a menudo con descuento)
Paso 2: Crea el add-on por asiento
En tu dashboard de Dodo Payments:- Ve a Products → Add-Ons
- Haz clic en Create Add-On
- Configura el add-on:
Paso 3: Crea la suscripción base
Crea tu producto de suscripción:- Ve a Products → Create Product
- Selecciona Subscription
- Configura los precios y los detalles
- En la sección Add-Ons, adjunta tu add-on por asiento
Paso 4: Adjunta el add-on al producto
Vincula el add-on por asiento a tu suscripción:- Edita tu producto de suscripción
- Desplázate hasta la sección Add-Ons
- Haz clic en Add Add-Ons
- Selecciona tu add-on por asiento
- Guarda los cambios
Tu producto de suscripción ahora admite precios basados en asientos. Los clientes pueden comprar cualquier cantidad de asientos adicionales durante el checkout.
Gestión de asientos
Añadir asientos a nuevas suscripciones
Al crear una sesión de checkout, especifica la cantidad de asientos:Cambiar el número de asientos en suscripciones existentes
Usa la API Change Plan para ajustar los asientos. El arrayaddons establece la cantidad total nueva de asientos (no la diferencia).
Eliminar asientos
Para reducir el número de asientos, especifica la cantidad menor:Eliminar todos los asientos adicionales
Pasa un arrayaddons vacío para eliminar todos los add-ons:
Proration para cambios de asientos
Cuando se aplica un cambio de asientos a mitad del ciclo, Dodo Payments calcula el cargo inmediato en tres pasos:Cómo aplica el crédito cada modo
Con
difference_immediately, el cliente paga únicamente la diferencia entre el precio del plan anterior y el del nuevo plan. De ahí proviene el nombre, y por eso el importe es el mismo independientemente de cuándo se realice el cambio dentro del ciclo.
Si el crédito es superior al cargo del nuevo ciclo, la diferencia se conserva como crédito asociado a la suscripción y se aplica automáticamente a futuras renovaciones.
Ejemplo práctico: añadir 5 asientos
Un escenario ejecutado con los cuatro modos para que las cifras sean directamente comparables.
En los tres modos inmediatos, el cliente recibe un mes nuevo completo por $130 a cambio de lo que paga hoy.
Por qué el momento importa para prorated_immediately
El mismo cambio cuesta más cuanto más tarde se realiza en el ciclo, porque queda menos tiempo del ciclo actual para devolverlo como crédito.
El cliente recibe un mes nuevo completo en todas las filas. Solo cambia la distribución entre lo que “ya se había pagado” y lo que “se paga ahora”.
Para que un cambio de asientos cueste lo mismo independientemente de cuándo se realice, utiliza
difference_immediately.
Ejemplo práctico: el “cargo inesperado”
Este es el caso que más suele sorprender a los merchants. Añadir un pequeño add-on por asiento al final del ciclo puede generar un cargo mucho mayor que el precio del add-on.
Añadir un asiento de $10/mes cuesta $55.00 con
prorated_immediately. Al cliente se le cobra un mes nuevo completo a $60 y se le abonan los $5 que quedaban del mes anterior; además, la fecha de renovación se reinicia.
Para que las adiciones pequeñas a mitad del ciclo cuesten el precio del asiento y nada más, utiliza difference_immediately.
Ejemplo práctico: eliminar asientos (downgrade)
Cuando el nuevo plan cuesta menos que el crédito, el excedente se conserva como crédito de suscripción y se aplica automáticamente a futuras renovaciones de esta suscripción. No se añade a Customer Wallet ni es un credit entitlement.El crédito cubre toda la suscripción, el plan base y todos los complementos, no solo los asientos que se eliminan.
Lectura de la respuesta de preview
previewChangePlan devuelve las líneas exactas que se facturarán. Cada línea tiene un proration_factor:
El proration se calcula con precisión de segundos según la hora exacta del cambio, no se redondea al día más cercano. Los ejemplos prácticos anteriores utilizan cifras redondeadas al inicio y al final de días para facilitar la comprensión.
Previsualizar antes de cambiar
Previsualiza siempre el proration antes de realizar cambios:Seguimiento de asientos con webhooks
Supervisa los cambios de asientos escuchando los webhooks de suscripción:Eventos relevantes
Ejemplo de webhook handler
Aplicación de límites de asientos
Tu aplicación debe aplicar los límites de asientos. Dodo Payments realiza el seguimiento de la facturación, pero tú controlas el acceso.- Hard Limit
- Soft Limit with Warning
- Auto-Upgrade
Impide estrictamente añadir usuarios por encima del número de asientos.
Patrones avanzados
Diferentes tipos de asientos
Ofrece distintos tipos de asientos con precios diferentes:Descuentos anuales para asientos
Ofrece precios anuales con descuento para los asientos:Requisitos mínimos de asientos
Exige un número mínimo de asientos para determinados planes:Prácticas recomendadas
Prácticas recomendadas de precios
- Comunicación clara: Muestra de forma destacada el precio por asiento en tu página de precios
- Asientos incluidos: Considera incluir algunos asientos en el precio base para reducir la fricción
- Descuentos por volumen: Ofrece tarifas por asiento más bajas para equipos grandes y consigue acuerdos empresariales
- Incentivos anuales: Aplica descuentos a los planes anuales para mejorar el flujo de caja y la retención
Prácticas recomendadas técnicas
- Almacena en caché el número de asientos: Guarda localmente el número de asientos de la suscripción para evitar llamadas a la API en cada solicitud
- Sincroniza periódicamente: Sincroniza periódicamente el número de asientos local con Dodo Payments mediante la API
- Gestiona los fallos: Si falla un cambio de asientos, muestra mensajes de error claros y opciones para reintentar
- Registro de auditoría: Registra todos los cambios de asientos para resolver disputas de facturación y cumplir los requisitos normativos
Prácticas recomendadas de experiencia de usuario
- Comentarios en tiempo real: Muestra inmediatamente el impacto en el coste al ajustar los asientos
- Pasos de confirmación: Solicita confirmación antes de aplicar cambios de facturación
- Transparencia de la prorrata: Explica claramente los cargos prorrateados antes de aplicarlos
- Downgrades sencillos: No dificultes la reducción de asientos (genera confianza)
Solución de problemas
Seat count mismatch between app and billing
Seat count mismatch between app and billing
Síntoma: Tu aplicación muestra un número de asientos diferente al de la suscripción.Causas:
- El webhook no se recibió o procesó
- Condición de carrera durante el cambio de asientos
- Los datos almacenados en caché no se actualizaron
- Implementa webhook handlers para
subscription.plan_changed - Añade un botón “Sincronizar con la facturación” que obtenga la suscripción actual
- Establece el TTL de la caché para garantizar actualizaciones periódicas
Unexpected mid-cycle charge amount
Unexpected mid-cycle charge amount
Síntoma: El cliente está confundido por el importe del cargo a mitad del ciclo.Causa: Se usa
prorated_immediately cuando el ciclo de facturación está avanzado (consulta el ejemplo El cargo inesperado anterior).Soluciones:- Utiliza siempre
previewChangePlanantes de realizar cambios - Muestra un desglose claro: “Añadir X asientos costará $Y hoy”
- Cambia a
difference_immediatelysi quieres que el cargo coincida siempre con la diferencia de precio
Add-on not appearing in checkout
Add-on not appearing in checkout
Síntoma: El add-on por asiento no está disponible durante el checkout.Causas:
- El add-on no está asociado al producto
- El add-on está archivado o eliminado
- Hay una discrepancia de moneda entre el producto y el add-on
- Comprueba que el add-on esté asociado en la configuración del producto
- Comprueba el estado del add-on en el dashboard de Add-Ons
- Asegúrate de que las monedas coincidan exactamente
Cannot reduce seats below current usage
Cannot reduce seats below current usage
Síntoma: El cliente quiere reducir los asientos, pero tiene usuarios asignados.Soluciones:
- Muestra qué usuarios deben eliminarse antes de reducir los asientos
- Implementa un flujo de trabajo: Eliminar usuarios → Reducir asientos
- Considera un período de gracia antes de aplicar la reducción de asientos
Documentación relacionada
Seat-Based Pricing Tutorial
Guía completa de implementación con código.
Add-ons
Comprende el sistema de add-ons en profundidad.
Plan Changes & Proration
Gestiona las modificaciones de suscripciones.
Subscription Webhooks
Realiza el seguimiento de los eventos de suscripción.