# Facturation anticipée Utilisez la facturation anticipée pour encaisser dès maintenant les paiements de plusieurs périodes d’abonnement futures. ## Commencez ici : Installer les compétences d’agents Stripe recommande d’utiliser les compétences officielles pour intégrer l’API en utilisant les bonnes pratiques. Suivez les instructions ci-dessous pour en savoir plus. **Astuce : utilisez curl au lieu des outils Fetch.** Les compétences sont des fichiers markdown de 10 à 20 KB. Les outils de récupération les résument. `curl -sL` assure que le contenu est complet. **Utilisation des `compétences npx`** : vérifiez si `npx` est installé sur le système. Si `npx` est disponible, exécutez `npx skills add https://docs.stripe.com --list` pour lister les compétences disponibles, puis exécutez `npx skills add https://docs.stripe.com --yes --skill <--skill other-skills>` pour installer des compétences individuelles. **Si les `compétences npx` ne sont pas disponibles** : vous pouvez utiliser curl pour récupérer l’index des compétences disponibles, ce qu’elles font, et leurs fichiers à partir de `https://docs.stripe.com/.well-known/skills/index.json`. Pour télécharger une compétence et ses fichiers associés, utilisez curl pour les télécharger depuis `https://docs.stripe.com/.well-known/skills/`. Pour cet article, nous vous recommandons d’utiliser les compétences suivantes : `stripe-best-practices` Grâce à la facturation anticipée, vous pouvez facturer vos clients à l’avance pour plusieurs périodes d’abonnement. Vous pouvez activer ce mode de facturation lors de la création d’un abonnement ou l’ajouter à un abonnement existant. > #### Mode de facturation flexible requis > > La facturation anticipée nécessite l’activation du [mode de facturation flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md) sur vos abonnements. Si vous n’avez pas encore activé ce mode de facturation, consultez la page relative au [mode de facturation flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md) pour démarrer. ## Cas d’usage La facturation anticipée vous permet d’encaisser les paiements à l’avance pour des périodes d’abonnement futures. Voici les cas d’usage les plus courants : | Cas d’usage | Description | | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Prépaiement de plusieurs mois à l’inscription** | Facturez un abonné mensuel en avance pour 3 mois lors de son inscription, puis reprenez la facturation mensuelle normale par la suite. | | **Facturation anticipée d’un renouvellement** | Lorsqu’un renouvellement est dans 7 jours, générez et envoyez au client la facture de renouvellement immédiatement, sans attendre la fin du cycle de facturation. | | **Paiement annuel sur un tarif mensuel** | Permettez à un client de payer 12 mois d’un forfait mensuel en une seule facture d’avance, sans modifier le tarif sous-jacent vers une périodicité annuelle. | | **Facturation anticipée au niveau de l’élément** | Facturez un produit additionnel de façon anticipée tout en conservant la fréquence de facturation mensuelle classique pour les autres éléments du même abonnement. | | **Frais d’annulation anticipée** | Facturez un client pour la durée restante d’un contrat engagé lorsqu’il annule avant l’échéance, en préfacturant jusqu’à la fin de l’engagement, puis en résiliant l’abonnement. | ### Limitations La facturation anticipée est soumise aux limites suivantes : - Vous ne pouvez pas l’utiliser avec des [planifications d’abonnement](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md) ou avec des abonnements adossés à une planification d’abonnement. - En cas de préfacturation, vous pouvez utiliser des bons de réduction seulement avec [percent_off](https://docs.stripe.com/api/coupons/object.md#coupon_object-percent_off) et une [durée de validité](https://docs.stripe.com/api/coupons/object.md#coupon_object-duration) qui soit `once` ou `forever`. - Vous ne pouvez pas activer la facturation anticipée si tous les éléments de l’abonnement ont des tarifs à l’usage. Dans le cas d’un abonnement, la facturation anticipée ne s’applique pas aux prix à l’usage. Vous ne pouvez pas définir [applies_to[price]](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_schedules-applies_to) si le prix a [utilisation_type=metered](https://docs.stripe.com/api/prices/object.md#price_object-recurring-usage_type). - Si la résiliation d’un abonnement est programmée, vous ne pouvez pas définir de date de fin de facturation anticipée au-delà de la date de résiliation prévue. ## Fonctionnement de la facturation anticipée La facturation anticipée s’appuie sur le paramètre [billing_schedules](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-billing_schedules) de l’abonnement pour définir les éléments à facturer à l’avance et la durée de la facturation. Lorsque vous configurez le paramètre `billing_schedules`, Stripe génère une facture anticipée (couvrant l’ensemble des périodes d’abonnement futures indiquées) dès la création ou la mise à jour de l’abonnement, plutôt que d’attendre chaque cycle de facturation. La facturation anticipée s’applique au niveau de l’[élément](https://docs.stripe.com/api/subscription_items.md). Vous pouvez facturer certains éléments en amont en transmettant le paramètre `applies_to` avec les ID de tarifs concernés, ou omettre complètement le paramètre `applies_to` pour facturer l’ensemble des éléments éligibles qui sont au prix fixe de l’abonnement. Les tarifs à l’usage ne sont jamais concernés par la facturation anticipée, quelle que soit la configuration du paramètre `applies_to`. Le paramètre [bill_until](https://docs.stripe.com/api/subscriptions/update.md?api-version=preview#update_subscription-billing_schedules-bill_until) contrôle la date de fin de la période de facturation anticipée. Vous pouvez l’exprimer sous forme d’une durée avec le paramètre `duration` (par exemple, 2 mois à partir de la date actuelle) ou sous forme d’horodatage avec le paramètre `timestamp` (un horodatage Unix spécifique). ## Création d’un abonnement avec facturation anticipée Pour configurer la facturation anticipée lors de la création d’un abonnement, utilisez le paramètre [billing_schedules](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-billing_schedules) et précisez les éléments concernés, ainsi que la durée correspondante. - Utilisez le paramètre `applies_to` pour spécifier les éléments à facturer en amont en indiquant leur ID de tarif, ou omettez-le pour facturer tous les éléments éligibles. - Utilisez le paramètre `bill_until` pour définir la date de fin de la facturation anticipée sous la forme d’une durée ou d’un horodatage. - Utilisez le paramètre `proration_behavior` pour contrôler à quel moment la facture liée à la facturation anticipée est générée. Lorsque vous définissez la date de fin de la période de préfacturation : - La date de fin doit être fixée au terme de la première période de facturation, ou à une date ultérieure. Si vous proposez un abonnement mensuel, la date de fin doit par exemple être fixée au moins un mois après le début de la période de facturation. - Le nombre total de cycles de facturation anticipée pour l’ensemble des éléments ne peut pas dépasser 50. Si vous facturez deux éléments, vous pouvez par exemple le faire pour chacun d’eux jusqu’à 25 mois à l’avance. - La date de fin de facturation anticipée ne peut pas dépasser un délai de 5 ans à compter de la date actuelle. #### Dashboard Pour créer un abonnement avec préfacturation dans le Dashboard : 1. Accédez à la [page des Abonnements](https://dashboard.stripe.com/subscriptions?status=active). 2. Cliquez sur **+ Créer un abonnement**. 3. Dans la section **Paramètres d’abonnement**, activez **Facturer au préalable**. 4. Sélectionnez la date de fin de la période de préfacturation. Tous les éléments de l’abonnement seront préfacturés jusqu’à la date que vous avez sélectionnée. 5. Dans la section **Paramètres avancés**, définissez le **Mode de facturation** sur **Flexible**. 6. Cliquez sur **Créer un abonnement**. Pour mettre à jour un abonnement existant : > Le paramètre `billing_mode=flexible` doit déjà être activé sur l’abonnement concerné. Pour en savoir plus, consultez la section consacrée aux [limites](https://docs.stripe.com/billing/subscriptions/prebilling.md#limitations) de la facturation anticipée. 1. Accédez à la [page des Abonnements](https://dashboard.stripe.com/subscriptions?status=active). 2. Cliquez sur l’abonnement que vous souhaitez mettre à jour, puis sélectionnez **Actions** > **Mettre à jour l’abonnement**. 3. Dans la section **Paramètres d’abonnement**, activez **Facturer au préalable**. 4. Sélectionnez la date de fin de la période de préfacturation. Tous les éléments de l’abonnement seront préfacturés jusqu’à la date que vous avez sélectionnée. 5. Cliquez sur **Mettre à jour l’abonnement**. #### API ### Facturation anticipée d’un élément spécifique Pour facturer de façon anticipée un tarif spécifique de l’abonnement, transmettez un tableau `applies_to` contenant l’ID du tarif en question : #### 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" ``` ### Facturation anticipée de plusieurs éléments Pour préfacturer plusieurs éléments, ajoutez plusieurs objets au tableau `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" ``` ### Facturation anticipée de tous les éléments Pour facturer l’ensemble des éléments éligibles de façon anticipée, omettez le tableau `applies_to`. La facturation anticipée s’appliquera alors à tous les éléments éligibles qui sont au prix fixe de l’abonnement et qui ont été facturés au moins une fois avant la date de fin de la facturation anticipée. #### 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" ``` ### Facturation anticipée selon une durée définie Pour facturer de façon anticipée sur une durée spécifique à partir de la date actuelle, définissez le paramètre `type` sur `duration`, puis configurez les paramètres `interval` et `interval_count`. Par exemple, pour facturer de façon anticipée sur 2 mois, définissez le paramètre `interval` sur `month` et le paramètre `interval_count` sur `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" ``` ### Facturation anticipée jusqu’à une date précise Pour facturer de façon anticipée jusqu’à une date précise, définissez le paramètre `type` sur `timestamp`, et le paramètre `timestamp` sur l’horodatage Unix correspondant à la fin de la période de facturation anticipée. #### 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" ``` ### Génération immédiate de la facture Pour générer la facture liée à la facturation anticipée de façon immédiate lors de la création ou de la mise à jour de l’abonnement, définissez le paramètre `proration_behavior` sur `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" ``` ### Génération de la facture au prochain cycle de facturation Pour générer la facture liée à la facturation anticipée à la date du prochain cycle de facturation, définissez le paramètre `proration_behavior` sur `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" ``` ## Mise à jour d’un abonnement existant pour y ajouter la facturation anticipée Pour ajouter la facturation anticipée à un abonnement existant, mettez-le à jour à l’aide du paramètre `billing_schedules`. Le paramètre `billing_mode=flexible` doit déjà être activé sur l’abonnement. ```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" ``` ## Frais d’annulation anticipée Utilisez la facturation anticipée pour facturer aux clients la durée restante de leur engagement lorsqu’ils l’annulent prématurément. Ce cas de figure est courant pour les abonnements à durée déterminée assortis d’une facturation récurrente (par exemple mensuelle). Un client s’abonne par exemple le 1er janvier à une offre d’un an avec facturation mensuelle pour un montant de 10 dollars par mois. Il résilie son abonnement le 10 septembre. Pour recouvrer le montant restant de son engagement, facturez l’abonnement de façon anticipée jusqu’à fin décembre sur sa facture finale, puis résiliez l’abonnement sans calcul au prorata. 1. [Mettez l’abonnement à jour](https://docs.stripe.com/api/subscriptions/update.md) en définissant le paramètre `billing_schedules.bill_until` sur la date de fin de l’engagement (le 31 décembre). 2. [Résiliez l’abonnement](https://docs.stripe.com/api/subscriptions/cancel.md) en définissant le paramètre `proration_behavior` sur `none`. Les frais pour les mois d’octobre, de novembre et de décembre seront inclus dans la facture finale du client, ce qui couvre le reste de son engagement sous forme de frais d’annulation anticipée. Ce système fonctionne également pour les engagements de plus longue durée (si un client annule par exemple un contrat de deux ans au cours du 18e mois), ainsi que pour les renouvellements anticipés. Dans ce cas, les clients modifient leur offre en cours de période et paient la durée restante à l’avance, au nouveau tarif. ## Considérations supplémentaires ### Délai de génération de la facture La facture liée à la facturation anticipée est générée lors de la création ou de la mise à jour de l’abonnement incluant le paramètre `billing_schedules`. Le délai exact de génération dépend du paramètre `proration_behavior` : - `always_invoice` : génère et finalise immédiatement la facture liée à la facturation anticipée, dès la création ou la mise à jour de l’abonnement. - `create_prorations` : génère la facture liée à la facturation anticipée à la date du prochain cycle de facturation. Utilisez `always_invoice` si vous souhaitez que le client reçoive immédiatement la facture anticipée. Utilisez `create_prorations` si vous souhaitez que la facture accompagne la facture habituelle du client à sa prochaine date de facturation. ### Webhooks et événements La facturation anticipée permet de générer des factures en dehors du cycle habituel de facturation. Assurez-vous que votre intégration gère les événements concernés. Il est par exemple possible d’envoyer un reçu au client lorsque la facture liée à la facturation anticipée est payée, ou de gérer l’échec d’un paiement avec un flux de nouvelle tentative. | Événement | Description | Cas d’usage | | ------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `invoice.created` | Envoyé lorsque Stripe génère la facture liée à la facturation anticipée. | Enregistrez le paiement anticipé dans votre système. | | `invoice.finalized` | Envoyé lorsque la facture est finalisée et prête à être payée. | Déclenchez les flux de notification client. | | `invoice.payment_succeeded` | Envoyé lorsque le paiement de la facture liée à la facturation anticipée aboutit. | Accordez au client l’accès au service pour les périodes déjà payées. | | `invoice.payment_failed` | Envoyé en cas d’échec du paiement de la facture liée à la facturation anticipée. | Gérez l’échec de paiement : logique de nouvelle tentative, notifications à l’attention du client ou suspension de l’abonnement. | | `customer.subscription.updated` | Envoyé lorsque l’abonnement est mis à jour avec une nouvelle configuration `billing_schedules`. | Synchronisez l’état de l’abonnement mis à jour avec votre système. | ### Aperçu de la facture liée à la facturation anticipée Vous pouvez afficher l’aperçu de la facture d’un client avant de créer ou de mettre à jour un abonnement pour utiliser la facturation anticipée. Utilisez l’API pour [créer un aperçu de la facture](https://docs.stripe.com/api/invoices/create_preview.md) et incluez [billing_schedules](https://docs.stripe.com/api/invoices/create_preview.md#create_create_preview-subscription_details-billing_schedules) dans le paramètre `subscription_details`. Vous aurez ainsi accès à la facture générée pour la facturation anticipée. ### Interaction avec les bons de réduction Seuls les bons de réduction avec `percent_off` et une `duration` de `once` ou `forever` sont compatibles avec la facturation anticipée. Les bons de réduction avec `amount_off` et les bons de réduction avec `duration=repeating` renvoient une erreur lorsqu’ils sont utilisés avec un abonnement qui a `billing_schedules` configuré. ## See also - [Mode de facturation flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md) - [Calculs au prorata](https://docs.stripe.com/billing/subscriptions/prorations.md) - [Aperçu de factures](https://docs.stripe.com/api/invoices/create_preview.md) - [Cycle de facturation de l’abonnement](https://docs.stripe.com/billing/subscriptions/billing-cycle.md)