# Gérer les sous-postes de facture groupés

Ajoutez, modifiez et supprimez plusieurs sous-postes de facture avec l'API Invoices.

Vous pouvez modifier plusieurs postes de facture en ajoutant, mettant à jour et supprimant des postes de facture en masse à l’aide de l’[API Invoices](https://docs.stripe.com/api/invoices.md).

## Créer une facture

Pour modifier une facture, vous devez d’abord en créer une. Vous pouvez [créer une facture dans le Dashboard](https://docs.stripe.com/invoicing/dashboard.md#create-invoice) ou via l’[API Invoices](https://docs.stripe.com/api/invoices/create.md). Vous pouvez uniquement mettre à jour une facture à l’[état de brouillon](https://docs.stripe.com/invoicing/overview.md#invoice-lifecycle).

## Ajouter des postes de facture

Pour créer plusieurs postes sur la même facture, indiquez l’[ID de la facture](https://docs.stripe.com/api/invoices/object.md#invoice_object-). Vous pouvez également affecter un poste de facture préexistant non affecté à une facture avec l’[ID de poste de facture](https://docs.stripe.com/api/invoiceitems/object.md#invoiceitem_object-). Voici comment créer deux nouveaux postes et affecter un poste de facture existant à cette facture.

#### 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}}
```

> Assurez-vous d’utiliser l’ID du poste de facture. L’utilisation d’un ID de sous-poste de facture ici générera une erreur.

## Mettre à jour des postes de facture

À partir de là, vous pouvez mettre à jour plusieurs postes d’une même facture en fonction de l’ID de la facture et des ID de poste, de la façon suivante&nbsp;:

#### 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
```

L’exemple ci-dessus met à jour la description et les métadonnées du poste 1 , le tarif du poste 2 et l’existence d’une réduction pour le poste 3.

## Supprimer des postes de facture

Vous pouvez supprimer ou désaffecter plusieurs postes d’une même facture en indiquant les ID de facture et des ID de poste, et en distinguant les différents types de suppression à l’aide de la clé `behavior`. Voici comment supprimer définitivement `LINE_ITEM_1` et `LINE_ITEM_2`. Vous pouvez réaffecter `LINE_ITEM_2` à une autre facture dans une autre requête.

#### 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"
```

## Restrictions

L’utilisation de cette fonctionnalité est soumise à certaines restrictions.

- La facture doit encore être à l’état de brouillon.
- Il existe deux [types de postes de facture](https://docs.stripe.com/api/invoice-line-item/object.md#invoice_line_item_object-type)
  1. `type: invoiceitem`&nbsp;: généré lorsqu’un [poste de facture](https://docs.stripe.com/api/invoiceitems.md) est ajouté à une facture.
  2. `type: subscription`&nbsp;: généré automatiquement pour une facture d’abonnement à partir de chaque élément d’abonnement. Il s’agit de la [liste complète des champs pouvant être mis à jour](https://docs.stripe.com/api/invoice-line-item/invoices/update-lines/bulk.md#bulk_update_lines-lines) pour chaque poste. Si tous les champs sont pris en charge pour les postes `invoiceitem`, vous ne pouvez mettre à jour qu’un petit nombre de postes `subscription`. Les champs pris en charge pour les postes `subscription` sont `tax_rates` ou `discounts`.
- Vous pouvez mettre à jour un maximum de 50&nbsp;postes de facture au cours d’un appel à l’API. Cette limite est susceptible d’évoluer à la hausse ou à la baisse.

## Métadonnées de facture

Vous pouvez définir des métadonnées de facture dans la même requête pour tous les endpoints ci-dessus. Voici un exemple d’appel [update_lines](https://docs.stripe.com/api/invoices.md).

#### 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"
```
