# Abonnements présentant des postes à la périodicité différente Gérez les abonnements pour les postes avec des intervalles différents. Vous pouvez inclure plusieurs postes [d’abonnement](https://docs.stripe.com/billing/subscriptions/overview.md) avec différents tarifs et périodes de facturation sur un même abonnement. Stripe se chargera automatiquement de la génération des factures. Par exemple, si vous proposez un service avec un [tarif forfaitaire](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate) annuel, plus des [frais basés sur l’utilisation](https://docs.stripe.com/billing/subscriptions/usage-based.md) mensuels, vous pouvez inclure les deux tarifs comme éléments sur le même abonnement. Stripe génère une seule facture combinée lorsque les périodes de facturation au niveau des postes s’alignent et des factures distinctes lorsque les périodes de facturation divergent. > Les abonnements à intervalles mixtes doivent utiliser le [mode de facturation flexible](https://docs.stripe.com/billing/subscriptions/billing-mode.md). Vous devez mettre à niveau votre version d’API vers la version `2025-06-30.basil` ou ultérieure pour utiliser le mode de facturation flexible dans le Dashboard et l’API. # Dashboard > This is a Dashboard for when dashboard-or-api is dashboard. View the full page at https://docs.stripe.com/billing/subscriptions/mixed-interval?dashboard-or-api=dashboard. ## Créez un abonnement à intervalles mixtes 1. Dans le Dashboard, ouvrez la page [Abonnements](https://dashboard.stripe.com/subscriptions). 1. Sélectionnez **+Créer un abonnement**. 1. Sous **Facturation et encaissement**, définissez le **Mode de facturation** sur **Flexible**. 1. Ajoutez des produits dont les intervalles de facturation sont différents, comme des périodes de facturation mensuelles et annuelles. Découvrez comment gérer les [produits et les tarifs](https://docs.stripe.com/products-prices/manage-prices.md). 1. Configurez vos **Options d’abonnement**. 1. Cliquez sur **Créer l’abonnement**. ## Ajoutez des postes à intervalles mixtes à un abonnement en cours 1. Dans le Dashboard, ouvrez la page [Abonnements](https://dashboard.stripe.com/subscriptions). 1. Recherchez l’abonnement, cliquez sur son menu de débordement (⋯) et cliquez sur **Modifier l’abonnement**. 1. Ajoutez des produits dont les intervalles de facturation sont différents, comme des périodes de facturation mensuelles et annuelles. Découvrez comment gérer les [produits et les tarifs](https://docs.stripe.com/products-prices/manage-prices.md). 1. Cliquez sur **Mettre à jour l’abonnement**. # API > This is a API for when dashboard-or-api is api. View the full page at https://docs.stripe.com/billing/subscriptions/mixed-interval?dashboard-or-api=api. ## Créez un abonnement à intervalles mixtes Appelez l’endpoint [créer un abonnement](https://docs.stripe.com/api/subscriptions/create.md). L’exemple de code suivant crée un nouvel abonnement qui facture 100 USD par trimestre et 15 USD par mois à compter du 1er janvier 2024 : ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price_data][currency]=usd" \ -d "items[0][price_data][product]={{PRODUCT_ID}}" \ -d "items[0][price_data][recurring][interval]=month" \ -d "items[0][price_data][recurring][interval_count]=1" \ -d "items[0][price_data][unit_amount]=1500" \ -d "items[0][quantity]=1" \ -d "items[1][price_data][currency]=usd" \ -d "items[1][price_data][product]={{PRODUCT_ID}}" \ -d "items[1][price_data][recurring][interval]=month" \ -d "items[1][price_data][recurring][interval_count]=3" \ -d "items[1][price_data][unit_amount]=10000" \ -d "items[1][quantity]=1" \ -d collection_method=send_invoice \ -d days_until_due=5 \ -d proration_behavior=none \ -d "billing_mode[type]=flexible" \ -d "expand[0]=latest_invoice" ``` La réponse renvoie l’abonnement avec les deux postes, qui sont facturés sur la première facture (`latest_invoice`) : ```json { "object": "subscription", "id": "{{SUBSCRIPTION_ID}}", "current_period_start": 1704067200, // Jan 1 2024 "current_period_end": 1706745600, // Feb 1 2024 "items": { "data": [ { "id": "si_A", "price": "price_id_monthly", "current_period_start": 1704067200, // Jan 1 2024 "current_period_end": 1706745600 // Feb 1 2024 }, { "id": "si_B", "price": "price_id_quarterly", "current_period_start": 1704067200, // Jan 1 2024 "current_period_end": 1711929600 // Apr 1 2024 } ], // ... }, "latest_invoice": { "object": "invoice", "id": "in_A", "created": 1704067200, // Jan 1 2024 "period_start": 1704067200, // Jan 1 2024 "period_end": 1704067200, // Jan 1 2024 "lines": { "data": [ { "description": "1 × Monthly Price (at $15.00 / month)", "period": { "start": 1704067200, // Jan 1 2024 "end": 1706745600 // Feb 1 2024 }, // ... }, { "description": "1 × Quarterly Price (at $100.00 every 3 months)", "period": { "start": 1704067200, // Jan 1 2024 "end": 1711929600 // Apr 1 2024 }, // ... } ] }, // ... }, // ... } ``` Le 1er février et le 1er mars, l’abonnement est renouvelé et génère une nouvelle facture au tarif mensuel. Le 1er avril, le renouvellement de l’abonnement génère une facture au tarif mensuel et trimestriel. ## Créer un calendrier d’abonnement avec des périodes mixtes Vous pouvez également utiliser des planifications d’abonnement pour créer des abonnements avec des postes avec différents tarifs et périodes de facturation. > Nous vous recommandons d’utiliser `duration` dans les endpoints de [planification d’abonnement](https://docs.stripe.com/api/subscription_schedules/create.md). Vous pouvez définir des durées pour les phases de planification d’abonnement (par exemple, « 3 mois ») plutôt que d’utiliser le nombre d’itérations de phase, ce qui permet une modélisation plus claire des abonnements avec des périodes de facturation mixtes. Le paramètre [iterations](https://docs.stripe.com/api/subscription_schedules/create.md#create_subscription_schedule-phases-iterations) de phase est obsolète. L’exemple de code suivant crée une planification d’abonnement avec les mêmes paramètres que l’exemple d’abonnement : ```curl curl https://api.stripe.com/v1/subscription_schedules \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d start_date=now \ -d "phases[0][items][0][price_data][currency]=usd" \ -d "phases[0][items][0][price_data][product]={{PRODUCT_ID}}" \ -d "phases[0][items][0][price_data][recurring][interval]=month" \ -d "phases[0][items][0][price_data][recurring][interval_count]=1" \ -d "phases[0][items][0][price_data][unit_amount]=1500" \ -d "phases[0][items][0][quantity]=1" \ -d "phases[0][items][1][price_data][currency]=usd" \ -d "phases[0][items][1][price_data][product]={{PRODUCT_ID}}" \ -d "phases[0][items][1][price_data][recurring][interval]=month" \ -d "phases[0][items][1][price_data][recurring][interval_count]=3" \ -d "phases[0][items][1][price_data][unit_amount]=10000" \ -d "phases[0][items][1][quantity]=1" \ -d "phases[0][end_date]=1735718400" \ -d "billing_mode[type]=flexible" \ -d "expand[0]=subscription.latest_invoice" ``` La réponse renvoie un abonnement avec les deux postes, qui sont facturés sur la première facture (`latest_invoice`) : ```json { "object": "subscription_schedule", "id": "{{SUBSCRIPTION_SCHEDULE_ID}}", "billing_mode": "flexible", "phases": { "data": [ { "start_date": 1704096000, // Jan 1 2024 "end_date": 1735718400, // Jan 1 2025 "items": [ { "price": "price_id_monthly", // ... }, { "price": "price_id_quarterly", // ... } ] } ] }, "subscription": { "items": { "data": [ { "id": "si_A", "price": "price_id_monthly", "current_period_start": 1704067200, // Jan 1 2024 "current_period_end": 1706745600, // Feb 1 2024 // ... }, { "id": "si_B", "price": "price_id_quarterly", "current_period_start": 1704067200, // Jan 1 2024 "current_period_end": 1711929600, // Apr 1 2024 // ... } ], // ... }, "latest_invoice": { "object": "invoice", "id": "in_A", "created": 1704067200, // Jan 1 2024 "period_start": 1704067200, // Jan 1 2024 "period_end": 1704067200, // Jan 1 2024 "lines": { "data": [ { "description": "1 × Monthly Price (at $15.00 / month)", "period": { "start": 1704067200, // Jan 1 2024 "end": 1706745600 // Feb 1 2024 }, // ... }, { "description": "1 × Quarterly Price (at $100.00 every 3 months)", "period": { "start": 1704067200, // Jan 1 2024 "end": 1711929600 // Apr 1 2024 }, // ... } ] }, // ... }, // ... } } ``` ## Mettez à jour un abonnement sous la forme d’un abonnement à période mixte 1. Mettez à jour votre abonnement en mode de facturation flexible. 1. Appelez l’[endpoint de migration](https://docs.stripe.com/api/Subscriptions/migrate.md) et définissez `billing_mode` sur `flexible` pour l’abonnement en cours. 1. Appelez [mettre à jour un abonnement](https://docs.stripe.com/api/subscriptions/update.md) pour ajouter des postes avec différents tarifs et intervalles. ## Annuler un abonnement L’annulation d’un abonnement ou d’une planification à période mixte annule tous les postes d’abonnement, quelle que soit leur période. Les abonnements ont un comportement unique en matière de [relance](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md). Si toutes les tentatives de paiement échouent, Stripe annule l’abonnement entier et le marque comme impayé ou en retard, en fonction des paramètres de relance configurés. En savoir plus sur l’[annulation ou la suppression des abonnements](https://docs.stripe.com/no-code/Subscriptions.md#create-Subscriptions). ## Périodes de facturation pour les abonnements présentant des postes à la périodicité différente Chaque poste d’abonnement possède ses propres [current_period_start](https://docs.stripe.com/api/Subscriptions/object.md#subscription_object-items-data-current_period_start) et [current_period_end](https://docs.stripe.com/api/Subscriptions/object.md#subscription_object-items-data-current_period_end). Les [postes d’abonnement](https://docs.stripe.com/api/subscription_items/object.md) suivent directement leurs périodes de facturation respectives au lieu d’être une période de facturation partagée de niveau supérieur sur la ressource [abonnement](https://docs.stripe.com/api/Subscriptions/object.md). Par exemple, un abonnement créé le 1er janvier avec un poste mensuel, bimensuel et trimestriel comporte les périodes suivantes : | | current_period_start | current_period_end | | ----------------- | -------------------- | ------------------ | | Poste mensuel | 1er janvier | 1er février | | Poste bimestriel | 1er janvier | 1er mars | | Poste trimestriel | 1er janvier | 1er avril | | Subscription | 1er janvier | 1er février | Après le renouvellement le 1er février (`subscription.current_period_end`), la période actuelle de l’abonnement s’ajuste pour correspondre à la `current_period_start` la plus récente et à la `current_period_end` la plus ancienne de tous les postes : | | current_period_start | current_period_end | | ----------------- | -------------------- | ------------------ | | Poste mensuel | 1er février | 1er mars | | Poste bimestriel | 1er janvier | 1er mars | | Poste trimestriel | 1er janvier | 1er avril | | Subscription | 1er février | 1er mars | Au bout du troisième cycle : | | current_period_start | current_period_end | | ----------------- | -------------------- | ------------------ | | Poste mensuel | 1er mars | 1er avril | | Poste bimestriel | 1er mars | 1er mai | | Poste trimestriel | 1er janvier | 1er avril | | Subscription | 1er mars | 1er avril | ### Essai gratuit Les dates de la période de facturation au niveau du poste dépendent des dates de fin des essais gratuits, comme pour les abonnements standard. Lorsque l’abonnement présente une date de fin [trial_end](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-trial_end) dans le futur, toutes les dates `current_period_end` (abonnement et postes) sont définies sur la date `trial_end`. ### Pause à la fin de la période d’essai et reprise Vous pouvez configurer un abonnement à intervalle mixte pour qu’il soit interrompu à la fin de l’essai lorsque le moyen de paiement est manquant, et ce, au moyen du paramètre [trial_settings.end_behavior.missing_payment_method](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-trial_settings-end_behavior-missing_payment_method), comme pour les abonnements ordinaires. Vous pouvez [reprendre](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md?how=api#resume-a-paused-subscription) les abonnements mis en pause en utilisant [stripe.subscription.resume](https://docs.stripe.com/api/subscriptions/resume.md), comme pour les abonnements ordinaires. > Lors de la reprise d’un abonnement à intervalles mixtes avec `billing_cycle_anchor: 'unchanged'` et `proration_behavior: 'none'`, le prorata du débit pour la période partielle entre la date de reprise et la fin de la période de facturation actuelle pour chacun des postes n’est ni généré ni facturé. Voir un exemple ci-dessous  : Pour un abonnement à intervalles mixtes avec un abonnement mensuel et un abonnement bimestriel - `billing_cycle_anchor` = 1er janvier - `trial_end` = 1er février - `trial_settings.end_behavior.missing_payment_method` = « pause » Dans cet exemple, nous partons du principe que cet abonnement est suspendu le 1er février en raison d’un moyen de paiement manquant, et qu’il reprend le 15 février avec `proration_behavior: 'none'` : | | billing_cycle_anchor : « unchanged » | billing_cycle_anchor : « now » | | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Poste mensuel | Période actuelle de l’article : du 1er février au 1er mars - Aucune facture n’est facturée pour cette période, donc aucune nouvelle facture n’est créée - La prochaine facturation mensuelle aura lieu le 1er mars pour la période du 1er mars au 1er avril | Période actuelle de l’article : du 15 février au 15 mars - Génère une nouvelle facture et facture un poste mensuel du 15 février au 15 mars | | Article bimestriel | Période actuelle de l’article du 1er février au 1er avril - Aucune facture n’est facturée pour cette période, donc aucune nouvelle facture n’est créée - La prochaine facturation bimestrielle aura lieu le 1er avril pour la période du 1er avril au 1er juin | Période actuelle de l’article : du 15 février au 15 avril - Génère une nouvelle facture et facture un poste mensuel du 15 février au 15 avril | | Subscription | - billing_cycle_anchor : 1er février - L’abonnement devient actif immédiatement | - Générer un abonnement en attente de mise à jour pour billing_cycle_anchor : 15 février (appliqué une fois que la facture de reprise est payée) - L’abonnement reste suspendu jusqu’au paiement de la facture de reprise | ### Alignement des intervalles Dans les abonnements à intervalles mixtes, la période de tarification de chaque poste (la combinaison de `price.recurring.interval` et `price.recurring.interval_count`) doit être un multiple de la période de tarification la plus courte de l’abonnement. Certaines combinaisons de périodes de tarification ne sont pas prises en charge pour les abonnements à intervalles mixtes. - **Exemples de combinaisons de périodes prises en charge** : Lorsque nous vérifions que les périodes de votre abonnement se chevauchent, Stripe considère les périodes suivantes comme équivalentes : - 1 semaine et 7 jours - 12 mois et 1 an - 1 mois, 3 mois - 1 mois, 1 an - 1 jour, 1 semaine - 1 jour, 3 mois - 1 jour, 2 ans - 2 semaines, 4 semaines - 2 mois, 4 mois, 6 mois - **Exemples de combinaisons de périodes non prises en charge** : Il n’existe pas d’équivalence entre les types de [périodes tarifaires](https://docs.stripe.com/api/prices/object.md#price_object-recurring-interval) suivants : - Semaine et mois - Semaine et année - Jour et mois - Jour et année - 2 mois, 3 mois - 4 mois, 6 mois - 1 semaine, 1 mois - 2 jours, 1 semaine - 5 mois, 1 an ## Limitations Les abonnements à intervalles mixtes sont soumis aux limitations suivantes : - Le paramètre obsolète [cancel_at_period_end](https://docs.stripe.com/api/Subscriptions/update.md#update_subscription-cancel_at_period_end) ne peut pas détecter la date d’annulation `current_period_end` du poste d’abonnement à utiliser. Sa valeur par défaut est donc `min_period_end`. Alternativement : - Utilisez le paramètre `cancel_at` pour annuler un abonnement à une date ultérieure. - Utilisez les assistants `min_period_end` ou `max_period_end` pour déterminer quel poste déclenche l’annulation de l’abonnement. - Les abonnements à intervalles mixtes ne permettent pas de calculer avec précision le total des [itérations](https://docs.stripe.com/api/subscription_schedules/create.md#create_subscription_schedule-phases-iterations). Utilisez plutôt `duration` pour spécifier la planification d’abonnement. - Vous ne pouvez pas appliquer un bon de réduction de rétention sur des abonnements à intervalles mixtes via le portail client. - À l’heure actuelle, vous ne pouvez pas créer d’abonnements à intervalles mixtes sur [Checkout Sessions](https://docs.stripe.com/api/paiement/sessions/create.md).