# Mehrere Rechnungsposten auf einmal verwalten

Mit der Invoices API können Sie mehrere Rechnungsposten auf einmal hinzufügen, aktualisieren und entfernen.

Sie können mehrere Einzelposten auf einer Rechnung bearbeiten, indem Sie Einzelposten mit der [Invoices API](https://docs.stripe.com/api/invoices.md) hinzufügen, aktualisieren und entfernen.

## Rechnung erstellen

Um eine Rechnung zu aktualisieren, müssen Sie zunächst eine erstellen. [Rechnungen erstellen Sie im Dashboard](https://docs.stripe.com/invoicing/dashboard.md#create-invoice) oder über die [Invoices API](https://docs.stripe.com/api/invoices/create.md). Sie können nur Rechnungen aktualisieren, die sich im [Entwurfsstatus](https://docs.stripe.com/invoicing/overview.md#invoice-lifecycle) befinden.

## Posten hinzufügen

Um mehrere Posten auf derselben Rechnung zu erstellen, verweisen Sie auf die [Rechnungs-ID](https://docs.stripe.com/api/invoices/object.md#invoice_object-). Sie können auch einen bereits vorhandenen, nicht zugewiesenen Rechnungsposten mit der [Rechnungsposten-ID](https://docs.stripe.com/api/invoiceitems/object.md#invoiceitem_object-) zuweisen. So erstellen Sie zwei neue Posten und weisen dieser Rechnung einen vorhandenen Rechnungsposten zu.

#### curl

```bash
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/add_lines \
  -u <<YOUR_SECRET_KEY>>: \
  -d "lines[0][amount]"=7500 \
  -d "lines[0][currency]"="usd" \
  -d "lines[1][price]"={{PRICE_ID}} \
  -d "lines[1][description]"="New line item" \
  -d "lines[2][invoice_item]"={{INVOICE_ITEM_1}}
```

> Achten Sie unbedingt darauf, die Rechnungsposten-ID zu verwenden. Die Verwendung einer Posten-ID führt hier zu einem Fehler.

## Posten aktualisieren

Von hier aus können Sie mehrere Posten derselben Rechnung basierend auf der Rechnungs-ID und Posten-IDs wie den folgenden aktualisieren:

#### curl

```bash
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/update_lines \
  -u <<YOUR_SECRET_KEY>>: \
  -d "lines[0][id]"={{LINE_ITEM_1}} \
  -d "lines[0][description]"="New description" \
  -d "lines[0][metadata][key]"="new value" \
  -d "lines[1][id]"={{LINE_ITEM_2}} \
  -d "lines[1][price]"={{PRICE_ID}} \
  -d "lines[2][id]"={{LINE_ITEM_3}} \
  -d "lines[2][discountable]"=true
```

Im obigen Beispiel werden die Beschreibung und die Metadaten für Posten 1, der Preis für Posten 2 und die Angabe, ob für Posten 3 ein Rabatt möglich ist, aktualisiert.

## Posten entfernen

Sie können mehrere Posten auf derselben Rechnung löschen oder deren Zuweisung aufheben, indem Sie auf die Rechnungs-ID und die Posten-IDs verweisen und mit dem Schlüssel `behavior` zwischen verschiedenen Arten der Löschung unterscheiden. So löschen Sie `LINE_ITEM_1` dauerhaft und heben die Zuweisung von `LINE_ITEM_2` auf. Sie können `LINE_ITEM_2` in einer anderen Anfrage einer anderen Rechnung zuweisen.

#### curl

```bash
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/remove_lines \
  -u <<YOUR_SECRET_KEY>>: \
  -d "lines[0][id]"={{LINE_ITEM_1}} \
  -d "lines[0][behavior]"="delete" \
  -d "lines[1][id]"={{LINE_ITEM_2}} \
  -d "lines[1][behavior]"="unassign"
```

## Einschränkungen

Bei der Verwendung dieser Funktion gibt es einige Einschränkungen

- Die Rechnung muss sich noch im Entwurfsstatus befinden
- Es gibt zwei [Arten von Rechnungsposten](https://docs.stripe.com/api/invoice-line-item/object.md#invoice_line_item_object-type).
  1. `type: invoiceitem`: Wird generiert, wenn ein [Rechnungsposten](https://docs.stripe.com/api/invoiceitems.md) zu einer Rechnung hinzugefügt wird.
  2. `type: subscription`: Wird automatisch für eine Abonnementrechnung aus jedem Abonnementartikel generiert. Dies ist die [vollständige Liste der verfügbaren Felder](https://docs.stripe.com/api/invoice-line-item/invoices/update-lines/bulk.md#bulk_update_lines-lines), die für jeden Posten aktualisiert werden soll. Während bei `invoiceitem`-Posten alle Felder unterstützt werden, können Sie bei `subscription`-Posten nur eine kleine Teilmenge aktualisieren. Felder, die für `subscription`-Posten unterstützt werden, sind `tax_rates` oder `discounts`.
- Sie können maximal 50 Posten in einem API-Aufruf aktualisieren. Dieses Limit kann sich ändern und erhöht oder verringert werden.

## Rechnungs-Metadaten

Sie können Rechnungsmetadaten in derselben Anfrage für einen der oben genannten Endpoints festlegen. Hier ist ein Beispiel, das [update_lines](https://docs.stripe.com/api/invoices.md) abruft.

#### curl

```bash
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}}/update_lines \
  -u <<YOUR_SECRET_KEY>>: \
  -d "lines[0][id]"={{LINE_ITEM_1}} \
  -d "lines[0][description]"="New description" \
  -d "lines[1][id]"={{LINE_ITEM_1}} \
  -d "lines[2][description]"="Another description" \
  -d "invoice_metadata[is_processed]"="true"
```
