Repository: stripe/stripe-node
Pull request #1167 (2021-06-03 17:47:30)

API Updates
Codegen for openapi 1ad8d09.
r? @richardm-stripe
cc @stripe/api-libraries

## Changelog


* Add support for new resource `TaxCode`.
* Add support for `tax_code` on `Product`, `ProductCreateParams`, `ProductUpdateParams`, `PriceCreateParams.product_data`, `PlanCreateParams.product`, and Checkout `SessionCreateParams.line_items[].price_data.product_data`.
* Add support for `tax` to `Customer`, `CustomerCreateParams`, `CustomerUpdateParams`.
* Add support for `default_settings[automatic_tax]` and `phases[].automatic_tax` on `SubscriptionSchedule`, `SubscriptionScheduleCreateParams`, and `SubscriptionScheduleUpdateParams`.
* Add support for `automatic_tax` on `Subscription`, `SubscriptionCreateParams`, `SubscriptionUpdateParams`; `Invoice`, `InvoiceCreateParams`, `InvoiceRetrieveUpcomingParams` and `InvoiceLineItemListUpcomingParams`; Checkout `Session` and Checkout `SessionCreateParams`.
* Add support for `tax_behavior` to `Price`, `PriceCreateParams`, `PriceUpdateParams` and to the many Param objects that contain `price_data`:
    - `SubscriptionScheduleCreateParams` and `SubscriptionScheduleUpdateParams`, beneath `phases[].add_invoice_items[]` and `phases[].items[]`
    - `SubscriptionItemCreateParams` and `SubscriptionItemUpdateParams`, on the top-level
    - `SubscriptionCreateParams` create and `UpdateCreateParams`, beneath `items[]` and `add_invoice_items[]`
    - `InvoiceItemCreateParams` and `InvoiceItemUpdateParams`,  on the top-level
    - `InvoiceRetrieveUpcomingParams` and `InvoiceLineItemListUpcomingParams` beneath `subscription_items[]` and `invoice_items[]`.
    - Checkout `SessionCreateParams`, beneath `line_items[]`.
* Add support for `customer_update` to Checkout `SessionCreateParams`.
* Add support for `customer_details` to `InvoiceRetrieveUpcomingParams` and `InvoiceLineItemListUpcomingParams`.
* Add support for `tax_type` to `TaxRate`, `TaxRateCreateParams`, and `TaxRateUpdateParams`.



