Repository: stripe/stripe-node
Pull request #881 (2020-04-29 06:24:00)

Add support for the `Price` resource and APIs
Codegen for openapi f75fd88

r? @ob-stripe 
cc @stripe/api-libraries @areagle-stripe


Patch:
diff --git a/lib/resources.js b/lib/resources.js
index 72e4f4ba..54d34a8e 100644
--- a/lib/resources.js
+++ b/lib/resources.js
@@ -33,6 +33,7 @@ module.exports = {
   PaymentMethods: require('./resources/PaymentMethods'),
   Payouts: require('./resources/Payouts'),
   Plans: require('./resources/Plans'),
+  Prices: require('./resources/Prices'),
   Products: require('./resources/Products'),
   Refunds: require('./resources/Refunds'),
   Reviews: require('./resources/Reviews'),
diff --git a/lib/resources/Prices.js b/lib/resources/Prices.js
new file mode 100644
index 00000000..1332e120
--- /dev/null
+++ b/lib/resources/Prices.js
@@ -0,0 +1,9 @@
+'use strict';
+
+const StripeResource = require('../StripeResource');
+
+module.exports = StripeResource.extend({
+  path: 'prices',
+
+  includeBasic: ['create', 'list', 'retrieve', 'update'],
+});
diff --git a/types/2020-03-02/InvoiceItems.d.ts b/types/2020-03-02/InvoiceItems.d.ts
index 663237ae..a2334ab5 100644
--- a/types/2020-03-02/InvoiceItems.d.ts
+++ b/types/2020-03-02/InvoiceItems.d.ts
@@ -68,6 +68,11 @@ declare module 'stripe' {
        */
       plan: Stripe.Plan | null;
 
+      /**
+       * The price of the invoice item.
+       */
+      price?: Stripe.Price | null;
+
       /**
        * Whether the invoice item was created automatically as a proration adjustment when the customer switched plans.
        */
@@ -189,6 +194,16 @@ declare module 'stripe' {
        */
       period?: InvoiceItemCreateParams.Period;
 
+      /**
+       * The ID of the price object.
+       */
+      price?: string;
+
+      /**
+       * Data used to generate a new price object inline.
+       */
+      price_data?: InvoiceItemCreateParams.PriceData;
+
       /**
        * Non-negative integer. The quantity of units for the invoice item.
        */
@@ -227,6 +242,28 @@ declare module 'stripe' {
          */
         start: 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).
+         */
+        currency: string;
+
+        /**
+         * The ID of the product that this price will belong to.
+         */
+        product: string;
+
+        /**
+         * A positive integer in %s (or 0 for a free price) representing how much to charge.
+         */
+        unit_amount?: number;
+
+        /**
+         * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+         */
+        unit_amount_decimal?: string;
+      }
     }
 
     interface InvoiceItemRetrieveParams {
@@ -267,6 +304,16 @@ declare module 'stripe' {
        */
       period?: InvoiceItemUpdateParams.Period;
 
+      /**
+       * The ID of the price object.
+       */
+      price?: string;
+
+      /**
+       * Data used to generate a new price object inline.
+       */
+      price_data?: InvoiceItemUpdateParams.PriceData;
+
       /**
        * Non-negative integer. The quantity of units for the invoice item.
        */
@@ -300,6 +347,28 @@ declare module 'stripe' {
          */
         start: 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).
+         */
+        currency: string;
+
+        /**
+         * The ID of the product that this price will belong to.
+         */
+        product: string;
+
+        /**
+         * A positive integer in %s (or 0 for a free price) representing how much to charge.
+         */
+        unit_amount?: number;
+
+        /**
+         * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+         */
+        unit_amount_decimal?: string;
+      }
     }
 
     interface InvoiceItemListParams extends PaginationParams {
diff --git a/types/2020-03-02/InvoiceLineItems.d.ts b/types/2020-03-02/InvoiceLineItems.d.ts
index 883582fe..9d2de7aa 100644
--- a/types/2020-03-02/InvoiceLineItems.d.ts
+++ b/types/2020-03-02/InvoiceLineItems.d.ts
@@ -56,6 +56,11 @@ declare module 'stripe' {
        */
       plan: Stripe.Plan | null;
 
+      /**
+       * The price of the line item.
+       */
+      price?: Stripe.Price | null;
+
       /**
        * Whether this is a proration.
        */
@@ -279,6 +284,16 @@ declare module 'stripe' {
          */
         period?: InvoiceItem.Period;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: InvoiceItem.PriceData;
+
         /**
          * Non-negative integer. The quantity of units for the invoice item.
          */
@@ -309,6 +324,28 @@ declare module 'stripe' {
            */
           start: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
       }
 
       type SubscriptionBillingCycleAnchor = 'now' | 'unchanged';
@@ -344,6 +381,16 @@ declare module 'stripe' {
          */
         plan?: string;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: SubscriptionItem.PriceData;
+
         /**
          * Quantity for this item.
          */
@@ -362,6 +409,74 @@ declare module 'stripe' {
            */
           usage_gte: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * The recurring components of a price such as `interval` and `usage_type`.
+           */
+          recurring: PriceData.Recurring;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+
+        namespace PriceData {
+          interface Recurring {
+            /**
+             * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+             */
+            aggregate_usage?: Recurring.AggregateUsage;
+
+            /**
+             * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+             */
+            interval: Recurring.Interval;
+
+            /**
+             * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+             */
+            interval_count?: number;
+
+            /**
+             * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+             */
+            trial_period_days?: number;
+
+            /**
+             * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+             */
+            usage_type?: Recurring.UsageType;
+          }
+
+          namespace Recurring {
+            type AggregateUsage =
+              | 'last_during_period'
+              | 'last_ever'
+              | 'max'
+              | 'sum';
+
+            type Interval = 'day' | 'month' | 'week' | 'year';
+
+            type UsageType = 'licensed' | 'metered';
+          }
+        }
       }
 
       type SubscriptionProrationBehavior =
diff --git a/types/2020-03-02/Invoices.d.ts b/types/2020-03-02/Invoices.d.ts
index c77be12c..b6af476a 100644
--- a/types/2020-03-02/Invoices.d.ts
+++ b/types/2020-03-02/Invoices.d.ts
@@ -959,6 +959,16 @@ declare module 'stripe' {
          */
         period?: InvoiceItem.Period;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: InvoiceItem.PriceData;
+
         /**
          * Non-negative integer. The quantity of units for the invoice item.
          */
@@ -989,6 +999,28 @@ declare module 'stripe' {
            */
           start: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
       }
 
       type SubscriptionBillingCycleAnchor = 'now' | 'unchanged';
@@ -1024,6 +1056,16 @@ declare module 'stripe' {
          */
         plan?: string;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: SubscriptionItem.PriceData;
+
         /**
          * Quantity for this item.
          */
@@ -1042,6 +1084,74 @@ declare module 'stripe' {
            */
           usage_gte: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * The recurring components of a price such as `interval` and `usage_type`.
+           */
+          recurring: PriceData.Recurring;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+
+        namespace PriceData {
+          interface Recurring {
+            /**
+             * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+             */
+            aggregate_usage?: Recurring.AggregateUsage;
+
+            /**
+             * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+             */
+            interval: Recurring.Interval;
+
+            /**
+             * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+             */
+            interval_count?: number;
+
+            /**
+             * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+             */
+            trial_period_days?: number;
+
+            /**
+             * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+             */
+            usage_type?: Recurring.UsageType;
+          }
+
+          namespace Recurring {
+            type AggregateUsage =
+              | 'last_during_period'
+              | 'last_ever'
+              | 'max'
+              | 'sum';
+
+            type Interval = 'day' | 'month' | 'week' | 'year';
+
+            type UsageType = 'licensed' | 'metered';
+          }
+        }
       }
 
       type SubscriptionProrationBehavior =
diff --git a/types/2020-03-02/Prices.d.ts b/types/2020-03-02/Prices.d.ts
new file mode 100644
index 00000000..0ce4d81b
--- /dev/null
+++ b/types/2020-03-02/Prices.d.ts
@@ -0,0 +1,569 @@
+declare module 'stripe' {
+  namespace Stripe {
+    /**
+     * The Price object.
+     */
+    interface Price {
+      /**
+       * Unique identifier for the object.
+       */
+      id: string;
+
+      /**
+       * String representing the object's type. Objects of the same type share the same value.
+       */
+      object: 'price';
+
+      /**
+       * Whether the price can be used for new purchases.
+       */
+      active: boolean;
+
+      /**
+       * Describes how to compute the price per period. Either `per_unit` or `tiered`. `per_unit` indicates that the fixed amount (specified in `unit_amount` or `unit_amount_decimal`) will be charged per unit in `quantity` (for prices with `usage_type=licensed`), or per unit of total usage (for prices with `usage_type=metered`). `tiered` indicates that the unit pricing will be computed using a tiering strategy as defined using the `tiers` and `tiers_mode` attributes.
+       */
+      billing_scheme: Price.BillingScheme;
+
+      /**
+       * Time at which the object was created. Measured in seconds since the Unix epoch.
+       */
+      created: number;
+
+      /**
+       * 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).
+       */
+      currency: string;
+
+      deleted?: void;
+
+      /**
+       * Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
+       */
+      livemode: boolean;
+
+      /**
+       * A lookup key used to retrieve prices dynamically from a static string.
+       */
+      lookup_key: string | null;
+
+      /**
+       * Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
+       */
+      metadata: Metadata;
+
+      /**
+       * A brief description of the plan, hidden from customers.
+       */
+      nickname: string | null;
+
+      /**
+       * The ID of the product this price is associated with.
+       */
+      product: string | Stripe.Product;
+
+      /**
+       * The recurring components of a price such as `interval` and `usage_type`.
+       */
+      recurring: Price.Recurring | null;
+
+      /**
+       * Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`.
+       */
+      tiers: Array<Price.Tier> | null;
+
+      /**
+       * Defines if the tiering price should be `graduated` or `volume` based. In `volume`-based tiering, the maximum quantity within a period determines the per unit price. In `graduated` tiering, pricing can change as the quantity grows.
+       */
+      tiers_mode: Price.TiersMode | null;
+
+      /**
+       * Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with `tiers`.
+       */
+      transform_quantity: Price.TransformQuantity | null;
+
+      /**
+       * One of `one_time` or `recurring` depending on whether the price is for a one-time purchase or a recurring (subscription) purchase.
+       */
+      type: Price.Type;
+
+      /**
+       * The unit amount in %s to be charged.
+       */
+      unit_amount: number | null;
+
+      /**
+       * Same as `amount`, but contains a decimal value with at most 12 decimal places.
+       */
+      unit_amount_decimal: string | null;
+    }
+
+    namespace Price {
+      type BillingScheme = 'per_unit' | 'tiered';
+
+      interface Recurring {
+        /**
+         * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+         */
+        aggregate_usage: Recurring.AggregateUsage | null;
+
+        /**
+         * The frequency at which a subscription is billed. One of `day`, `week`, `month` or `year`.
+         */
+        interval: Recurring.Interval;
+
+        /**
+         * The number of intervals (specified in the `interval` attribute) between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months.
+         */
+        interval_count: number;
+
+        /**
+         * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+         */
+        trial_period_days: number | null;
+
+        /**
+         * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+         */
+        usage_type: Recurring.UsageType;
+      }
+
+      namespace Recurring {
+        type AggregateUsage =
+          | 'last_during_period'
+          | 'last_ever'
+          | 'max'
+          | 'sum';
+
+        type Interval = 'day' | 'month' | 'week' | 'year';
+
+        type UsageType = 'licensed' | 'metered';
+      }
+
+      interface Tier {
+        /**
+         * Price for the entire tier.
+         */
+        flat_amount: number | null;
+
+        /**
+         * Same as `flat_amount`, but contains a decimal value with at most 12 decimal places.
+         */
+        flat_amount_decimal: string | null;
+
+        /**
+         * Per unit price for units relevant to the tier.
+         */
+        unit_amount: number | null;
+
+        /**
+         * Same as `unit_amount`, but contains a decimal value with at most 12 decimal places.
+         */
+        unit_amount_decimal: string | null;
+
+        /**
+         * Up to and including to this quantity will be contained in the tier.
+         */
+        up_to: number | null;
+      }
+
+      type TiersMode = 'graduated' | 'volume';
+
+      interface TransformQuantity {
+        /**
+         * Divide usage by this number.
+         */
+        divide_by: number;
+
+        /**
+         * After division, either round the result `up` or `down`.
+         */
+        round: TransformQuantity.Round;
+      }
+
+      namespace TransformQuantity {
+        type Round = 'down' | 'up';
+      }
+
+      type Type = 'one_time' | 'recurring';
+    }
+
+    /**
+     * The DeletedPrice object.
+     */
+    interface DeletedPrice {
+      /**
+       * Unique identifier for the object.
+       */
+      id: string;
+
+      /**
+       * String representing the object's type. Objects of the same type share the same value.
+       */
+      object: 'price';
+
+      /**
+       * Always true for a deleted object
+       */
+      deleted: true;
+    }
+
+    interface PriceCreateParams {
+      /**
+       * 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).
+       */
+      currency: string;
+
+      /**
+       * Whether the price is currently active. Defaults to `true`.
+       */
+      active?: boolean;
+
+      /**
+       * Describes how to compute the price per period. Either `per_unit` or `tiered`. `per_unit` indicates that the fixed amount (specified in `unit_amount` or `unit_amount_decimal`) will be charged per unit in `quantity` (for prices with `usage_type=licensed`), or per unit of total usage (for prices with `usage_type=metered`). `tiered` indicates that the unit pricing will be computed using a tiering strategy as defined using the `tiers` and `tiers_mode` attributes.
+       */
+      billing_scheme?: PriceCreateParams.BillingScheme;
+
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+
+      /**
+       * A lookup key used to retrieve prices dynamically from a static string.
+       */
+      lookup_key?: string;
+
+      /**
+       * Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
+       */
+      metadata?: MetadataParam;
+
+      /**
+       * A brief description of the price, hidden from customers.
+       */
+      nickname?: string;
+
+      /**
+       * The ID of the product that this price will belong to.
+       */
+      product?: string;
+
+      /**
+       * These fields can be used to create a new product that this price will belong to.
+       */
+      product_data?: PriceCreateParams.ProductData;
+
+      /**
+       * The recurring components of a price such as `interval` and `usage_type`.
+       */
+      recurring?: PriceCreateParams.Recurring;
+
+      /**
+       * Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`.
+       */
+      tiers?: Array<PriceCreateParams.Tier>;
+
+      /**
+       * Defines if the tiering price should be `graduated` or `volume` based. In `volume`-based tiering, the maximum quantity within a period determines the per unit price, in `graduated` tiering pricing can successively change as the quantity grows.
+       */
+      tiers_mode?: PriceCreateParams.TiersMode;
+
+      /**
+       * If set to true, will atomically remove the lookup key from the existing price, and assign it to this price.
+       */
+      transfer_lookup_key?: boolean;
+
+      /**
+       * Apply a transformation to the reported usage or set quantity before computing the billed price. Cannot be combined with `tiers`.
+       */
+      transform_quantity?: PriceCreateParams.TransformQuantity;
+
+      /**
+       * A positive integer in %s (or 0 for a free price) representing how much to charge.
+       */
+      unit_amount?: number;
+
+      /**
+       * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+       */
+      unit_amount_decimal?: string;
+    }
+
+    namespace PriceCreateParams {
+      type BillingScheme = 'per_unit' | 'tiered';
+
+      interface ProductData {
+        /**
+         * Whether the product is currently available for purchase. Defaults to `true`.
+         */
+        active?: boolean;
+
+        /**
+         * The identifier for the product. Must be unique. If not provided, an identifier will be randomly generated.
+         */
+        id?: string;
+
+        /**
+         * Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
+         */
+        metadata?: MetadataParam;
+
+        /**
+         * 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;
+
+        /**
+         * An arbitrary string to be displayed on your customer's credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all.
+         *
+         * This may be up to 22 characters. The statement description may not include `<`, `>`, `\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped.
+         */
+        statement_descriptor?: 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.
+         */
+        unit_label?: string;
+      }
+
+      interface Recurring {
+        /**
+         * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+         */
+        aggregate_usage?: Recurring.AggregateUsage;
+
+        /**
+         * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+         */
+        interval: Recurring.Interval;
+
+        /**
+         * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+         */
+        interval_count?: number;
+
+        /**
+         * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+         */
+        trial_period_days?: number;
+
+        /**
+         * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+         */
+        usage_type?: Recurring.UsageType;
+      }
+
+      namespace Recurring {
+        type AggregateUsage =
+          | 'last_during_period'
+          | 'last_ever'
+          | 'max'
+          | 'sum';
+
+        type Interval = 'day' | 'month' | 'week' | 'year';
+
+        type UsageType = 'licensed' | 'metered';
+      }
+
+      interface Tier {
+        /**
+         * The flat billing amount for an entire tier, regardless of the number of units in the tier.
+         */
+        flat_amount?: number;
+
+        /**
+         * Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set.
+         */
+        flat_amount_decimal?: string;
+
+        /**
+         * The per unit billing amount for each individual unit for which this tier applies.
+         */
+        unit_amount?: number;
+
+        /**
+         * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+         */
+        unit_amount_decimal?: string;
+
+        /**
+         * Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier.
+         */
+        up_to: 'inf' | number;
+      }
+
+      type TiersMode = 'graduated' | 'volume';
+
+      interface TransformQuantity {
+        /**
+         * Divide usage by this number.
+         */
+        divide_by: number;
+
+        /**
+         * After division, either round the result `up` or `down`.
+         */
+        round: TransformQuantity.Round;
+      }
+
+      namespace TransformQuantity {
+        type Round = 'down' | 'up';
+      }
+    }
+
+    interface PriceRetrieveParams {
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+    }
+
+    interface PriceUpdateParams {
+      /**
+       * Whether the price is currently active. Defaults to `true`.
+       */
+      active?: boolean;
+
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+
+      /**
+       * A lookup key used to retrieve prices dynamically from a static string.
+       */
+      lookup_key?: string;
+
+      /**
+       * Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
+       */
+      metadata?: MetadataParam | null;
+
+      /**
+       * A brief description of the price, hidden from customers.
+       */
+      nickname?: string;
+
+      /**
+       * The recurring components of a price such as `interval` and `usage_type`.
+       */
+      recurring?: PriceUpdateParams.Recurring | null;
+
+      /**
+       * If set to true, will atomically remove the lookup key from the existing price, and assign it to this price.
+       */
+      transfer_lookup_key?: boolean;
+    }
+
+    namespace PriceUpdateParams {
+      interface Recurring {
+        /**
+         * Default number of trial days when subscribing a customer to this plan using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+         */
+        trial_period_days?: number;
+      }
+    }
+
+    interface PriceListParams extends PaginationParams {
+      /**
+       * Only return prices that are active or inactive (e.g., pass `false` to list all inactive prices).
+       */
+      active?: boolean;
+
+      /**
+       * A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options.
+       */
+      created?: RangeQueryParam | number;
+
+      /**
+       * Only return prices for the given currency.
+       */
+      currency?: string;
+
+      /**
+       * Specifies which fields in the response should be expanded.
+       */
+      expand?: Array<string>;
+
+      /**
+       * Only return the price with these lookup_keys, if any exist.
+       */
+      lookup_keys?: Array<string>;
+
+      /**
+       * Only return prices for the given product.
+       */
+      product?: string;
+
+      /**
+       * Only return prices with these recurring fields.
+       */
+      recurring?: PriceListParams.Recurring;
+
+      /**
+       * Only return prices of type `recurring` or `one_time`.
+       */
+      type?: PriceListParams.Type;
+    }
+
+    namespace PriceListParams {
+      interface Recurring {
+        /**
+         * Filter by billing frequency. Either `day`, `week`, `month` or `year`.
+         */
+        interval?: Recurring.Interval;
+
+        /**
+         * Filter by the usage type for this price. Can be either `metered` or `licensed`.
+         */
+        usage_type?: Recurring.UsageType;
+      }
+
+      namespace Recurring {
+        type Interval = 'day' | 'month' | 'week' | 'year';
+
+        type UsageType = 'licensed' | 'metered';
+      }
+
+      type Type = 'one_time' | 'recurring';
+    }
+
+    class PricesResource {
+      /**
+       * Creates a new price for an existing product. The price can be recurring or one-time.
+       */
+      create(
+        params: PriceCreateParams,
+        options?: RequestOptions
+      ): Promise<Stripe.Price>;
+
+      /**
+       * Retrieves the price with the given ID.
+       */
+      retrieve(
+        id: string,
+        params?: PriceRetrieveParams,
+        options?: RequestOptions
+      ): Promise<Stripe.Price>;
+      retrieve(id: string, options?: RequestOptions): Promise<Stripe.Price>;
+
+      /**
+       * Updates the specified price by setting the values of the parameters passed. Any parameters not provided are left unchanged.
+       */
+      update(
+        id: string,
+        params?: PriceUpdateParams,
+        options?: RequestOptions
+      ): Promise<Stripe.Price>;
+
+      /**
+       * Returns a list of your prices.
+       */
+      list(
+        params?: PriceListParams,
+        options?: RequestOptions
+      ): ApiListPromise<Stripe.Price>;
+      list(options?: RequestOptions): ApiListPromise<Stripe.Price>;
+    }
+  }
+}
diff --git a/types/2020-03-02/SubscriptionItems.d.ts b/types/2020-03-02/SubscriptionItems.d.ts
index 8a6d55f6..33886311 100644
--- a/types/2020-03-02/SubscriptionItems.d.ts
+++ b/types/2020-03-02/SubscriptionItems.d.ts
@@ -41,6 +41,16 @@ declare module 'stripe' {
        */
       plan: Stripe.Plan;
 
+      /**
+       * Prices define the unit cost, currency, and (optional) billing cycle for both recurring and one-time purchases of products.
+       * Products help you track inventory or provisioning, and prices help you track payment terms. Different physical goods or levels of service should be represented by products, and pricing options should be represented by prices. This approach lets you change prices without having to change your provisioning scheme.
+       *
+       * For example, you might have a single "gold" product that has prices for $10/month, $100/year, and €9 once.
+       *
+       * Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription), [create an invoice](https://stripe.com/docs/billing/invoices/create), and more about [products and prices](https://stripe.com/docs/billing/prices-guide).
+       */
+      price?: Stripe.Price;
+
       /**
        * The [quantity](https://stripe.com/docs/subscriptions/quantities) of the plan to which the customer should be subscribed.
        */
@@ -121,6 +131,16 @@ declare module 'stripe' {
        */
       plan?: string;
 
+      /**
+       * The ID of the price object.
+       */
+      price?: string;
+
+      /**
+       * Data used to generate a new price object inline.
+       */
+      price_data?: SubscriptionItemCreateParams.PriceData;
+
       /**
        * This field has been renamed to `proration_behavior`. `prorate=true` can be replaced with `proration_behavior=create_prorations` and `prorate=false` can be replaced with `proration_behavior=none`.
        */
@@ -164,6 +184,74 @@ declare module 'stripe' {
         | 'error_if_incomplete'
         | 'pending_if_incomplete';
 
+      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).
+         */
+        currency: string;
+
+        /**
+         * The ID of the product that this price will belong to.
+         */
+        product: string;
+
+        /**
+         * The recurring components of a price such as `interval` and `usage_type`.
+         */
+        recurring: PriceData.Recurring;
+
+        /**
+         * A positive integer in %s (or 0 for a free price) representing how much to charge.
+         */
+        unit_amount?: number;
+
+        /**
+         * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+         */
+        unit_amount_decimal?: string;
+      }
+
+      namespace PriceData {
+        interface Recurring {
+          /**
+           * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+           */
+          aggregate_usage?: Recurring.AggregateUsage;
+
+          /**
+           * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+           */
+          interval: Recurring.Interval;
+
+          /**
+           * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+           */
+          interval_count?: number;
+
+          /**
+           * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+           */
+          trial_period_days?: number;
+
+          /**
+           * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+           */
+          usage_type?: Recurring.UsageType;
+        }
+
+        namespace Recurring {
+          type AggregateUsage =
+            | 'last_during_period'
+            | 'last_ever'
+            | 'max'
+            | 'sum';
+
+          type Interval = 'day' | 'month' | 'week' | 'year';
+
+          type UsageType = 'licensed' | 'metered';
+        }
+      }
+
       type ProrationBehavior = 'always_invoice' | 'create_prorations' | 'none';
     }
 
@@ -209,6 +297,16 @@ declare module 'stripe' {
        */
       plan?: string;
 
+      /**
+       * The ID of the price object.
+       */
+      price?: string;
+
+      /**
+       * Data used to generate a new price object inline.
+       */
+      price_data?: SubscriptionItemUpdateParams.PriceData;
+
       /**
        * This field has been renamed to `proration_behavior`. `prorate=true` can be replaced with `proration_behavior=create_prorations` and `prorate=false` can be replaced with `proration_behavior=none`.
        */
@@ -252,6 +350,74 @@ declare module 'stripe' {
         | 'error_if_incomplete'
         | 'pending_if_incomplete';
 
+      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).
+         */
+        currency: string;
+
+        /**
+         * The ID of the product that this price will belong to.
+         */
+        product: string;
+
+        /**
+         * The recurring components of a price such as `interval` and `usage_type`.
+         */
+        recurring: PriceData.Recurring;
+
+        /**
+         * A positive integer in %s (or 0 for a free price) representing how much to charge.
+         */
+        unit_amount?: number;
+
+        /**
+         * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+         */
+        unit_amount_decimal?: string;
+      }
+
+      namespace PriceData {
+        interface Recurring {
+          /**
+           * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+           */
+          aggregate_usage?: Recurring.AggregateUsage;
+
+          /**
+           * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+           */
+          interval: Recurring.Interval;
+
+          /**
+           * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+           */
+          interval_count?: number;
+
+          /**
+           * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+           */
+          trial_period_days?: number;
+
+          /**
+           * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+           */
+          usage_type?: Recurring.UsageType;
+        }
+
+        namespace Recurring {
+          type AggregateUsage =
+            | 'last_during_period'
+            | 'last_ever'
+            | 'max'
+            | 'sum';
+
+          type Interval = 'day' | 'month' | 'week' | 'year';
+
+          type UsageType = 'licensed' | 'metered';
+        }
+      }
+
       type ProrationBehavior = 'always_invoice' | 'create_prorations' | 'none';
     }
 
diff --git a/types/2020-03-02/SubscriptionSchedules.d.ts b/types/2020-03-02/SubscriptionSchedules.d.ts
index 0c6e0187..9ff228bc 100644
--- a/types/2020-03-02/SubscriptionSchedules.d.ts
+++ b/types/2020-03-02/SubscriptionSchedules.d.ts
@@ -143,6 +143,8 @@ declare module 'stripe' {
       type EndBehavior = 'cancel' | 'none' | 'release' | 'renew';
 
       interface Phase {
+        add_invoice_items?: Array<Phase.AddInvoiceItem>;
+
         /**
          * A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner's Stripe account during this phase of the schedule.
          */
@@ -210,6 +212,15 @@ declare module 'stripe' {
       }
 
       namespace Phase {
+        interface AddInvoiceItem {
+          /**
+           * ID of the price used to generate the invoice item.
+           */
+          price: string | Stripe.Price | Stripe.DeletedPrice;
+
+          quantity: number | null;
+        }
+
         interface BillingThresholds {
           /**
            * Monetary threshold that triggers the subscription to create an invoice
@@ -367,6 +378,11 @@ declare module 'stripe' {
       type EndBehavior = 'cancel' | 'none' | 'release' | 'renew';
 
       interface Phase {
+        /**
+         * A list of prices and quantities that will generate invoice items appended to the next invoice. You may pass up to 10 items.
+         */
+        add_invoice_items?: Array<Phase.AddInvoiceItem>;
+
         /**
          * A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions).
          */
@@ -439,6 +455,47 @@ declare module 'stripe' {
       }
 
       namespace Phase {
+        interface AddInvoiceItem {
+          /**
+           * The ID of the price object.
+           */
+          price?: string;
+
+          /**
+           * Data used to generate a new price object inline.
+           */
+          price_data?: AddInvoiceItem.PriceData;
+
+          /**
+           * Quantity for this item. Defaults to 1.
+           */
+          quantity?: number;
+        }
+
+        namespace AddInvoiceItem {
+          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).
+             */
+            currency: string;
+
+            /**
+             * The ID of the product that this price will belong to.
+             */
+            product: string;
+
+            /**
+             * A positive integer in %s (or 0 for a free price) representing how much to charge.
+             */
+            unit_amount?: number;
+
+            /**
+             * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+             */
+            unit_amount_decimal?: string;
+          }
+        }
+
         interface BillingThresholds {
           /**
            * Monetary threshold that triggers the subscription to advance to a new billing period
@@ -471,6 +528,16 @@ declare module 'stripe' {
            */
           plan?: string;
 
+          /**
+           * The ID of the price object.
+           */
+          price?: string;
+
+          /**
+           * Data used to generate a new price object inline.
+           */
+          price_data?: Plan.PriceData;
+
           /**
            * Quantity for the given plan. Can be set only if the plan's `usage_type` is `licensed` and not `metered`.
            */
@@ -489,6 +556,74 @@ declare module 'stripe' {
              */
             usage_gte: 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).
+             */
+            currency: string;
+
+            /**
+             * The ID of the product that this price will belong to.
+             */
+            product: string;
+
+            /**
+             * The recurring components of a price such as `interval` and `usage_type`.
+             */
+            recurring: PriceData.Recurring;
+
+            /**
+             * A positive integer in %s (or 0 for a free price) representing how much to charge.
+             */
+            unit_amount?: number;
+
+            /**
+             * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+             */
+            unit_amount_decimal?: string;
+          }
+
+          namespace PriceData {
+            interface Recurring {
+              /**
+               * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+               */
+              aggregate_usage?: Recurring.AggregateUsage;
+
+              /**
+               * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+               */
+              interval: Recurring.Interval;
+
+              /**
+               * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+               */
+              interval_count?: number;
+
+              /**
+               * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+               */
+              trial_period_days?: number;
+
+              /**
+               * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+               */
+              usage_type?: Recurring.UsageType;
+            }
+
+            namespace Recurring {
+              type AggregateUsage =
+                | 'last_during_period'
+                | 'last_ever'
+                | 'max'
+                | 'sum';
+
+              type Interval = 'day' | 'month' | 'week' | 'year';
+
+              type UsageType = 'licensed' | 'metered';
+            }
+          }
         }
 
         type ProrationBehavior =
@@ -591,6 +726,11 @@ declare module 'stripe' {
       type EndBehavior = 'cancel' | 'none' | 'release' | 'renew';
 
       interface Phase {
+        /**
+         * A list of prices and quantities that will generate invoice items appended to the next invoice. You may pass up to 10 items.
+         */
+        add_invoice_items?: Array<Phase.AddInvoiceItem>;
+
         /**
          * A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions).
          */
@@ -668,6 +808,47 @@ declare module 'stripe' {
       }
 
       namespace Phase {
+        interface AddInvoiceItem {
+          /**
+           * The ID of the price object.
+           */
+          price?: string;
+
+          /**
+           * Data used to generate a new price object inline.
+           */
+          price_data?: AddInvoiceItem.PriceData;
+
+          /**
+           * Quantity for this item. Defaults to 1.
+           */
+          quantity?: number;
+        }
+
+        namespace AddInvoiceItem {
+          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).
+             */
+            currency: string;
+
+            /**
+             * The ID of the product that this price will belong to.
+             */
+            product: string;
+
+            /**
+             * A positive integer in %s (or 0 for a free price) representing how much to charge.
+             */
+            unit_amount?: number;
+
+            /**
+             * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+             */
+            unit_amount_decimal?: string;
+          }
+        }
+
         interface BillingThresholds {
           /**
            * Monetary threshold that triggers the subscription to advance to a new billing period
@@ -700,6 +881,16 @@ declare module 'stripe' {
            */
           plan?: string;
 
+          /**
+           * The ID of the price object.
+           */
+          price?: string;
+
+          /**
+           * Data used to generate a new price object inline.
+           */
+          price_data?: Plan.PriceData;
+
           /**
            * Quantity for the given plan. Can be set only if the plan's `usage_type` is `licensed` and not `metered`.
            */
@@ -718,6 +909,74 @@ declare module 'stripe' {
              */
             usage_gte: 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).
+             */
+            currency: string;
+
+            /**
+             * The ID of the product that this price will belong to.
+             */
+            product: string;
+
+            /**
+             * The recurring components of a price such as `interval` and `usage_type`.
+             */
+            recurring: PriceData.Recurring;
+
+            /**
+             * A positive integer in %s (or 0 for a free price) representing how much to charge.
+             */
+            unit_amount?: number;
+
+            /**
+             * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+             */
+            unit_amount_decimal?: string;
+          }
+
+          namespace PriceData {
+            interface Recurring {
+              /**
+               * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+               */
+              aggregate_usage?: Recurring.AggregateUsage;
+
+              /**
+               * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+               */
+              interval: Recurring.Interval;
+
+              /**
+               * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+               */
+              interval_count?: number;
+
+              /**
+               * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+               */
+              trial_period_days?: number;
+
+              /**
+               * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+               */
+              usage_type?: Recurring.UsageType;
+            }
+
+            namespace Recurring {
+              type AggregateUsage =
+                | 'last_during_period'
+                | 'last_ever'
+                | 'max'
+                | 'sum';
+
+              type Interval = 'day' | 'month' | 'week' | 'year';
+
+              type UsageType = 'licensed' | 'metered';
+            }
+          }
         }
 
         type ProrationBehavior =
diff --git a/types/2020-03-02/Subscriptions.d.ts b/types/2020-03-02/Subscriptions.d.ts
index e69239f7..11d8f720 100644
--- a/types/2020-03-02/Subscriptions.d.ts
+++ b/types/2020-03-02/Subscriptions.d.ts
@@ -295,6 +295,11 @@ declare module 'stripe' {
        */
       customer: string;
 
+      /**
+       * A list of prices and quantities that will generate invoice items appended to the first invoice for this subscription. You may pass up to 10 items.
+       */
+      add_invoice_items?: Array<SubscriptionCreateParams.AddInvoiceItem>;
+
       /**
        * A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions).
        */
@@ -428,6 +433,47 @@ declare module 'stripe' {
     }
 
     namespace SubscriptionCreateParams {
+      interface AddInvoiceItem {
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: AddInvoiceItem.PriceData;
+
+        /**
+         * Quantity for this item. Defaults to 1.
+         */
+        quantity?: number;
+      }
+
+      namespace AddInvoiceItem {
+        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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+      }
+
       interface BillingThresholds {
         /**
          * Monetary threshold that triggers the subscription to advance to a new billing period
@@ -458,6 +504,16 @@ declare module 'stripe' {
          */
         plan?: string;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: Item.PriceData;
+
         /**
          * Quantity for this item.
          */
@@ -476,6 +532,74 @@ declare module 'stripe' {
            */
           usage_gte: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * The recurring components of a price such as `interval` and `usage_type`.
+           */
+          recurring: PriceData.Recurring;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+
+        namespace PriceData {
+          interface Recurring {
+            /**
+             * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+             */
+            aggregate_usage?: Recurring.AggregateUsage;
+
+            /**
+             * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+             */
+            interval: Recurring.Interval;
+
+            /**
+             * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+             */
+            interval_count?: number;
+
+            /**
+             * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+             */
+            trial_period_days?: number;
+
+            /**
+             * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+             */
+            usage_type?: Recurring.UsageType;
+          }
+
+          namespace Recurring {
+            type AggregateUsage =
+              | 'last_during_period'
+              | 'last_ever'
+              | 'max'
+              | 'sum';
+
+            type Interval = 'day' | 'month' | 'week' | 'year';
+
+            type UsageType = 'licensed' | 'metered';
+          }
+        }
       }
 
       type PaymentBehavior =
@@ -517,6 +641,11 @@ declare module 'stripe' {
     }
 
     interface SubscriptionUpdateParams {
+      /**
+       * A list of prices and quantities that will generate invoice items appended to the first invoice for this subscription. You may pass up to 10 items.
+       */
+      add_invoice_items?: Array<SubscriptionUpdateParams.AddInvoiceItem>;
+
       /**
        * A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions).
        */
@@ -652,6 +781,47 @@ declare module 'stripe' {
     }
 
     namespace SubscriptionUpdateParams {
+      interface AddInvoiceItem {
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: AddInvoiceItem.PriceData;
+
+        /**
+         * Quantity for this item. Defaults to 1.
+         */
+        quantity?: number;
+      }
+
+      namespace AddInvoiceItem {
+        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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+      }
+
       type BillingCycleAnchor = 'now' | 'unchanged';
 
       interface BillingThresholds {
@@ -699,6 +869,16 @@ declare module 'stripe' {
          */
         plan?: string;
 
+        /**
+         * The ID of the price object.
+         */
+        price?: string;
+
+        /**
+         * Data used to generate a new price object inline.
+         */
+        price_data?: Item.PriceData;
+
         /**
          * Quantity for this item.
          */
@@ -717,6 +897,74 @@ declare module 'stripe' {
            */
           usage_gte: 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).
+           */
+          currency: string;
+
+          /**
+           * The ID of the product that this price will belong to.
+           */
+          product: string;
+
+          /**
+           * The recurring components of a price such as `interval` and `usage_type`.
+           */
+          recurring: PriceData.Recurring;
+
+          /**
+           * A positive integer in %s (or 0 for a free price) representing how much to charge.
+           */
+          unit_amount?: number;
+
+          /**
+           * Same as `unit_amount`, but accepts a decimal value with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
+           */
+          unit_amount_decimal?: string;
+        }
+
+        namespace PriceData {
+          interface Recurring {
+            /**
+             * Specifies a usage aggregation strategy for prices of `usage_type=metered`. Allowed values are `sum` for summing up all usage during a period, `last_during_period` for using the last usage record reported within a period, `last_ever` for using the last usage record ever (across period bounds) or `max` which uses the usage record with the maximum reported usage during a period. Defaults to `sum`.
+             */
+            aggregate_usage?: Recurring.AggregateUsage;
+
+            /**
+             * Specifies billing frequency. Either `day`, `week`, `month` or `year`.
+             */
+            interval: Recurring.Interval;
+
+            /**
+             * The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks).
+             */
+            interval_count?: number;
+
+            /**
+             * Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan).
+             */
+            trial_period_days?: number;
+
+            /**
+             * Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`.
+             */
+            usage_type?: Recurring.UsageType;
+          }
+
+          namespace Recurring {
+            type AggregateUsage =
+              | 'last_during_period'
+              | 'last_ever'
+              | 'max'
+              | 'sum';
+
+            type Interval = 'day' | 'month' | 'week' | 'year';
+
+            type UsageType = 'licensed' | 'metered';
+          }
+        }
       }
 
       interface PauseCollection {
@@ -793,6 +1041,11 @@ declare module 'stripe' {
        */
       plan?: string;
 
+      /**
+       * Filter for subscriptions that contain this recurring price ID.
+       */
+      price?: string;
+
       /**
        * The status of the subscriptions to retrieve. One of: `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `canceled`, or `all`. Passing in a value of `canceled` will return all canceled subscriptions, including those belonging to deleted customers. Passing in a value of `all` will return subscriptions of all statuses.
        */
diff --git a/types/2020-03-02/index.d.ts b/types/2020-03-02/index.d.ts
index 34f10fe5..03e7dda6 100644
--- a/types/2020-03-02/index.d.ts
+++ b/types/2020-03-02/index.d.ts
@@ -57,6 +57,7 @@
 ///<reference path='./Persons.d.ts' />
 ///<reference path='./Plans.d.ts' />
 ///<reference path='./PlatformTaxFees.d.ts' />
+///<reference path='./Prices.d.ts' />
 ///<reference path='./Products.d.ts' />
 ///<reference path='./Radar/EarlyFraudWarnings.d.ts' />
 ///<reference path='./Radar/ValueListItems.d.ts' />
@@ -131,6 +132,7 @@ declare module 'stripe' {
     paymentMethods: Stripe.PaymentMethodsResource;
     payouts: Stripe.PayoutsResource;
     plans: Stripe.PlansResource;
+    prices: Stripe.PricesResource;
     products: Stripe.ProductsResource;
     refunds: Stripe.RefundsResource;
     reviews: Stripe.ReviewsResource;


Test patch:
diff --git a/test/resources/Prices.spec.js b/test/resources/Prices.spec.js
new file mode 100644
index 00000000..132a1b3e
--- /dev/null
+++ b/test/resources/Prices.spec.js
@@ -0,0 +1,79 @@
+'use strict';
+
+const stripe = require('../../testUtils').getSpyableStripe();
+const expect = require('chai').expect;
+
+describe('Plans Resource', () => {
+  describe('retrieve', () => {
+    it('Sends the correct request', () => {
+      stripe.prices.retrieve('price_123');
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'GET',
+        url: '/v1/prices/price_123',
+        headers: {},
+        data: {},
+        settings: {},
+      });
+    });
+  });
+
+  describe('create', () => {
+    it('Sends the correct request', () => {
+      stripe.prices.create({
+        unit_amount: 200,
+        currency: 'usd',
+        recurring: {
+          interval: 'month',
+        },
+        product_data: {
+          name: 'Product name',
+        },
+      });
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'POST',
+        url: '/v1/prices',
+        headers: {},
+        data: {
+          unit_amount: 200,
+          currency: 'usd',
+          recurring: {
+            interval: 'month',
+          },
+          product_data: {
+            name: 'Product name',
+          },
+        },
+        settings: {},
+      });
+    });
+  });
+
+  describe('update', () => {
+    it('Sends the correct request', () => {
+      stripe.prices.update('priceId3', {
+        amount: 1900,
+        currency: 'usd',
+      });
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'POST',
+        url: '/v1/prices/priceId3',
+        headers: {},
+        data: {amount: 1900, currency: 'usd'},
+        settings: {},
+      });
+    });
+  });
+
+  describe('list', () => {
+    it('Sends the correct request', () => {
+      stripe.prices.list();
+      expect(stripe.LAST_REQUEST).to.deep.equal({
+        method: 'GET',
+        url: '/v1/prices',
+        headers: {},
+        data: {},
+        settings: {},
+      });
+    });
+  });
+});