# Facturación adelantada Usa la facturación por adelantado para cobrar ahora por múltiples períodos de servicio futuros. ## Empieza aquí: instala las habilidades de agente Stripe aconseja usar las habilidades oficiales para la integración en la API con las prácticas recomendadas. Sigue las instrucciones que se incluyen a continuación para aprender cómo. **Consejo: Usa cURL, en lugar de herramientas de Fetch.** Las habilidades se detallan en archivos de marcado de 10 a 20 KB. Las herramientas de Fetch las resumen. `curl -sL` garantiza el contenido completo. **Uso de `npx skills`**: comprueba si `npx` está instalado en el sistema. Si `npx` está disponible, ejecuta `npx skills add https://docs.stripe.com --list` para enumerar las habilidades disponibles y, a continuación, ejecuta `npx skills add https://docs.stripe.com --yes --skill <--skill other-skills>` para instalar habilidades individuales. **En el caso de que `npx skills` no esté disponible**: puedes usar cURL para obtener el índice de las habilidades disponibles, lo que hacen y sus archivos de `https://docs.stripe.com/.well-known/skills/index.json`. Para obtener una habilidad y sus archivos relacionados, usa cURL y descárgalos de `https://docs.stripe.com/.well-known/skills/`. Para este artículo, recomendamos usar estas habilidades: `stripe-best-practices` Con la facturación por adelantado, puedes cobrar a los clientes por adelantado por múltiples períodos de servicio. Puedes habilitar este tipo de facturación cuando creas una suscripción o agregarlo a una existente. > #### Se requiere el modo de facturación flexible > > La facturación por adelantado requiere que las suscripciones tengan habilitado el [modo de facturación flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md). Si aún no lo has habilitado, consulta [Modo de facturación flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md) para empezar. ## Casos de uso Con la facturación por adelantado, puedes cobrar pagos por adelantado por períodos de servicio futuros. Algunos casos de uso comunes son los siguientes: | Caso de uso | Descripción | | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Pago por adelantado de varios meses cuando se crea la cuenta** | Cóbrale a un suscriptor mensual por adelantado por 3 meses al momento de crear su cuenta y luego retoma la facturación mensual normal desde ese momento. | | **Facturación anticipada de la renovación** | Cuando falten 7 días para la renovación, genera y envíale al cliente la factura de renovación, en lugar de esperar al final del ciclo de facturación. | | **Pago anual a un precio mensual** | Permítele a un cliente pagar 12 meses de un plan mensual en una sola factura por adelantado, sin cambiar el precio subyacente a un intervalo anual. | | **Facturación por adelantado a nivel de partida** | Factura por adelantado una partida complementaria específica mientras facturas otras partidas en la misma suscripción a su frecuencia mensual normal. | | **Comisión por cancelación anticipada** | Cóbrale a un cliente por el período restante de un contrato comprometido cuando cancela anticipadamente mediante la facturación por adelantado hasta el final del compromiso y la posterior cancelación de la suscripción. | ### Limitaciones La facturación por adelantado tiene las siguientes limitaciones: - No puedes usar la facturación por adelantado con [calendarios de suscripciones](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md) ni suscripciones respaldadas con un calendario de suscripciones. - Solo puedes usar cupones con [percent_off](https://docs.stripe.com/api/coupons/object.md#coupon_object-percent_off) y una [duration](https://docs.stripe.com/api/coupons/object.md#coupon_object-duration) de `once` o `forever` con la facturación por adelantado. - No puedes habilitar la facturación por adelantado si todas las partidas de la suscripción tienen precios basados en el consumo. La facturación por adelantado no se aplica a los precios basados en el consumo de una suscripción. No puedes configurar [applies_to[price]](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_schedules-applies_to) si el precio tiene [usage_type=metered](https://docs.stripe.com/api/prices/object.md#price_object-recurring-usage_type). - Si una suscripción está programada para su cancelación, no puedes configurar la fecha de finalización de la facturación por adelantado después de la fecha de cancelación programada. ## Cómo funciona la facturación por adelantado La facturación por adelantado usa el parámetro [billing_schedules](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-billing_schedules) en una suscripción para definir qué partidas se facturarán por adelantado y durante cuánto tiempo. Cuando configuras `billing_schedules`, Stripe genera una factura por adelantado que cubre todos los períodos de servicio futuros especificados en el momento en que se crea o se actualiza la suscripción, en lugar de esperar a que ocurra cada ciclo de facturación. La facturación por adelantado se aplica a nivel de [partida](https://docs.stripe.com/api/subscription_items.md): puedes facturar por adelantado partidas determinadas si especificas el parámetro `applies_to` con los ID de precio u omites `applies_to` por completo para facturar por adelantado todas las partidas aplicables con un precio con licencia en la suscripción. Los precios basados en el consumo nunca se incluyen en la facturación por adelantado, independientemente de la configuración de `applies_to`. El parámetro [bill_until](https://docs.stripe.com/api/subscriptions/update.md?api-version=preview#update_subscription-billing_schedules-bill_until) controla la fecha de finalización del período facturado por adelantado. Puedes expresarlo como una `duration` (por ejemplo, 2 meses a partir de la fecha actual) o como una `timestamp` (una marca de tiempo de Unix específica). ## Cómo crear una suscripción con la facturación por adelantado Para configurar la facturación por adelantado cuando se crea una suscripción, usa [billing_schedules](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_schedules) con el fin de especificar qué partidas se deben facturar por adelantado y por cuánto tiempo. - Usa `applies_to` para especificar qué partidas se deben facturar por adelantado por el ID de precio. Omite este parámetro para facturar por adelantado todas las partidas aplicables. - Usa `bill_until` para configurar la fecha de finalización de la facturación por adelantado como duración o marca de tiempo. - Usa `proration_behavior` para controlar cuándo se genera la factura de la facturación por adelantado. Cuando configuras la fecha de finalización de la facturación por adelantado, sucede lo siguiente: - La fecha de finalización debe ocurrir en la misma fecha de la finalización del primer período de facturación o en una fecha posterior. Por ejemplo, en el caso de una suscripción mensual, la fecha de finalización debe ser por lo menos un mes después del inicio del período de facturación. - El total de ciclos facturados por adelantado de todas las partidas no puede superar los 50 ciclos. Por ejemplo, con dos partidas podrías facturar cada una por adelantado hasta 25 meses. - La fecha de finalización no puede superar los 5 años a partir de la fecha actual. #### Dashboard Para crear una suscripción con facturación por adelantado en el Dashboard, realiza los siguientes paso: 1. Ve a la [página Suscripciones](https://dashboard.stripe.com/subscriptions?status=active). 2. Haz click en **+ Crear suscripción**. 3. En la sección **Configuración de las suscripciones**, habilita la opción **Factura por adelantado**. 4. Selecciona la fecha de finalización de la facturación por adelantado. Todas las partidas de la suscripción se facturan por adelantado hasta la fecha que selecciones. 5. En la sección **Configuración avanzada**, configura la opción **Modo de facturación** en **Flexible**. 6. Haz clic en **Crear suscripción**. Para actualizar una suscripción existente: > La suscripción ya debe estar en `billing_mode=flexible` para poder habilitar la facturación por adelantado. Consulta [Limitaciones](https://docs.stripe.com/billing/subscriptions/prebilling.md#limitations) para obtener más detalles. 1. Ve a la [página Suscripciones](https://dashboard.stripe.com/subscriptions?status=active). 2. Haz clic en la suscripción para la actualización y luego selecciona **Acciones** > **Actualizar suscripción**. 3. En la sección **Configuración de las suscripciones**, habilita la opción **Factura por adelantado**. 4. Selecciona la fecha de finalización de la facturación por adelantado. Todas las partidas de la suscripción se facturan por adelantado hasta la fecha que selecciones. 5. Haz clic en **Actualizar suscripción**. #### API ### Cómo facturar por adelantado una partida determinada Para facturar por adelantado un precio determinado en una suscripción, especifica una matriz `applies_to` con el ID de precio que quieres facturar por adelantado. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ --data-urlencode "items[1][price]={{PRICE_1, PRICE_2}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][applies_to][0][type]=price" \ -d "billing_schedules[0][applies_to][0][price]={{PRICE_ID}}" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][applies_to][0][type]=price" \ -d "billing_schedules[0][applies_to][0][price]={{PRICE_ID}}" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` ### Cómo facturar por adelantado múltiples partidas Para facturar por adelantado múltiples partidas, agrega varios objetos a la matriz `applies_to`. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][applies_to][0][type]=price" \ -d "billing_schedules[0][applies_to][0][price]={{PRICE_ID}}" \ -d "billing_schedules[0][applies_to][1][type]=price" \ -d "billing_schedules[0][applies_to][1][price]={{PRICE_ID}}" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][applies_to][0][type]=price" \ -d "billing_schedules[0][applies_to][0][price]={{PRICE_ID}}" \ -d "billing_schedules[0][applies_to][1][type]=price" \ -d "billing_schedules[0][applies_to][1][price]={{PRICE_ID}}" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` ### Cómo facturar por adelantado todas las partidas Para facturar por adelantado todas las partidas aplicables, omite la matriz `applies_to`. La facturación por adelantado se aplica a todas las partidas de la suscripción con un precio con licencia que se cobren al menos una vez antes de la fecha de finalización de la facturación por adelantado. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` ### Cómo facturar por adelantado por una duración Para facturar por adelantado por una duración especificada a partir de la fecha actual, configura la opción `type` en `duration` y las opciones `interval` e `interval_count`. Por ejemplo, para facturar por adelantado 2 meses, configura la opción `interval` en `month` y la opción `interval_count` en `2`. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` ### Cómo facturar por adelantado hasta una marca de tiempo Para facturar por adelantado hasta una fecha específica, configura la opción `type` en `timestamp` y la opción `timestamp` en la marca de tiempo de Unix, donde debe finalizar la facturación por adelantado. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` ### Cómo generar la factura inmediatamente Para generar la factura de la facturación por adelantado inmediatamente cuando se crea o actualiza la suscripción, configura la opción `proration_behavior` en `always_invoice`. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d proration_behavior=always_invoice \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d proration_behavior=always_invoice \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` ### Cómo generar la factura en el próximo ciclo de facturación Para generar la factura de la facturación por adelantado en la próxima fecha natural del ciclo de facturación, configura la opción `proration_behavior` en `create_prorations`. #### Accounts v2 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d proration_behavior=create_prorations \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` #### Customer v1 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[1][price]={{PRICE_ID}}" \ -d "billing_mode[type]=flexible" \ -d proration_behavior=create_prorations \ -d "billing_schedules[0][bill_until][type]=timestamp" \ -d "billing_schedules[0][bill_until][timestamp]=1679609767" ``` ## Cómo actualizar una suscripción existente con la facturación por adelantado Para agregar la facturación por adelantado a una suscripción existente, actualiza la suscripción con el parámetro `billing_schedules`. La suscripción ya debe estar en `billing_mode=flexible`. ```curl curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \ -u "<>:" \ -d "billing_schedules[0][bill_until][type]=duration" \ -d "billing_schedules[0][bill_until][duration][interval]=month" \ -d "billing_schedules[0][bill_until][duration][interval_count]=2" ``` ## Comisiones por cancelación anticipada Utiliza la facturación por adelantado para cobrar a los clientes por el período restante de un contrato comprometido cuando cancelan de forma anticipada. Esto es común para suscripciones a plazo fijo que se facturan de forma recurrente (por ejemplo, mensualmente). Por ejemplo, se crea la cuenta de un cliente el 1 de enero para un plan mensual de 1 año por USD 10/mes. El cliente ejecuta una cancelación el 10 de septiembre. Para cobrar el compromiso restante, factura por adelantado la suscripción hasta diciembre en la factura final y luego cancela la suscripción sin prorrateo. 1. [Actualiza la suscripción](https://docs.stripe.com/api/subscriptions/update.md) para configurar `billing_schedules.bill_until` en el final del período comprometido (31 de diciembre). 2. [Cancela la suscripción](https://docs.stripe.com/api/subscriptions/cancel.md) con la opción `proration_behavior` configurada en `none`. La factura final del cliente incluye los cobros de octubre, noviembre y diciembre, lo que cubre el resto de su compromiso como comisión por cancelación anticipada. Este patrón también funciona para contratos comprometidos más largos (por ejemplo, un contrato de 2 años en que el cliente cancela en el mes 18) y para escenarios de renovación anticipada en que los clientes actualizan a mitad del período y pagan por adelantado el período restante con precio nuevo. ## Consideraciones adicionales ### Plazos para la generación de la factura La factura de la facturación por adelantado se genera cuando creas o actualizas una suscripción con `billing_schedules` configurado. El plazo exacto depende de tu configuración de `proration_behavior`. - `always_invoice`: genera y finaliza la factura de la facturación por adelantado inmediatamente cuando se crea o actualiza la suscripción. - `create_prorations`: genera la factura de la facturación por adelantado en la próxima fecha natural del ciclo de facturación. Utiliza la opción `always_invoice` si quieres que el cliente reciba la factura por adelantado de inmediato. Utiliza la opción `create_prorations` si quieres que la factura aparezca junto con la factura regular del cliente en su próxima fecha de facturación. ### Webhooks y eventos La facturación por adelantado genera facturas fuera del ciclo de facturación normal. Asegúrate de que tu integración maneje los eventos pertinentes. Por ejemplo, es posible que quieras enviar al cliente un recibo cuando se pague la factura de la facturación por adelantado, o bien manejar el error de pago con un flujo de reintento. | Evento | Descripción | Caso de uso | | ------------------------------- | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | | `invoice.created` | Se envía cuando Stripe genera la factura de la facturación por adelantado. | Registra el cobro por adelantado en tu sistema. | | `invoice.finalized` | Se envía cuando se finaliza la factura y está lista para el pago. | Desencadena flujos de trabajo de notificación al cliente. | | `invoice.payment_succeeded` | Se envía cuando el pago de la factura de la facturación por adelantado se realiza correctamente. | Otorga al cliente acceso a los períodos de servicio prepagos. | | `invoice.payment_failed` | Se envía cuando ocurre un error con el pago de la factura de la facturación por adelantado. | Maneja el error con el pago: lógica de reintento, notificación al cliente o pausa de la suscripción. | | `customer.subscription.updated` | Se envía cuando la suscripción se actualiza con una nueva configuración de `billing_schedules`. | Sincroniza el estado de la suscripción actualizada con tu sistema. | ### Vista previa de la factura de la facturación por adelantado Puedes obtener una vista previa de la factura de un cliente antes de crear o actualizar una suscripción para usar la facturación por adelantado. Usa la API para [crear una vista previa de la factura](https://docs.stripe.com/api/invoices/create_preview.md) e incluye [billing_schedules](https://docs.stripe.com/api/invoices/create_preview.md#create_create_preview-subscription_details-billing_schedules) en el parámetro `subscription_details`. Esto te muestra la factura generada para la facturación por adelantado. ### Interacción con cupones Solo los cupones con `percent_off` y una `duration` de `once` o `forever` son compatibles con la facturación por adelantado. Los cupones de `amount_off` y los cupones con `duration=repeating` devuelven un error cuando se utilizan con una suscripción que tiene `billing_schedules` configurado. ## See also - [Modo de facturación flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md) - [Prorrateos](https://docs.stripe.com/billing/subscriptions/prorations.md) - [Vista previa de facturas](https://docs.stripe.com/api/invoices/create_preview.md) - [Ciclo de facturación de suscripción](https://docs.stripe.com/billing/subscriptions/billing-cycle.md)