Aplica cualquier Offer compatible directamente para campañas, retención y experimentos.
Una Promotional Offer es una Offer aplicada directamente mediante offerId. Promotional describe el canal de aplicación, no otro recurso de catálogo ni un purpose.
La Offer permanece independiente de planes y precios hasta que tu integración la selecciona.
Las Offers directas pueden combinar una prueba gratuita con fases ordenadas de descuento o precio fijo:
const retentionOffer = await commet.offers.create({
name: 'Volver a Pro',
phases: [
{ type: 'free_trial', durationDays: 7 },
{ type: 'fixed_price', durationCycles: 2, prices: [
{ currency: 'usd', amount: 2900 },
{ currency: 'ars', amount: 3990000 },
] },
{ type: 'percentage', durationCycles: null, percentage: 2000 },
],
})Las fases específicas por moneda deben tener un valor explícito para la moneda del checkout. Commet no reutiliza silenciosamente un monto en USD para otra moneda.
await commet.subscriptions.create({
customerId: 'user_123',
planCode: 'pro',
offerId: retentionOffer.id,
})La Offer debe estar activa, dentro de su ventana de disponibilidad y poder resolverse en la moneda seleccionada. No necesita una asociación previa con el plan ni con el precio.
Un offerId explícito reemplaza la selección introductoria automática. No puede combinarse con promoCode, customTrialDays ni skipTrial: true.
Los cambios inmediatos de plan, sus previews y los flujos de reactivación compatibles también aceptan offerId. Los cambios de plan programados no aceptan una Offer.
Para retención, aplicá una Offer a una suscripción que ya está activa. Las fases de descuento arrancan en el próximo ciclo de facturación, así que el período actual no se toca y la próxima factura sale con el descuento:
await commet.subscriptions.applyOffer({
id: 'sub_123',
offerId: retentionOffer.id,
})Solo una Offer aplica a la vez: mientras una Offer aceptada todavía tenga fases de descuento vigentes o futuras, una nueva aplicación se rechaza. Cuando sus fases se agotan, la suscripción acepta una nueva Offer. Las Offers con una fase de free trial no pueden aplicarse a una suscripción activa, y el descuento aplica solo sobre el precio base del plan.
La Offer aplicada pertenece a esa suscripción y a ese plan: termina con una cancelación y un cambio de plan la remueve.
La misma operación sobre una suscripción con un checkout de pago pendiente cotiza o reemplaza el descuento del checkout; ahí acepta un expiresAt opcional para la cotización.
Usá offerId directo cuando tu aplicación decide quién recibe las condiciones. Usá un Promo Code cuando el customer deba ingresar un código y la campaña necesite restricciones de canje.
Un Promo Code solo puede referenciar una Offer con una fase percentage o amount_off. Las Offers con varias fases, trials o fixed_price siguen disponibles para aplicación directa.
¿Cómo está esta guía?