Repository: stripe/stripe-node
Pull request #1121 (2021-02-13 02:58:28)

CI: Github Actions
r? @ob-stripe
Runs `yarn test` in github actions. `yarn test` triggers eslint, typescript, and mocha.


Patch:
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 00000000..e6ddeaad
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,41 @@
+# This is a basic workflow to help you get started with Actions
+
+name: CI
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+  workflow_dispatch:
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        node: [ '10', '12', '14' ]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup node
+        uses: actions/setup-node@v2
+        with:
+          node-version: ${{ matrix.node }}
+
+      - name: Get yarn cache directory path
+        id: yarn-cache-dir-path
+        run: echo "::set-output name=dir::$(yarn cache dir)"
+      
+      - uses: actions/cache@v2
+        id: yarn-cache
+        with:
+          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
+          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
+          restore-keys: |
+            ${{ runner.os }}-yarn-
+
+      - name: Lint, typecheck, and test
+        run: yarn && yarn test
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f27cbc3c..ec69b047 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # CHANGELOG
 
+## 8.137.0 - 2021-02-17
+* [#1123](https://github.com/stripe/stripe-node/pull/1123) API Updates
+  * Add support for on_behalf_of to Invoice
+  * Add support for enum member revolut on PaymentIntent.payment_method_data.ideal.bank, PaymentMethod.ideal.bank, Charge.payment_method_details.ideal.bank and SetupAttempt.payment_method_details.ideal.bank
+  * Added support for enum member REVOLT21 on PaymentMethod.ideal.bic, Charge.payment_method_details.ideal.bic and SetupAttempt.payment_method_details.ideal.bic
+
+## 8.136.0 - 2021-02-16
+* [#1122](https://github.com/stripe/stripe-node/pull/1122) API Updates
+  * Add support for `afterpay_clearpay` on `PaymentMethod`, `PaymentIntent.payment_method_data`, and `Charge.payment_method_details`.
+  * Add support for `afterpay_clearpay` as a payment method type on `PaymentMethod`, `PaymentIntent` and `Checkout.Session`
+  * Add support for `adjustable_quantity` on `SessionCreateParams.LineItem`
+  * Add support for `bacs_debit`, `au_becs_debit` and `sepa_debit` on `SetupAttempt.payment_method_details`
+
 ## 8.135.0 - 2021-02-08
 * [#1119](https://github.com/stripe/stripe-node/pull/1119) API Updates
   * Add support for `afterpay_clearpay_payments` on `Account.capabilities`
diff --git a/VERSION b/VERSION
index 26b3c40d..03034c44 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-8.135.0
+8.137.0
diff --git a/lib/resources.js b/lib/resources.js
index 3ae0948b..824f71f5 100644
--- a/lib/resources.js
+++ b/lib/resources.js
@@ -53,6 +53,7 @@ module.exports = {
   Transfers: require('./resources/Transfers'),
   WebhookEndpoints: require('./resources/WebhookEndpoints'),
   BillingPortal: resourceNamespace('billingPortal', {
+    Configurations: require('./resources/BillingPortal/Configurations'),
     Sessions: require('./resources/BillingPortal/Sessions'),
   }),
   Checkout: resourceNamespace('checkout', {
diff --git a/lib/resources/BillingPortal/Configurations.js b/lib/resources/BillingPortal/Configurations.js
new file mode 100644
index 00000000..025410c2
--- /dev/null
+++ b/lib/resources/BillingPortal/Configurations.js
@@ -0,0 +1,11 @@
+// File generated from our OpenAPI spec
+
+'use strict';
+
+const StripeResource = require('../../StripeResource');
+
+module.exports = StripeResource.extend({
+  path: 'billing_portal/configurations',
+
+  includeBasic: ['create', 'retrieve', 'update', 'list'],
+});
diff --git a/package.json b/package.json
index f38a43f8..0465160c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "stripe",
-  "version": "8.135.0",
+  "version": "8.137.0",
   "description": "Stripe API wrapper",
   "keywords": [
     "stripe",
diff --git a/types/2020-08-27/AccountLinks.d.ts b/types/2020-08-27/AccountLinks.d.ts
index 646daa32..b9d79e9d 100644
--- a/types/2020-08-27/AccountLinks.d.ts
+++ b/types/2020-08-27/AccountLinks.d.ts
@@ -49,7 +49,7 @@ declare module 'stripe' {
       expand?: Array<string>;
 
       /**
-       * The URL that the user will be redirected to if the account link is no longer valid. Your `refresh_url` should trigger a method on your server to create a new account link using this API, with the same parameters, and redirect the user to the new account link.
+       * The URL the user will be redirected to if the account link is expired, has been previously-visited, or is otherwise invalid. The URL you specify should attempt to generate a new account link with the same parameters used to create the original account link, then redirect the user to the new account link's URL so they can continue with Connect Onboarding. If a new account link cannot be generated or the redirect fails you should display a useful error to the user.
        */
       refresh_url?: string;
 
diff --git a/types/2020-08-27/BillingPortal/Configurations.d.ts b/types/2020-08-27/BillingPortal/Configurations.d.ts
new file mode 100644
index 00000000..347e487c
--- /dev/null
+++ b/types/2020-08-27/BillingPortal/Configurations.d.ts
@@ -0,0 +1,628 @@
+// File generated from our OpenAPI spec
+
+declare module 'stripe' {
+  namespace Stripe {
+    namespace BillingPortal {
+      /**
+       * The Configuration object.
+       */
+      interface Configuration {
+        /**
+         * Unique identifier for the object.
+         */
+        id: string;
+
+        /**
+         * String representing the object's type. Objects of the same type share the same value.
+         */
+        object: 'billing_portal.configuration';
+
+        /**
+         * Whether the configuration is active and can be used to create portal sessions.
+         */
+        active: boolean;
+
+        /**
+         * ID of the Connect Application that created the configuration.
+         */
+        application: string | null;
+
+        business_profile: Configuration.BusinessProfile;
+
+        /**
+         * Time at which the object was created. Measured in seconds since the Unix epoch.
+         */
+        created: number;
+
+        /**
+         * The default URL to redirect customers to when they click on the portal's link to return to your website. This can be [overriden](https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url) when creating the session.
+         */
+        default_return_url: string | null;
+
+        features: Configuration.Features;
+
+        /**
+         * Whether the configuration is the default. If `true`, this configuration can be managed in the Dashboard and portal sessions will use this configuration unless it is overriden when creating the session.
+         */
+        is_default: boolean;
+
+        /**
+         * Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
+         */
+        livemode: boolean;
+
+        /**
+         * Time at which the object was last updated. Measured in seconds since the Unix epoch.
+         */
+        updated: number;
+      }
+
+      namespace Configuration {
+        interface BusinessProfile {
+          /**
+           * The messaging shown to customers in the portal.
+           */
+          headline: string | null;
+
+          /**
+           * A link to the business's publicly available privacy policy.
+           */
+          privacy_policy_url: string;
+
+          /**
+           * A link to the business's publicly available terms of service.
+           */
+          terms_of_service_url: string;
+        }
+
+        interface Features {
+          customer_update: Features.CustomerUpdate;
+
+          invoice_history: Features.InvoiceHistory;
+
+          payment_method_update: Features.PaymentMethodUpdate;
+
+          subscription_cancel: Features.SubscriptionCancel;
+
+          subscription_update: Features.SubscriptionUpdate;
+        }
+
+        namespace Features {
+          interface CustomerUpdate {
+            /**
+             * The types of customer updates that are supported. When empty, customers are not updateable.
+             */
+            allowed_updates: Array<CustomerUpdate.AllowedUpdate>;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          namespace CustomerUpdate {
+            type AllowedUpdate =
+              | 'address'
+              | 'email'
+              | 'phone'
+              | 'shipping'
+              | 'tax_id';
+          }
+
+          interface InvoiceHistory {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface PaymentMethodUpdate {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface SubscriptionCancel {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+
+            /**
+             * Whether to cancel subscriptions immediately or at the end of the billing period.
+             */
+            mode: SubscriptionCancel.Mode;
+
+            /**
+             * Whether to create prorations when canceling subscriptions. Possible values are `none` and `create_prorations`.
+             */
+            proration_behavior: SubscriptionCancel.ProrationBehavior;
+          }
+
+          namespace SubscriptionCancel {
+            type Mode = 'at_period_end' | 'immediately';
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+
+          interface SubscriptionUpdate {
+            /**
+             * The types of subscription updates that are supported for items listed in the `products` attribute. When empty, subscriptions are not updateable.
+             */
+            default_allowed_updates: Array<
+              SubscriptionUpdate.DefaultAllowedUpdate
+            >;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+
+            /**
+             * The list of products that support subscription updates.
+             */
+            products: Array<SubscriptionUpdate.Product> | null;
+
+            /**
+             * Determines how to handle prorations resulting from subscription updates. Valid values are `none`, `create_prorations`, and `always_invoice`.
+             */
+            proration_behavior: SubscriptionUpdate.ProrationBehavior;
+          }
+
+          namespace SubscriptionUpdate {
+            type DefaultAllowedUpdate = 'price' | 'promotion_code' | 'quantity';
+
+            interface Product {
+              /**
+               * The list of price IDs which, when subscribed to, a subscription can be updated.
+               */
+              prices: Array<string>;
+
+              /**
+               * The product ID.
+               */
+              product: string;
+            }
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+        }
+      }
+
+      interface ConfigurationCreateParams {
+        /**
+         * The business information shown to customers in the portal.
+         */
+        business_profile: ConfigurationCreateParams.BusinessProfile;
+
+        /**
+         * Information about the features available in the portal.
+         */
+        features: ConfigurationCreateParams.Features;
+
+        /**
+         * The default URL to redirect customers to when they click on the portal's link to return to your website. This can be [overriden](https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url) when creating the session.
+         */
+        default_return_url?: Stripe.Emptyable<string>;
+
+        /**
+         * Specifies which fields in the response should be expanded.
+         */
+        expand?: Array<string>;
+      }
+
+      namespace ConfigurationCreateParams {
+        interface BusinessProfile {
+          /**
+           * The messaging shown to customers in the portal.
+           */
+          headline?: string;
+
+          /**
+           * A link to the business's publicly available privacy policy.
+           */
+          privacy_policy_url: string;
+
+          /**
+           * A link to the business's publicly available terms of service.
+           */
+          terms_of_service_url: string;
+        }
+
+        interface Features {
+          /**
+           * Information about updating the customer details in the portal.
+           */
+          customer_update?: Features.CustomerUpdate;
+
+          /**
+           * Information about showing the billing history in the portal.
+           */
+          invoice_history?: Features.InvoiceHistory;
+
+          /**
+           * Information about updating payment methods in the portal.
+           */
+          payment_method_update?: Features.PaymentMethodUpdate;
+
+          /**
+           * Information about canceling subscriptions in the portal.
+           */
+          subscription_cancel?: Features.SubscriptionCancel;
+
+          /**
+           * Information about updating subscriptions in the portal.
+           */
+          subscription_update?: Features.SubscriptionUpdate;
+        }
+
+        namespace Features {
+          interface CustomerUpdate {
+            /**
+             * The types of customer updates that are supported. When empty, customers are not updateable.
+             */
+            allowed_updates: Stripe.Emptyable<
+              Array<CustomerUpdate.AllowedUpdate>
+            >;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          namespace CustomerUpdate {
+            type AllowedUpdate =
+              | 'address'
+              | 'email'
+              | 'phone'
+              | 'shipping'
+              | 'tax_id';
+          }
+
+          interface InvoiceHistory {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface PaymentMethodUpdate {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface SubscriptionCancel {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+
+            /**
+             * Whether to cancel subscriptions immediately or at the end of the billing period.
+             */
+            mode?: SubscriptionCancel.Mode;
+
+            /**
+             * Whether to create prorations when canceling subscriptions. Possible values are `none` and `create_prorations`, which is only compatible with `mode=immediately`. No prorations are generated when canceling a subscription at the end of its natural billing period.
+             */
+            proration_behavior?: SubscriptionCancel.ProrationBehavior;
+          }
+
+          namespace SubscriptionCancel {
+            type Mode = 'at_period_end' | 'immediately';
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+
+          interface SubscriptionUpdate {
+            /**
+             * The types of subscription updates that are supported. When empty, subscriptions are not updateable.
+             */
+            default_allowed_updates: Stripe.Emptyable<
+              Array<SubscriptionUpdate.DefaultAllowedUpdate>
+            >;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+
+            /**
+             * The list of products that support subscription updates.
+             */
+            products: Stripe.Emptyable<Array<SubscriptionUpdate.Product>>;
+
+            /**
+             * Determines how to handle prorations resulting from subscription updates. Valid values are `none`, `create_prorations`, and `always_invoice`.
+             */
+            proration_behavior?: SubscriptionUpdate.ProrationBehavior;
+          }
+
+          namespace SubscriptionUpdate {
+            type DefaultAllowedUpdate = 'price' | 'promotion_code' | 'quantity';
+
+            interface Product {
+              /**
+               * The list of prices IDs that a subscription can be updated to.
+               */
+              prices: Array<string>;
+
+              /**
+               * The product id.
+               */
+              product: string;
+            }
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+        }
+      }
+
+      interface ConfigurationRetrieveParams {
+        /**
+         * Specifies which fields in the response should be expanded.
+         */
+        expand?: Array<string>;
+      }
+
+      interface ConfigurationUpdateParams {
+        /**
+         * Whether the configuration is active and can be used to create portal sessions.
+         */
+        active?: boolean;
+
+        /**
+         * The business information shown to customers in the portal.
+         */
+        business_profile?: ConfigurationUpdateParams.BusinessProfile;
+
+        /**
+         * The default URL to redirect customers to when they click on the portal's link to return to your website. This can be [overriden](https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url) when creating the session.
+         */
+        default_return_url?: Stripe.Emptyable<string>;
+
+        /**
+         * Specifies which fields in the response should be expanded.
+         */
+        expand?: Array<string>;
+
+        /**
+         * Information about the features available in the portal.
+         */
+        features?: ConfigurationUpdateParams.Features;
+      }
+
+      namespace ConfigurationUpdateParams {
+        interface BusinessProfile {
+          /**
+           * The messaging shown to customers in the portal.
+           */
+          headline?: string;
+
+          /**
+           * A link to the business's publicly available privacy policy.
+           */
+          privacy_policy_url?: string;
+
+          /**
+           * A link to the business's publicly available terms of service.
+           */
+          terms_of_service_url?: string;
+        }
+
+        interface Features {
+          /**
+           * Information about updating the customer details in the portal.
+           */
+          customer_update?: Features.CustomerUpdate;
+
+          /**
+           * Information about showing the billing history in the portal.
+           */
+          invoice_history?: Features.InvoiceHistory;
+
+          /**
+           * Information about updating payment methods in the portal.
+           */
+          payment_method_update?: Features.PaymentMethodUpdate;
+
+          /**
+           * Information about canceling subscriptions in the portal.
+           */
+          subscription_cancel?: Features.SubscriptionCancel;
+
+          /**
+           * Information about updating subscriptions in the portal.
+           */
+          subscription_update?: Features.SubscriptionUpdate;
+        }
+
+        namespace Features {
+          interface CustomerUpdate {
+            /**
+             * The types of customer updates that are supported. When empty, customers are not updateable.
+             */
+            allowed_updates?: Stripe.Emptyable<
+              Array<CustomerUpdate.AllowedUpdate>
+            >;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled?: boolean;
+          }
+
+          namespace CustomerUpdate {
+            type AllowedUpdate =
+              | 'address'
+              | 'email'
+              | 'phone'
+              | 'shipping'
+              | 'tax_id';
+          }
+
+          interface InvoiceHistory {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface PaymentMethodUpdate {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled: boolean;
+          }
+
+          interface SubscriptionCancel {
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled?: boolean;
+
+            /**
+             * Whether to cancel subscriptions immediately or at the end of the billing period.
+             */
+            mode?: SubscriptionCancel.Mode;
+
+            /**
+             * Whether to create prorations when canceling subscriptions. Possible values are `none` and `create_prorations`, which is only compatible with `mode=immediately`. No prorations are generated when canceling a subscription at the end of its natural billing period.
+             */
+            proration_behavior?: SubscriptionCancel.ProrationBehavior;
+          }
+
+          namespace SubscriptionCancel {
+            type Mode = 'at_period_end' | 'immediately';
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+
+          interface SubscriptionUpdate {
+            /**
+             * The types of subscription updates that are supported. When empty, subscriptions are not updateable.
+             */
+            default_allowed_updates?: Stripe.Emptyable<
+              Array<SubscriptionUpdate.DefaultAllowedUpdate>
+            >;
+
+            /**
+             * Whether the feature is enabled.
+             */
+            enabled?: boolean;
+
+            /**
+             * The list of products that support subscription updates.
+             */
+            products?: Stripe.Emptyable<Array<SubscriptionUpdate.Product>>;
+
+            /**
+             * Determines how to handle prorations resulting from subscription updates. Valid values are `none`, `create_prorations`, and `always_invoice`.
+             */
+            proration_behavior?: SubscriptionUpdate.ProrationBehavior;
+          }
+
+          namespace SubscriptionUpdate {
+            type DefaultAllowedUpdate = 'price' | 'promotion_code' | 'quantity';
+
+            interface Product {
+              /**
+               * The list of prices IDs that a subscription can be updated to.
+               */
+              prices: Array<string>;
+
+              /**
+               * The product id.
+               */
+              product: string;
+            }
+
+            type ProrationBehavior =
+              | 'always_invoice'
+              | 'create_prorations'
+              | 'none';
+          }
+        }
+      }
+
+      interface ConfigurationListParams extends PaginationParams {
+        /**
+         * Only return configurations that are active or inactive (e.g., pass `true` to only list active configurations).
+         */
+        active?: boolean;
+
+        /**
+         * Specifies which fields in the response should be expanded.
+         */
+        expand?: Array<string>;
+
+        /**
+         * Only return the default or non-default configurations (e.g., pass `true` to only list the default configuration).
+         */
+        is_default?: boolean;
+      }
+
+      class ConfigurationsResource {
+        /**
+         * Creates a configuration that describes the functionality and behavior of a PortalSession
+         */
+        create(
+          params: ConfigurationCreateParams,
+          options?: RequestOptions
+        ): Promise<Stripe.Response<Stripe.BillingPortal.Configuration>>;
+
+        /**
+         * Retrieves a configuration that describes the functionality of the customer portal.
+         */
+        retrieve(
+          id: string,
+          params?: ConfigurationRetrieveParams,
+          options?: RequestOptions
+        ): Promise<Stripe.Response<Stripe.BillingPortal.Configuration>>;
+        retrieve(
+          id: string,
+          options?: RequestOptions
+        ): Promise<Stripe.Response<Stripe.BillingPortal.Configuration>>;
+
+        /**
+         * Updates a configuration that describes the functionality of the customer portal.
+         */
+        update(
+          id: string,
+          params?: ConfigurationUpdateParams,
+          options?: RequestOptions
+        ): Promise<Stripe.Response<Stripe.BillingPortal.Configuration>>;
+
+        /**
+         * Returns a list of configurations that describe the functionality of the customer portal.
+         */
+        list(
+          params?: ConfigurationListParams,
+          options?: RequestOptions
+        ): ApiListPromise<Stripe.BillingPortal.Configuration>;
+        list(
+          options?: RequestOptions
+        ): ApiListPromise<Stripe.BillingPortal.Configuration>;
+      }
+    }
+  }
+}
diff --git a/types/2020-08-27/BillingPortal/Sessions.d.ts b/types/2020-08-27/BillingPortal/Sessions.d.ts
index ca3f732c..d40d0e80 100644
--- a/types/2020-08-27/BillingPortal/Sessions.d.ts
+++ b/types/2020-08-27/BillingPortal/Sessions.d.ts
@@ -17,6 +17,11 @@ declare module 'stripe' {
          */
         object: 'billing_portal.session';
 
+        /**
+         * The configuration used by this session, describing the features available.
+         */
+        configuration: string | Stripe.BillingPortal.Configuration;
+
         /**
          * Time at which the object was created. Measured in seconds since the Unix epoch.
          */
@@ -33,12 +38,17 @@ declare module 'stripe' {
         livemode: boolean;
 
         /**
-         * The URL to which Stripe should send customers when they click on the link to return to your website.
+         * The account for which the session was created on behalf of. When specified, only subscriptions and invoices with this `on_behalf_of` account appear in the portal. For more information, see the [docs](https://stripe.com/docs/connect/charges-transfers#on-behalf-of). Use the [Accounts API](https://stripe.com/docs/api/accounts/object#account_object-settings-branding) to modify the `on_behalf_of` account's branding settings, which the portal displays.
+         */
+        on_behalf_of: string | null;
+
+        /**
+         * The URL to redirect customers to when they click on the portal's link to return to your website.
          */
         return_url: string;
 
         /**
-         * The short-lived URL of the session giving customers access to the customer portal.
+         * The short-lived URL of the session that gives customers access to the customer portal.
          */
         url: string;
       }
@@ -49,13 +59,23 @@ declare module 'stripe' {
          */
         customer: string;
 
+        /**
+         * The [configuration](https://stripe.com/docs/api/customer_portal/configuration) to use for this session, describing its functionality and features. If not specified, the session uses the default configuration.
+         */
+        configuration?: string;
+
         /**
          * Specifies which fields in the response should be expanded.
          */
         expand?: Array<string>;
 
         /**
-         * The URL to which Stripe should send customers when they click on the link to return to your website. This field is required if a default return URL has not been configured for the portal.
+         * The `on_behalf_of` account to use for this session. When specified, only subscriptions and invoices with this `on_behalf_of` account appear in the portal. For more information, see the [docs](https://stripe.com/docs/connect/charges-transfers#on-behalf-of). Use the [Accounts API](https://stripe.com/docs/api/accounts/object#account_object-settings-branding) to modify the `on_behalf_of` account's branding settings, which the portal displays.
+         */
+        on_behalf_of?: string;
+
+        /**
+         * The default URL to redirect customers to when they click on the portal's link to return to your website.
          */
         return_url?: string;
       }
diff --git a/types/2020-08-27/Charges.d.ts b/types/2020-08-27/Charges.d.ts
index dc7debb2..64aa3963 100644
--- a/types/2020-08-27/Charges.d.ts
+++ b/types/2020-08-27/Charges.d.ts
@@ -388,6 +388,8 @@ declare module 'stripe' {
 
         acss_debit?: PaymentMethodDetails.AcssDebit;
 
+        afterpay_clearpay?: PaymentMethodDetails.AfterpayClearpay;
+
         alipay?: PaymentMethodDetails.Alipay;
 
         au_becs_debit?: PaymentMethodDetails.AuBecsDebit;
@@ -529,6 +531,8 @@ declare module 'stripe' {
           transit_number: string | null;
         }
 
+        interface AfterpayClearpay {}
+
         interface Alipay {
           /**
            * Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same.
@@ -1158,7 +1162,7 @@ declare module 'stripe' {
 
         interface Ideal {
           /**
-           * The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
+           * The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
            */
           bank: Ideal.Bank | null;
 
@@ -1200,6 +1204,7 @@ declare module 'stripe' {
             | 'moneyou'
             | 'rabobank'
             | 'regiobank'
+            | 'revolut'
             | 'sns_bank'
             | 'triodos_bank'
             | 'van_lanschot';
@@ -1215,6 +1220,7 @@ declare module 'stripe' {
             | 'MOYONL21'
             | 'RABONL2U'
             | 'RBRBNL21'
+            | 'REVOLT21'
             | 'SNSBNL2A'
             | 'TRIONL2U';
         }
diff --git a/types/2020-08-27/Checkout/Sessions.d.ts b/types/2020-08-27/Checkout/Sessions.d.ts
index 623d0873..f503744b 100644
--- a/types/2020-08-27/Checkout/Sessions.d.ts
+++ b/types/2020-08-27/Checkout/Sessions.d.ts
@@ -754,6 +754,11 @@ declare module 'stripe' {
         }
 
         interface LineItem {
+          /**
+           * When set, provides configuration for this item's quantity to be adjusted by the customer during Checkout.
+           */
+          adjustable_quantity?: LineItem.AdjustableQuantity;
+
           /**
            * The amount to be collected per unit of the line item. If specified, must also pass `currency` and `name`.
            */
@@ -808,6 +813,23 @@ declare module 'stripe' {
         }
 
         namespace LineItem {
+          interface AdjustableQuantity {
+            /**
+             * Set to true if the quantity can be adjusted to any non-negative integer. By default customers will be able to remove the line item by setting the quantity to 0.
+             */
+            enabled: boolean;
+
+            /**
+             * The maximum quantity the customer can purchase for the Checkout Session. By default this value is 99.
+             */
+            maximum?: number;
+
+            /**
+             * The minimum quantity the customer must purchase for the Checkout Session. By default this value is 0.
+             */
+            minimum?: number;
+          }
+
           interface PriceData {
             /**
              * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
@@ -1058,6 +1080,7 @@ declare module 'stripe' {
         }
 
         type PaymentMethodType =
+          | 'afterpay_clearpay'
           | 'alipay'
           | 'bacs_debit'
           | 'bancontact'
diff --git a/types/2020-08-27/Invoices.d.ts b/types/2020-08-27/Invoices.d.ts
index 696ffece..ca792ef3 100644
--- a/types/2020-08-27/Invoices.d.ts
+++ b/types/2020-08-27/Invoices.d.ts
@@ -227,6 +227,11 @@ declare module 'stripe' {
        */
       number: string | null;
 
+      /**
+       * The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the [Invoices with Connect](https://stripe.com/docs/billing/invoices/connect) documentation for details.
+       */
+      on_behalf_of: string | Stripe.Account | null;
+
       /**
        * Whether payment was successfully collected for this invoice. An invoice can be paid (most commonly) with a charge or with credit from the customer's account balance.
        */
@@ -798,6 +803,11 @@ declare module 'stripe' {
        */
       metadata?: Stripe.Emptyable<Stripe.MetadataParam>;
 
+      /**
+       * The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the [Invoices with Connect](https://stripe.com/docs/billing/invoices/connect) documentation for details.
+       */
+      on_behalf_of?: string;
+
       /**
        * Configuration settings for the PaymentIntent that is generated when the invoice is finalized.
        */
@@ -1008,6 +1018,11 @@ declare module 'stripe' {
        */
       metadata?: Stripe.Emptyable<Stripe.MetadataParam>;
 
+      /**
+       * The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the [Invoices with Connect](https://stripe.com/docs/billing/invoices/connect) documentation for details.
+       */
+      on_behalf_of?: Stripe.Emptyable<string>;
+
       /**
        * Configuration settings for the PaymentIntent that is generated when the invoice is finalized.
        */
@@ -1171,7 +1186,7 @@ declare module 'stripe' {
 
     interface InvoiceFinalizeInvoiceParams {
       /**
-       * Controls whether Stripe will perform [automatic collection](https://stripe.com/docs/billing/invoices/workflow/#auto_advance) of the invoice. When `false`, the invoice's state will not automatically advance without an explicit action.
+       * Controls whether Stripe will perform [automatic collection](https://stripe.com/docs/billing/invoices/overview#auto-advance) of the invoice. When `false`, the invoice's state will not automatically advance without an explicit action.
        */
       auto_advance?: boolean;
 
diff --git a/types/2020-08-27/Issuing/Authorizations.d.ts b/types/2020-08-27/Issuing/Authorizations.d.ts
index 02cf4512..223f9f95 100644
--- a/types/2020-08-27/Issuing/Authorizations.d.ts
+++ b/types/2020-08-27/Issuing/Authorizations.d.ts
@@ -90,7 +90,7 @@ declare module 'stripe' {
         pending_request: Authorization.PendingRequest | null;
 
         /**
-         * History of every time the authorization was approved/denied (whether approved/denied by you directly or by Stripe based on your `spending_controls`). If the merchant changes the authorization by performing an [incremental authorization or partial capture](https://stripe.com/docs/issuing/purchases/authorizations), you can look at this field to see the previous states of the authorization.
+         * History of every time `pending_request` was approved/denied, either by you directly or by Stripe (e.g. based on your `spending_controls`). If the merchant changes the authorization by performing an [incremental authorization](https://stripe.com/docs/issuing/purchases/authorizations), you can look at this field to see the previous requests for the authorization.
          */
         request_history: Array<Authorization.RequestHistory>;
 
@@ -207,7 +207,7 @@ declare module 'stripe' {
 
         interface RequestHistory {
           /**
-           * The authorization amount in your card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Stripe held this amount from your account to fund the authorization if the request was approved.
+           * The `pending_request.amount` at the time of the request, presented in your card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Stripe held this amount from your account to fund the authorization if the request was approved.
            */
           amount: number;
 
@@ -232,7 +232,7 @@ declare module 'stripe' {
           currency: string;
 
           /**
-           * The amount that was authorized at the time of this request. This amount is in the `merchant_currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal).
+           * The `pending_request.merchant_amount` at the time of the request, presented in the `merchant_currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal).
            */
           merchant_amount: number;
 
diff --git a/types/2020-08-27/PaymentIntents.d.ts b/types/2020-08-27/PaymentIntents.d.ts
index 8272f115..6f218d77 100644
--- a/types/2020-08-27/PaymentIntents.d.ts
+++ b/types/2020-08-27/PaymentIntents.d.ts
@@ -810,6 +810,11 @@ declare module 'stripe' {
       type OffSession = 'one_off' | 'recurring';
 
       interface PaymentMethodData {
+        /**
+         * If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method.
+         */
+        afterpay_clearpay?: PaymentMethodData.AfterpayClearpay;
+
         /**
          * If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method.
          */
@@ -897,6 +902,8 @@ declare module 'stripe' {
       }
 
       namespace PaymentMethodData {
+        interface AfterpayClearpay {}
+
         interface Alipay {}
 
         interface AuBecsDebit {
@@ -1079,6 +1086,7 @@ declare module 'stripe' {
             | 'moneyou'
             | 'rabobank'
             | 'regiobank'
+            | 'revolut'
             | 'sns_bank'
             | 'triodos_bank'
             | 'van_lanschot';
@@ -1143,6 +1151,7 @@ declare module 'stripe' {
         }
 
         type Type =
+          | 'afterpay_clearpay'
           | 'alipay'
           | 'au_becs_debit'
           | 'bacs_debit'
@@ -1506,6 +1515,11 @@ declare module 'stripe' {
 
     namespace PaymentIntentUpdateParams {
       interface PaymentMethodData {
+        /**
+         * If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method.
+         */
+        afterpay_clearpay?: PaymentMethodData.AfterpayClearpay;
+
         /**
          * If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method.
          */
@@ -1593,6 +1607,8 @@ declare module 'stripe' {
       }
 
       namespace PaymentMethodData {
+        interface AfterpayClearpay {}
+
         interface Alipay {}
 
         interface AuBecsDebit {
@@ -1775,6 +1791,7 @@ declare module 'stripe' {
             | 'moneyou'
             | 'rabobank'
             | 'regiobank'
+            | 'revolut'
             | 'sns_bank'
             | 'triodos_bank'
             | 'van_lanschot';
@@ -1839,6 +1856,7 @@ declare module 'stripe' {
         }
 
         type Type =
+          | 'afterpay_clearpay'
           | 'alipay'
           | 'au_becs_debit'
           | 'bacs_debit'
@@ -2316,6 +2334,11 @@ declare module 'stripe' {
       type OffSession = 'one_off' | 'recurring';
 
       interface PaymentMethodData {
+        /**
+         * If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method.
+         */
+        afterpay_clearpay?: PaymentMethodData.AfterpayClearpay;
+
         /**
          * If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method.
          */
@@ -2403,6 +2426,8 @@ declare module 'stripe' {
       }
 
       namespace PaymentMethodData {
+        interface AfterpayClearpay {}
+
         interface Alipay {}
 
         interface AuBecsDebit {
@@ -2585,6 +2610,7 @@ declare module 'stripe' {
             | 'moneyou'
             | 'rabobank'
             | 'regiobank'
+            | 'revolut'
             | 'sns_bank'
             | 'triodos_bank'
             | 'van_lanschot';
@@ -2649,6 +2675,7 @@ declare module 'stripe' {
         }
 
         type Type =
+          | 'afterpay_clearpay'
           | 'alipay'
           | 'au_becs_debit'
           | 'bacs_debit'
diff --git a/types/2020-08-27/PaymentMethods.d.ts b/types/2020-08-27/PaymentMethods.d.ts
index a84e1150..a18199c9 100644
--- a/types/2020-08-27/PaymentMethods.d.ts
+++ b/types/2020-08-27/PaymentMethods.d.ts
@@ -16,6 +16,8 @@ declare module 'stripe' {
        */
       object: 'payment_method';
 
+      afterpay_clearpay?: PaymentMethod.AfterpayClearpay;
+
       alipay?: PaymentMethod.Alipay;
 
       au_becs_debit?: PaymentMethod.AuBecsDebit;
@@ -77,6 +79,8 @@ declare module 'stripe' {
     }
 
     namespace PaymentMethod {
+      interface AfterpayClearpay {}
+
       interface Alipay {}
 
       interface AuBecsDebit {
@@ -417,7 +421,7 @@ declare module 'stripe' {
 
       interface Ideal {
         /**
-         * The customer's bank, if provided. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
+         * The customer's bank, if provided. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
          */
         bank: Ideal.Bank | null;
 
@@ -438,6 +442,7 @@ declare module 'stripe' {
           | 'moneyou'
           | 'rabobank'
           | 'regiobank'
+          | 'revolut'
           | 'sns_bank'
           | 'triodos_bank'
           | 'van_lanschot';
@@ -453,6 +458,7 @@ declare module 'stripe' {
           | 'MOYONL21'
           | 'RABONL2U'
           | 'RBRBNL21'
+          | 'REVOLT21'
           | 'SNSBNL2A'
           | 'TRIONL2U';
       }
@@ -551,6 +557,7 @@ declare module 'stripe' {
       }
 
       type Type =
+        | 'afterpay_clearpay'
         | 'alipay'
         | 'au_becs_debit'
         | 'bacs_debit'
@@ -570,6 +577,11 @@ declare module 'stripe' {
     }
 
     interface PaymentMethodCreateParams {
+      /**
+       * If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method.
+       */
+      afterpay_clearpay?: PaymentMethodCreateParams.AfterpayClearpay;
+
       /**
        * If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method.
        */
@@ -677,6 +689,8 @@ declare module 'stripe' {
     }
 
     namespace PaymentMethodCreateParams {
+      interface AfterpayClearpay {}
+
       interface Alipay {}
 
       interface AuBecsDebit {
@@ -885,6 +899,7 @@ declare module 'stripe' {
           | 'moneyou'
           | 'rabobank'
           | 'regiobank'
+          | 'revolut'
           | 'sns_bank'
           | 'triodos_bank'
           | 'van_lanschot';
@@ -949,6 +964,7 @@ declare module 'stripe' {
       }
 
       type Type =
+        | 'afterpay_clearpay'
         | 'alipay'
         | 'au_becs_debit'
         | 'bacs_debit'
@@ -1104,6 +1120,7 @@ declare module 'stripe' {
 
     namespace PaymentMethodListParams {
       type Type =
+        | 'afterpay_clearpay'
         | 'alipay'
         | 'au_becs_debit'
         | 'bacs_debit'
diff --git a/types/2020-08-27/Plans.d.ts b/types/2020-08-27/Plans.d.ts
index 87341aa1..d0a2b9f5 100644
--- a/types/2020-08-27/Plans.d.ts
+++ b/types/2020-08-27/Plans.d.ts
@@ -27,12 +27,12 @@ declare module 'stripe' {
       aggregate_usage: Plan.AggregateUsage | null;
 
       /**
-       * The unit amount in %s to be charged, represented as a whole integer if possible.
+       * The unit amount in %s to be charged, represented as a whole integer if possible. Only set if `billing_scheme=per_unit`.
        */
       amount: number | null;
 
       /**
-       * The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places.
+       * The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places. Only set if `billing_scheme=per_unit`.
        */
       amount_decimal: string | null;
 
diff --git a/types/2020-08-27/Prices.d.ts b/types/2020-08-27/Prices.d.ts
index 52c2062a..7519009f 100644
--- a/types/2020-08-27/Prices.d.ts
+++ b/types/2020-08-27/Prices.d.ts
@@ -89,12 +89,12 @@ declare module 'stripe' {
       type: Price.Type;
 
       /**
-       * The unit amount in %s to be charged, represented as a whole integer if possible.
+       * The unit amount in %s to be charged, represented as a whole integer if possible. Only set if `billing_scheme=per_unit`.
        */
       unit_amount: number | null;
 
       /**
-       * The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places.
+       * The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places. Only set if `billing_scheme=per_unit`.
        */
       unit_amount_decimal: string | null;
     }
diff --git a/types/2020-08-27/SetupAttempts.d.ts b/types/2020-08-27/SetupAttempts.d.ts
index 2d79a2ec..58af5893 100644
--- a/types/2020-08-27/SetupAttempts.d.ts
+++ b/types/2020-08-27/SetupAttempts.d.ts
@@ -71,6 +71,10 @@ declare module 'stripe' {
 
     namespace SetupAttempt {
       interface PaymentMethodDetails {
+        au_becs_debit?: PaymentMethodDetails.AuBecsDebit;
+
+        bacs_debit?: PaymentMethodDetails.BacsDebit;
+
         bancontact?: PaymentMethodDetails.Bancontact;
 
         card?: PaymentMethodDetails.Card;
@@ -79,6 +83,8 @@ declare module 'stripe' {
 
         ideal?: PaymentMethodDetails.Ideal;
 
+        sepa_debit?: PaymentMethodDetails.SepaDebit;
+
         sofort?: PaymentMethodDetails.Sofort;
 
         /**
@@ -88,6 +94,10 @@ declare module 'stripe' {
       }
 
       namespace PaymentMethodDetails {
+        interface AuBecsDebit {}
+
+        interface BacsDebit {}
+
         interface Bancontact {
           /**
            * Bank code of bank associated with the bank account.
@@ -200,7 +210,7 @@ declare module 'stripe' {
 
         interface Ideal {
           /**
-           * The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
+           * The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `handelsbanken`, `ing`, `knab`, `moneyou`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, or `van_lanschot`.
            */
           bank: Ideal.Bank | null;
 
@@ -242,6 +252,7 @@ declare module 'stripe' {
             | 'moneyou'
             | 'rabobank'
             | 'regiobank'
+            | 'revolut'
             | 'sns_bank'
             | 'triodos_bank'
             | 'van_lanschot';
@@ -257,10 +268,13 @@ declare module 'stripe' {
             | 'MOYONL21'
             | 'RABONL2U'
             | 'RBRBNL21'
+            | 'REVOLT21'
             | 'SNSBNL2A'
             | 'TRIONL2U';
         }
 
+        interface SepaDebit {}
+
         interface Sofort {
           /**
            * Bank code of bank associated with the bank account.
diff --git a/types/2020-08-27/Terminal/Locations.d.ts b/types/2020-08-27/Terminal/Locations.d.ts
index 4d61654c..a531e99d 100644
--- a/types/2020-08-27/Terminal/Locations.d.ts
+++ b/types/2020-08-27/Terminal/Locations.d.ts
@@ -152,7 +152,7 @@ declare module 'stripe' {
           /**
            * Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).
            */
-          country: string;
+          country?: string;
 
           /**
            * Address line 1 (e.g., street, PO Box, or company name).
diff --git a/types/2020-08-27/WebhookEndpoints.d.ts b/types/2020-08-27/WebhookEndpoints.d.ts
index 0e4dc76d..2d664b28 100644
--- a/types/2020-08-27/WebhookEndpoints.d.ts
+++ b/types/2020-08-27/WebhookEndpoints.d.ts
@@ -237,6 +237,8 @@ declare module 'stripe' {
         | 'application_fee.refund.updated'
         | 'application_fee.refunded'
         | 'balance.available'
+        | 'billing_portal.configuration.created'
+        | 'billing_portal.configuration.updated'
         | 'capability.updated'
         | 'charge.captured'
         | 'charge.dispute.closed'
@@ -445,6 +447,8 @@ declare module 'stripe' {
         | 'application_fee.refund.updated'
         | 'application_fee.refunded'
         | 'balance.available'
+        | 'billing_portal.configuration.created'
+        | 'billing_portal.configuration.updated'
         | 'capability.updated'
         | 'charge.captured'
         | 'charge.dispute.closed'
diff --git a/types/2020-08-27/index.d.ts b/types/2020-08-27/index.d.ts
index 3db2e455..52ea3e38 100644
--- a/types/2020-08-27/index.d.ts
+++ b/types/2020-08-27/index.d.ts
@@ -14,6 +14,7 @@
 ///<reference path='./Balance.d.ts' />
 ///<reference path='./BalanceTransactions.d.ts' />
 ///<reference path='./BankAccounts.d.ts' />
+///<reference path='./BillingPortal/Configurations.d.ts' />
 ///<reference path='./BillingPortal/Sessions.d.ts' />
 ///<reference path='./BitcoinReceivers.d.ts' />
 ///<reference path='./BitcoinTransactions.d.ts' />
@@ -162,7 +163,10 @@ declare module 'stripe' {
     /**
      * Namespaced Resources
      */
-    billingPortal: {sessions: Stripe.BillingPortal.SessionsResource};
+    billingPortal: {
+      configurations: Stripe.BillingPortal.ConfigurationsResource;
+      sessions: Stripe.BillingPortal.SessionsResource;
+    };
     checkout: {sessions: Stripe.Checkout.SessionsResource};
     issuing: {
       authorizations: Stripe.Issuing.AuthorizationsResource;


Test patch:
diff --git a/test/resources/BillingPortal/Configurations.spec.js b/test/resources/BillingPortal/Configurations.spec.js
new file mode 100644
index 00000000..6bb6a474
--- /dev/null
+++ b/test/resources/BillingPortal/Configurations.spec.js
@@ -0,0 +1,73 @@
+'use strict';
+
+const stripe = require('../../../testUtils').getSpyableStripe();
+
+const expect = require('chai').expect;
+
+describe('BillingPortal', () => {
+  describe('Configurations Resource', () => {
+    describe('create', () => {
+      it('Sends the correct request', () => {
+        const params = {
+          business_profile: {
+            privacy_policy_url: 'https://example.com/privacy',
+            terms_of_service_url: 'https://example.com/tos',
+          },
+          features: {
+            customer_update: {
+              allowed_updates: ['address'],
+              enabled: true,
+            },
+          },
+        };
+        stripe.billingPortal.configurations.create(params);
+        expect(stripe.LAST_REQUEST).to.deep.equal({
+          method: 'POST',
+          url: '/v1/billing_portal/configurations',
+          headers: {},
+          data: params,
+          settings: {},
+        });
+      });
+    });
+    describe('update', () => {
+      it('Sends the correct request', () => {
+        const params = {
+          active: false,
+        };
+        stripe.billingPortal.configurations.update('bpc_123', params);
+        expect(stripe.LAST_REQUEST).to.deep.equal({
+          method: 'POST',
+          url: '/v1/billing_portal/configurations/bpc_123',
+          headers: {},
+          data: params,
+          settings: {},
+        });
+      });
+    });
+    describe('retrieve', () => {
+      it('Sends the correct request', () => {
+        stripe.billingPortal.configurations.retrieve('bpc_123');
+        expect(stripe.LAST_REQUEST).to.deep.equal({
+          method: 'GET',
+          url: '/v1/billing_portal/configurations/bpc_123',
+          headers: {},
+          data: {},
+          settings: {},
+        });
+      });
+    });
+    describe('list', () => {
+      it('Sends the correct request', () => {
+        stripe.billingPortal.configurations.list();
+        expect(stripe.LAST_REQUEST).to.deep.equal({
+          method: 'GET',
+          url: '/v1/billing_portal/configurations',
+          headers: {},
+          data: {},
+          settings: {},
+        });
+      });
+    });
+  });
+});