Patch:
diff --git a/lib/resources.js b/lib/resources.js
index 74c0331c..e44fc6b7 100644
--- a/lib/resources.js
+++ b/lib/resources.js
@@ -47,6 +47,7 @@ module.exports = {
   Subscriptions: require('./resources/Subscriptions'),
   SubscriptionItems: require('./resources/SubscriptionItems'),
   SubscriptionSchedules: require('./resources/SubscriptionSchedules'),
+  TaxCodes: require('./resources/TaxCodes'),
   TaxRates: require('./resources/TaxRates'),
   Tokens: require('./resources/Tokens'),
   Topups: require('./resources/Topups'),
diff --git a/lib/resources/TaxCodes.js b/lib/resources/TaxCodes.js
new file mode 100644
index 00000000..f63479e2
--- /dev/null
+++ b/lib/resources/TaxCodes.js
@@ -0,0 +1,11 @@
+// File generated from our OpenAPI spec
+
+'use strict';
+
+const StripeResource = require('../StripeResource');
+
+module.exports = StripeResource.extend({
+  path: 'tax_codes',
+
+  includeBasic: ['retrieve', 'list'],
+});
diff --git a/types/2020-08-27/Checkout/Sessions.d.ts b/types/2020-08-27/Checkout/Sessions.d.ts
index b46dbaef..b9489c17 100644
--- a/types/2020-08-27/Checkout/Sessions.d.ts
+++ b/types/2020-08-27/Checkout/Sessions.d.ts
@@ -33,6 +33,8 @@ declare module 'stripe' {
          */
         amount_total: number | null;
 
+        automatic_tax?: Session.AutomaticTax;
+
         /**
          * Describes whether Checkout should collect the customer's billing address.
          */
@@ -166,6 +168,22 @@ declare module 'stripe' {
       }
 
       namespace Session {
+        interface AutomaticTax {
+          /**
+           * Indicates whether automatic tax is enabled for the session
+           */
+          enabled: boolean;
+
+          /**
+           * The status of the most recent automated tax calculation for this session.
+           */
+          status: AutomaticTax.Status | null;
+        }
+
+        namespace AutomaticTax {
+          type Status = 'complete' | 'failed' | 'requires_location_inputs';
+        }
+
         type BillingAddressCollection = 'auto' | 'required';
 
         interface CustomerDetails {
@@ -703,6 +721,8 @@ declare module 'stripe' {
          */
         allow_promotion_codes?: boolean;
 
+        automatic_tax?: SessionCreateParams.AutomaticTax;
+
         /**
          * Specify whether Checkout should collect the customer's billing address.
          */
@@ -738,6 +758,11 @@ declare module 'stripe' {
          */
         customer_email?: string;
 
+        /**
+         * Controls what fields on Customer can be updated by the Checkout Session. Can only be provided when `customer` is provided.
+         */
+        customer_update?: SessionCreateParams.CustomerUpdate;
+
         /**
          * The coupon or promotion code to apply to this Session. Currently, only up to one may be specified.
          */
@@ -812,8 +837,42 @@ declare module 'stripe' {
       }
 
       namespace SessionCreateParams {
+        interface AutomaticTax {
+          /**
+           * Set to true to enable automatic taxes.
+           */
+          enabled: boolean;
+        }
+
         type BillingAddressCollection = 'auto' | 'required';
 
+        interface CustomerUpdate {
+          /**
+           * Describes whether Checkout saves the billing address onto `customer.address`.
+           * To always collect a full billing address, use `billing_address_collection`. Defaults to `never`.
+           */
+          address?: CustomerUpdate.Address;
+
+          /**
+           * Describes whether Checkout saves the name onto `customer.name`. Defaults to `never`.
+           */
+          name?: CustomerUpdate.Name;
+
+          /**
+           * Describes whether Checkout saves shipping information onto `customer.shipping`.
+           * To collect shipping information, use `shipping_address_collection`. Defaults to `never`.
+           */
+          shipping?: CustomerUpdate.Shipping;
+        }
+
+        namespace CustomerUpdate {
+          type Address = 'auto' | 'never';
+
+          type Name = 'auto' | 'never';
+
+          type Shipping = 'auto' | 'never';
+        }
+
         interface Discount {
           /**
            * The ID of the coupon to apply to this Session.
@@ -924,6 +983,11 @@ declare module 'stripe' {
              */
             recurring?: PriceData.Recurring;
 
+            /**
+             * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+             */
+            tax_behavior?: PriceData.TaxBehavior;
+
             /**
              * A non-negative integer in %s representing how much to charge. One of `unit_amount` or `unit_amount_decimal` is required.
              */
@@ -956,6 +1020,11 @@ declare module 'stripe' {
                * The product's name, meant to be displayable to the customer. Whenever this product is sold via a subscription, name will show up on associated invoice line item descriptions.
                */
               name: string;
+
+              /**
+               * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+               */
+              tax_code?: string;
             }
 
             interface Recurring {
@@ -973,6 +1042,8 @@ declare module 'stripe' {
             namespace Recurring {
               type Interval = 'day' | 'month' | 'week' | 'year';
             }
+
+            type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
           }
         }
 
diff --git a/types/2020-08-27/Customers.d.ts b/types/2020-08-27/Customers.d.ts
index 649951d5..33be2273 100644
--- a/types/2020-08-27/Customers.d.ts
+++ b/types/2020-08-27/Customers.d.ts
@@ -119,6 +119,8 @@ declare module 'stripe' {
        */
       subscriptions?: ApiList<Stripe.Subscription>;
 
+      tax?: Customer.Tax;
+
       /**
        * Describes the customer's tax exemption status. One of `none`, `exempt`, or `reverse`. When set to `reverse`, invoice and receipt PDFs include the text **"Reverse charge"**.
        */
@@ -186,6 +188,56 @@ declare module 'stripe' {
         tracking_number?: string | null;
       }
 
+      interface Tax {
+        /**
+         * Surfaces if automatic tax computation is possible given the current customer location information.
+         */
+        automatic_tax: Tax.AutomaticTax;
+
+        /**
+         * A recent IP address of the customer used for tax reporting and tax location inference.
+         */
+        ip_address: string | null;
+
+        /**
+         * The customer's location as identified by Stripe Tax.
+         */
+        location: Tax.Location | null;
+      }
+
+      namespace Tax {
+        type AutomaticTax =
+          | 'failed'
+          | 'not_collecting'
+          | 'supported'
+          | 'unrecognized_location';
+
+        interface Location {
+          /**
+           * The customer's country as identified by Stripe Tax.
+           */
+          country: string;
+
+          /**
+           * The data source used to infer the customer's location.
+           */
+          source: Location.Source;
+
+          /**
+           * The customer's state, county, province, or region as identified by Stripe Tax.
+           */
+          state: string | null;
+        }
+
+        namespace Location {
+          type Source =
+            | 'billing_address'
+            | 'ip_address'
+            | 'payment_method'
+            | 'shipping_destination';
+        }
+      }
+
       type TaxExempt = 'exempt' | 'none' | 'reverse';
     }
 
@@ -286,6 +338,11 @@ declare module 'stripe' {
 
       source?: string;
 
+      /**
+       * Tax details about the customer.
+       */
+      tax?: CustomerCreateParams.Tax;
+
       /**
        * The customer's tax exemption. One of `none`, `exempt`, or `reverse`.
        */
@@ -346,6 +403,13 @@ declare module 'stripe' {
         phone?: string;
       }
 
+      interface Tax {
+        /**
+         * A recent IP address of the customer used for tax reporting and tax location inference. Stripe recommends updating the IP address when a new PaymentMethod is attached or the address field on the customer is updated. We recommend against updating this field more frequently since it could result in unexpected tax location/reporting outcomes.
+         */
+        ip_address?: Stripe.Emptyable<string>;
+      }
+
       type TaxExempt = 'exempt' | 'none' | 'reverse';
 
       interface TaxIdDatum {
@@ -489,6 +553,11 @@ declare module 'stripe' {
 
       source?: string;
 
+      /**
+       * Tax details about the customer.
+       */
+      tax?: CustomerUpdateParams.Tax;
+
       /**
        * The customer's tax exemption. One of `none`, `exempt`, or `reverse`.
        */
@@ -549,6 +618,13 @@ declare module 'stripe' {
         phone?: string;
       }
 
+      interface Tax {
+        /**
+         * A recent IP address of the customer used for tax reporting and tax location inference. Stripe recommends updating the IP address when a new PaymentMethod is attached or the address field on the customer is updated. We recommend against updating this field more frequently since it could result in unexpected tax location/reporting outcomes.
+         */
+        ip_address?: Stripe.Emptyable<string>;
+      }
+
       type TaxExempt = 'exempt' | 'none' | 'reverse';
     }
 
diff --git a/types/2020-08-27/InvoiceItems.d.ts b/types/2020-08-27/InvoiceItems.d.ts
index ed664f39..94fa754a 100644
--- a/types/2020-08-27/InvoiceItems.d.ts
+++ b/types/2020-08-27/InvoiceItems.d.ts
@@ -273,6 +273,11 @@ declare module 'stripe' {
          */
         product: string;
 
+        /**
+         * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+         */
+        tax_behavior?: PriceData.TaxBehavior;
+
         /**
          * A positive integer in %s (or 0 for a free price) representing how much to charge.
          */
@@ -283,6 +288,10 @@ declare module 'stripe' {
          */
         unit_amount_decimal?: string;
       }
+
+      namespace PriceData {
+        type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+      }
     }
 
     interface InvoiceItemRetrieveParams {
@@ -395,6 +404,11 @@ declare module 'stripe' {
          */
         product: string;
 
+        /**
+         * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+         */
+        tax_behavior?: PriceData.TaxBehavior;
+
         /**
          * A positive integer in %s (or 0 for a free price) representing how much to charge.
          */
@@ -405,6 +419,10 @@ declare module 'stripe' {
          */
         unit_amount_decimal?: string;
       }
+
+      namespace PriceData {
+        type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+      }
     }
 
     interface InvoiceItemListParams extends PaginationParams {
diff --git a/types/2020-08-27/InvoiceLineItems.d.ts b/types/2020-08-27/InvoiceLineItems.d.ts
index 1a9a4625..773ccb2e 100644
--- a/types/2020-08-27/InvoiceLineItems.d.ts
+++ b/types/2020-08-27/InvoiceLineItems.d.ts
@@ -162,6 +162,11 @@ declare module 'stripe' {
     }
 
     interface InvoiceLineItemListUpcomingParams extends PaginationParams {
+      /**
+       * Settings for automatic tax lookup for this invoice preview.
+       */
+      automatic_tax?: InvoiceLineItemListUpcomingParams.AutomaticTax;
+
       /**
        * The code of the coupon to apply. If `subscription` or `subscription_items` is provided, the invoice returned will preview updating or creating a subscription with that coupon. Otherwise, it will preview applying that coupon to the customer for the next upcoming invoice from among the customer's subscriptions. The invoice can be previewed without a coupon by passing this value as an empty string.
        */
@@ -172,6 +177,11 @@ declare module 'stripe' {
        */
       customer?: string;
 
+      /**
+       * Details about the customer you want to invoice
+       */
+      customer_details?: InvoiceLineItemListUpcomingParams.CustomerDetails;
+
       /**
        * The coupons to redeem into discounts for the invoice preview. If not specified, inherits the discount from the customer or subscription. Pass an empty string to avoid inheriting any discounts. To preview the upcoming invoice for a subscription that hasn't been created, use `coupon` instead.
        */
@@ -264,6 +274,149 @@ declare module 'stripe' {
     }
 
     namespace InvoiceLineItemListUpcomingParams {
+      interface AutomaticTax {
+        /**
+         * Controls whether Stripe will automatically compute tax on this invoice.
+         */
+        enabled: boolean;
+      }
+
+      interface CustomerDetails {
+        /**
+         * The customer's address.
+         */
+        address?: Stripe.Emptyable<CustomerDetails.Address>;
+
+        /**
+         * The customer's shipping information. Appears on invoices emailed to this customer.
+         */
+        shipping?: Stripe.Emptyable<CustomerDetails.Shipping>;
+
+        /**
+         * Tax details about the customer.
+         */
+        tax?: CustomerDetails.Tax;
+
+        /**
+         * The customer's tax exemption. One of `none`, `exempt`, or `reverse`.
+         */
+        tax_exempt?: Stripe.Emptyable<CustomerDetails.TaxExempt>;
+
+        /**
+         * The customer's tax IDs.
+         */
+        tax_ids?: Array<CustomerDetails.TaxId>;
+      }
+
+      namespace CustomerDetails {
+        interface Address {
+          /**
+           * City, district, suburb, town, or village.
+           */
+          city?: string;
+
+          /**
+           * Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).
+           */
+          country?: string;
+
+          /**
+           * Address line 1 (e.g., street, PO Box, or company name).
+           */
+          line1?: string;
+
+          /**
+           * Address line 2 (e.g., apartment, suite, unit, or building).
+           */
+          line2?: string;
+
+          /**
+           * ZIP or postal code.
+           */
+          postal_code?: string;
+
+          /**
+           * State, county, province, or region.
+           */
+          state?: string;
+        }
+
+        interface Shipping {
+          /**
+           * Customer shipping address.
+           */
+          address: Stripe.AddressParam;
+
+          /**
+           * Customer name.
+           */
+          name: string;
+
+          /**
+           * Customer phone (including extension).
+           */
+          phone?: string;
+        }
+
+        interface Tax {
+          /**
+           * A recent IP address of the customer used for tax reporting and tax location inference. Stripe recommends updating the IP address when a new PaymentMethod is attached or the address field on the customer is updated. We recommend against updating this field more frequently since it could result in unexpected tax location/reporting outcomes.
+           */
+          ip_address?: Stripe.Emptyable<string>;
+        }
+
+        type TaxExempt = 'exempt' | 'none' | 'reverse';
+
+        interface TaxId {
+          /**
+           * Type of the tax ID, one of `ae_trn`, `au_abn`, `br_cnpj`, `br_cpf`, `ca_bn`, `ca_qst`, `ch_vat`, `cl_tin`, `es_cif`, `eu_vat`, `gb_vat`, `hk_br`, `id_npwp`, `in_gst`, `jp_cn`, `jp_rn`, `kr_brn`, `li_uid`, `mx_rfc`, `my_frp`, `my_itn`, `my_sst`, `no_vat`, `nz_gst`, `ru_inn`, `ru_kpp`, `sa_vat`, `sg_gst`, `sg_uen`, `th_vat`, `tw_vat`, `us_ein`, or `za_vat`
+           */
+          type: TaxId.Type;
+
+          /**
+           * Value of the tax ID.
+           */
+          value: string;
+        }
+
+        namespace TaxId {
+          type Type =
+            | 'ae_trn'
+            | 'au_abn'
+            | 'br_cnpj'
+            | 'br_cpf'
+            | 'ca_bn'
+            | 'ca_qst'
+            | 'ch_vat'
+            | 'cl_tin'
+            | 'es_cif'
+            | 'eu_vat'
+            | 'gb_vat'
+            | 'hk_br'
+            | 'id_npwp'
+            | 'in_gst'
+            | 'jp_cn'
+            | 'jp_rn'
+            | 'kr_brn'
+            | 'li_uid'
+            | 'mx_rfc'
+            | 'my_frp'
+            | 'my_itn'
+            | 'my_sst'
+            | 'no_vat'
+            | 'nz_gst'
+            | 'ru_inn'
+            | 'ru_kpp'
+            | 'sa_vat'
+            | 'sg_gst'
+            | 'sg_uen'
+            | 'th_vat'
+            | 'tw_vat'
+            | 'us_ein'
+            | 'za_vat';
+        }
+      }
+
       interface Discount {
         /**
          * ID of the coupon to create a new discount for.
@@ -384,6 +537,11 @@ declare module 'stripe' {
            */
           product: string;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -394,6 +552,10 @@ declare module 'stripe' {
            */
           unit_amount_decimal?: string;
         }
+
+        namespace PriceData {
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+        }
       }
 
       type SubscriptionBillingCycleAnchor = 'now' | 'unchanged';
@@ -476,6 +638,11 @@ declare module 'stripe' {
            */
           recurring: PriceData.Recurring;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -503,6 +670,8 @@ declare module 'stripe' {
           namespace Recurring {
             type Interval = 'day' | 'month' | 'week' | 'year';
           }
+
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
         }
       }
 
diff --git a/types/2020-08-27/Invoices.d.ts b/types/2020-08-27/Invoices.d.ts
index 85507ac0..9d06c6da 100644
--- a/types/2020-08-27/Invoices.d.ts
+++ b/types/2020-08-27/Invoices.d.ts
@@ -68,6 +68,8 @@ declare module 'stripe' {
        */
       auto_advance?: boolean;
 
+      automatic_tax?: Invoice.AutomaticTax;
+
       /**
        * Indicates the reason why the invoice was created. `subscription_cycle` indicates an invoice created by a subscription advancing into a new period. `subscription_create` indicates an invoice created due to creating a subscription. `subscription_update` indicates an invoice created due to updating a subscription. `subscription` is set for all old invoices to indicate either a change to a subscription or a period advancement. `manual` is set for all invoices unrelated to a subscription (for example: created via the invoice editor). The `upcoming` value is reserved for simulated invoices per the upcoming invoice endpoint. `subscription_threshold` indicates an invoice created due to a billing threshold being reached.
        */
@@ -335,6 +337,22 @@ declare module 'stripe' {
     }
 
     namespace Invoice {
+      interface AutomaticTax {
+        /**
+         * Whether Stripe automatically computes tax on this invoice.
+         */
+        enabled: boolean;
+
+        /**
+         * The status of the most recent automated tax calculation for this invoice.
+         */
+        status: AutomaticTax.Status | null;
+      }
+
+      namespace AutomaticTax {
+        type Status = 'complete' | 'failed' | 'requires_location_inputs';
+      }
+
       type BillingReason =
         | 'automatic_pending_invoice_item_invoice'
         | 'manual'
@@ -743,6 +761,11 @@ declare module 'stripe' {
        */
       auto_advance?: boolean;
 
+      /**
+       * Settings for automatic tax lookup for this invoice.
+       */
+      automatic_tax?: InvoiceCreateParams.AutomaticTax;
+
       /**
        * Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this invoice using the default source attached to the customer. When sending an invoice, Stripe will email this invoice to the customer with payment instructions. Defaults to `charge_automatically`.
        */
@@ -830,6 +853,13 @@ declare module 'stripe' {
     }
 
     namespace InvoiceCreateParams {
+      interface AutomaticTax {
+        /**
+         * Controls whether Stripe will automatically compute tax on this invoice.
+         */
+        enabled: boolean;
+      }
+
       type CollectionMethod = 'charge_automatically' | 'send_invoice';
 
       interface CustomField {
@@ -958,6 +988,11 @@ declare module 'stripe' {
        */
       auto_advance?: boolean;
 
+      /**
+       * Settings for automatic tax lookup for this invoice.
+       */
+      automatic_tax?: InvoiceUpdateParams.AutomaticTax;
+
       /**
        * Either `charge_automatically` or `send_invoice`. This field can be updated only on `draft` invoices.
        */
@@ -1040,6 +1075,13 @@ declare module 'stripe' {
     }
 
     namespace InvoiceUpdateParams {
+      interface AutomaticTax {
+        /**
+         * Controls whether Stripe will automatically compute tax on this invoice.
+         */
+        enabled: boolean;
+      }
+
       type CollectionMethod = 'charge_automatically' | 'send_invoice';
 
       interface CustomField {
@@ -1238,6 +1280,11 @@ declare module 'stripe' {
     }
 
     interface InvoiceRetrieveUpcomingParams {
+      /**
+       * Settings for automatic tax lookup for this invoice preview.
+       */
+      automatic_tax?: InvoiceRetrieveUpcomingParams.AutomaticTax;
+
       /**
        * The code of the coupon to apply. If `subscription` or `subscription_items` is provided, the invoice returned will preview updating or creating a subscription with that coupon. Otherwise, it will preview applying that coupon to the customer for the next upcoming invoice from among the customer's subscriptions. The invoice can be previewed without a coupon by passing this value as an empty string.
        */
@@ -1248,6 +1295,11 @@ declare module 'stripe' {
        */
       customer?: string;
 
+      /**
+       * Details about the customer you want to invoice
+       */
+      customer_details?: InvoiceRetrieveUpcomingParams.CustomerDetails;
+
       /**
        * The coupons to redeem into discounts for the invoice preview. If not specified, inherits the discount from the customer or subscription. Pass an empty string to avoid inheriting any discounts. To preview the upcoming invoice for a subscription that hasn't been created, use `coupon` instead.
        */
@@ -1340,6 +1392,149 @@ declare module 'stripe' {
     }
 
     namespace InvoiceRetrieveUpcomingParams {
+      interface AutomaticTax {
+        /**
+         * Controls whether Stripe will automatically compute tax on this invoice.
+         */
+        enabled: boolean;
+      }
+
+      interface CustomerDetails {
+        /**
+         * The customer's address.
+         */
+        address?: Stripe.Emptyable<CustomerDetails.Address>;
+
+        /**
+         * The customer's shipping information. Appears on invoices emailed to this customer.
+         */
+        shipping?: Stripe.Emptyable<CustomerDetails.Shipping>;
+
+        /**
+         * Tax details about the customer.
+         */
+        tax?: CustomerDetails.Tax;
+
+        /**
+         * The customer's tax exemption. One of `none`, `exempt`, or `reverse`.
+         */
+        tax_exempt?: Stripe.Emptyable<CustomerDetails.TaxExempt>;
+
+        /**
+         * The customer's tax IDs.
+         */
+        tax_ids?: Array<CustomerDetails.TaxId>;
+      }
+
+      namespace CustomerDetails {
+        interface Address {
+          /**
+           * City, district, suburb, town, or village.
+           */
+          city?: string;
+
+          /**
+           * Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).
+           */
+          country?: string;
+
+          /**
+           * Address line 1 (e.g., street, PO Box, or company name).
+           */
+          line1?: string;
+
+          /**
+           * Address line 2 (e.g., apartment, suite, unit, or building).
+           */
+          line2?: string;
+
+          /**
+           * ZIP or postal code.
+           */
+          postal_code?: string;
+
+          /**
+           * State, county, province, or region.
+           */
+          state?: string;
+        }
+
+        interface Shipping {
+          /**
+           * Customer shipping address.
+           */
+          address: Stripe.AddressParam;
+
+          /**
+           * Customer name.
+           */
+          name: string;
+
+          /**
+           * Customer phone (including extension).
+           */
+          phone?: string;
+        }
+
+        interface Tax {
+          /**
+           * A recent IP address of the customer used for tax reporting and tax location inference. Stripe recommends updating the IP address when a new PaymentMethod is attached or the address field on the customer is updated. We recommend against updating this field more frequently since it could result in unexpected tax location/reporting outcomes.
+           */
+          ip_address?: Stripe.Emptyable<string>;
+        }
+
+        type TaxExempt = 'exempt' | 'none' | 'reverse';
+
+        interface TaxId {
+          /**
+           * Type of the tax ID, one of `ae_trn`, `au_abn`, `br_cnpj`, `br_cpf`, `ca_bn`, `ca_qst`, `ch_vat`, `cl_tin`, `es_cif`, `eu_vat`, `gb_vat`, `hk_br`, `id_npwp`, `in_gst`, `jp_cn`, `jp_rn`, `kr_brn`, `li_uid`, `mx_rfc`, `my_frp`, `my_itn`, `my_sst`, `no_vat`, `nz_gst`, `ru_inn`, `ru_kpp`, `sa_vat`, `sg_gst`, `sg_uen`, `th_vat`, `tw_vat`, `us_ein`, or `za_vat`
+           */
+          type: TaxId.Type;
+
+          /**
+           * Value of the tax ID.
+           */
+          value: string;
+        }
+
+        namespace TaxId {
+          type Type =
+            | 'ae_trn'
+            | 'au_abn'
+            | 'br_cnpj'
+            | 'br_cpf'
+            | 'ca_bn'
+            | 'ca_qst'
+            | 'ch_vat'
+            | 'cl_tin'
+            | 'es_cif'
+            | 'eu_vat'
+            | 'gb_vat'
+            | 'hk_br'
+            | 'id_npwp'
+            | 'in_gst'
+            | 'jp_cn'
+            | 'jp_rn'
+            | 'kr_brn'
+            | 'li_uid'
+            | 'mx_rfc'
+            | 'my_frp'
+            | 'my_itn'
+            | 'my_sst'
+            | 'no_vat'
+            | 'nz_gst'
+            | 'ru_inn'
+            | 'ru_kpp'
+            | 'sa_vat'
+            | 'sg_gst'
+            | 'sg_uen'
+            | 'th_vat'
+            | 'tw_vat'
+            | 'us_ein'
+            | 'za_vat';
+        }
+      }
+
       interface Discount {
         /**
          * ID of the coupon to create a new discount for.
@@ -1460,6 +1655,11 @@ declare module 'stripe' {
            */
           product: string;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -1470,6 +1670,10 @@ declare module 'stripe' {
            */
           unit_amount_decimal?: string;
         }
+
+        namespace PriceData {
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+        }
       }
 
       type SubscriptionBillingCycleAnchor = 'now' | 'unchanged';
@@ -1552,6 +1756,11 @@ declare module 'stripe' {
            */
           recurring: PriceData.Recurring;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -1579,6 +1788,8 @@ declare module 'stripe' {
           namespace Recurring {
             type Interval = 'day' | 'month' | 'week' | 'year';
           }
+
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
         }
       }
 
diff --git a/types/2020-08-27/Plans.d.ts b/types/2020-08-27/Plans.d.ts
index d0a2b9f5..d2a79c42 100644
--- a/types/2020-08-27/Plans.d.ts
+++ b/types/2020-08-27/Plans.d.ts
@@ -308,6 +308,11 @@ declare module 'stripe' {
          */
         statement_descriptor?: string;
 
+        /**
+         * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+         */
+        tax_code?: string;
+
         /**
          * A label that represents units of this product in Stripe and on customers' receipts and invoices. When set, this will be included in associated invoice line item descriptions.
          */
diff --git a/types/2020-08-27/Prices.d.ts b/types/2020-08-27/Prices.d.ts
index dce49e31..986c03d3 100644
--- a/types/2020-08-27/Prices.d.ts
+++ b/types/2020-08-27/Prices.d.ts
@@ -68,6 +68,11 @@ declare module 'stripe' {
        */
       recurring: Price.Recurring | null;
 
+      /**
+       * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+       */
+      tax_behavior?: Price.TaxBehavior | null;
+
       /**
        * Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`.
        */
@@ -141,6 +146,8 @@ declare module 'stripe' {
         type UsageType = 'licensed' | 'metered';
       }
 
+      type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+
       interface Tier {
         /**
          * Price for the entire tier.
@@ -260,6 +267,11 @@ declare module 'stripe' {
        */
       recurring?: PriceCreateParams.Recurring;
 
+      /**
+       * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+       */
+      tax_behavior?: PriceCreateParams.TaxBehavior;
+
       /**
        * Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`.
        */
@@ -322,6 +334,11 @@ declare module 'stripe' {
          */
         statement_descriptor?: string;
 
+        /**
+         * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+         */
+        tax_code?: string;
+
         /**
          * A label that represents units of this product in Stripe and on customers' receipts and invoices. When set, this will be included in associated invoice line item descriptions.
          */
@@ -367,6 +384,8 @@ declare module 'stripe' {
         type UsageType = 'licensed' | 'metered';
       }
 
+      type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+
       interface Tier {
         /**
          * The flat billing amount for an entire tier, regardless of the number of units in the tier.
@@ -451,6 +470,11 @@ declare module 'stripe' {
        */
       recurring?: Stripe.Emptyable<PriceUpdateParams.Recurring>;
 
+      /**
+       * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+       */
+      tax_behavior?: PriceUpdateParams.TaxBehavior;
+
       /**
        * If set to true, will atomically remove the lookup key from the existing price, and assign it to this price.
        */
@@ -464,6 +488,8 @@ declare module 'stripe' {
          */
         trial_period_days?: number;
       }
+
+      type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
     }
 
     interface PriceListParams extends PaginationParams {
diff --git a/types/2020-08-27/Products.d.ts b/types/2020-08-27/Products.d.ts
index 575b1273..26b9c905 100644
--- a/types/2020-08-27/Products.d.ts
+++ b/types/2020-08-27/Products.d.ts
@@ -83,6 +83,11 @@ declare module 'stripe' {
        */
       statement_descriptor: string | null;
 
+      /**
+       * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+       */
+      tax_code?: string | Stripe.TaxCode | null;
+
       /**
        * The type of the product. The product is either of type `good`, which is eligible for use with Orders and SKUs, or `service`, which is eligible for use with Subscriptions and Plans.
        */
@@ -219,6 +224,11 @@ declare module 'stripe' {
        */
       statement_descriptor?: string;
 
+      /**
+       * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+       */
+      tax_code?: string;
+
       /**
        * The type of the product. Defaults to `service` if not explicitly specified, enabling use of this product with Subscriptions and Plans. Set this parameter to `good` to use this product with Orders and SKUs. On API versions before `2018-02-05`, this field defaults to `good` for compatibility reasons.
        */
@@ -334,6 +344,11 @@ declare module 'stripe' {
        */
       statement_descriptor?: string;
 
+      /**
+       * A [tax code](https://stripe.com/docs/tax/tax-codes) ID.
+       */
+      tax_code?: Stripe.Emptyable<string>;
+
       /**
        * A label that represents units of this product in Stripe and on customers' receipts and invoices. When set, this will be included in associated invoice line item descriptions. May only be set if `type=service`.
        */
diff --git a/types/2020-08-27/SubscriptionItems.d.ts b/types/2020-08-27/SubscriptionItems.d.ts
index 9b7cdb7d..5e1880a7 100644
--- a/types/2020-08-27/SubscriptionItems.d.ts
+++ b/types/2020-08-27/SubscriptionItems.d.ts
@@ -204,6 +204,11 @@ declare module 'stripe' {
          */
         recurring: PriceData.Recurring;
 
+        /**
+         * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+         */
+        tax_behavior?: PriceData.TaxBehavior;
+
         /**
          * A positive integer in %s (or 0 for a free price) representing how much to charge.
          */
@@ -231,6 +236,8 @@ declare module 'stripe' {
         namespace Recurring {
           type Interval = 'day' | 'month' | 'week' | 'year';
         }
+
+        type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
       }
 
       type ProrationBehavior = 'always_invoice' | 'create_prorations' | 'none';
@@ -347,6 +354,11 @@ declare module 'stripe' {
          */
         recurring: PriceData.Recurring;
 
+        /**
+         * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+         */
+        tax_behavior?: PriceData.TaxBehavior;
+
         /**
          * A positive integer in %s (or 0 for a free price) representing how much to charge.
          */
@@ -374,6 +386,8 @@ declare module 'stripe' {
         namespace Recurring {
           type Interval = 'day' | 'month' | 'week' | 'year';
         }
+
+        type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
       }
 
       type ProrationBehavior = 'always_invoice' | 'create_prorations' | 'none';
diff --git a/types/2020-08-27/SubscriptionSchedules.d.ts b/types/2020-08-27/SubscriptionSchedules.d.ts
index 29a050e9..c9f8e7b3 100644
--- a/types/2020-08-27/SubscriptionSchedules.d.ts
+++ b/types/2020-08-27/SubscriptionSchedules.d.ts
@@ -103,6 +103,8 @@ declare module 'stripe' {
          */
         application_fee_percent: number | null;
 
+        automatic_tax?: DefaultSettings.AutomaticTax;
+
         /**
          * Possible values are `phase_start` or `automatic`. If `phase_start` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If `automatic` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -135,6 +137,13 @@ declare module 'stripe' {
       }
 
       namespace DefaultSettings {
+        interface AutomaticTax {
+          /**
+           * Whether Stripe automatically computes tax on invoices created during this phase.
+           */
+          enabled: boolean;
+        }
+
         type BillingCycleAnchor = 'automatic' | 'phase_start';
 
         interface BillingThresholds {
@@ -184,6 +193,8 @@ declare module 'stripe' {
          */
         application_fee_percent: number | null;
 
+        automatic_tax?: Phase.AutomaticTax;
+
         /**
          * Possible values are `phase_start` or `automatic`. If `phase_start` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If `automatic` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -268,6 +279,13 @@ declare module 'stripe' {
           tax_rates?: Array<Stripe.TaxRate> | null;
         }
 
+        interface AutomaticTax {
+          /**
+           * Whether Stripe automatically computes tax on invoices created during this phase.
+           */
+          enabled: boolean;
+        }
+
         type BillingCycleAnchor = 'automatic' | 'phase_start';
 
         interface BillingThresholds {
@@ -402,6 +420,11 @@ declare module 'stripe' {
          */
         application_fee_percent?: number;
 
+        /**
+         * Default settings for automatic tax computation.
+         */
+        automatic_tax?: DefaultSettings.AutomaticTax;
+
         /**
          * Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -436,6 +459,13 @@ declare module 'stripe' {
       }
 
       namespace DefaultSettings {
+        interface AutomaticTax {
+          /**
+           * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+           */
+          enabled: boolean;
+        }
+
         type BillingCycleAnchor = 'automatic' | 'phase_start';
 
         interface BillingThresholds {
@@ -485,6 +515,11 @@ declare module 'stripe' {
          */
         application_fee_percent?: number;
 
+        /**
+         * Automatic tax settings for this phase.
+         */
+        automatic_tax?: Phase.AutomaticTax;
+
         /**
          * Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -591,6 +626,11 @@ declare module 'stripe' {
              */
             product: string;
 
+            /**
+             * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+             */
+            tax_behavior?: PriceData.TaxBehavior;
+
             /**
              * A positive integer in %s (or 0 for a free price) representing how much to charge.
              */
@@ -601,6 +641,17 @@ declare module 'stripe' {
              */
             unit_amount_decimal?: string;
           }
+
+          namespace PriceData {
+            type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+          }
+        }
+
+        interface AutomaticTax {
+          /**
+           * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+           */
+          enabled: boolean;
         }
 
         type BillingCycleAnchor = 'automatic' | 'phase_start';
@@ -682,6 +733,11 @@ declare module 'stripe' {
              */
             recurring: PriceData.Recurring;
 
+            /**
+             * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+             */
+            tax_behavior?: PriceData.TaxBehavior;
+
             /**
              * A positive integer in %s (or 0 for a free price) representing how much to charge.
              */
@@ -709,6 +765,8 @@ declare module 'stripe' {
             namespace Recurring {
               type Interval = 'day' | 'month' | 'week' | 'year';
             }
+
+            type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
           }
         }
 
@@ -777,6 +835,11 @@ declare module 'stripe' {
          */
         application_fee_percent?: number;
 
+        /**
+         * Default settings for automatic tax computation.
+         */
+        automatic_tax?: DefaultSettings.AutomaticTax;
+
         /**
          * Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -811,6 +874,13 @@ declare module 'stripe' {
       }
 
       namespace DefaultSettings {
+        interface AutomaticTax {
+          /**
+           * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+           */
+          enabled: boolean;
+        }
+
         type BillingCycleAnchor = 'automatic' | 'phase_start';
 
         interface BillingThresholds {
@@ -860,6 +930,11 @@ declare module 'stripe' {
          */
         application_fee_percent?: number;
 
+        /**
+         * Automatic tax settings for this phase.
+         */
+        automatic_tax?: Phase.AutomaticTax;
+
         /**
          * Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
          */
@@ -971,6 +1046,11 @@ declare module 'stripe' {
              */
             product: string;
 
+            /**
+             * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+             */
+            tax_behavior?: PriceData.TaxBehavior;
+
             /**
              * A positive integer in %s (or 0 for a free price) representing how much to charge.
              */
@@ -981,6 +1061,17 @@ declare module 'stripe' {
              */
             unit_amount_decimal?: string;
           }
+
+          namespace PriceData {
+            type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+          }
+        }
+
+        interface AutomaticTax {
+          /**
+           * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+           */
+          enabled: boolean;
         }
 
         type BillingCycleAnchor = 'automatic' | 'phase_start';
@@ -1062,6 +1153,11 @@ declare module 'stripe' {
              */
             recurring: PriceData.Recurring;
 
+            /**
+             * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+             */
+            tax_behavior?: PriceData.TaxBehavior;
+
             /**
              * A positive integer in %s (or 0 for a free price) representing how much to charge.
              */
@@ -1089,6 +1185,8 @@ declare module 'stripe' {
             namespace Recurring {
               type Interval = 'day' | 'month' | 'week' | 'year';
             }
+
+            type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
           }
         }
 
diff --git a/types/2020-08-27/Subscriptions.d.ts b/types/2020-08-27/Subscriptions.d.ts
index 2935a32a..fb08f58f 100644
--- a/types/2020-08-27/Subscriptions.d.ts
+++ b/types/2020-08-27/Subscriptions.d.ts
@@ -21,6 +21,8 @@ declare module 'stripe' {
        */
       application_fee_percent: number | null;
 
+      automatic_tax?: Subscription.AutomaticTax;
+
       /**
        * Determines the date of the first full invoice, and, for plans with `month` or `year` intervals, the day of the month for subsequent invoices.
        */
@@ -186,6 +188,13 @@ declare module 'stripe' {
     }
 
     namespace Subscription {
+      interface AutomaticTax {
+        /**
+         * Whether Stripe automatically computes tax on this subscription.
+         */
+        enabled: boolean;
+      }
+
       interface BillingThresholds {
         /**
          * Monetary threshold that triggers the subscription to create an invoice
@@ -297,6 +306,11 @@ declare module 'stripe' {
        */
       application_fee_percent?: number;
 
+      /**
+       * Automatic tax settings for this subscription.
+       */
+      automatic_tax?: SubscriptionCreateParams.AutomaticTax;
+
       /**
        * For new subscriptions, a past timestamp to backdate the subscription's start date to. If set, the first invoice will contain a proration for the timespan between the start date and the current time. Can be combined with trials and the billing cycle anchor.
        */
@@ -460,6 +474,11 @@ declare module 'stripe' {
            */
           product: string;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -470,6 +489,17 @@ declare module 'stripe' {
            */
           unit_amount_decimal?: string;
         }
+
+        namespace PriceData {
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+        }
+      }
+
+      interface AutomaticTax {
+        /**
+         * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+         */
+        enabled: boolean;
       }
 
       interface BillingThresholds {
@@ -547,6 +577,11 @@ declare module 'stripe' {
            */
           recurring: PriceData.Recurring;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -574,6 +609,8 @@ declare module 'stripe' {
           namespace Recurring {
             type Interval = 'day' | 'month' | 'week' | 'year';
           }
+
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
         }
       }
 
@@ -632,6 +669,11 @@ declare module 'stripe' {
        */
       application_fee_percent?: number;
 
+      /**
+       * Automatic tax settings for this subscription.
+       */
+      automatic_tax?: SubscriptionUpdateParams.AutomaticTax;
+
       /**
        * Either `now` or `unchanged`. Setting the value to `now` resets the subscription's billing cycle anchor to the current time. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle).
        */
@@ -799,6 +841,11 @@ declare module 'stripe' {
            */
           product: string;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -809,6 +856,17 @@ declare module 'stripe' {
            */
           unit_amount_decimal?: string;
         }
+
+        namespace PriceData {
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
+        }
+      }
+
+      interface AutomaticTax {
+        /**
+         * Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription.
+         */
+        enabled: boolean;
       }
 
       type BillingCycleAnchor = 'now' | 'unchanged';
@@ -903,6 +961,11 @@ declare module 'stripe' {
            */
           recurring: PriceData.Recurring;
 
+          /**
+           * Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed.
+           */
+          tax_behavior?: PriceData.TaxBehavior;
+
           /**
            * A positive integer in %s (or 0 for a free price) representing how much to charge.
            */
@@ -930,6 +993,8 @@ declare module 'stripe' {
           namespace Recurring {
             type Interval = 'day' | 'month' | 'week' | 'year';
           }
+
+          type TaxBehavior = 'exclusive' | 'inclusive' | 'unspecified';
         }
       }
 
diff --git a/types/2020-08-27/TaxCodes.d.ts b/types/2020-08-27/TaxCodes.d.ts
new file mode 100644
index 00000000..7e71bd8b
--- /dev/null
+++ b/types/2020-08-27/TaxCodes.d.ts
@@ -0,0 +1,68 @@
+// File generated from our OpenAPI spec
+
+declare module 'stripe' {
+  namespace Stripe {
+    /**
+     * The TaxCode object.
+     */
+    interface TaxCode {
+      /**
+       * Unique identifier for the object.
+       */
+      id: string;
+
+      /**
+       * String representing the object's type. Objects of the same type share the same value.
+       */
+      object: 'tax_code';
+
+      /**
+       * A detailed description of which types of products the tax code represents.
+       */
+      description: string;
+
+      /**
+       * A short name for the tax code.
+       */
+      name: string;
+    }
+
+    interface TaxCodeRetrieveParams {
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+    }
+
+    interface TaxCodeListParams extends PaginationParams {
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+    }
+
+    class TaxCodesResource {
+      /**
+       * Retrieves the details of an existing tax code. Supply the unique tax code ID and Stripe will return the corresponding tax code information.
+       */
+      retrieve(
+        id: string,
+        params?: TaxCodeRetrieveParams,
+        options?: RequestOptions
+      ): Promise<Stripe.Response<Stripe.TaxCode>>;
+      retrieve(
+        id: string,
+        options?: RequestOptions
+      ): Promise<Stripe.Response<Stripe.TaxCode>>;
+
+      /**
+       * A list of [all tax codes available](https://stripe.com/docs/tax/tax-codes) to add to Products in order to allow specific tax calculations.
+       */
+      list(
+        params?: TaxCodeListParams,
+        options?: RequestOptions
+      ): ApiListPromise<Stripe.TaxCode>;
+      list(options?: RequestOptions): ApiListPromise<Stripe.TaxCode>;
+    }
+  }
+}
diff --git a/types/2020-08-27/TaxRates.d.ts b/types/2020-08-27/TaxRates.d.ts
index c3a67f7f..9c8f9c5a 100644
--- a/types/2020-08-27/TaxRates.d.ts
+++ b/types/2020-08-27/TaxRates.d.ts
@@ -70,6 +70,15 @@ declare module 'stripe' {
        * [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2:US), without country prefix. For example, "NY" for New York, United States.
        */
       state: string | null;
+
+      /**
+       * The high-level tax type, such as `vat` or `sales_tax`.
+       */
+      tax_type?: TaxRate.TaxType | null;
+    }
+
+    namespace TaxRate {
+      type TaxType = 'gst' | 'hst' | 'pst' | 'qst' | 'sales_tax' | 'vat';
     }
 
     interface TaxRateCreateParams {
@@ -122,6 +131,15 @@ declare module 'stripe' {
        * [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2:US), without country prefix. For example, "NY" for New York, United States.
        */
       state?: string;
+
+      /**
+       * The high-level tax type, such as `vat` or `sales_tax`.
+       */
+      tax_type?: TaxRateCreateParams.TaxType;
+    }
+
+    namespace TaxRateCreateParams {
+      type TaxType = 'gst' | 'hst' | 'pst' | 'qst' | 'sales_tax' | 'vat';
     }
 
     interface TaxRateRetrieveParams {
@@ -171,6 +189,15 @@ declare module 'stripe' {
        * [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2:US), without country prefix. For example, "NY" for New York, United States.
        */
       state?: string;
+
+      /**
+       * The high-level tax type, such as `vat` or `sales_tax`.
+       */
+      tax_type?: TaxRateUpdateParams.TaxType;
+    }
+
+    namespace TaxRateUpdateParams {
+      type TaxType = 'gst' | 'hst' | 'pst' | 'qst' | 'sales_tax' | 'vat';
     }
 
     interface TaxRateListParams extends PaginationParams {
diff --git a/types/2020-08-27/index.d.ts b/types/2020-08-27/index.d.ts
index 6d252604..b4c98062 100644
--- a/types/2020-08-27/index.d.ts
+++ b/types/2020-08-27/index.d.ts
@@ -85,6 +85,7 @@
 ///<reference path='./SubscriptionItems.d.ts' />
 ///<reference path='./SubscriptionSchedules.d.ts' />
 ///<reference path='./Subscriptions.d.ts' />
+///<reference path='./TaxCodes.d.ts' />
 ///<reference path='./TaxDeductedAtSources.d.ts' />
 ///<reference path='./TaxIds.d.ts' />
 ///<reference path='./TaxRates.d.ts' />
@@ -154,6 +155,7 @@ declare module 'stripe' {
     subscriptions: Stripe.SubscriptionsResource;
     subscriptionItems: Stripe.SubscriptionItemsResource;
     subscriptionSchedules: Stripe.SubscriptionSchedulesResource;
+    taxCodes: Stripe.TaxCodesResource;
     taxRates: Stripe.TaxRatesResource;
     tokens: Stripe.TokensResource;
     topups: Stripe.TopupsResource;


Test patch:
diff --git a/test/resources/TaxCodes.spec.js b/test/resources/TaxCodes.spec.js
new file mode 100644
index 00000000..190d627b
--- /dev/null
+++ b/test/resources/TaxCodes.spec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+const stripe = require('../../testUtils').getSpyableStripe();
+const expect = require('chai').expect;
+
+describe('TaxCodes Resource', () => {
+  describe('retrieve', () => {
+    it('Sends the correct request', () => {
+      stripe.taxCodes.retrieve('txcd_123');
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'GET',
+        url: '/v1/tax_codes/txcd_123',
+        headers: {},
+        data: {},
+        settings: {},
+      });
+    });
+  });
+
+  describe('list', () => {
+    it('Sends the correct request', () => {
+      stripe.taxCodes.list();
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'GET',
+        url: '/v1/tax_codes',
+        headers: {},
+        data: {},
+        settings: {},
+      });
+    });
+  });
+});