openapi: 3.0.0 info: title: Stripe Products API description: Needs description. contact: email: dev-platform@stripe.com name: Stripe Dev Platform Team url: https://stripe.com termsOfService: https://stripe.com/us/terms/ version: '2023-10-16' x-stripeSpecFilename: spec3 security: - basicAuth: [] - bearerAuth: [] servers: - url: https://api.stripe.com/ paths: /v1/products: get: description: >-
Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first.
operationId: GetProducts parameters: - description: >- Only return products that are active or inactive (e.g., pass `false` to list all inactive products). in: query name: active required: false schema: type: boolean style: form - description: >- Only return products that were created during the given date interval. explode: true in: query name: created required: false schema: anyOf: - properties: gt: type: integer gte: type: integer lt: type: integer lte: type: integer title: range_query_specs type: object - type: integer style: deepObject - description: >- A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: maxLength: 5000 type: string style: form - description: Specifies which fields in the response should be expanded. explode: true in: query name: expand required: false schema: items: maxLength: 5000 type: string type: array style: deepObject - description: >- Only return products with the given IDs. Cannot be used with [starting_after](https://stripe.com/docs/api#list_products-starting_after) or [ending_before](https://stripe.com/docs/api#list_products-ending_before). explode: true in: query name: ids required: false schema: items: maxLength: 5000 type: string type: array style: deepObject - description: >- A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. in: query name: limit required: false schema: type: integer style: form - description: >- Only return products that can be shipped (i.e., physical, not digital products). in: query name: shippable required: false schema: type: boolean style: form - description: >- A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. in: query name: starting_after required: false schema: maxLength: 5000 type: string style: form - description: Only return products with the given url. in: query name: url required: false schema: maxLength: 5000 type: string style: form requestBody: content: application/x-www-form-urlencoded: encoding: {} schema: additionalProperties: false $ref: '#/components/schemas/GetProductsRequest' required: false responses: '200': content: application/json: schema: description: '' x-expandableFields: - data $ref: '#/components/schemas/ProductList' description: Successful response. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. tags: - Products post: description:Creates a new product object.
operationId: PostProducts requestBody: content: application/x-www-form-urlencoded: encoding: default_price_data: explode: true style: deepObject expand: explode: true style: deepObject features: explode: true style: deepObject images: explode: true style: deepObject metadata: explode: true style: deepObject package_dimensions: explode: true style: deepObject schema: additionalProperties: false $ref: '#/components/schemas/PostProductsRequest' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/product' description: Successful response. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. tags: - Products /v1/products/search: get: description: >-Search for products you’ve previously created using Stripe’s Search Query Language. Don’t use search in read-after-write flows where strict consistency is necessary. Under normal operating conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up to an hour behind during outages. Search functionality is not available to merchants in India.
operationId: GetProductsSearch parameters: - description: Specifies which fields in the response should be expanded. explode: true in: query name: expand required: false schema: items: maxLength: 5000 type: string type: array style: deepObject - description: >- A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. in: query name: limit required: false schema: type: integer style: form - description: >- A cursor for pagination across multiple pages of results. Don't include this parameter on the first call. Use the next_page value returned in a previous response to request subsequent results. in: query name: page required: false schema: maxLength: 5000 type: string style: form - description: >- The search query string. See [search query language](https://stripe.com/docs/search#search-query-language) and the list of supported [query fields for products](https://stripe.com/docs/search#query-fields-for-products). in: query name: query required: true schema: maxLength: 5000 type: string style: form requestBody: content: application/x-www-form-urlencoded: encoding: {} schema: additionalProperties: false $ref: '#/components/schemas/GetProductsSearchRequest' required: false responses: '200': content: application/json: schema: description: '' x-expandableFields: - data $ref: '#/components/schemas/SearchResult' description: Successful response. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. tags: - Products /v1/products/{id}: delete: description: >-Delete a product. Deleting a product is only possible if it has no
prices associated with it. Additionally, deleting a product with
type=good is only possible if it has no SKUs associated
with it.
Retrieves the details of an existing product. Supply the unique product ID from either a product creation request or the product list, and Stripe will return the corresponding product information.
operationId: GetProductsId parameters: - description: Specifies which fields in the response should be expanded. explode: true in: query name: expand required: false schema: items: maxLength: 5000 type: string type: array style: deepObject - in: path name: id required: true schema: maxLength: 5000 type: string style: simple requestBody: content: application/x-www-form-urlencoded: encoding: {} schema: additionalProperties: false $ref: '#/components/schemas/GetProductsIdRequest' required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/product' description: Successful response. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. tags: - Products post: description: >-Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged.
operationId: PostProductsId parameters: - in: path name: id required: true schema: maxLength: 5000 type: string style: simple requestBody: content: application/x-www-form-urlencoded: encoding: description: explode: true style: deepObject expand: explode: true style: deepObject features: explode: true style: deepObject images: explode: true style: deepObject metadata: explode: true style: deepObject package_dimensions: explode: true style: deepObject tax_code: explode: true style: deepObject unit_label: explode: true style: deepObject url: explode: true style: deepObject schema: additionalProperties: false $ref: '#/components/schemas/PostProductsIdRequest' required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/product' description: Successful response. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. tags: - Products components: schemas: error: description: An error response from the Stripe API properties: error: $ref: '#/components/schemas/api_errors' required: - error type: object product: description: >- Products describe the specific goods or services you offer to your customers. For example, you might offer a Standard and Premium version of your goods or service; each version would be a separate Product. They can be used in conjunction with [Prices](https://stripe.com/docs/api#prices) to configure pricing in Payment Links, Checkout, and Subscriptions. Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription), [share a Payment Link](https://stripe.com/docs/payment-links), [accept payments with Checkout](https://stripe.com/docs/payments/accept-a-payment#create-product-prices-upfront), and more about [Products and Prices](https://stripe.com/docs/products-prices/overview) properties: active: description: Whether the product is currently available for purchase. type: boolean created: description: >- Time at which the object was created. Measured in seconds since the Unix epoch. format: unix-time type: integer default_price: anyOf: - maxLength: 5000 type: string - $ref: '#/components/schemas/price' description: >- The ID of the [Price](https://stripe.com/docs/api/prices) object that is the default price for this product. nullable: true x-expansionResources: oneOf: - $ref: '#/components/schemas/price' description: description: >- The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. maxLength: 5000 nullable: true type: string features: description: >- A list of up to 15 features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). items: $ref: '#/components/schemas/product_feature' type: array id: description: Unique identifier for the object. maxLength: 5000 type: string images: description: >- A list of up to 8 URLs of images for this product, meant to be displayable to the customer. items: maxLength: 5000 type: string type: array livemode: description: >- Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. type: boolean metadata: additionalProperties: maxLength: 500 type: string description: >- Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. type: object name: description: The product's name, meant to be displayable to the customer. maxLength: 5000 type: string object: description: >- String representing the object's type. Objects of the same type share the same value. enum: - product type: string package_dimensions: anyOf: - $ref: '#/components/schemas/package_dimensions' description: The dimensions of this product for shipping purposes. nullable: true shippable: description: Whether this product is shipped (i.e., physical goods). nullable: true type: boolean statement_descriptor: description: >- Extra information about a product which will appear on your customer's credit card statement. In the case that multiple products are billed at once, the first statement descriptor will be used. maxLength: 5000 nullable: true type: string tax_code: anyOf: - maxLength: 5000 type: string - $ref: '#/components/schemas/tax_code' description: A [tax code](https://stripe.com/docs/tax/tax-categories) ID. nullable: true x-expansionResources: oneOf: - $ref: '#/components/schemas/tax_code' unit_label: description: >- A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. maxLength: 5000 nullable: true type: string updated: description: >- Time at which the object was last updated. Measured in seconds since the Unix epoch. format: unix-time type: integer url: description: A URL of a publicly-accessible webpage for this product. maxLength: 2048 nullable: true type: string required: - active - created - features - id - images - livemode - metadata - name - object - updated title: Product type: object x-expandableFields: - default_price - features - package_dimensions - tax_code x-resourceId: product deleted_product: description: '' properties: deleted: description: Always true for a deleted object enum: - true type: boolean id: description: Unique identifier for the object. maxLength: 5000 type: string object: description: >- String representing the object's type. Objects of the same type share the same value. enum: - product type: string required: - deleted - id - object title: DeletedProduct type: object x-expandableFields: [] x-resourceId: deleted_product GetProductsRequest: type: object properties: {} ProductList: type: object required: - data - has_more - object - url properties: data: description: Details about each object. items: $ref: '#/components/schemas/product' type: array has_more: description: >- True if this list has another page of items after this one that can be fetched. type: boolean object: description: >- String representing the object's type. Objects of the same type share the same value. Always has the value `list`. enum: - list type: string url: description: The URL where this list can be accessed. maxLength: 5000 pattern: ^/v1/products type: string PostProductsRequest: type: object required: - name properties: active: description: >- Whether the product is currently available for purchase. Defaults to `true`. type: boolean default_price_data: description: >- Data used to generate a new [Price](https://stripe.com/docs/api/prices) object. This Price will be set as the default price for this product. properties: currency: type: string currency_options: additionalProperties: properties: custom_unit_amount: properties: enabled: type: boolean maximum: type: integer minimum: type: integer preset: type: integer required: - enabled title: custom_unit_amount type: object tax_behavior: enum: - exclusive - inclusive - unspecified type: string tiers: items: properties: flat_amount: type: integer flat_amount_decimal: format: decimal type: string unit_amount: type: integer unit_amount_decimal: format: decimal type: string up_to: anyOf: - enum: - inf maxLength: 5000 type: string - type: integer required: - up_to title: tier type: object type: array unit_amount: type: integer unit_amount_decimal: format: decimal type: string title: currency_option type: object type: object recurring: properties: interval: enum: - day - month - week - year type: string interval_count: type: integer required: - interval title: recurring_adhoc type: object tax_behavior: enum: - exclusive - inclusive - unspecified type: string unit_amount: type: integer unit_amount_decimal: format: decimal type: string required: - currency title: price_data_without_product type: object description: description: >- The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. maxLength: 40000 type: string expand: description: Specifies which fields in the response should be expanded. items: maxLength: 5000 type: string type: array features: description: >- A list of up to 15 features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). items: properties: name: maxLength: 5000 type: string required: - name title: features type: object type: array id: description: >- An identifier will be randomly generated by Stripe. You can optionally override this ID, but the ID must be unique across all products in your Stripe account. maxLength: 5000 type: string images: description: >- A list of up to 8 URLs of images for this product, meant to be displayable to the customer. items: type: string type: array metadata: additionalProperties: type: string description: >- Set of [key-value pairs](https://stripe.com/docs/api/metadata) 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`. type: object name: description: The product's name, meant to be displayable to the customer. maxLength: 5000 type: string package_dimensions: description: The dimensions of this product for shipping purposes. properties: height: type: number length: type: number weight: type: number width: type: number required: - height - length - weight - width title: package_dimensions_specs type: object shippable: description: Whether this product is shipped (i.e., physical goods). type: boolean statement_descriptor: description: >- 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. It must contain at least one letter. maxLength: 22 type: string tax_code: description: A [tax code](https://stripe.com/docs/tax/tax-categories) ID. type: string unit_label: description: >- A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. maxLength: 12 type: string url: description: A URL of a publicly-accessible webpage for this product. maxLength: 5000 type: string GetProductsSearchRequest: type: object properties: {} SearchResult: type: object required: - data - has_more - object - url properties: data: items: $ref: '#/components/schemas/product' type: array has_more: type: boolean next_page: maxLength: 5000 nullable: true type: string object: description: >- String representing the object's type. Objects of the same type share the same value. enum: - search_result type: string total_count: description: >- The total number of objects that match the query, only accurate up to 10,000. type: integer url: maxLength: 5000 type: string DeleteProductsIdRequest: type: object properties: {} GetProductsIdRequest: type: object properties: {} PostProductsIdRequest: type: object properties: active: description: Whether the product is available for purchase. type: boolean default_price: description: >- The ID of the [Price](https://stripe.com/docs/api/prices) object that is the default price for this product. maxLength: 5000 type: string description: anyOf: - maxLength: 40000 type: string - enum: - '' type: string description: >- The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. expand: description: Specifies which fields in the response should be expanded. items: maxLength: 5000 type: string type: array features: anyOf: - items: properties: name: maxLength: 5000 type: string required: - name title: features type: object type: array - enum: - '' type: string description: >- A list of up to 15 features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). images: anyOf: - items: type: string type: array - enum: - '' type: string description: >- A list of up to 8 URLs of images for this product, meant to be displayable to the customer. metadata: anyOf: - additionalProperties: type: string type: object - enum: - '' type: string description: >- Set of [key-value pairs](https://stripe.com/docs/api/metadata) 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`. name: description: The product's name, meant to be displayable to the customer. maxLength: 5000 type: string package_dimensions: anyOf: - properties: height: type: number length: type: number weight: type: number width: type: number required: - height - length - weight - width title: package_dimensions_specs type: object - enum: - '' type: string description: The dimensions of this product for shipping purposes. shippable: description: Whether this product is shipped (i.e., physical goods). type: boolean statement_descriptor: description: >- 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. It must contain at least one letter. May only be set if `type=service`. maxLength: 22 type: string tax_code: anyOf: - type: string - enum: - '' type: string description: A [tax code](https://stripe.com/docs/tax/tax-categories) ID. unit_label: anyOf: - maxLength: 12 type: string - enum: - '' type: string description: >- A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. May only be set if `type=service`. url: anyOf: - type: string - enum: - '' type: string description: A URL of a publicly-accessible webpage for this product. securitySchemes: basicAuth: description: >- Basic HTTP authentication. Allowed headers-- Authorization: Basic