Stripe Products API

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 to configure pricing in Payment Links, Checkout, and Subscriptions.

OpenAPI Specification

stripe-products-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Stripe Accounts Account Products API
  description: This is an object representing a Stripe account. You can retrieve it to see properties on the account like its current requirements or if the account is enabled to make live charges or receive payouts.
  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
servers:
- url: https://api.stripe.com/
security:
- basicAuth: []
- bearerAuth: []
tags:
- name: Products
paths:
  /v1/products:
    get:
      description: <p>Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first.</p>
      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: <p>Creates a new product object.</p>
      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: '<p>Search for products you’ve previously created using Stripe’s <a href="/docs/search#search-query-language">Search Query Language</a>.

        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.</p>'
      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: <p>Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with <code>type=good</code> is only possible if it has no SKUs associated with it.</p>
      operationId: DeleteProductsId
      parameters:
      - 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/DeleteProductsIdRequest'
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/deleted_product'
          description: Successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: Error response.
      tags:
      - Products
    get:
      description: <p>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.</p>
      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: <p>Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged.</p>
      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:
    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
    error:
      description: An error response from the Stripe API
      properties:
        error:
          $ref: '#/components/schemas/api_errors'
      required:
      - error
      type: object
    GetProductsIdRequest:
      type: object
      properties: {}
    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: {}
    GetProductsSearchRequest:
      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.\n\nThis 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.\n 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.
    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
    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.\n\nThis 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.\n 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
    DeleteProductsIdRequest:
      type: object
      properties: {}