# Tax rates and IDs Assign tax rates to draft invoices for automatic tax calculation. If you’re looking for automated tax calculation where you don’t need to define the rates, use [Stripe Tax](https://docs.stripe.com/tax.md). After you [create a tax rate](https://docs.stripe.com/billing/taxes/tax-rates.md), you can assign it: - On individual *invoice* items. - On the entire subtotal of the invoice. Stripe recommends that you assign a tax rate on individual invoice items. ## Set tax rates on individual items You can set tax rates on individual items using the [Dashboard](https://dashboard.stripe.com/invoices/create) or [API](https://docs.stripe.com/api/tax_rates.md). You can add up to five tax rates to each line item. If you’re creating an invoice through the Dashboard, assign tax rates to individual line items. When you modify or create invoice line items through the API, set the invoice item’s [tax_rates](https://docs.stripe.com/api/invoiceitems/update.md#update_invoiceitem-tax_rates): ```dotnet StripeConfiguration.ApiKey = "<>"; var options = new InvoiceItemUpdateOptions { TaxRates = new List { "txr_1EO66sClCIKljWvs98IiVfHW", "txr_1EEOvcClCIKljWvsqYb9U0MB" }, }; var service = new InvoiceItemService(); InvoiceItem invoiceItem = service.Update("ii_CWYWo9Ham19N4a", options); ``` ```go stripe.Key = "<>" params := &stripe.InvoiceItemParams{ TaxRates: []*string{ stripe.String("txr_1EO66sClCIKljWvs98IiVfHW"), stripe.String("txr_1EEOvcClCIKljWvsqYb9U0MB"), }, }; result, err := invoiceitem.Update("ii_CWYWo9Ham19N4a", params); ``` ```java Stripe.apiKey = "<>"; InvoiceItem resource = InvoiceItem.retrieve("ii_CWYWo9Ham19N4a"); InvoiceItemUpdateParams params = InvoiceItemUpdateParams.builder() .addTaxRate("txr_1EO66sClCIKljWvs98IiVfHW") .addTaxRate("txr_1EEOvcClCIKljWvsqYb9U0MB") .build(); InvoiceItem invoiceItem = resource.update(params); ``` ```node const stripe = require('stripe')('<>'); const invoiceItem = await stripe.invoiceItems.update( 'ii_CWYWo9Ham19N4a', { tax_rates: ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB'], } ); ``` ```python import stripe stripe.api_key = "<>" invoice_item = stripe.InvoiceItem.modify( "ii_CWYWo9Ham19N4a", tax_rates=["txr_1EO66sClCIKljWvs98IiVfHW", "txr_1EEOvcClCIKljWvsqYb9U0MB"], ) ``` ```php $stripe = new \Stripe\StripeClient('<>'); $invoiceItem = $stripe->invoiceItems->update( 'ii_CWYWo9Ham19N4a', ['tax_rates' => ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB']] ); ``` ```ruby Stripe.api_key = '<>' invoice_item = Stripe::InvoiceItem.update( 'ii_CWYWo9Ham19N4a', {tax_rates: ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB']}, ) ``` For [type](https://docs.stripe.com/api/invoices/line_item.md#invoice_line_item_object-type) `subscription` or `invoiceitem`, use the line item’s [id](https://docs.stripe.com/api/invoices/line_item.md#invoice_line_item_object-id). For `type=invoiceitem`, you can also use the [invoice_item](https://docs.stripe.com/api/invoices/line_item.md#invoice_line_item_object-invoice_item) value. For API version [2018-05-21](https://docs.stripe.com/upgrades.md#2018-05-21) and earlier, you must pass the `unique_line_item_id` parameter instead of the line item’s `id` field. Pass the `id` field that starts with `sli_`. ## Set default tax rates for the entire invoice If you sell one type of product, or have simple tax needs, you can set a default tax rate on the invoice. Default tax rates apply to all invoice line items. For more complex use cases, you can also set an item-level tax rate that overrides the default tax rate. You can add up to five default tax rates to each invoice. If you’re creating an invoice through the Dashboard, you can assign a default tax rate after you add an item. To set the invoice’s [default_tax_rates](https://docs.stripe.com/api/invoices/update.md#update_invoice-default_tax_rates) through the API: ```dotnet StripeConfiguration.ApiKey = "<>"; var options = new InvoiceUpdateOptions { DefaultTaxRates = new List { "txr_1EO66sClCIKljWvs98IiVfHW", "txr_1EEOvcClCIKljWvsqYb9U0MB", }, }; var service = new InvoiceService(); Invoice invoice = service.Update("in_18jwqyLlRB0eXbMtrUQ97YBw", options); ``` ```go stripe.Key = "<>" params := &stripe.InvoiceParams{ DefaultTaxRates: []*string{ stripe.String("txr_1EO66sClCIKljWvs98IiVfHW"), stripe.String("txr_1EEOvcClCIKljWvsqYb9U0MB"), }, }; result, err := invoice.Update("in_18jwqyLlRB0eXbMtrUQ97YBw", params); ``` ```java Stripe.apiKey = "<>"; Invoice resource = Invoice.retrieve("in_18jwqyLlRB0eXbMtrUQ97YBw"); InvoiceUpdateParams params = InvoiceUpdateParams.builder() .addDefaultTaxRate("txr_1EO66sClCIKljWvs98IiVfHW") .addDefaultTaxRate("txr_1EEOvcClCIKljWvsqYb9U0MB") .build(); Invoice invoice = resource.update(params); ``` ```node const stripe = require('stripe')('<>'); const invoice = await stripe.invoices.update( 'in_18jwqyLlRB0eXbMtrUQ97YBw', { default_tax_rates: ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB'], } ); ``` ```python import stripe stripe.api_key = "<>" invoice = stripe.Invoice.modify( "in_18jwqyLlRB0eXbMtrUQ97YBw", default_tax_rates=["txr_1EO66sClCIKljWvs98IiVfHW", "txr_1EEOvcClCIKljWvsqYb9U0MB"], ) ``` ```php $stripe = new \Stripe\StripeClient('<>'); $invoice = $stripe->invoices->update( 'in_18jwqyLlRB0eXbMtrUQ97YBw', ['default_tax_rates' => ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB']] ); ``` ```ruby Stripe.api_key = '<>' invoice = Stripe::Invoice.update( 'in_18jwqyLlRB0eXbMtrUQ97YBw', {default_tax_rates: ['txr_1EO66sClCIKljWvs98IiVfHW', 'txr_1EEOvcClCIKljWvsqYb9U0MB']}, ) ```