# Legen Sie Produkt- oder Abo-Mengen fest Abonnieren Sie eine Kundin/einen Kunden für mehrere Produkte oder für mehrere Mengen eines einzelnen Produkts, die alle in einer einzigen Rechnung abgerechnet werden. Möglicherweise müssen Sie Abos für [mehrere Produkte](https://docs.stripe.com/billing/subscriptions/quantities.md#multiple-product-sub) oder für [mehrere Mengen desselben Produkts](https://docs.stripe.com/billing/subscriptions/quantities.md#multiple-quantities-sub) erstellen. Außerdem können Sie [mehrere Abos für einzelne Kundinnen und Kunden](https://docs.stripe.com/billing/subscriptions/quantities.md#multiple-subscriptions) anlegen. ## Abos mit mehreren Produkten Wenn Sie mehrere Produkte anbieten oder unterschiedliche Beträge für dasselbe Produkt berechnen möchten, können Sie ein Abo für mehrere Produkte erstellen. Dies erzeugt eine einzelne *Rechnung* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) pro Rechnungsstellungszeitraum, die alle Preise zusammenfasst, sodass die Kundin/der Kunde nur eine einzige Zahlung leisten muss. ### Erstellen eines Abos mit mehreren Produkten Erstellen Sie Abos für mehrere Produkte für eine Kundin/einen Kunden mithilfe des [items](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-items)-Parameters. Geben Sie für jedes Produkt den `price` und optional eine `quantity` (wenn ein anderer Wert als 1 verwendet wird) an: ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "items[0][price]"=price_CBXbz9i7AIOTzr \ -d "items[1][price]"=price_IFuCu48Snc02bc \ -d "items[1][quantity]"=2 ``` ```cli stripe subscriptions create \ --customer="{{CUSTOMER_ID}}" \ -d "items[0][price]"=price_CBXbz9i7AIOTzr \ -d "items[1][price]"=price_IFuCu48Snc02bc \ -d "items[1][quantity]"=2 ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") subscription = client.v1.subscriptions.create({ customer: '{{CUSTOMER_ID}}', items: [ {price: 'price_CBXbz9i7AIOTzr'}, { price: 'price_IFuCu48Snc02bc', quantity: 2, }, ], }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. subscription = client.v1.subscriptions.create({ "customer": "{{CUSTOMER_ID}}", "items": [ {"price": "price_CBXbz9i7AIOTzr"}, {"price": "price_IFuCu48Snc02bc", "quantity": 2}, ], }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $subscription = $stripe->subscriptions->create([ 'customer' => '{{CUSTOMER_ID}}', 'items' => [ ['price' => 'price_CBXbz9i7AIOTzr'], [ 'price' => 'price_IFuCu48Snc02bc', 'quantity' => 2, ], ], ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); SubscriptionCreateParams params = SubscriptionCreateParams.builder() .setCustomer("{{CUSTOMER_ID}}") .addItem( SubscriptionCreateParams.Item.builder().setPrice("price_CBXbz9i7AIOTzr").build() ) .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_IFuCu48Snc02bc") .setQuantity(2L) .build() ) .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Subscription subscription = client.v1().subscriptions().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const subscription = await stripe.subscriptions.create({ customer: '{{CUSTOMER_ID}}', items: [ { price: 'price_CBXbz9i7AIOTzr', }, { price: 'price_IFuCu48Snc02bc', quantity: 2, }, ], }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.SubscriptionCreateParams{ Customer: stripe.String("{{CUSTOMER_ID}}"), Items: []*stripe.SubscriptionCreateItemParams{ &stripe.SubscriptionCreateItemParams{Price: stripe.String("price_CBXbz9i7AIOTzr")}, &stripe.SubscriptionCreateItemParams{ Price: stripe.String("price_IFuCu48Snc02bc"), Quantity: stripe.Int64(2), }, }, } result, err := sc.V1Subscriptions.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new SubscriptionCreateOptions { Customer = "{{CUSTOMER_ID}}", Items = new List { new SubscriptionItemOptions { Price = "price_CBXbz9i7AIOTzr" }, new SubscriptionItemOptions { Price = "price_IFuCu48Snc02bc", Quantity = 2 }, }, }; var client = new StripeClient("<>"); var service = client.V1.Subscriptions; Subscription subscription = service.Create(options); ``` Die Antwort enthält eine Auflistung aller Abo-Posten, Preise und Mengen: ```json { "id": "sub_CZEpS1Zt9QLxdo", "object": "subscription", ... "items": { "object": "list", "data": [ { "id": "si_H1yPnAVzP9vDRW", "object": "subscription_item", "billing_thresholds": null, "created": 1585939321, "metadata": { }, "price": { "id": "price_H1c8v1liEvrfcd", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1585856460, "currency": "usd", "livemode": false, "lookup_key": null, "metadata": { }, "nickname": null, "product": "prod_H1c7exjJHbC4sr", "recurring": { "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed" }, "tiers": null, "tiers_mode": null, "transform_quantity": null, "type": "recurring", "unit_amount": 1000, "unit_amount_decimal": "1000" }, "quantity": 1, "subscription": "sub_H1yPRslJXa4TUt", "tax_rates": [ ] }, { "id": "si_H1yPu4fSjq3oqM", "object": "subscription_item", "billing_thresholds": null, "created": 1585939321, "metadata": { }, "price": { "id": "price_H1yCssogQ6gtx1", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1585938535, "currency": "usd", "livemode": false, "lookup_key": null, "metadata": { }, "nickname": null, "product": "prod_H1c7exjJHbC4sr", "recurring": { "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed" }, "tiers": null, "tiers_mode": null, "transform_quantity": null, "type": "recurring", "unit_amount": 2000, "unit_amount_decimal": "2000" }, "quantity": 2, "subscription": "sub_H1yPRslJXa4TUt", "tax_rates": [ ] } ] }, ... } ``` ### Rechnungsstellungszeiträume mit mehreren Preisen Abos mit einem festen Tarif pro Intervall werden zu Beginn jedes [Rechnungsstellungszeitraums (Zyklus)](https://docs.stripe.com/billing/subscriptions/billing-cycle.md) abgerechnet. Mit jeder Rechnung zahlt die Kundin/der Kunde damit im Voraus für das nächste Leistungsintervall. Bei der [nutzungsbasierten Abrechnung](https://docs.stripe.com/products-prices/pricing-models.md#usage-based-pricing) hingegen variiert der von der Kundin/vom Kunden gezahlte Betrag je nach Verbrauch im Rechnungsstellungszeitraum, sodass die Zahlung für die Nutzung am Ende erfolgt. Wenn ein Abo einen festen Tarif mit nutzungsbasierter Abrechnung kombiniert, wird die erfasste Nutzung aus dem vorherigen Rechnungsstellungszeitraum zusammen mit dem festen Tarif für den neuen Rechnungsstellungszeitraum zu Beginn jeder Verlängerung abgerechnet. Die nutzungsbasierte Abrechnung und der feste Tarif werden in einer einzigen Rechnung zusammengefasst. Da die Nutzung mehrerer Produkte innerhalb eines Abos zu einer einzigen Rechnung und Zahlung führt, müssen alle Preise für diese Produkte in derselben Währung angegeben sein. Außerdem sind Sie auf 20 Produkte in einem einzelnen Abo beschränkt. Um mehrere Produkte in einem Abo mit unterschiedlichen Rechnungsstellungszeiträumen zu verwalten, können Sie ein [gemischtes Intervall-Abo](https://docs.stripe.com/billing/subscriptions/mixed-interval.md) erstellen. ### Rabatte, Steuern und Testzeiträume Bei der Verwendung mehrerer Produkte können Sie auch [Rabatte](https://docs.stripe.com/billing/subscriptions/coupons.md) erstellen, [Steuern](https://docs.stripe.com/billing/taxes/collect-taxes.md) berechnen und [Testzeiträume](https://docs.stripe.com/billing/subscriptions/trials.md) auf die gleiche Weise nutzen wie bei einem Abo für ein einzelnes Produkt. Geben Sie diese Argumente beim [Erstellen](https://docs.stripe.com/api/subscriptions/create.md) oder [Aktualisieren](https://docs.stripe.com/api/subscriptions/update.md) eines Abos an, um sie auf das gesamte Abo anzuwenden oder geben Sie sie auf Postenebene an, um nur einen bestimmten Posten zu rabattieren. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer="{{CUSTOMER_ID}}" \ -d "discounts[0][coupon]"=free-period \ -d "default_tax_rates[0]"=txr_1EO66sClCIKljWvs98IiVfHW \ -d trial_end=1610403705 \ -d "items[0][price]"=price_CBXbz9i7AIOTzr \ -d "items[1][price]"=price_IFuCu48Snc02bc \ -d "items[1][quantity]"=2 ``` ## Mehrere Mengen eines Abos Das Festlegen einer Abonnementmenge wird oft auch als „Lizenzierung pro Nutzer/in“ bezeichnet, die eine lineare Kostensteigerung zur Folge hat: Bei 10 Nutzungen fallen Kosten in Höhe des 10-fachen Grundpreises an. Standardmäßig gilt ein Abonnement immer für ein Produkt, allerdings können Sie bei Stripe einem/einer Kund/in auch mehrere Mengen eines Artikels zuweisen. Beispiel: Sie betreiben eine Hosting-Plattform und Ihre Kund/innen hosten Websites zu einem Preis von 9,99 USD pro Website und Monat darüber. Die meisten Kund/innen hosten nur eine Website, manche hosten allerdings mehrere. Hierfür könnten Sie nun Preise für eine Website (9,99 USD), zwei Websites (19,98 USD) usw. anlegen. Besser ist es allerdings, wenn Sie Ihren Kund/innen eine Menge mit einem Stückpreis von 9,99 USD zuweisen. Bei Abonnements wird zwischen zwei Arten von nutzungsbasierter Abrechnung unterschieden: einer nutzungsbasierten und einer Lizenzierung pro Nutzer/in. Sie können diese Abrechnungsmodelle aktivieren, indem Sie beim Erstellen eines Preises den Wert des Attributs `recurring[usage_type]` festlegen. Sie können nur eine Menge angeben, wenn Sie ein Abonnement erstellen, bei dem `licensed` als `recurring[usage_type]` angegeben ist. Wenn Sie eine detailliertere Abrechnung für schwankende Nutzungen innerhalb eines Abrechnungsintervalls durchführen möchten, sollten Sie anstelle der Abrechnung nach Mengen die [nutzungsbasierte Abrechnung](https://docs.stripe.com/products-prices/pricing-models.md#usage-based-pricing) verwenden. ### Festlegen mehrerer Mengen Um die Menge eines Abonnements festzulegen, geben Sie beim [Erstellen](https://docs.stripe.com/api.md#create_subscription) oder [Aktualisieren](https://docs.stripe.com/api.md#update_subscription) des Abonnements einen Wert für `quantity` an. ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CBb6IXqvTLXp3f \ -d "items[0][quantity]"=5 ``` ```cli stripe subscriptions create \ --customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CBb6IXqvTLXp3f \ -d "items[0][quantity]"=5 ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") subscription = client.v1.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [ { price: 'price_CBb6IXqvTLXp3f', quantity: 5, }, ], }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. subscription = client.v1.subscriptions.create({ "customer": "cus_4fdAW5ftNQow1a", "items": [{"price": "price_CBb6IXqvTLXp3f", "quantity": 5}], }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $subscription = $stripe->subscriptions->create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [ [ 'price' => 'price_CBb6IXqvTLXp3f', 'quantity' => 5, ], ], ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); SubscriptionCreateParams params = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_CBb6IXqvTLXp3f") .setQuantity(5L) .build() ) .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Subscription subscription = client.v1().subscriptions().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const subscription = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [ { price: 'price_CBb6IXqvTLXp3f', quantity: 5, }, ], }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.SubscriptionCreateParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: []*stripe.SubscriptionCreateItemParams{ &stripe.SubscriptionCreateItemParams{ Price: stripe.String("price_CBb6IXqvTLXp3f"), Quantity: stripe.Int64(5), }, }, } result, err := sc.V1Subscriptions.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new SubscriptionCreateOptions { Customer = "cus_4fdAW5ftNQow1a", Items = new List { new SubscriptionItemOptions { Price = "price_CBb6IXqvTLXp3f", Quantity = 5 }, }, }; var client = new StripeClient("<>"); var service = client.V1.Subscriptions; Subscription subscription = service.Create(options); ``` Sie berechnen weiterhin mehrere Mengen über eine einzige *Rechnung* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) und nehmen eine [anteilmäßige Verrechnung](https://docs.stripe.com/billing/subscriptions/prorations.md) vor, wenn sich das Abo ändert. Dies gilt auch, wenn Sie die Abo-Mengen ändern. ### Berechnen Sie unterschiedliche Beträge basierend auf der Menge Sie haben die Möglichkeit, die Kosten pro Nutzer/in je nach Anzahl der Lizenzen eines Abonnements anzupassen. So könnten Sie zum Beispiel Mengenrabatte für Abonnements einräumen, die eine bestimmte Anzahl von Lizenzen erreichen. Mithilfe von [Staffelungen](https://docs.stripe.com/products-prices/pricing-models.md#tiered-pricing) können Sie den Preis pro Nutzer/in auf diese Weise anpassen. ### Mengenumwandlung Wenn Sie Ihre Kund/innen belasten, können Sie die Nutzung mit einer anderen Granularität verfolgen, als Sie sie in Rechnung stellen. Beispiel: Für die Nutzung Ihrer Produktivitätssoftware berechnen Sie 10 USD pro 5 Nutzer/innen (oder einen Teil davon). Ohne Mengenumwandlung müsste die `quantity` des Abonnement-Artikels pro weitere 5 Nutzer/innen immer um 1 erhöht werden. | Anzahl der Nutzer/innen | Stripe gemeldete Menge der Abonnement-Artikel | Gesamt | | ----------------------- | --------------------------------------------- | ------ | | 1 | 1 | 10 USD | | 3 | 1 | 10 USD | | 5 | 1 | 10 USD | | 6 | 2 | 20 USD | | 7 | 2 | 20 USD | Mit dem Parameter [transform_quantity](https://docs.stripe.com/api/prices/create.md#create_price-transform_quantity) können Sie Stripe anweisen, vor dem Anwenden des Stückpreises die Menge umzuwandeln. Mit dem folgenden Abo können Sie die aktuelle Anzahl von Nutzer/innen als `quantity` der Abo-Posten erfassen. Das Abrechnungssystem von Stripe teilt die Menge durch 5 und rundet das Ergebnis auf, bevor die Stückkosten berechnet werden. ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d nickname="Standard Cost Per 5 Users" \ -d "transform_quantity[divide_by]"=5 \ -d "transform_quantity[round]"=up \ -d unit_amount=1000 \ -d currency=usd \ -d "recurring[interval]"=month \ -d "recurring[usage_type]"=licensed \ -d product={{PRODUCTIVITY_SUITE_ID}} ``` ```cli stripe prices create \ --nickname="Standard Cost Per 5 Users" \ -d "transform_quantity[divide_by]"=5 \ -d "transform_quantity[round]"=up \ --unit-amount=1000 \ --currency=usd \ -d "recurring[interval]"=month \ -d "recurring[usage_type]"=licensed \ --product={{PRODUCTIVITY_SUITE_ID}} ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") price = client.v1.prices.create({ nickname: 'Standard Cost Per 5 Users', transform_quantity: { divide_by: 5, round: 'up', }, unit_amount: 1000, currency: 'usd', recurring: { interval: 'month', usage_type: 'licensed', }, product: '{{PRODUCTIVITY_SUITE_ID}}', }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. price = client.v1.prices.create({ "nickname": "Standard Cost Per 5 Users", "transform_quantity": {"divide_by": 5, "round": "up"}, "unit_amount": 1000, "currency": "usd", "recurring": {"interval": "month", "usage_type": "licensed"}, "product": "{{PRODUCTIVITY_SUITE_ID}}", }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $price = $stripe->prices->create([ 'nickname' => 'Standard Cost Per 5 Users', 'transform_quantity' => [ 'divide_by' => 5, 'round' => 'up', ], 'unit_amount' => 1000, 'currency' => 'usd', 'recurring' => [ 'interval' => 'month', 'usage_type' => 'licensed', ], 'product' => '{{PRODUCTIVITY_SUITE_ID}}', ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); PriceCreateParams params = PriceCreateParams.builder() .setNickname("Standard Cost Per 5 Users") .setTransformQuantity( PriceCreateParams.TransformQuantity.builder() .setDivideBy(5L) .setRound(PriceCreateParams.TransformQuantity.Round.UP) .build() ) .setUnitAmount(1000L) .setCurrency("usd") .setRecurring( PriceCreateParams.Recurring.builder() .setInterval(PriceCreateParams.Recurring.Interval.MONTH) .setUsageType(PriceCreateParams.Recurring.UsageType.LICENSED) .build() ) .setProduct("{{PRODUCTIVITY_SUITE_ID}}") .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Price price = client.v1().prices().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const price = await stripe.prices.create({ nickname: 'Standard Cost Per 5 Users', transform_quantity: { divide_by: 5, round: 'up', }, unit_amount: 1000, currency: 'usd', recurring: { interval: 'month', usage_type: 'licensed', }, product: '{{PRODUCTIVITY_SUITE_ID}}', }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.PriceCreateParams{ Nickname: stripe.String("Standard Cost Per 5 Users"), TransformQuantity: &stripe.PriceCreateTransformQuantityParams{ DivideBy: stripe.Int64(5), Round: stripe.String(stripe.PriceTransformQuantityRoundUp), }, UnitAmount: stripe.Int64(1000), Currency: stripe.String(stripe.CurrencyUSD), Recurring: &stripe.PriceCreateRecurringParams{ Interval: stripe.String(stripe.PriceRecurringIntervalMonth), UsageType: stripe.String(stripe.PriceRecurringUsageTypeLicensed), }, Product: stripe.String("{{PRODUCTIVITY_SUITE_ID}}"), } result, err := sc.V1Prices.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new PriceCreateOptions { Nickname = "Standard Cost Per 5 Users", TransformQuantity = new PriceTransformQuantityOptions { DivideBy = 5, Round = "up" }, UnitAmount = 1000, Currency = "usd", Recurring = new PriceRecurringOptions { Interval = "month", UsageType = "licensed" }, Product = "{{PRODUCTIVITY_SUITE_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Prices; Price price = service.Create(options); ``` Sie können `transform_quantity` nur mit [billing_scheme=per_unit](https://docs.stripe.com/api/prices/create.md#create_price-billing_scheme) verwenden. Es ist mit gestaffelter Preisgestaltung nicht kompatibel. #### Runden Das vorherige Beispiel zeigt ein Abonnement, das für aufgerundet jeweils 5 Nutzer/innen abgerechnet wird, d. h. 6 geteilt durch 5 ergibt eine Menge von 2. Für Fälle, in denen Sie nicht nur einen Teil der Nutzung abrechnen möchten (sondern z. B. jedes volle Gigabyte für einen Breitband-Internetanschluss), können Sie auch `down` als Wert von `round` übergeben. #### Gemessene Nutzung Sie können `transform_quantity` auch in Verbindung mit der nutzungsbasierten Abrechnung anwenden. Diese Umwandlung gilt dann bei Preisen mit `recurring[usage_type]=metered` am Ende eines Abrechnungszeitraums in gleicher Weise wie für `quantity` bei Preisen mit `recurring[usage_type]=licensed`. Ein Marketing-E-Mail-Dienst, der einen erfassten Preis erstellt, um 0,10 USD für jeweils 1.000 gesendete E-Mails zu berechnen, könnte wie folgt aussehen: ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d nickname="Metered Emails" \ -d "transform_quantity[divide_by]"=1000 \ -d "transform_quantity[round]"=down \ -d unit_amount=10 \ -d currency=usd \ -d "recurring[interval]"=month \ -d "recurring[usage_type]"=metered \ -d product={{MARKETING_EMAILS_ID}} ``` ```cli stripe prices create \ --nickname="Metered Emails" \ -d "transform_quantity[divide_by]"=1000 \ -d "transform_quantity[round]"=down \ --unit-amount=10 \ --currency=usd \ -d "recurring[interval]"=month \ -d "recurring[usage_type]"=metered \ --product={{MARKETING_EMAILS_ID}} ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") price = client.v1.prices.create({ nickname: 'Metered Emails', transform_quantity: { divide_by: 1000, round: 'down', }, unit_amount: 10, currency: 'usd', recurring: { interval: 'month', usage_type: 'metered', }, product: '{{MARKETING_EMAILS_ID}}', }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. price = client.v1.prices.create({ "nickname": "Metered Emails", "transform_quantity": {"divide_by": 1000, "round": "down"}, "unit_amount": 10, "currency": "usd", "recurring": {"interval": "month", "usage_type": "metered"}, "product": "{{MARKETING_EMAILS_ID}}", }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $price = $stripe->prices->create([ 'nickname' => 'Metered Emails', 'transform_quantity' => [ 'divide_by' => 1000, 'round' => 'down', ], 'unit_amount' => 10, 'currency' => 'usd', 'recurring' => [ 'interval' => 'month', 'usage_type' => 'metered', ], 'product' => '{{MARKETING_EMAILS_ID}}', ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); PriceCreateParams params = PriceCreateParams.builder() .setNickname("Metered Emails") .setTransformQuantity( PriceCreateParams.TransformQuantity.builder() .setDivideBy(1000L) .setRound(PriceCreateParams.TransformQuantity.Round.DOWN) .build() ) .setUnitAmount(10L) .setCurrency("usd") .setRecurring( PriceCreateParams.Recurring.builder() .setInterval(PriceCreateParams.Recurring.Interval.MONTH) .setUsageType(PriceCreateParams.Recurring.UsageType.METERED) .build() ) .setProduct("{{MARKETING_EMAILS_ID}}") .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Price price = client.v1().prices().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const price = await stripe.prices.create({ nickname: 'Metered Emails', transform_quantity: { divide_by: 1000, round: 'down', }, unit_amount: 10, currency: 'usd', recurring: { interval: 'month', usage_type: 'metered', }, product: '{{MARKETING_EMAILS_ID}}', }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.PriceCreateParams{ Nickname: stripe.String("Metered Emails"), TransformQuantity: &stripe.PriceCreateTransformQuantityParams{ DivideBy: stripe.Int64(1000), Round: stripe.String(stripe.PriceTransformQuantityRoundDown), }, UnitAmount: stripe.Int64(10), Currency: stripe.String(stripe.CurrencyUSD), Recurring: &stripe.PriceCreateRecurringParams{ Interval: stripe.String(stripe.PriceRecurringIntervalMonth), UsageType: stripe.String(stripe.PriceRecurringUsageTypeMetered), }, Product: stripe.String("{{MARKETING_EMAILS_ID}}"), } result, err := sc.V1Prices.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new PriceCreateOptions { Nickname = "Metered Emails", TransformQuantity = new PriceTransformQuantityOptions { DivideBy = 1000, Round = "down", }, UnitAmount = 10, Currency = "usd", Recurring = new PriceRecurringOptions { Interval = "month", UsageType = "metered" }, Product = "{{MARKETING_EMAILS_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Prices; Price price = service.Create(options); ``` Bei diesem Abonnement lässt sich die Nutzung pro E-Mail erfassen, und Sie können dem/der Kund/in pro 1000 versendete E-Mails 0,10 USD in Rechnung stellen. ## Mehrere Abos Sie können gleichzeitig mehrere Abos für eine einzelne Kundin/einen einzelnen Kunden erstellen. Diese Funktion ist nützlich, wenn Sie es Ihren Kundinnen und Kunden ermöglichen möchten, mehrere Produkte mit separaten Servicezeiträumen zu abonnieren. Jedes Abo hat seinen eigenen Rechnungsstellungszeitraum, seine eigene Rechnung und seine eigene Belastung – auch wenn die zugrunde liegenden Preise denselben Rechnungsstellungszeitraum haben. > Wenn Sie mehrere Abos mit demselben Preis erstellen, ist jedes Abo unabhängig, einschließlich Zahlungen und Rechnungsstellungszeiträumen. Wenn dies nicht gewünscht ist, erstellen Sie stattdessen ein einzelnes Abo mit [mehreren Mengen](https://docs.stripe.com/billing/subscriptions/quantities.md#setting-quantities). ### Erstellen mehrerer Abos für eine Kundin/einen Kunden Erstellen Sie mehrere Abos für eine Kundin/einen Kunden über die[Abos erstellen](https://docs.stripe.com/api.md#create_subscription) API: ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB2krKbBDOkTS ``` ```cli stripe subscriptions create \ --customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB2krKbBDOkTS ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") subscription = client.v1.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB2krKbBDOkTS'}], }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. subscription = client.v1.subscriptions.create({ "customer": "cus_4fdAW5ftNQow1a", "items": [{"price": "price_CZB2krKbBDOkTS"}], }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $subscription = $stripe->subscriptions->create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB2krKbBDOkTS']], ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); SubscriptionCreateParams params = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder().setPrice("price_CZB2krKbBDOkTS").build() ) .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Subscription subscription = client.v1().subscriptions().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const subscription = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [ { price: 'price_CZB2krKbBDOkTS', }, ], }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.SubscriptionCreateParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: []*stripe.SubscriptionCreateItemParams{ &stripe.SubscriptionCreateItemParams{Price: stripe.String("price_CZB2krKbBDOkTS")}, }, } result, err := sc.V1Subscriptions.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new SubscriptionCreateOptions { Customer = "cus_4fdAW5ftNQow1a", Items = new List { new SubscriptionItemOptions { Price = "price_CZB2krKbBDOkTS" }, }, }; var client = new StripeClient("<>"); var service = client.V1.Subscriptions; Subscription subscription = service.Create(options); ``` ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB1AX3KOacNJw ``` ```cli stripe subscriptions create \ --customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB1AX3KOacNJw ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") subscription = client.v1.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB1AX3KOacNJw'}], }) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. subscription = client.v1.subscriptions.create({ "customer": "cus_4fdAW5ftNQow1a", "items": [{"price": "price_CZB1AX3KOacNJw"}], }) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $subscription = $stripe->subscriptions->create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB1AX3KOacNJw']], ]); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); SubscriptionCreateParams params = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder().setPrice("price_CZB1AX3KOacNJw").build() ) .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Subscription subscription = client.v1().subscriptions().create(params); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const subscription = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [ { price: 'price_CZB1AX3KOacNJw', }, ], }); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.SubscriptionCreateParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: []*stripe.SubscriptionCreateItemParams{ &stripe.SubscriptionCreateItemParams{Price: stripe.String("price_CZB1AX3KOacNJw")}, }, } result, err := sc.V1Subscriptions.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new SubscriptionCreateOptions { Customer = "cus_4fdAW5ftNQow1a", Items = new List { new SubscriptionItemOptions { Price = "price_CZB1AX3KOacNJw" }, }, }; var client = new StripeClient("<>"); var service = client.V1.Subscriptions; Subscription subscription = service.Create(options); ``` Eine Kundin/ein Kunde kann mehrere Produkte abonnieren oder sogar dasselbe Produkt mehrfach. Jedes Abo hat eine eindeutige ID und wird unabhängig vom Status der anderen Abos der Kundin/des Kunden verwaltet. Jedes Abo hat außerdem einen eigenen, unabhängigen Rechnungsstellungszeitraum, basierend auf dem [Abrechnungszyklusanker](https://docs.stripe.com/billing/subscriptions/billing-cycle.md) des Abos. Wenn eine Kundin/ein Kunde mehrere Abos hat, liefert die `subscriptions`-Eigenschaft des `Customer`-Objekts eine Liste aller Abos: ```json { "id": "cus_4fdAW5ftNQow1a", "object": "customer", "subscriptions": { "object": "list", "data": [ { "id": "sub_9RRl3XywPg2P5H", "object": "subscription", ... "price": { "id": "price_CZB2krKbBDOkTS", "object": "price", "amount": 2995, ... } }, { "id": "sub_9RRlIq2t9obFLI", "object": "subscription", ... "price": { "id": "price_CZB1AX3KOacNJw", "object": "price", "amount": 1295, ... } } ] ... } ... } ``` ## See also - [Abonnements ändern](https://docs.stripe.com/billing/subscriptions/change.md) - [Testzeiträume verwenden](https://docs.stripe.com/billing/subscriptions/trials.md) - [Subscriptions API](https://docs.stripe.com/api.md#subscriptions)