Skip to main content
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
Para tus clientes:
  • 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:
Ejemplo: 8 asientos adicionales en un plan de equipo

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.
Ideal para: Productos en los que los equipos pequeños pueden funcionar con la oferta base.

Estrategia 2: Precios exclusivamente por asiento

Cobra una tarifa fija por asiento sin cuota base.
Implementación: Establece el precio del plan base en $0 y utiliza únicamente el complemento por asiento. Ideal para: Precios simples y transparentes.

Estrategia 3: Precios escalonados por asiento

Diferentes planes base con distintas tarifas por asiento.
Implementación: Crea productos independientes para cada nivel con diferentes precios de add-on. Ideal para: Fomentar las actualizaciones a niveles superiores; ventas empresariales.

Estrategia 4: Paquetes de asientos

Vende asientos en paquetes en lugar de venderlos individualmente.
Implementación: Crea varios add-ons para distintos tamaños de paquete. Ideal para: Simplificar las decisiones de compra; fomentar compromisos mayores.

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:
  1. Ve a Products → Add-Ons
  2. Haz clic en Create Add-On
  3. Configura el add-on:
Utiliza nombres descriptivos para los complementos que tengan sentido en las facturas. “Asiento adicional del equipo” es más claro que “Complemento por asiento” para los clientes que revisan sus facturas.

Paso 3: Crea la suscripción base

Crea tu producto de suscripción:
  1. Ve a Products → Create Product
  2. Selecciona Subscription
  3. Configura los precios y los detalles
  4. 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:
  1. Edita tu producto de suscripción
  2. Desplázate hasta la sección Add-Ons
  3. Haz clic en Add Add-Ons
  4. Selecciona tu add-on por asiento
  5. 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 array addons 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 array addons 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:
El importe del crédito depende del modo de proration que elijas. El cargo siempre corresponde a un ciclo completo.
El cargo es siempre por un ciclo completo. Solo varía el crédito según el modo. Por eso el importe cobrado rara vez es “nuevos asientos × precio × días restantes”.Con prorated_immediately, el crédito disminuye a medida que avanza el ciclo, por lo que el mismo cambio de asientos cuesta más cuanto más tarde se realiza. Con difference_immediately y full_immediately, el crédito no depende del momento, por lo que esos dos modos cuestan lo mismo cualquier día del ciclo.

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.
prorated_immediately, difference_immediately y full_immediately reinician el ciclo de facturación en la fecha del cambio. La siguiente renovación se vuelve a establecer en el día en que se aplica el cambio de asientos. Solo do_not_bill conserva la fecha de renovación original (el nuevo número de asientos se factura por completo en la siguiente renovación, sin ningún cargo en el momento del cambio).
do_not_bill aplica el cambio de asientos de inmediato, no en la renovación. La nueva cantidad de asientos entra en vigor en cuanto la llamada tiene éxito, pero no se cobra nada hasta la siguiente renovación.Al añadir asientos, el cliente los tiene gratis durante el resto del ciclo actual. Si añade 5 asientos a $10 el día 1 de un ciclo de 30 días, obtiene 5 asientos gratis durante 29 días, y el importe superior se cobra por primera vez en la fecha de renovación original.Al eliminar asientos, ocurre lo contrario: los asientos se retiran inmediatamente y no se concede ningún crédito por la parte del ciclo ya pagada.Usa do_not_bill cuando eso sea lo que pretendes, por ejemplo, para una actualización de cortesía o una prueba de asientos adicionales acordada con ventas.

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:
Esto significa: $50 del plan base y 3 × $10 del complemento acreditados al 50%, un plan base completo de $50 cobrado y 8 × $10 del complemento cobrados. Crédito = $40, cargo = $130, neto = $90.
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.
Elegir un modo de proration para los cambios de asientos
  • difference_immediately — el cliente paga la diferencia de precio, independientemente de cuándo se realice el cambio. Es la opción más predecible para equipos que ajustan los asientos con frecuencia y la más fácil de explicar en tu interfaz de usuario.
  • prorated_immediately — al cliente solo se le acredita el tiempo restante del ciclo actual. Cuesta más cuanto más tarde se realice el cambio dentro del ciclo.
  • full_immediately — el cliente paga un ciclo nuevo completo sin crédito por el tiempo no utilizado.
  • do_not_bill — el cambio de asientos se aplica inmediatamente, pero no se cobra nada ahora. Los asientos añadidos son gratuitos hasta la siguiente renovación; los asientos eliminados se retiran sin crédito. La fecha de renovación se conserva y el nuevo número de asientos se factura por completo a partir de esa renovación. Es el único modo que no reinicia el ciclo de facturación.
Los asientos concedidos mediante do_not_bill no reciben crédito en un cambio de plan posterior, porque nunca se facturaron. Si añades 5 asientos con do_not_bill y después cambias a 3 asientos, al cliente se le facturan íntegramente 3 asientos sin crédito por los 5 que tenía asignados.
Llama siempre a previewChangePlan y muestra el importe devuelto antes de confirmar. Consulta la Guía de proration para ver comparaciones detalladas.

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

El array addons del payload del webhook contiene las cantidades actuales de los add-ons. Súmalas para obtener el número total de asientos. Si tu plan base incluye asientos (por ejemplo, 5 incluidos), añádelos al total de add-ons en la lógica de tu aplicación.

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.
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:
Implementación: Crea add-ons independientes para cada tipo de asiento.

Descuentos anuales para asientos

Ofrece precios anuales con descuento para los asientos:
Implementación: Crea productos independientes para los planes mensuales y anuales con diferentes precios de add-on.

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

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
Soluciones:
  1. Implementa webhook handlers para subscription.plan_changed
  2. Añade un botón “Sincronizar con la facturación” que obtenga la suscripción actual
  3. Establece el TTL de la caché para garantizar actualizaciones periódicas
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:
  1. Utiliza siempre previewChangePlan antes de realizar cambios
  2. Muestra un desglose claro: “Añadir X asientos costará $Y hoy”
  3. Cambia a difference_immediately si quieres que el cargo coincida siempre con la diferencia de precio
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
Soluciones:
  1. Comprueba que el add-on esté asociado en la configuración del producto
  2. Comprueba el estado del add-on en el dashboard de Add-Ons
  3. Asegúrate de que las monedas coincidan exactamente
Síntoma: El cliente quiere reducir los asientos, pero tiene usuarios asignados.Soluciones:
  1. Muestra qué usuarios deben eliminarse antes de reducir los asientos
  2. Implementa un flujo de trabajo: Eliminar usuarios → Reducir asientos
  3. 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.
Última modificación el 26 de septiembre de 2026