CommetCommet
GitHubDiscordStatus
Introducción

Inicio rápido

Creá una API keyQuickstart

Aprender

OffersIntroductory OffersPromotional OffersCard PromotionsPromo CodesMarkets y precios regionalesPeríodos de prueba

Recursos

Referencia del SDKVersionado de APIManejo de erroresTestingCLIEjemplos

Plugins

Better Auth
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

Promotional Offers

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.

Crear las condiciones

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.

Aplicarla directamente

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.

Aplicarla a una suscripción activa

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.

¿Aplicación directa o Promo Code?

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.

Relacionado

  • Offers
  • Introductory Offers
  • Promo Codes
  • Administrar suscripciones

¿Cómo está esta guía?

Introductory Offers

Aplica automáticamente una Offer existente a nuevas suscripciones elegibles.

Card Promotions

Distribuí una Promotional Offer a BINs elegibles y revalidá la tarjeta al confirmar el checkout.

On this page

Crear las condiciones
Aplicarla directamente
Aplicarla a una suscripción activa
¿Aplicación directa o Promo Code?
Relacionado