# 請求書のラインアイテムを一括管理する

Invoices API を使用して請求書の複数のラインアイテムを追加、更新、削除します。

[Invoices API](https://docs.stripe.com/api/invoices.md) を使用して、ラインアイテムを一括で追加、更新、削除することで、請求書の複数のラインアイテムを編集できます。

## 請求書を作成する

請求書を更新するには、最初に請求書を作成する必要があります。[ダッシュボードで請求書を作成](https://docs.stripe.com/invoicing/dashboard.md#create-invoice)するか、[Invoices (請求書) API](https://docs.stripe.com/api/invoices/create.md) を使用できます。[draft ステータス](https://docs.stripe.com/invoicing/overview.md#invoice-lifecycle)の請求書のみ更新できます。

## ラインアイテムを追加する

同じ請求書で複数のラインアイテムを作成するには、[invoice ID (請求書 ID)](https://docs.stripe.com/api/invoices/object.md#invoice_object-) を参照します。[invoice item ID (請求書アイテム ID)](https://docs.stripe.com/api/invoiceitems/object.md#invoiceitem_object-) を使用して既存の未割り当ての請求書を割り当てることもできます。新しい 2 つのラインアイテムを作成し、この請求書に既存の請求書アイテムを割り当てる方法をご紹介します。

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

> インボイスアイテム ID を使用していることを確認してください。ここで項目 ID を使用するとエラーになります。

## ラインアイテムを更新する

ここから、以下のように請求書 ID とラインアイテム ID に基づいて同じ請求書の複数のラインアイテムを更新できます。

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

上記の例では、ラインアイテム 1 の説明とメタデータ、ラインアイテム 2 の価格、ラインアイテム 3 が割引対象かどうかを更新しています。

## ラインアイテムを削除する

請求書 ID とラインアイテム ID を参照し、`behavior` キーで複数の削除タイプを区別することで、同一請求書の複数のラインアイテムを削除または割り当て解除できます。次に、`LINE_ITEM_1` を完全に削除して、`LINE_ITEM_2` の割り当てを解除する方法をご説明します。`LINE_ITEM_2` は別のリクエストの別の請求書に再割り当てできます。

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

## 制限

この機能を使用する場合、いくつかの制限事項があります

- 請求書はまだドラフト状態でなければなりません
- [請求書の項目には 2 種類](https://docs.stripe.com/api/invoice-line-item/object.md#invoice_line_item_object-type)があります
  1. `type: invoiceitem`: [請求書アイテム](https://docs.stripe.com/api/invoiceitems.md) が請求書に追加されたときに生成されます。
  2. `type: subscription`: サブスクリプションの請求書用に各サブスクリプション項目から自動生成されます。これは any of that object’s fields in an expression. For eに対して[更新可能なすべてのフィールドのリスト](https://docs.stripe.com/api/invoice-line-item/invoices/update-lines/bulk.md#bulk_update_lines-lines)です。`invoiceitem` 項目の場合はすべてのフィールドがサポートされていますが、`サブスクリプション`項目の場合は一部のフィールドしか更新できません。`サブスクリプション`項目でサポートされているフィールドは、`tax_rates` または `discounts` です。
- 1 回の API コールで最大 50 件のラインアイテムを更新できます。この制限は変更されることがあるため、増加または減少する可能性があります。

## 請求書のメタデータ

上記のいずれかのエンドポイントへの同じリクエストで、請求書メタデータを設定できます。[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"
```
