swagger: "2.0"
info:
  title: BigCommerce API
  version: 3.0.0b
  description: A Swagger Document for the BigCommmerce v3 API.
  termsOfService: "http://www.bigcommerce.com/terms"
host: "api.bigcommerce.com"
basePath: "/stores/{{store_id}}/v3"
tags:
  - name: Catalog
    description: BigCommerce Catalog API Definition.
  - name: Customers
    description: BigCommerce Customers API Definition.
  - name: Orders
    description: BigCommerce Orders API Definition.
  - name: Themes
    description: BigCommerce Themes API Definition.
  - name: PriceLists
    description: BigCommerce Price Lists API Definition.
  - name: Script
    description: BigCommerce Scripts API Definition.
schemes:
  - https
produces:
  - application/json
consumes:
  - application/json
paths:
  /catalog/products:
    get:
      tags:
        - Catalog
      description: |
        Returns a paginated collection of `Products` objects from the BigCommerce Catalog.
      operationId: getProducts
      parameters:
        - $ref: "#/parameters/FilterIdParam"
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterSkuParam"
        - $ref: "#/parameters/FilterUpcParam"
        - $ref: "#/parameters/FilterPriceParam"
        - $ref: "#/parameters/FilterWeightParam"
        - $ref: "#/parameters/FilterConditionParam"
        - $ref: "#/parameters/FilterBrandIdParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
        - $ref: "#/parameters/FilterDateLastImportedParam"
        - $ref: "#/parameters/FilterIsVisibleParam"
        - $ref: "#/parameters/FilterIsFeaturedParam"
        - $ref: "#/parameters/FilterIsFreeShippingParam"
        - $ref: "#/parameters/FilterInventoryLevelParam"
        - $ref: "#/parameters/FilterInventoryLowParam"
        - $ref: "#/parameters/FilterOutOfStockParam"
        - $ref: "#/parameters/FilterTotalSoldParam"
        - $ref: "#/parameters/ProductFilterTypeParam"
        - $ref: "#/parameters/FilterCategoriesParam"
        - $ref: "#/parameters/ProductFilterKeywordParam"
        - $ref: "#/parameters/ProductFilterKeywordContextParam"
        - $ref: "#/parameters/FilterStatusParam"
        - $ref: "#/parameters/FilterIncludeParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
        - $ref: "#/parameters/FilterAvailabilityParam"
        - $ref: "#/parameters/FilterPriceListIdParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/DirectionParam"
        - $ref: "#/parameters/ProductSortParam"
      responses:
        200:
          description: |
            An array of products and metadata.
          schema:
            $ref: "#/definitions/ProductCollectionResponse"
    post:
      tags:
        - Catalog
      description: |
        Creates a `Product` in the BigCommerce Catalog.
      operationId: createProduct
      parameters:
        - name: product
          in: body
          required: true
          description: |
            A BigCommerce `Product` object.
          schema:
            $ref: "#/definitions/ProductPost"
      responses:
        200:
          description: |
            A product.
          schema:
            $ref: "#/definitions/ProductResponse"
        422:
          description: |
            `Product` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            `Product` was in conflict with another product. This is the result of duplicate unique values, such as name or SKU; a missing or invalid `category_id`, `brand_id`, or `tax_class id`; or a conflicting `bulk_pricing_rule`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes one or more `Product` objects from the BigCommerce Catalog.
      operationId: deleteProducts
      parameters:
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterSkuParam"
        - $ref: "#/parameters/FilterPriceParam"
        - $ref: "#/parameters/FilterWeightParam"
        - $ref: "#/parameters/FilterConditionParam"
        - $ref: "#/parameters/FilterBrandIdParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
        - $ref: "#/parameters/FilterDateLastImportedParam"
        - $ref: "#/parameters/FilterIsVisibleParam"
        - $ref: "#/parameters/FilterIsFeaturedParam"
        - $ref: "#/parameters/FilterInventoryLevelParam"
        - $ref: "#/parameters/FilterTotalSoldParam"
        - $ref: "#/parameters/ProductFilterTypeParam"
        - $ref: "#/parameters/FilterCategoriesParam"
        - $ref: "#/parameters/ProductFilterKeywordParam"
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Returns a `Product` from the BigCommerce Catalog.
      operationId: getProductById
      parameters:
        - $ref: "#/parameters/FilterIncludeParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
        - $ref: "#/parameters/FilterPriceListIdParam"
      responses:
        200:
          description: |
            A product.
          schema:
            $ref: "#/definitions/ProductResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a `Product` in the BigCommerce Catalog.
      operationId: updateProduct
      parameters:
        - name: product
          in: body
          required: true
          description: |
            A BigCommerce `Product` object.
          schema:
            $ref: "#/definitions/ProductPut"
      responses:
        200:
          description: |
            A product.
          schema:
            $ref: "#/definitions/ProductResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            `Product` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            `Product` was in conflict with another product. This is caused by: duplicate unique values, such as name or SKU; a missing category, brand, or tax_class with which the product is being associated; or a conflicting bulk pricing rule.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Product` object from the BigCommerce Catalog.
      operationId: deleteProductById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/images:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets all images on a product.
      operationId: getProductImages
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            List of product images and metadata.
          schema:
            $ref: "#/definitions/ProductImageCollectionResponse"
        204:
          description: |
            There are not any images on this product.
        404:
          description: |
            The product ID does not exist.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description: |
        Creates an image on a product. Publicly accessible URLs and files (form post) are valid parameters.
      operationId: createProductImage
      parameters:
        - name: productImage
          in: body
          required: true
          description: |
            A BigCommerce `ProductImage` object.
          schema:
            $ref: "#/definitions/ProductImagePost"
      responses:
        200:
          description: |
            A product image.
          schema:
            $ref: "#/definitions/ProductImageResponse"
        404:
          description: |
            The product ID does not exist.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/images/{image_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ImageIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets image on a product.
      operationId: getProductImageById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of product images and metadata.
          schema:
            $ref: "#/definitions/ProductImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates an image on a product. Publicly accessible URLs and files (form post) are valid parameters.
      operationId: updateProductImage
      parameters:
      - name: productImage
        in: body
        required: true
        description: |
          A BigCommerce `ProductImage` object.
        schema:
          $ref: "#/definitions/ProductImagePut"
      responses:
        200:
          description: |
            A product image.
          schema:
            $ref: "#/definitions/ProductImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `ProductImage` in the BigCommerce Catalog.
      operationId: deleteProductImage
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/videos:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets all videos on a product.
      operationId: getProductVideos
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            List of product videos and metadata.
          schema:
            $ref: "#/definitions/ProductVideoCollectionResponse"
    post:
      tags:
        - Catalog
      description: |
        Creates a video on a product, using a video ID from a host site.
      operationId: createProductVideo
      parameters:
      - name: productVideo
        in: body
        required: true
        description: |
          A BigCommerce `ProductVideo` object.
        schema:
          $ref: "#/definitions/ProductVideoPost"
      responses:
        200:
          description: |
            A product video.
          schema:
            $ref: "#/definitions/ProductVideoResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/videos/{video_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/VideoIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets video on a product.
      operationId: getProductVideoById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of product videos and metadata.
          schema:
            $ref: "#/definitions/ProductVideoResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a video on a product.
      operationId: updateProductVideo
      parameters:
      - name: productVideo
        in: body
        required: true
        description: |
          A BigCommerce `ProductVideo` object.
        schema:
          $ref: "#/definitions/ProductVideoPut"
      responses:
        200:
          description: |
            A product video.
          schema:
            $ref: "#/definitions/ProductVideoResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `ProductVideo` in the BigCommerce Catalog.
      operationId: deleteProductVideo
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/variants:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Returns a `Variant` object list from the BigCommerce Catalog.
      operationId: getVariantsByProductId
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of variants and metadata.
          schema:
            $ref: "#/definitions/VariantCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a `Variant` object.
      operationId: createVariant
      parameters:
      - name: Variant
        in: body
        required: true
        description: |
          `Variant` object.
        schema:
          $ref: "#/definitions/VariantPost"
      responses:
        200:
          description: |
            A variant and metadata.
          schema:
            $ref: "#/definitions/VariantResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/variants/{variant_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/VariantIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets a `Variant` object.
      operationId: getVariantById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A variant and metadata.
          schema:
            $ref: "#/definitions/VariantResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description:
        Updates a `Variant` object.
      operationId: updateVariant
      parameters:
      - name: Variant
        in: body
        required: true
        description: |
          A `Variant` object.
        schema:
          $ref: "#/definitions/VariantPut"
      responses:
        200:
          description: |
            A variant and metadata.
          schema:
            $ref: "#/definitions/VariantResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Variant`.
      operationId: deleteVariantById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/variants/{variant_id}/metafields:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/VariantIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield` object list, by `product_id` and `variant_id`.
      operationId: getVariantMetafieldsByProductIdAndVariantId
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/MetafieldKeyParam"
        - $ref: "#/parameters/MetafieldNamespaceParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of metafields and metadata.
          schema:
            $ref: "#/definitions/MetaFieldCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a variant `Metafield`.
      operationId: createVariantMetafield
      parameters:
        - name: Metafield
          in: body
          required: true
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldPost"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        422:
          description: |
            The `Metafield` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Metafield` was in conflict with another `Metafield`. This can be the result of duplicate unique-key combinations of the app's client id, namespace, key, resource_type, and resource_id.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/variants/{variant_id}/metafields/{metafield_id}:
    parameters:
      - $ref: "#/parameters/MetafieldIdParam"
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/VariantIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield`, by `product_id` and `variant_id`.
      operationId: getVariantMetafieldByProductIdAndVariantId
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description:
        Updates a `Metafield` object.
      operationId: updateVariantMetafield
      parameters:
      - name: Metafield
        in: body
        required: true
        description: |
          A `Metafield` object.
        schema:
          $ref: "#/definitions/MetafieldPut"
      responses:
        200:
          description: |
            A metafield and metadata.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Metafield`.
      operationId: deleteVariantMetafieldById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/variants/{variant_id}/image:
    post:
      tags:
        - Catalog
      operationId: createVariantImage
      parameters:
        - $ref: "#/parameters/ProductIdParam"
        - $ref: "#/parameters/VariantIdParam"
        - $ref: "#/parameters/ImageFileParam"
      consumes:
        - multipart/form-data
      responses:
        200:
          description: |
            A ResourceImage and metadata.
          schema:
            $ref: "#/definitions/ImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            Image was not valid. This is the result of a missing `image_file` field or of an incorrect file type. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/options:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `Option` objects.
      operationId: getOptions
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of options and metadata.
          schema:
            $ref: "#/definitions/OptionCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      parameters:
      - name: Option
        in: body
        required: true
        description: |
          An `Option` object.
        schema:
          $ref: "#/definitions/OptionPost"
      description:
        Creates an `Option`.
      operationId: createOption
      responses:
        200:
          description: |
            An `Option` object.
          schema:
            $ref: "#/definitions/OptionResponse"
        422:
          description: |
            Option was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            Option was in conflict with another option. This is the result of duplicate unique fields, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/options/{option_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/OptionIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets `Option` object by product ID and option ID.
      operationId: getOptionById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An `Option` object.
          schema:
            $ref: "#/definitions/OptionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `Option`, based on the `product_id` and `option_id`.
      operationId: updateOption
      parameters:
        - name: option
          in: body
          required: true
          description: |
            A BigCommerce `Option` object.
          schema:
            $ref: "#/definitions/OptionPut"
      responses:
        200:
          description: |
            An `Option` object.
          schema:
            $ref: "#/definitions/OptionResponse"
        422:
          description: |
            The `Option` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Option` was in conflict with another option. This is the result of duplicate unique fields, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `Option`, based on the `product_id` and `option_id`.
      operationId: deleteOptionById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/options/{option_id}/values:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/OptionIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `OptionValue` objects.
      operationId: getOptionValues
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of option values and metadata.
          schema:
            $ref: "#/definitions/OptionValueCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `OptionValue`.
      operationId: createOptionValue
      parameters:
        - name: OptionValue
          in: body
          required: true
          description: |
            A `OptionValue` object.
          schema:
            $ref: "#/definitions/OptionValuePost"
      responses:
        200:
          description: |
            A `OptionValue` object.
          schema:
            $ref: "#/definitions/OptionValueResponse"
        422:
          description: |
            The `OptionValue` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/options/{option_id}/values/{value_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/OptionIdParam"
      - $ref: "#/parameters/ValueIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `OptionValue` by `product_id`, `option_id`, and `value_id`.
      operationId: getOptionValueById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `OptionValue` object.
          schema:
            $ref: "#/definitions/OptionValueResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `OptionValue` based on the `product_id`, `option_id`, and `value_id`.
      operationId: updateOptionValue
      parameters:
        - name: OptionValue
          in: body
          required: true
          description: |
            A BigCommerce `OptionValue` object.
          schema:
            $ref: "#/definitions/OptionValuePut"
      responses:
        200:
          description: |
            A `OptionValue` object.
          schema:
            $ref: "#/definitions/OptionValueResponse"
        422:
          description: |
            The `OptionValue` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `OptionValue` based on the `product_id`, `option_id`, and `value_id`.
      operationId: deleteOptionValueById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/modifiers:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `Modifier` objects.
      operationId: getModifiers
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of modifiers and metadata.
          schema:
            $ref: "#/definitions/ModifierCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `Modifier`.
      operationId: createModifier
      parameters:
        - name: Modifier
          in: body
          required: true
          description: |
            A `Modifier` object.
          schema:
            $ref: "#/definitions/ModifierPost"
      responses:
        200:
          description: |
            A `Modifier` object.
          schema:
            $ref: "#/definitions/ModifierResponse"
        422:
          description: |
            The `Modifier` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Modifier` was in conflict with another option. This is the result of duplicate unique fields, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/modifiers/{modifier_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ModifierIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Modifier` by product_id and modifier_id.
      operationId: getModifierById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Modifier` object.
          schema:
            $ref: "#/definitions/ModifierResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `Modifier` based on the `product_id` and `modifier_id`.
      operationId: updateModifier
      parameters:
        - name: modifier
          in: body
          required: true
          description: |
            A BigCommerce `Modifier` object.
          schema:
            $ref: "#/definitions/ModifierPut"
      responses:
        200:
          description: |
            A `Modifier` object.
          schema:
            $ref: "#/definitions/ModifierResponse"
        422:
          description: |
            The `Modifier` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Modifier` was in conflict with another modifier or option. This is the result of duplicate unique fields, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `Modifier` based on the `product_id` and `modifier_id`.
      operationId: deleteModifierById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/modifiers/{modifier_id}/values:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ModifierIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `ModifierValue` objects.
      operationId: getModifierValues
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of modifier values and metadata.
          schema:
            $ref: "#/definitions/ModifierValueCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `ModifierValue`.
      operationId: createModifierValue
      parameters:
        - name: ModifierValue
          in: body
          required: true
          description: |
            A `ModifierValue` object.
          schema:
            $ref: "#/definitions/ModifierValuePost"
      responses:
        200:
          description: |
            A `ModifierValue` object.
          schema:
            $ref: "#/definitions/ModifierValueResponse"
        422:
          description: |
            The `ModifierValue` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/modifiers/{modifier_id}/values/{value_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ModifierIdParam"
      - $ref: "#/parameters/ValueIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `ModifierValue` by `product_id`, `modifier_id`, and `value_id`.
      operationId: getModifierValueById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `ModifierValue` object.
          schema:
            $ref: "#/definitions/ModifierValueResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `ModifierValue` based on the `product_id`, `modifier_id`, and `value_id`.
      operationId: updateModifierValue
      parameters:
        - name: ModifierValue
          in: body
          required: true
          description: |
            A BigCommerce `ModifierValue` object.
          schema:
            $ref: "#/definitions/ModifierValuePut"
      responses:
        200:
          description: |
            A `ModifierValue` object.
          schema:
            $ref: "#/definitions/ModifierValueResponse"
        422:
          description: |
            The `ModifierValue` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `ModifierValue` based on the `product_id`, `modifier_id`, and `value_id`.
      operationId: deleteModifierValueById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/modifiers/{modifier_id}/values/{value_id}/image:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ModifierIdParam"
      - name: value_id
        description: |
          The ID of the `Modifier`.
        required: true
        in: path
        type: integer
    post:
      tags:
        - Catalog
      description: Adds an image to a modifier value; the image will show on the storefront when the value is selected.
      operationId: createModifierImage
      parameters:
        - $ref: "#/parameters/ImageFileParam"
      consumes:
        - multipart/form-data
      responses:
        200:
          description: |
            A ResourceImage and metadata.
          schema:
            $ref: "#/definitions/ImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            Modifier image was not valid. This is the result of missing `image_file` fields, or of a non-URL value for the `image_file` field. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: Deletes the image that was set to show when the modifier value is selected.
      operationId: deleteModifierImage
      responses:
        204:
          description: Image removed from the modifier value.
  /catalog/products/{product_id}/complex-rules:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `ComplexRule` objects.
      operationId: getComplexRules
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of `ComplexRule` objects and metadata.
          schema:
            $ref: "#/definitions/ComplexRuleCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `ComplexRule`.
      operationId: createComplexRule
      parameters:
        - name: ComplexRule
          in: body
          required: true
          description: |
            `ComplexRule` object.
          schema:
            $ref: "#/definitions/ComplexRulePost"
      responses:
        200:
          description: |
            A `ComplexRule` object.
          schema:
            $ref: "#/definitions/ComplexRuleResponse"
        422:
          description: |
            The `ComplexRule` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `ComplexRule` was in conflict with another `ComplexRule`. This is the result of duplicate conditions.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/complex-rules/{complex_rule_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ComplexRuleIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `ComplexRule` by product_id.
      operationId: getComplexRuleById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Modifier` object.
          schema:
            $ref: "#/definitions/ComplexRuleResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `ComplexRule`, based on the `product_id` and `complex_rule_id`.
      operationId: updateComplexRule
      parameters:
        - name: ComplexRule
          in: body
          required: true
          description: |
            `ComplexRule` object.
          schema:
            $ref: "#/definitions/ComplexRulePut"
      responses:
        200:
          description: |
            A `ComplexRule` object.
          schema:
            $ref: "#/definitions/ComplexRuleResponse"
        422:
          description: |
            The `ComplexRule` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `ComplexRule` was in conflict with another `ComplexRule`. This is the result of duplicate conditions.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `ComplexRule`, based on the `product_id` and `complex_rule_id`.
      operationId: deleteComplexRuleById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/configurable-fields:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `ConfigurableField` objects.
      operationId: getConfigurableFields
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
      responses:
        200:
          description: |
            An array of `ConfigurableField` objects and metadata.
          schema:
            $ref: "#/definitions/ConfigurableFieldCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `ConfigurableField`.
      operationId: createConfigurableField
      parameters:
        - name: ConfigurableField
          in: body
          required: true
          description: |
            `ConfigurableField` object.
          schema:
            $ref: "#/definitions/ConfigurableFieldPost"
      responses:
        200:
          description: |
            A `ConfigurableField` object.
          schema:
            $ref: "#/definitions/ConfigurableFieldResponse"
        404:
          description: |
            The parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `ConfigurableField` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/configurable-fields/{configurable_field_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ConfigurableFieldIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `ConfigurableField` by `product_id` and `configurable_field_id`.
      operationId: getConfigurableFieldById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `ConfigurableField` object.
          schema:
            $ref: "#/definitions/ConfigurableFieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `ConfigurableField`, based on the `product_id` and `configurable_field_id`.
      operationId: updateConfigurableField
      parameters:
        - name: ConfigurableField
          in: body
          required: true
          description: |
            `ConfigurableField` object.
          schema:
            $ref: "#/definitions/ConfigurableFieldPut"
      responses:
        200:
          description: |
            A `ConfigurableField` object.
          schema:
            $ref: "#/definitions/ConfigurableFieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `ConfigurableField` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `ConfigurableField`, based on the `product_id` and `configurable_field_id`.
      operationId: deleteConfigurableFieldById
      responses:
        204:
          description: |
            An empty response.
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/custom-fields:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `CustomField` objects.
      operationId: getCustomFields
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
      responses:
        200:
          description: |
            An array of `CustomField` objects and metadata.
          schema:
            $ref: "#/definitions/CustomFieldCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `CustomField`.
      operationId: createCustomField
      parameters:
        - name: CustomField
          in: body
          required: true
          description: |
            `CustomField` object.
          schema:
            $ref: "#/definitions/CustomFieldPost"
      responses:
        200:
          description: |
            A `CustomField` object.
          schema:
            $ref: "#/definitions/CustomFieldResponse"
        404:
          description: |
            The parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `CustomField` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/custom-fields/{custom_field_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/CustomFieldIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `CustomField` by `product_id` and `custom_field_id`.
      operationId: getCustomFieldById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `CustomField` object.
          schema:
            $ref: "#/definitions/CustomFieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `CustomField`, based on the `product_id` and `custom_field_id`.
      operationId: updateCustomField
      parameters:
        - name: CustomField
          in: body
          required: true
          description: |
            `CustomField` object.
          schema:
            $ref: "#/definitions/CustomFieldPut"
      responses:
        200:
          description: |
            A `CustomField` object.
          schema:
            $ref: "#/definitions/CustomFieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `CustomField` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `CustomField`, based on the `product_id` and `custom_field_id`.
      operationId: deleteCustomFieldById
      responses:
        204:
          description: |
            An empty response.
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/bulk-pricing-rules:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/PageParam"
      - $ref: "#/parameters/LimitParam"
    get:
      tags:
        - Catalog
      description:
        Gets an array of `BulkPricingRule` objects.
      operationId: getBulkPricingRules
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of `BulkPricingRule` objects and metadata.
          schema:
            $ref: "#/definitions/BulkPricingRuleCollectionResponse"
        404:
          description: |
            The parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a `BulkPricingRule`.
      operationId: createBulkPricingRule
      parameters:
        - name: BulkPricingRule
          in: body
          required: true
          description: |
            `BulkPricingRule` object.
          schema:
            $ref: "#/definitions/BulkPricingRulePost"
      responses:
        200:
          description: |
            A `BulkPricingRule` object.
          schema:
            $ref: "#/definitions/BulkPricingRuleResponse"
        404:
          description: |
            The parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        409:
          description: |
            The `BulkPricingRule` was in conflict with another bulk pricing rule. This is the result of quantity range overlapping with existing bulk pricing rules.
          schema:
            $ref: "#/definitions/ErrorResponse"
        422:
          description: |
            The `BulkPricingRule` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/bulk-pricing-rules/{bulk_pricing_rule_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/BulkPricingRuleIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `BulkPricingRule` by `product_id` and `bulk_pricing_rule_id`.
      operationId: getBulkPricingRuleById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `BulkPricingRule` object.
          schema:
            $ref: "#/definitions/BulkPricingRuleResponse"
        404:
          description: |
            The resource or parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a Product's `BulkPricingRule`, based on the `product_id` and `bulk_pricing_rule_id`.
      operationId: updateBulkPricingRule
      parameters:
        - name: BulkPricingRule
          in: body
          required: true
          description: |
            `BulkPricingRule` object.
          schema:
            $ref: "#/definitions/BulkPricingRulePut"
      responses:
        200:
          description: |
            A `BulkPricingRule` object.
          schema:
            $ref: "#/definitions/BulkPricingRuleResponse"
        404:
          description: |
            The resource or parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        409:
          description: |
            The `BulkPricingRule` was in conflict with another bulk pricing rule. This is the result of quantity range overlapping with existing bulk pricing rules.
          schema:
            $ref: "#/definitions/ErrorResponse"
        422:
          description: |
            The `BulkPricingRule` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a Product's `BulkPricingRule`, based on the `product_id` and `bulk_pricing_rule_id`.
      operationId: deleteBulkPricingRuleById
      responses:
        204:
          description: |
            An empty response.
        404:
          description: |
            The resource or parent resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/metafields:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield` object list, by `product_id`.
      operationId: getProductMetafieldsByProductId
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/MetafieldKeyParam"
        - $ref: "#/parameters/MetafieldNamespaceParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of metafields and metadata.
          schema:
            $ref: "#/definitions/MetaFieldCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a product `Metafield`.
      operationId: createProductMetafield
      parameters:
        - name: Metafield
          in: body
          required: true
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldPost"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        422:
          description: |
            The `Metafield` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Metafield` was in conflict with another `Metafield`. This can be the result of duplicate unique key combinations of the app's client id, namespace, key, resource_type, and resource_id.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/products/{product_id}/metafields/{metafield_id}:
    parameters:
      - $ref: "#/parameters/MetafieldIdParam"
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield`, by `product_id`.
      operationId: getProductMetafieldByProductId
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description:
        Updates a `Metafield` object.
      operationId: updateProductMetafield
      parameters:
      - name: Metafield
        in: body
        required: true
        description: |
          A `Metafield` object.
        schema:
          $ref: "#/definitions/MetafieldPut"
      responses:
        200:
          description: |
            A metafield and metadata.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Metafield`.
      operationId: deleteProductMetafieldById
      responses:
        204:
          description: |
            An empty response.
  /catalog/products/{product_id}/reviews:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets all reviews on a product.
      operationId: getProductReviews
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
      responses:
        200:
          description: |
            List of product reviews and metadata.
          schema:
            $ref: "#/definitions/ProductReviewCollectionResponse"
        204:
          description: |
            There are no reviews on this product.
        404:
          description: |
            The product ID does not exist.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description: |
        Creates a product review.
      operationId: createProductReview
      parameters:
        - name: productReview
          in: body
          required: true
          description: |
            A BigCommerce `ProductReview` object.
          schema:
            $ref: "#/definitions/ProductReviewPost"
      responses:
        200:
          description: |
            A product review.
          schema:
            $ref: "#/definitions/ProductReviewResponse"
        404:
          description: |
            The product ID does not exist.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/products/{product_id}/reviews/{review_id}:
    parameters:
      - $ref: "#/parameters/ProductIdParam"
      - $ref: "#/parameters/ReviewIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a product review.
      operationId: getProductReviewById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of product reviews and metadata.
          schema:
            $ref: "#/definitions/ProductReviewResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a product review.
      operationId: updateProductReview
      parameters:
        - name: productReview
          in: body
          required: true
          description: |
            A BigCommerce `ProductReview` object.
          schema:
            $ref: "#/definitions/ProductReviewPut"
      responses:
        200:
          description: |
            A product review.
          schema:
            $ref: "#/definitions/ProductReviewResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `ProductReview` in the BigCommerce Catalog.
      operationId: deleteProductReview
      responses:
        204:
          description: |
            An empty response.
  /catalog/categories:
    get:
      tags:
        - Catalog
      description: |
        Returns a paginated categories collection from the BigCommerce Catalog.
      operationId: getCategories
      parameters:
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterParentIdParam"
        - $ref: "#/parameters/FilterPageTitleParam"
        - $ref: "#/parameters/FilterKeywordParam"
        - $ref: "#/parameters/FilterIsVisibleParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of category objects and metadata.
          schema:
            $ref: "#/definitions/CategoryCollectionResponse"
    post:
      tags:
        - Catalog
      description: |
        Creates a `Category` in the BigCommerce Catalog.
      operationId: createCategory
      parameters:
        - name: category
          in: body
          required: true
          description: |
            A BigCommerce `Category` object.
          schema:
            $ref: "#/definitions/CategoryPost"
      responses:
        200:
          description: |
            A category object.
          schema:
            $ref: "#/definitions/CategoryResponse"
        422:
          description: |
            The `Category` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Category` was in conflict with another category. This is the result of duplicate unique values, such as `name` or `custom_url`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes one or more `Category` objects from the BigCommerce Catalog.
      operationId: deleteCategories
      parameters:
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterParentIdParam"
        - $ref: "#/parameters/FilterPageTitleParam"
        - $ref: "#/parameters/FilterKeywordParam"
        - $ref: "#/parameters/FilterIsVisibleParam"
      responses:
        204:
          description: |
            An empty response.
  /catalog/categories/{category_id}:
    parameters:
      - $ref: "#/parameters/CategoryIdParam"
    get:
      tags:
        - Catalog
      description: |
        Returns a `Category` from the BigCommerce Catalog.
      operationId: getCategoryById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A category object.
          schema:
            $ref: "#/definitions/CategoryResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a `Category` in the BigCommerce Catalog.
      operationId: updateCategory
      parameters:
        - name: category
          in: body
          required: true
          description: |
            A BigCommerce `Category` object.
          schema:
            $ref: "#/definitions/CategoryPut"
      responses:
        200:
          description: |
            A category object.
          schema:
            $ref: "#/definitions/CategoryResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `Category` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Category` was in conflict with another category. This is the result of duplicate unique values, such as `name` or `custom_url`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes one or more `Category` objects from the BigCommerce catalog.
      operationId: deleteCategoryById
      responses:
        204:
          description: |
            An empty response.
  /catalog/categories/{category_id}/metafields:
    parameters:
      - $ref: "#/parameters/CategoryIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield` object list, by category_id.
      operationId: getCategoryMetafieldsByCategoryId
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/MetafieldKeyParam"
        - $ref: "#/parameters/MetafieldNamespaceParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of metafields and metadata.
          schema:
            $ref: "#/definitions/MetaFieldCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a product `Metafield`.
      operationId: createCategoryMetafield
      parameters:
        - name: Metafield
          in: body
          required: true
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldPost"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        422:
          description: |
            The `Metafield` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Metafield` was in conflict with another `Metafield`. This can be the result of duplicate, unique key combinations of the app's client id, namespace, key, resource_type, and resource_id.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/categories/{category_id}/metafields/{metafield_id}:
    parameters:
      - $ref: "#/parameters/MetafieldIdParam"
      - $ref: "#/parameters/CategoryIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield` by category_id.
      operationId: getCategoryMetafieldByCategoryId
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description:
        Updates a `Metafield` object.
      operationId: updateCategoryMetafield
      parameters:
      - name: Metafield
        in: body
        required: true
        description: |
          A `Metafield` object.
        schema:
          $ref: "#/definitions/MetafieldPut"
      responses:
        200:
          description: |
            A metafield and metadata.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Metafield`.
      operationId: deleteCategoryMetafieldById
      responses:
        204:
          description: |
            An empty response.
  /catalog/categories/{category_id}/image:
    parameters:
      - $ref: "#/parameters/CategoryIdParam"
    post:
      tags:
        - Catalog
      parameters:
        - $ref: "#/parameters/ImageFileParam"
      consumes:
        - multipart/form-data
      description: |
        Creates an image on a category. Publicly accessible URLs and files (form post) are valid parameters.
      operationId: createCategoryImage
      responses:
        200:
          description: |
            A ResourceImage and metadata.
          schema:
            $ref: "#/definitions/ImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            Image was not valid. This is the result of a missing `image_file` field or an incorrect file type. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Category` image from the BigCommerce Catalog.
      operationId: deleteCategoryImage
      responses:
        204:
          description: |
            An empty response.
  /catalog/categories/tree:
    get:
      tags:
        - Catalog
      description: |
        Returns the categories tree, a nested lineage of the categories with parent->child relationship. The `Category` objects returned are simplified versions of the category objects returned in the rest of this API.
      operationId: getCategoryTree
      responses:
        200:
          description: |
            A array of nested category tree objects and metadata.
          schema:
            $ref: "#/definitions/CategoryTreeCollectionResponse"
  /catalog/brands:
    get:
      tags:
        - Catalog
      description:  |
        Gets `Brand` objects.
      operationId: getBrands
      parameters:
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterPageTitleParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of brand objects and metadata.
          schema:
            $ref: "#/definitions/BrandCollectionResponse"
    post:
      tags:
        - Catalog
      description:
        Creates a `Brand` object.
      operationId: createBrand
      parameters:
      - name: Brand
        in: body
        required: true
        description: |
          A `Brand` object.
        schema:
          $ref: "#/definitions/BrandPost"
      responses:
        200:
          description: |
            A `Brand` object.
          schema:
            $ref: "#/definitions/BrandResponse"
        422:
          description: |
            Brand was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            Brand was in conflict with another brand. This is the result of duplicate unique fields such as name.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes one or more `Brand` objects from the BigCommerce Catalog.
      operationId: deleteBrands
      parameters:
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterPageTitleParam"
      responses:
        204:
          description: |
            An empty response.
  /catalog/brands/{brand_id}:
    parameters:
      - $ref: "#/parameters/BrandIdParam"
    get:
      tags:
        - Catalog
      description:
        Gets a `Brand` object.
      operationId: getBrandById
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Brand` object.
          schema:
            $ref: "#/definitions/BrandResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description: |
        Updates a `Brand` in the BigCommerce Catalog.
      operationId: updateBrand
      parameters:
        - name: brand
          in: body
          required: true
          description: |
            Returns a `Brand` from the BigCommerce Catalog.
          schema:
            $ref: "#/definitions/BrandPut"
      responses:
        200:
          description: |
            A `Brand` object.
          schema:
            $ref: "#/definitions/BrandResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `Brand` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Brand` was in conflict with another product. This is the result of duplicate unique values, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Brand` from the BigCommerce Catalog.
      operationId: deleteBrandById
      responses:
        204:
          description: |
            An empty response.
  /catalog/brands/{brand_id}/metafields:
    parameters:
      - $ref: "#/parameters/BrandIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield` object list, by `brand_id`.
      operationId: getBrandMetafieldsByBrandId
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/MetafieldKeyParam"
        - $ref: "#/parameters/MetafieldNamespaceParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of metafields and metadata.
          schema:
            $ref: "#/definitions/MetaFieldCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    post:
      tags:
        - Catalog
      description:
        Creates a product `Metafield`.
      operationId: createBrandMetafield
      parameters:
        - name: Metafield
          in: body
          required: true
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldPost"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        422:
          description: |
            The `Metafield` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Metafield` was in conflict with another `Metafield`. This can be the result of duplicate unique key combination of the app's client id, namespace, key, resource_type, and resource_id.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /catalog/brands/{brand_id}/metafields/{metafield_id}:
    parameters:
      - $ref: "#/parameters/MetafieldIdParam"
      - $ref: "#/parameters/BrandIdParam"
    get:
      tags:
        - Catalog
      description: |
        Gets a `Metafield`, by `category_id`.
      operationId: getBrandMetafieldByBrandId
      parameters:
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            A `Metafield` object.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Catalog
      description:
        Updates a `Metafield` object.
      operationId: updateBrandMetafield
      parameters:
      - name: Metafield
        in: body
        required: true
        description: |
          A `Metafield` object.
        schema:
          $ref: "#/definitions/MetafieldPut"
      responses:
        200:
          description: |
            A metafield and metadata.
          schema:
            $ref: "#/definitions/MetafieldResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Metafield`.
      operationId: deleteBrandMetafieldById
      responses:
        204:
          description: |
            An empty response.
  /catalog/brands/{brand_id}/image:
    parameters:
      - $ref: "#/parameters/BrandIdParam"
    post:
      tags:
        - Catalog
      description: |
        Creates an image on a `Brand`. Publicly accessible URLs and files (form post) are valid parameters.
      operationId: createBrandImage
      parameters:
        - $ref: "#/parameters/ImageFileParam"
      consumes:
        - multipart/form-data
      responses:
        200:
          description: |
            A ResourceImage and metadata.
          schema:
            $ref: "#/definitions/ImageResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            Image was not valid. This is the result of a missing `image_file` field, or of an incorrect file type. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Catalog
      description: |
        Deletes a `Brand` image from the BigCommerce Catalog.
      operationId: deleteBrandImage
      responses:
        204:
          description: Image deleted from the brand.
  /catalog/variants:
    get:
      tags:
        - Catalog
      description: |
        Returns a `Variant` object list from the BigCommerce Catalog.
      operationId: getVariants
      parameters:
        - $ref: "#/parameters/FilterIdParam"
        - $ref: "#/parameters/FilterSkuParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludeFieldsParam"
        - $ref: "#/parameters/FilterExcludeFieldsParam"
      responses:
        200:
          description: |
            An array of variants and metadata.
          schema:
            $ref: "#/definitions/VariantCollectionResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
  /catalog/summary:
    get:
      tags:
        - Catalog
      description: |
        Returns a lightweight inventory summary from the BigCommerce Catalog.
      responses:
        200:
          description: |
            An array of catalog summary and metadata.
          schema:
            $ref: "#/definitions/CatalogSummaryResponse"
  /customers/subscribers:
    get:
      tags:
        - Customers
      description: |
        Returns a paginated Subscribers collection.
      operationId: getSubscribers
      parameters:
        - $ref: "#/parameters/FilterEmailParam"
        - $ref: "#/parameters/FilterFirstNameParam"
        - $ref: "#/parameters/FilterLastNameParam"
        - $ref: "#/parameters/FilterSourceParam"
        - $ref: "#/parameters/FilterOrderIdParam"
        - $ref: "#/parameters/FilterDateCreatedParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
      responses:
        200:
          description: |
            An array of subscriber objects and metadata.
          schema:
            $ref: "#/definitions/SubscriberCollectionResponse"
    post:
      tags:
        - Customers
      description: |
        Creates a `Subscriber` object.
      operationId: createSubscriber
      parameters:
        - name: subscriber
          in: body
          required: true
          description: |
            `Subscriber` object.
          schema:
            $ref: "#/definitions/SubscriberPost"
      responses:
        200:
          description: |
            A `Subscriber` object.
          schema:
            $ref: "#/definitions/SubscriberResponse"
        422:
          description: |
            The `Subscriber` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Subscriber` was in conflict with another subscriber. This is the result of duplicate unique values, such as email.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Customers
      description: |
        Deletes a Subscriber or Subscribers from BigCommerce Customers.
      operationId: deleteSubscribers
      parameters:
        - $ref: "#/parameters/FilterEmailParam"
        - $ref: "#/parameters/FilterFirstNameParam"
        - $ref: "#/parameters/FilterLastNameParam"
        - $ref: "#/parameters/FilterSourceParam"
        - $ref: "#/parameters/FilterOrderIdParam"
        - $ref: "#/parameters/FilterDateCreatedParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
      responses:
        204:
          description: |
            An empty response.
  /customers/subscribers/{subscriber_id}:
    parameters:
      - $ref: "#/parameters/SubscriberIdParam"
    get:
      tags:
        - Customers
      description:
        Gets `Subscriber` object.
      operationId: getSubscriberById
      responses:
        200:
          description: |
            A `Subscriber` object.
          schema:
            $ref: "#/definitions/SubscriberResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
    put:
      tags:
        - Customers
      description: |
        Updates a `Subscriber` object.
      operationId: updateSubscriber
      parameters:
        - name: subscriber
          in: body
          required: true
          description: |
            Returns a `Subscriber` object.
          schema:
            $ref: "#/definitions/SubscriberPut"
      responses:
        200:
          description: |
            A `Subscriber` object.
          schema:
            $ref: "#/definitions/SubscriberResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            The `Subscriber` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            The `Subscriber` was in conflict with another subscriber. This is the result of duplicate unique values, such as `email`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Customers
      description: |
        Deletes a `Subscriber` object.
      operationId: deleteSubscriberById
      responses:
        204:
          description: |
            An empty response.
  /customers/settings/channels/{channelId}:
    parameters:
      - name: "channelId"
        in: "path"
        description: "The ID of a Channel that's available through GET /channels"
        required: true
        type: "integer"
        format: "int64"
    get:
      tags:
        - Customers
      description: |
        Get customer settings for a channel
      operationId: getCustomerSettings
      responses:
        200:
          description: |
            Success.
          schema:
            $ref: "#/definitions/CustomersSettings"
    put:
      tags:
        - Customers
      description: |
        Updates customer settings in BigCommerce.
      operationId: updateCustomerSettings
      parameters:
        - name: ChannelSettings
          in: body
          required: true
          description: |
            A BigCommerce `ChannelSettings` object.
          schema:
            $ref: "#/definitions/CustomersSettings"
      responses:
        200:
          description: |
            Success.
          schema:
            $ref: "#/definitions/CustomersSettings"
  /customers:
    get:
      description: |-
        Returns a list of Customers. Optional filter parameters can be passed in.
        **Notes**
        Attribute names are not available on the customer object.
      summary: Get All Customers
      tags:
        - Customers
      operationId: CustomersGet
      deprecated: false
      parameters:
        - name: page
          in: query
          type: integer
          description: Page number. `page=1`
        - in: query
          type: number
          name: limit
          description: Items count per page. `limit=50`
        - name: 'id:in'
          in: query
          type: array
          description: |-
            Filter items by id.
            `id:in=4,5,6`
          items:
            type: integer
        - name: 'company:in'
          in: query
          type: array
          items:
            type: string
          description: 'Filter items by company. `company:in=bigcommerce,commongood`'
        - name: 'customer_group_id:in'
          in: query
          type: array
          description: 'Filter items by customer_group_id. `customer_group_id:in=5,6`'
          items:
            type: string
        - name: date_created
          in: query
          type: string
          description: 'Filter items by date_created. `date_created=2018-09-05T13:43:54`'
          format: date-time
        - name: 'date_created:max'
          in: query
          type: string
          description: 'Filter items by maximum date_created. `date_created:max=2018-09-10`'
        - name: 'date_created:min'
          in: query
          type: string
          description: 'Filter items by date_created. `date_created:min=2018-09-05`'
          format: date-time
        - name: date_modified
          in: query
          type: string
          description: 'Filter items by date_modified. `date_modified=2018-09-05T13:45:03`'
          format: date-time
        - name: 'date_modified:min'
          in: query
          type: string
          description: 'Filter items by mininum date_modified. `date_modified:min=2019-09-04T:00:00:00` or `date_modified:min=2019-09-04`'
        - name: 'date_modified:max'
          in: query
          type: string
          format: date-time
          description: 'Filter items by maximum date_modified `date_modified:max=2018-09-05T13:45:03` or `date_modified:max=2019-09-04`'
        - name: 'email:in'
          in: query
          type: string
          description: 'Filter items by email. `email:in=janedoe@email.com`'
        - name: 'name:in'
          in: query
          type: array
          description: Filter items by first_name and last_name. `name=james moriarty`
          items:
            type: string
        - name: 'name:like'
          in: query
          type: array
          description: |-
            Filter items by substring in first_name and last_name.
            `name:like=moriarty, sherlock`
            Concatenates the first_name and last_name fields.
          items:
            type: string
        - name: 'registration_ip_address:in'
          in: query
          type: array
          description: |-
            Filter items by registration_ip_address. If the customer was created using the API, then registration address is blank.
            `registration_ip_address:in=12.345.6.789`
          items:
            type: integer
        - name: include
          in: query
          type: string
          description: |-
            Indicates whether to include customer sub-resources:
             * `addresses` - customer addresses
             * `storecredit` - store credit
             * `attributes` - customer attributes and address attributes
             * `formfields` - customer and address form fields
             `include=addresses,storecredit,attributes,formfields`
          enum:
            - addresses
            - storecredit
            - attributes
            - formfields
        - in: query
          name: sort
          type: string
          description: |-
            Sort items by date_created or last_name:
            * `date_created:asc` - date created, ascending
            * `date_created:desc` - date created, descending
            * `last_name:asc` - last name, ascending
            * `last_name:desc` - last name, descending
            Example: `sort=last_name:asc`
          enum:
            - 'date_created:asc'
            - 'date_created:desc'
            - 'last_name:asc'
            - 'last_name:desc'
      responses:
        200:
          schema:
            $ref: '#/definitions/CustomerCollectionResponse'
    post:
      description: |-
        Creates Customers. Multiple customers can be created in one call.
        **Required Fields**
        * last_name
        * first_name
        * email
        **Required Fields Customer Address**
        * first_name
        * city
        * country_code
        * state_or_province
        * last_name
        * address1
        * postal_code
        **Required Fields Attributes**
        * Attributes must be [created](https://developer.bigcommerce.com/api-reference/customer-subscribers/v3-customers-api/customer-attributes/customersattributespost) **BEFORE** creating a customer.
        * attribute_id
        * attribute_value -- This is input as a string, regardless of the [Type](/api-reference/customer-subscribers/v3-customers-api/models/type).
      summary: Create Customers
      tags:
        - Customers
      operationId: CustomersPost
      deprecated: false
      parameters:
        - name: body
          in: body
          required: true
          description: ''
          schema:
            type: array
            items:
              title: Customer Post
              type: object
              properties:
                email:
                  description: The email of the customer. Must be unique.
                  type: string
                  minLength: 3
                  maxLength: 255
                first_name:
                  description: The first name of the customer.
                  type: string
                  minLength: 1
                  maxLength: 100
                last_name:
                  description: The last name of the customer.
                  type: string
                  minLength: 1
                  maxLength: 100
                company:
                  description: The company of the customer.
                  type: string
                  minLength: 0
                  maxLength: 255
                phone:
                  description: The phone number of the customer.
                  type: string
                  minLength: 0
                  maxLength: 50
                notes:
                  description: The customer notes.
                  type: string
                tax_exempt_category:
                  description: The tax exempt category code for the customer.
                  type: string
                  minLength: 0
                  maxLength: 255
                customer_group_id:
                  description: Id of the group which this customer belongs to.
                  type: integer
                  format: int32
                addresses:
                  description: Array of customer addresses. Limited to 10
                  type: array
                  maxItems: 10
                  items:
                    title: Address For Customer
                    example:
                      address1: Addr 1
                      address2: ''
                      address_type: residential
                      city: San Francisco
                      company: History
                      country_code: US
                      first_name: Ronald
                      last_name: Swimmer
                      phone: '707070707'
                      postal_code: '33333'
                      state_or_province: California
                    type: object
                    properties:
                      first_name:
                        description: The first name of the customer address.
                        type: string
                        minLength: 1
                        maxLength: 255
                      last_name:
                        description: The last name of the customer address.
                        type: string
                        minLength: 1
                        maxLength: 255
                      company:
                        description: The company of the customer address.
                        type: string
                        minLength: 0
                        maxLength: 255
                      address1:
                        description: The address 1 line.
                        type: string
                      address2:
                        description: The address 2 line.
                        type: string
                      city:
                        description: The city of the customer address.
                        type: string
                        minLength: 0
                        maxLength: 100
                      state_or_province:
                        description: The state or province name
                        type: string
                        minLength: 0
                        maxLength: 100
                      postal_code:
                        description: The postal code of the customer address.
                        type: string
                        minLength: 0
                        maxLength: 30
                      country_code:
                        description: The country code of the customer address.
                        type: string
                        minLength: 2
                        maxLength: 2
                      phone:
                        description: The phone number of the customer address.
                        type: string
                        minLength: 0
                        maxLength: 50
                      address_type:
                        title: Address Type
                        description: The address type. Residential or Commercial
                        example: residential
                        type: string
                        enum:
                          - residential
                          - commercial
                    required:
                      - first_name
                      - last_name
                      - address1
                      - city
                      - state_or_province
                      - postal_code
                      - country_code
                attributes:
                  description: Array of customer attributes. Limited to 10
                  type: array
                  maxItems: 10
                  items:
                    title: Customer Attribute Value For Customer
                    example:
                      attribute_id: 55
                      value: string value
                    type: object
                    properties:
                      attribute_id:
                        description: Attribute ID.
                        type: integer
                        format: int32
                      attribute_value:
                        description: 'Attribute value. This will always be a string, regardless of the attributes type.'
                        type: string
                        minLength: 0
                        maxLength: 255
                    required:
                      - attribute_id
                      - attribute_value
                authentication:
                  title: Customer Authentication
                  type: object
                  properties:
                    force_password_reset:
                      description: 'If `true`, this customer will be forced to change password on next login.'
                      type: boolean
                    new_password:
                      description: New password for customer. Write only field
                      type: string
                accepts_product_review_abandoned_cart_emails:
                  type: boolean
                  description: It determines if the customer is signed up to receive either product review or abandoned cart emails or recieve both emails.
                store_credit_amounts:
                  $ref: '#/definitions/storeCreditAmounts'
              required:
                - email
                - first_name
                - last_name
      responses:
        200:
          schema:
            $ref: '#/definitions/CustomerCollectionResponse'
        422:
          description: The *Customer* was not valid. This is the result of missing required fields or trying to edit a read only field. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    put:
      description: |-
        Updates Customers. Subresource updates are not supported. Multiple customers can be updated in one call.
        **Required Fields**
        * id -- ID of the *Customer* This must be included in the request body
        **Read Only Fields**
        * id
        * registration_ip_address
        * date_created
        * date_modified
        **Notes**
        Attributes Values can not be updated using Update a Customer. Use the Update a [Customer Attribute Values](https://developer.bigcommerce.com/api-reference/customer-subscribers/v3-customers-api/customer-attribute-values/customersattributevaluesput) endpoint.
      summary: Update Customers
      tags:
        - Customers
      operationId: CustomersPut
      deprecated: false
      parameters:
        - name: body
          in: body
          required: true
          description: ''
          schema:
            type: array
            items:
              title: Customer Put
              type: object
              properties:
                email:
                  description: The email of the customer. Must be unique.
                  type: string
                  minLength: 3
                  maxLength: 255
                first_name:
                  description: The first name of the customer.
                  type: string
                  minLength: 1
                  maxLength: 100
                last_name:
                  description: The last name of the customer.
                  type: string
                  minLength: 1
                  maxLength: 100
                company:
                  description: The company of the customer.
                  type: string
                  minLength: 0
                  maxLength: 255
                phone:
                  description: The phone number of the customer.
                  type: string
                  minLength: 0
                  maxLength: 50
                registration_ip_address:
                  description: The IP address from which this customer was registered.
                  type: string
                  minLength: 0
                  maxLength: 30
                notes:
                  description: The customer notes.
                  type: string
                tax_exempt_category:
                  description: The tax exempt category code for the customer.
                  type: string
                  minLength: 0
                  maxLength: 255
                customer_group_id:
                  description: Id of the group which this customer belongs to.
                  type: integer
                  format: int32
                id:
                  description: The unique numeric ID of the customer.
                  type: integer
                  format: int32
                authentication:
                  title: Customer Authentication
                  type: object
                  properties:
                    force_password_reset:
                      description: 'If `true`, this customer will be forced to change password on next login.'
                      type: boolean
                    new_password:
                      description: New password for customer. Write only field
                      type: string
                accepts_product_review_abandoned_cart_emails:
                  type: boolean
                  description: It determines if the customer is signed up to receive either product review or abandoned cart emails or recieve both emails.
                store_credit_amounts:
                  $ref: '#/definitions/storeCreditAmounts'
              required:
                - id
      responses:
        200:
          schema:
            $ref: '#/definitions/CustomerCollectionResponse'
        422:
          description: |
            The `Customer` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      description: |-
        Deletes Customers.
        **Required Query**
        * id:in -- ID of the customer
        **Notes**
        A query is required to delete customers. If not provided, a 204 is returned, with no changes to the data.
      summary: Delete Customers
      tags:
        - Customers
      operationId: CustomersDelete
      deprecated: false
      parameters:
        - in: query
          name: 'id:in'
          type: array
          items:
            type: integer
          description: |-
            Filter items by id.
            `id:in=4,5,6`
          required: true
      responses:
        204:
          description: ''
          headers: {}
  /orders/{order_id}/transactions:
      parameters:
        - $ref: "#/parameters/OrderIdParam"
      get:
        tags:
          - Orders
        description: |
          Returns a collection of `Transaction` objects related to a BigCommerce Order.
        operationId: getTransactions
        responses:
          200:
            description: |
              An array of transactions.
            schema:
              $ref: "#/definitions/TransactionCollectionResponse"
          204:
            description: |
              No content found to fulfill request.
            schema:
              $ref: "#/definitions/NoContent"
          404:
            description: |
              The resource was not found.
            schema:
              $ref: "#/definitions/NotFound"
      post:
        tags:
          - Orders
        description: |
          Creates a new `Transaction` related to a BigCommerce Order.
        operationId: createTransaction
        parameters:
          - name: transaction
            in: body
            required: true
            description: |
              A BigCommerce `Transaction` object.
            schema:
              $ref: "#/definitions/TransactionPost"
        responses:
          200:
            description: |
              Successful transaction object created call
            schema:
              $ref: "#/definitions/TransactionResponse"
          204:
            description: |
              No content found to fulfill request.
            schema:
              $ref: "#/definitions/NoContent"
          404:
            description: |
              The resource was not found.
            schema:
              $ref: "#/definitions/NotFound"
  /themes:
    get:
      tags:
        - Themes
      operationId: getStoreThemes
      summary: Gets all store themes.
      responses:
        200:
          description: Returns all themes associated with the BigCommerce store.
          schema:
            $ref: "#/definitions/ThemesCollectionResponse"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
    post:
      tags:
        - Themes
      operationId: uploadTheme
      summary: Uploads a new theme to a BigCommerce store.
      consumes:
      - multipart/form-data
      parameters:
      - name: file
        description: The file.
        in: formData
        type: file
        required: true
      responses:
        201:
          description: Job ID for the background job processing the theme upload.
          schema:
            $ref: "#/definitions/JobId"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /themes/{theme_id}:
    get:
      tags:
        - Themes
      operationId: getStoreTheme
      summary: Gets a specified store theme.
      parameters:
      - $ref: "#/parameters/ThemeIdParam"
      responses:
        200:
          description: The theme.
          schema:
            $ref: "#/definitions/ThemeResponse"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - Themes
      operationId: deleteStoreTheme
      summary: Deletes a specified store theme.
      parameters:
      - $ref: "#/parameters/ThemeIdParam"
      responses:
        204:
          description: |
            No content found to fulfill the request.
          schema:
            $ref: "#/definitions/NoContent"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /themes/{theme_id}/actions/download:
    parameters:
      - $ref: "#/parameters/ThemeIdParam"
    post:
      tags:
        - Themes
      operationId: downloadTheme
      summary: Downloads a specified store theme.
      parameters:
      - name: which
        in: body
        required: true
        description: |
          A BigCommerce object specifying which theme to download. One of: `original`: the original Marketplace or uploaded custom theme; `last_activated`: the theme version most recently applied to the store; `last_created`: the theme version most recently created. If `which` is missing or invalid in the request, its value will default to `last_activated`.
        schema:
          $ref: "#/definitions/WhichThemeToDownload"
      responses:
        200:
          description: |
            Job ID for the background job processing the download.
          schema:
            $ref: "#/definitions/JobId"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /themes/actions/activate:
    post:
      tags:
        - Themes
      operationId: activateStoreTheme
      summary: Activates a store theme.
      parameters:
      - name: body
        description: Request parameters.
        in: body
        required: true
        schema:
          $ref: "#/definitions/Activate"
      responses:
        204:
          description: |
            No content found to fulfill the request.
          schema:
            $ref: "#/definitions/NoContent"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /themes/jobs/{job_id}:
    get:
      tags:
        - Themes
      operationId: getJob
      summary: Gets a specified job.
      parameters:
      - $ref: "#/parameters/JobIdParam"
      responses:
        200:
          description: The job.
          schema:
            $ref: "#/definitions/JobResponse"
        default:
          description: Error message.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /pricelists:
    get:
      tags:
        - PriceLists
      description: |
        Returns a paginated collection of `Price List` objects from BigCommerce.
      operationId: getPriceListCollection
      parameters:
        - $ref: "#/parameters/FilterIdParam"
        - $ref: "#/parameters/FilterNameParam"
        - $ref: "#/parameters/FilterDateCreatedParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
      responses:
        200:
          description: |
            An array of Price Lists and metadata.
          schema:
            $ref: "#/definitions/PriceListCollectionResponse"
    post:
      tags:
        - PriceLists
      description: |
        Creates a `Price List` in BigCommerce.
      operationId: createPriceList
      parameters:
        - name: PriceList
          in: body
          required: true
          description: |
            A BigCommerce `PriceList` object.
          schema:
            $ref: "#/definitions/PriceListPost"
      responses:
        200:
          description: |
            A Price List.
          schema:
            $ref: "#/definitions/PriceListResponse"
        422:
          description: |
            `Price List` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            `Price List` was in conflict with another Price List. This is the result of duplicate unique values, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
        tags:
          - PriceLists
        description: |
          Deletes a set of `Price List` objects from BigCommerce using a filter. Also removes all associated Price Recordss.
        operationId: deletePriceListsByFilter
        parameters:
                - $ref: "#/parameters/FilterIdParam"
                - $ref: "#/parameters/FilterNameParam"
        responses:
          204:
            description: |
              An empty response.
  /pricelists/{price_list_id}:
    parameters:
      - $ref: "#/parameters/PriceListIdParam"
    get:
      tags:
        - PriceLists
      description: |
        Returns a `Price List` object from BigCommerce.
      operationId: getPriceList
      responses:
        200:
          description: |
            An array of Price Lists and metadata.
          schema:
            $ref: "#/definitions/PriceListResponse"
    put:
      tags:
        - PriceLists
      description: |
          Updates a single `Price List` object.
      operationId: updatePriceList
      parameters:
        - name: PriceList
          in: body
          required: true
          description: |
            A BigCommerce `Price List` object.
          schema:
            $ref: "#/definitions/PriceListPut"
      responses:
        200:
          description: |
            A Price List.
          schema:
            $ref: "#/definitions/PriceListResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            `Price List` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            `Price List` was in conflict with another Price List. This is the result of duplicate unique values, such as `name`.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - PriceLists
      description: |
        Deletes one `Price List` object from BigCommerce by its ID. Also removes all associated Price Records.
      operationId: deletePriceList
      responses:
        204:
          description: |
            An empty response.
  /pricelists/{price_list_id}/records:
    parameters:
      - $ref: "#/parameters/PriceListIdParam"
    get:
      tags:
        - PriceLists
      description: |
        Fetches the `Price Records` associated with a particular Price List, using a filter.
      operationId: getPriceListRecordCollection
      parameters:
        - $ref: "#/parameters/FilterVariantIdParam"
        - $ref: "#/parameters/FilterProductIdParam"
        - $ref: "#/parameters/FilterCurrencyParam"
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/FilterIncludePriceRecordParam"
        - $ref: "#/parameters/FilterPriceParam"
        - $ref: "#/parameters/FilterSalePriceParam"
        - $ref: "#/parameters/FilterRetailPriceParam"
        - $ref: "#/parameters/FilterMapPriceParam"
        - $ref: "#/parameters/FilterCalculatedPriceParam"
        - $ref: "#/parameters/FilterDateCreatedParam"
        - $ref: "#/parameters/FilterDateModifiedParam"
        - $ref: "#/parameters/FilterSkuParam"
      responses:
        200:
          description: |
            An array of prices and metadata.
          schema:
            $ref: "#/definitions/PriceRecordCollectionResponse"
    put:
      tags:
        - PriceLists
      description: |
        Creates or updates a batch of `Price Records` associated with a particular Price List.
      operationId: setPriceListRecordCollection
      parameters:
        - name: X-Strict-Mode
          in: header
          type: integer
          required: false
          default: 0
          description: |
            Header that determines whether the Batch API operates in strict mode or not.  Strict mode will reject the entire request if any item in the batch has an error.
        - name: PriceRecordBatch
          in: body
          required: true
          description: |
            A BigCommerce `Price Record` request.
          schema:
            $ref: "#/definitions/PriceRecordCollectionPut"
      responses:
        200:
          description: |
           Success response for batch PUT of `Price Records`.
          schema:
            $ref: "#/definitions/SuccessBatchResponse"
        422:
          description: |
           Error response for batch PUT of `Price Records`.  May include errors during partial update in non-strict mode.
          schema:
            $ref: "#/definitions/PriceRecordBatchErrorResponse"
    delete:
      tags:
        - PriceLists
      description: |
        Deletes one or more `Price Record` objects from BigCommerce using a filter.
      operationId: deletePriceListRecordsByFilter
      parameters:
        - $ref: "#/parameters/FilterVariantIdParam"
      responses:
        204:
          description: |
            An empty response.
          schema:
            $ref: "#/definitions/NoContent"
  /pricelists/{price_list_id}/records/{variant_id}:
    parameters:
    - $ref: "#/parameters/PriceListIdParam"
    - $ref: "#/parameters/VariantIdParam"
    get:
      tags:
        - PriceLists
      description: |
        Fetches an array of `Price Records` matching a particular Price List and Variant ID. Will contain any set price records by currency.
      operationId: getPriceListRecordsByVariantId
      responses:
        200:
          description: |
            An array of prices and metadata.
          schema:
            $ref: "#/definitions/PriceRecordCollectionResponse"
    delete:
      tags:
        - PriceLists
      description: |
        Deletes the collection of `Price Record` objects associated with a certain price list and variant ID.
      operationId: deletePriceListRecordsByVariantId
      responses:
        204:
          description: |
            An empty response.
  /pricelists/{price_list_id}/records/{variant_id}/{currency_code}:
    parameters:
    - $ref: "#/parameters/PriceListIdParam"
    - $ref: "#/parameters/VariantIdParam"
    - $ref: "#/parameters/PriceRecordCurrencyParam"
    get:
      tags:
        - PriceLists
      description: |
        Returns a `Price Record` object from BigCommerce.
      operationId: getPriceListRecord
      parameters:
        - $ref: "#/parameters/FilterIncludePriceRecordParam"
      responses:
        200:
          description: |
            An array of prices and metadata.
          schema:
            $ref: "#/definitions/PriceRecordResponse"
    put:
      tags:
        - PriceLists
      description: |
          Creates or updates a single `Price Record` object.
      operationId: setPriceListRecord
      parameters:
        - name: PriceRecord
          in: body
          required: true
          description: |
            A BigCommerce `Price Record` object.
          schema:
            $ref: "#/definitions/PriceRecordPut"
      responses:
        200:
          description: |
            A price record.
          schema:
            $ref: "#/definitions/PriceRecordResponse"
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/NotFound"
        422:
          description: |
            `Price Record` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: |
            `Price Record` was in conflict with another price record. This is the result of duplicate unique values.
          schema:
            $ref: "#/definitions/ErrorResponse"
    delete:
      tags:
        - PriceLists
      description: |
        Deletes one `Price Record` object from BigCommerce, by `variant_id`.
      operationId: deletePriceListRecord
      responses:
        204:
          description: |
            An empty response.
  /content/scripts:
    post:
      tags:
        - Script
      summary: Creates a script.
      operationId: createScript
      parameters:
        - name: scriptBody
          in: body
          required: true
          schema:
            $ref: "#/definitions/ScriptPost"
      responses:
        200:
          schema:
            $ref: "#/definitions/ScriptResponse"
          description: |
            Success.
        422:
          schema:
            $ref: "#/definitions/ErrorResponse"
          description: |
            This is the result of missing required fields, or of invalid data. See the response for more details.
    get:
      tags:
        - Script
      summary: Gets all scripts.
      operationId: getScripts
      parameters:
        - $ref: "#/parameters/PageParam"
        - $ref: "#/parameters/LimitParam"
        - $ref: "#/parameters/ScriptsSortKeyParam"
        - $ref: "#/parameters/DirectionParam"
      responses:
        200:
          schema:
            $ref: "#/definitions/ScriptsResponse"
          description: |
            Success.
        422:
          schema:
            $ref: "#/definitions/ErrorResponse"
          description: |
            This is the result of missing required fields, or of invalid data. See the response for more details.
  /content/scripts/{uuid}:
    get:
      tags:
        - Script
      summary: Gets a script.
      operationId: getScript
      parameters:
        - $ref: "#/parameters/ScriptUUID"
      responses:
        200:
          schema:
            $ref: "#/definitions/ScriptResponse"
          description: Success
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/ErrorResponse"
        422:
          schema:
            $ref: "#/definitions/ErrorResponse"
          description: |
            This is the result of missing required fields, or of invalid data. See the response for more details.
    put:
      tags:
        - Script
      summary: Updates a script.
      operationId: updateScript
      parameters:
        - $ref: "#/parameters/ScriptUUID"
        - name: scriptBody
          in: body
          required: true
          schema:
            $ref: "#/definitions/ScriptPut"
      responses:
        200:
          schema:
            $ref: "#/definitions/ScriptResponse"
          description: Success
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/ErrorResponse"
        422:
          schema:
            $ref: "#/definitions/ErrorResponse"
          description: |
            This is the result of missing required fields, or of invalid data. See the response for more details.
    delete:
      tags:
        - Script
      summary: Deletes a script.
      operationId: deleteScript
      parameters:
        - $ref: "#/parameters/ScriptUUID"
      responses:
        204:
          description: An empty response.
        404:
          description: |
            The resource was not found.
          schema:
            $ref: "#/definitions/ErrorResponse"
        422:
          schema:
            $ref: "#/definitions/ErrorResponse"
          description: |
            This is the result of missing required fields, or of invalid data. See the response for more details.
parameters:
  TemplateUUID:
    name: uuid
    description: The identifier for a specific template.
    required: true
    in: path
    type: string
    format: uuid
  FilterTemplateFileParam:
    in: query
    name: template_file
    description: "The template file, for example: `pages/home`."
    type: string
    required: false
  RequiredTemplateFile:
    in: query
    name: templateFile
    description: "The template file, for example: `pages/home`."
    type: string
    required: true
  ScriptUUID:
    name: uuid
    description: The identifier for a specific script.
    required: true
    in: path
    type: string
    format: uuid
  FilterIdParam:
    name: id
    description: |
      Filter items by id.
    required: false
    in: query
    type: integer
  FilterSkuParam:
    name: sku
    description: |
      Filter items by sku.
    required: false
    in: query
    type: string
  FilterNameParam:
    name: name
    description: |
      Filter items by name.
    required: false
    in: query
    type: string
  FilterEmailParam:
    name: email
    description: |
      Filter items by email.
    required: false
    in: query
    type: string
  FilterFirstNameParam:
    name: first_name
    description: |
      Filter items by first_name.
    required: false
    in: query
    type: string
  FilterLastNameParam:
    name: last_name
    description: |
      Filter items by last_name.
    required: false
    in: query
    type: string
  FilterSourceParam:
    name: source
    description: |
      Filter items by source.
    required: false
    in: query
    type: string
  FilterOrderIdParam:
    name: order_id
    description: |
      Filter items by order_id.
    required: false
    in: query
    type: integer
  FilterUpcParam:
    name: upc
    description: |
      Filter items by upc.
    required: false
    in: query
    type: string
  FilterPriceParam:
    name: price
    description: |
      Filter items by price.
    required: false
    in: query
    type: number
  FilterSalePriceParam:
    name: sale_price
    description: |
      Filter items by sale_price.
    required: false
    in: query
    type: number
  FilterRetailPriceParam:
    name: retail_price
    description: |
      Filter items by retail_price.
    required: false
    in: query
    type: number
  FilterMapPriceParam:
    name: map_price
    description: |
      Filter items by map_price.
    required: false
    in: query
    type: number
  FilterCalculatedPriceParam:
    name: calculated_price
    description: |
      Filter items by calculated_price.
    required: false
    in: query
    type: number
  FilterWeightParam:
    name: weight
    description: |
      Filter items by weight.
    required: false
    in: query
    type: number
  FilterConditionParam:
    name: condition
    description: |
      Filter items by condition.
    required: false
    in: query
    type: integer
  FilterBrandIdParam:
    name: brand_id
    description: |
      Filter items by brand_id.
    required: false
    in: query
    type: integer
  FilterDateModifiedParam:
    name: date_modified
    description: |
      Filter items by date_modified.
    required: false
    in: query
    type: string
    format: date-time
  FilterDateCreatedParam:
    name: date_created
    description: |
      Filter items by date_created.
    required: false
    in: query
    type: string
    format: date-time
  FilterDateLastImportedParam:
    name: date_last_imported
    description: |
      Filter items by date_last_imported.
    required: false
    in: query
    type: string
    format: date-time
  FilterIsVisibleParam:
    name: is_visible
    description: |
      Filter items by is_visible.
    required: false
    in: query
    type: integer
  FilterIsFeaturedParam:
    name: is_featured
    description: |
      Filter items by is_featured.
    required: false
    in: query
    type: integer
  FilterIsFreeShippingParam:
    name: is_free_shipping
    description: |
      Filter items by is_free_shipping.
    required: false
    in: query
    type: integer
  FilterInventoryLevelParam:
    name: inventory_level
    description: |
      Filter items by inventory_level.
    required: false
    in: query
    type: integer
  FilterInventoryLowParam:
    name: inventory_low
    description: |
      Filter items by inventory_low. Values: 1, 0.
    required: false
    in: query
    type: integer
  FilterOutOfStockParam:
    name: out_of_stock
    description: |
      Filter items by out_of_stock. To enable the filter, pass `out_of_stock`=`1`.
    required: false
    in: query
    type: integer
  FilterTotalSoldParam:
    name: total_sold
    description: |
      Filter items by total_sold.
    required: false
    in: query
    type: integer
  ProductFilterTypeParam:
    name: type
    description: |
      Filter items by type: `physical` or `digital`.
    required: false
    in: query
    type: string
  FilterCategoriesParam:
    name: categories
    description: |
      Filter items by categories.
    required: false
    in: query
    type: integer
  FilterKeywordParam:
    name: keyword
    description: |
      Filter items by keywords.
    required: false
    in: query
    type: string
  ProductFilterKeywordParam:
    name: keyword
    description: |
      Filter items by keywords found in the `name`, `description`, or `sku` fields, or in the brand name.
    required: false
    in: query
    type: string
  ProductFilterKeywordContextParam:
    name: keyword_context
    description: |
      Set context for a product search.
    required: false
    in: query
    type: string
    enum:
      - shopper
      - merchant
  FilterStatusParam:
    name: status
    description: |
      Filter items by status.
    required: false
    in: query
    type: integer
  FilterIncludeParam:
    name: include
    description: |
      Sub-resources to include on a product, in a comma-separated list. Valid expansions currently include `variants`, `images`, 'primary_image`, `custom_fields`, and `bulk_pricing_rules`.
    required: false
    in: query
    type: string
    enum:
      - variants
      - images
      - custom_fields
      - bulk_pricing_rules
      - primary_image
  FilterIncludePriceRecordParam:
    name: include
    description: |
      Sub-resources to include on a price record, in a comma-separated list. Valid expansions currently include `bulk_pricing_tiers` and `sku`.  Other valies will be ignored.
    required: false
    in: query
    type: string
    enum:
      - bulk_pricing_tiers
      - sku
  FilterIncludeFieldsParam:
    name: include_fields
    description: |
      Fields to include, in a comma-separated list. The ID and the specified fields will be returned.
    required: false
    in: query
    type: string
  FilterExcludeFieldsParam:
    name: exclude_fields
    description: |
      Fields to exclude, in a comma-separated list. The specified fields will be excluded from a response. The ID cannot be excluded.
    required: false
    in: query
    type: string
  FilterParentIdParam:
    name: parent_id
    description: |
      Filter items by parent_id.
    required: false
    in: query
    type: integer
  FilterPageTitleParam:
    name: page_title
    description: |
      Filter items by page_title.
    required: false
    in: query
    type: string
  FilterAvailabilityParam:
    name: availability
    description: |
      Filter items by availability. Values are: available, disabled, preorder.
    required: false
    in: query
    type: string
    enum:
      - available
      - disabled
      - preorder
  FilterPriceListIdParam:
     name: price_list_id
     description: |
       The ID of the `Price List`.
     required: false
     in: query
     type: integer
  FilterProductIdParam:
    type: string
    name: product_id
    in: query
    required: false
    description: |
      A comma-separated list of ids of `Product`s whose prices were requested.
  FilterVariantIdParam:
    type: integer
    name: variant_id
    in: query
    required: false
    description: |
      The ID of the `Variant` whose prices were requested.
  FilterCurrencyParam:
    name: currency
    description: |
      Filter items by currency.
    required: false
    in: query
    type: string
    format: ISO-4217
  PageParam:
    name: page
    description: |
      Specifies the page number in a limited (paginated) list of products.
    required: false
    in: query
    type: integer
  LimitParam:
    name: limit
    description: |
      Controls the number of items per page in a limited (paginated) list of products.
    required: false
    in: query
    type: integer
  ScriptsSortKeyParam:
    name: sort
    description: |
      Scripts field name to sort by.
    required: false
    in: query
    type: string
    enum:
      - name
      - description
      - date_created
      - date_modified
  DirectionParam:
    name: direction
    description: |
      Sort direction. Acceptable values are: `asc`, `desc`.
    required: false
    in: query
    type: string
    enum:
      - asc
      - desc
  ProductSortParam:
    name: sort
    description: |
      Field name to sort by.
    required: false
    in: query
    type: string
    enum:
      - id
      - name
      - sku
      - price
      - date_modified
      - date_last_imported
      - inventory_level
      - is_visible
      - total_sold
  ProductIdParam:
    name: product_id
    in: path
    description: |
      The ID of the `Product` to which the resource belongs.
    required: true
    type: integer
  ReviewIdParam:
    name: review_id
    description: |
      The ID of the `review` that is being operated on.
    required: true
    in: path
    type: integer
  ImageIdParam:
    name: image_id
    description: |
      The ID of the `Image` that is being operated on.
    required: true
    in: path
    type: integer
  VideoIdParam:
    name: video_id
    description: |
      The ID of the `Video` that is being operated on.
    required: true
    in: path
    type: string
  ComplexRuleIdParam:
    name: complex_rule_id
    description: |
      The ID of the `ComplexRule`.
    required: true
    in: path
    type: integer
  ConfigurableFieldIdParam:
    name: configurable_field_id
    description: |
      The ID of the `ConfigurableField`.
    required: true
    in: path
    type: integer
  CustomFieldIdParam:
    name: custom_field_id
    description: |
      The ID of the `CustomField`.
    required: true
    in: path
    type: integer
  BulkPricingRuleIdParam:
    name: bulk_pricing_rule_id
    description: |
      The ID of the `BulkPricingRule`.
    required: true
    in: path
    type: integer
  ModifierIdParam:
    name: modifier_id
    description: |
      The ID of the `Modifier`.
    required: true
    in: path
    type: integer
  ValueIdParam:
    name: value_id
    description: |
      The ID of the `Modifier/Option Value`.
    required: true
    in: path
    type: integer
  OptionIdParam:
    name: option_id
    description: |
      The ID of the `Option`.
    required: true
    in: path
    type: integer
  SubscriberIdParam:
    name: subscriber_id
    in: path
    description: |
      The ID of the `Subscriber` requested.
    required: true
    type: integer
  VariantIdParam:
    name: variant_id
    in: path
    description: |
      ID of the variant on a product, or on an associated Price List Record.
    required: true
    type: integer
  CategoryIdParam:
    name: category_id
    in: path
    description: |
      The ID of the `Category` to which the resource belongs.
    required: true
    type: integer
  BrandIdParam:
    name: brand_id
    in: path
    description: |
      The ID of the `Brand` to which the resource belongs.
    required: true
    type: integer
  MetafieldIdParam:
    name: metafield_id
    in: path
    description: |
      The ID of the `Metafield`.
    required: true
    type: integer
  MetafieldKeyParam:
    name: key
    in: query
    description: |
      Filter based on a metafield's key.
    required: false
    type: string
  MetafieldNamespaceParam:
    name: namespace
    in: query
    description: |
      Filter based on a metafield's key.
    required: false
    type: string
  ImageFileParam:
    name: image_file
    description: |
      An image file. Supported MIME types include GIF, JPEG, and PNG.
    required: true
    in: formData
    type: file
  OrderIdParam:
      name: order_id
      in: path
      description: |
        The ID of the `Order` to which the transactions belong.
      required: true
      type: integer
  JobIdParam:
    name: job_id
    description: The job identifier.
    in: path
    type: string
    required: true
  ThemeIdParam:
    name: theme_id
    description: The theme identifier.
    in: path
    type: string
    required: true
  PriceListIdParam:
    type: integer
    name: price_list_id
    in: path
    description: |
      The ID of the `Price List` requested.
    required: true
  PriceRecordCurrencyParam:
    name: currency_code
    type: string
    in: path
    description: |
      The currency code associated with the price record being acted upon.
    required: true
    format: ISO-4217
definitions:
  Script:
    type: object
    properties:
      uuid:
        type: string
        format: uuid
        description: The primary identifier.
      name:
        type: string
        description: The user-friendly name.
      description:
        type: string
        description: The user-friendly description.
      html:
        type: string
        description: An html string containing exactly one `script` tag. Only present if `kind` is `script_tag`
      src:
        type: string
        description: The `src` attribute of the script to load. Only present if `kind` is `src`.
      auto_uninstall:
        type: boolean
        description: Whether to uninstall this script when the app associated with it is removed.
      load_method:
        type: string
        description: The load method to use for the script. Values are `default`, `async`, or `defer`.
        enum:
          - default
          - async
          - defer
      location:
        type: string
        description: Where on the page to place the script. Values are `head` or `footer`.
        enum:
          - head
          - footer
      visibility:
        type: string
        description: Which set of pages the script should load on. The values allowed for this parameter are `storefront`, `all_pages`, `checkout` and `order_confirmation`. Please note that you need to have `Checkout content` scope to use `all_pages` and `checkout`.
        enum:
          - storefront
          - all_pages
          - checkout
          - order_confirmation
      kind:
        type: string
        description: What type of script this is. Values are `src` - a `script` tag will be generated with its `src` attribute set to the value of `src`; `script_tag` - The value of `html` will be injected directly onto the page.
        enum:
          - src
          - script_tag
      api_client_id:
        type: string
        description: The client id of the API user that created this script, or blank if created by other means.
      date_created:
        type: string
        format: date-time
        description: The date on which this object was initially created.
      date_modified:
        type: string
        format: date-time
        description: The date on which this object was last updated.
    example:
      uuid: 2bf40be2-e57a-4bc8-860a-5bf45edd3795
      name: jQuery
      description: The Write Less, Do More, JavaScript Library.
      src: https://code.jquery.com/jquery-3.2.1.min.js
      auto_uninstall: true
      load_method: defer
      location: head
      visibility: storefront
      kind: src
      api_client_id: d1j42k5q76xsm15fa3g8sp2egytoixo
      date_created: '2017-12-05T23:37:45.506Z'
      date_modified: '2017-12-05T23:37:45.506Z'
  ScriptPost:
    required:
      - name
    properties:
      name:
        type: string
        description: The user-friendly name.
        minLength: 1
        maxLength: 255
      description:
        type: string
        description: The user-friendly description.
        maxLength: 255
      html:
        type: string
        description: An html string containing exactly one `script` tag. Required if `kind` is `script_tag`.
        maxLength: 65535
      src:
        type: string
        description: The `src` attribute of the script to load. Required if `kind` is `src`. Must be in `https` format.
        maxLength: 255
      auto_uninstall:
        type: boolean
        description: Whether to uninstall this script when the app associated with it is removed.
        default: true
      load_method:
        type: string
        description: The load method to use for the script. Acceptable values are `default`, `async`, or `defer`.
        default: defer
        enum:
          - default
          - async
          - defer
      location:
        type: string
        description: Where on the page to place the script. Acceptable values are `head` or `footer`.
        default: footer
        enum:
          - head
          - footer
      visibility:
        type: string
        description: Which set of pages the script should load on. The values allowed for this parameter are `storefront`, `all_pages`, `checkout` and `order_confirmation`. Please note that you need to have `Checkout content` scope to use `all_pages` and `checkout`.
        default: storefront
        enum:
          - storefront
          - all_pages
          - checkout
          - order_confirmation
      kind:
        type: string
        description: What type of script this is. Acceptable values are `src` - a `script` tag will be generated with its `src` attribute set to the value of `src`; `script_tag` - The value of `html` (which must contain a single `script` tag) will be injected directly onto the page.
        default: src
        enum:
          - src
          - html
    example:
      name: jQuery
      description: The Write Less, Do More, JavaScript Library.
      src: https://code.jquery.com/jquery-3.2.1.min.js
      auto_uninstall: true
      load_method: defer
      location: head
      visibility: storefront
      kind: src
  ScriptPut:
      properties:
        name:
          type: string
          description: The user-friendly name.
          minLength: 1
          maxLength: 255
        description:
          type: string
          description: The user-friendly description.
          maxLength: 255
        html:
          type: string
          description: An html string containing exactly one `script` tag. Required if `kind` is included and equal to `script_tag`.
          maxLength: 65535
        src:
          type: string
          description: The `src` attribute of the script to load. Required if `kind` is included and equal to `src`. Must be in `https` format.
          maxLength: 255
        auto_uninstall:
          type: boolean
          description: Whether to uninstall this script when the app associated with it is removed.
          default: true
        load_method:
          type: string
          description: The load method to use for the script. Acceptable values are `default`, `async`, or `defer`.
          default: defer
          enum:
            - default
            - async
            - defer
        location:
          type: string
          description: Where on the page to place the script. Acceptable values are `head` or `footer`.
          default: footer
          enum:
            - head
            - footer
        visibility:
          type: string
          description: Which set of pages the script should load on. The values allowed for this parameter are `storefront`, `all_pages`, `checkout` and `order_confirmation`. Please note that you need to have `Checkout content` scope to use `all_pages` and `checkout`.
          default: storefront
          enum:
            - storefront
            - all_pages
            - checkout
            - order_confirmation
        kind:
          type: string
          description: What type of script this is. Acceptable values are `src` - a `script` tag will be generated with its `src` attribute set to the value of `src`; `script_tag` - The value of `html` (which must contain a single `script` tag) will be injected directly onto the page.
          default: src
          enum:
            - src
            - html
      example:
        name: jQuery
        description: The Write Less, Do More, JavaScript Library.
        src: https://code.jquery.com/jquery-3.2.1.min.js
        auto_uninstall: true
        load_method: defer
        location: head
        visibility: storefront
        kind: src
  ScriptResponse:
    type: object
    properties:
      data:
        $ref: "#/definitions/Script"
  ScriptsResponse:
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Script"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ModifierCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Modifier"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ModifierResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Modifier"
      meta:
        $ref: "#/definitions/Meta"
  ModifierBase:
    type: object
    description: |
      Common Modifier properties.
    properties:
      type:
        type: string
        description: |
          BigCommerce API, which determines how it will display on the storefront. Acceptable values: `date`, `checkbox`, `file`, `text`, `multi_line_text`, `numbers_only_text`, `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: D = date, C = checkbox, F = file, T = text, MT = multi_line_text, N = numbers_only_text, RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch.
        enum:
          - date
          - checkbox
          - file
          - text
          - multi_line_text
          - numbers_only_text
          - radio_buttons
          - rectangles
          - dropdown
          - product_list
          - product_list_with_images
          - swatch
        x-required:
          - post
      required:
        type: boolean
        description: |
          Whether or not this modifer is required or not at checkout.
        x-required:
          - post
      sort_order:
        type: integer
        description: The order the modifiers display on the product detail page.
      config:
        $ref: "#/definitions/OptionConfig"
      option_values:
        type: array
        items:
          $ref: "#/definitions/ModifierValue"
  Modifier:
    type: object
    allOf:
      - $ref: "#/definitions/ModifierBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the modifier; increments sequentially.
          product_id:
            type: integer
            description: |
              The unique numeric ID of the product to which the option belongs.
          name:
            type: string
            description: |
              The unique option name. Auto-generated from the display name, a timestamp, and the product ID.
          display_name:
            type: string
            description: |
              The name of the option shown on the storefront.
  ModifierPost:
    type: object
    description: |
      The model for a POST to create a modifier on a product.
    allOf:
      - $ref: "#/definitions/ModifierBase"
      - type: object
        properties:
          display_name:
            type: string
            description: |
              The name of the option shown on the storefront.
            x-required:
              - post
  ModifierPut:
    type: object
    description: |
      The model for a PUT to update a modifier on a product.
    allOf:
      - $ref: "#/definitions/ModifierBase"
  ModifierValueCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ModifierValue"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ModifierValueResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ModifierValue"
      meta:
        $ref: "#/definitions/Meta"
  ModifierValueBase:
    type: object
    allOf:
      - $ref: "#/definitions/OptionValueBase"
      - type: object
        properties:
          adjusters:
            type: object
            properties:
              price:
                $ref: "#/definitions/Adjuster"
              weight:
                $ref: "#/definitions/Adjuster"
              image_url:
                type: string
                description: |
                  The URL for an image displayed on the storefront when the modifier value is selected.
              purchasing_disabled:
                type: object
                properties:
                  status:
                    type: boolean
                    description: |
                      Flag for whether the modifier value disables purchasing when selected on the storefront. This can be used for temporarily disabling a particular modifier value.
                  message:
                    type: string
                    description: |
                      The message displayed on the storefront when the purchasing disabled status is `true`.
  ModifierValue:
    type: object
    allOf:
      - $ref: "#/definitions/ModifierValueBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the value; increments sequentially.
  ModifierValuePost:
    type: object
    description: |
      The model for a POST to create a modifier value on a product.
    allOf:
      - $ref: "#/definitions/ModifierValueBase"
  ModifierValuePut:
    type: object
    description: |
      The model for a PUT to update a modifier value on a product.
    allOf:
      - $ref: "#/definitions/ModifierValueBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the value; increments sequentially.
            x-required:
              - put
  OptionCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Option"
      meta:
        $ref: "#/definitions/CollectionMeta"
  OptionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Option"
      meta:
        $ref: "#/definitions/Meta"
  OptionBase:
    type: object
    description:
      Common Option properties.
    properties:
      id:
        type: integer
        description: |
          The unique numerical ID of the option, increments sequentially.
        x-nullable: true
      product_id:
        type: integer
        description: |
          The unique numerical ID of the product to which the option belongs.
        x-required:
          - post
          - put
      display_name:
        type: string
        description: |
          The name of the option shown on the storefront.
        x-required:
          - post
          - put
        minLength: 1
        maxLength: 255
      type:
        type: string
        description: |
          The type of option, which determines how it will display on the storefront. Acceptable values: `radio_buttons`, `rectangles`, `dropdown`, `product_list`, `product_list_with_images`, `swatch`. For reference, the former v2 API values are: RB = radio_buttons, RT = rectangles, S = dropdown, P = product_list, PI = product_list_with_images, CS = swatch.
        enum:
          - radio_buttons
          - rectangles
          - dropdown
          - product_list
          - product_list_with_images
          - swatch
        x-required:
          - post
          - put
      sort_order:
        type: integer
        description: The order the modifiers display on the product detail page.
      config:
        $ref: "#/definitions/OptionConfig"
      option_values:
        type: array
        items:
          $ref: "#/definitions/OptionValue"
        x-required:
          - post
          - put
        minItems: 1
  Option:
    type: object
    allOf:
      - $ref: "#/definitions/OptionBase"
      - type: object
        properties:
          name:
            type: string
            description: |
              The unique option name, auto-generated from the display name, a timestamp, and the product ID.
  OptionPost:
    type: object
    description: |
      The model for a POST to create options on a product.
    allOf:
      - $ref: "#/definitions/OptionBase"
  OptionPut:
    type: object
    description: |
      The model for a PUT to update options on a product.
    allOf:
      - $ref: "#/definitions/OptionBase"
  CategoryTreeCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/CategoryNode"
      meta:
        $ref: "#/definitions/CollectionMeta"
  CategoryNode:
    type: object
    description: |
      A BigCommerce category node object. Used to reflect parent <> child category relationships.
    properties:
      id:
        type: integer
        description: |
          The unique numeric ID of the category; increments sequentially.
      parent_id:
        type: integer
        description: |
          The unique numeric ID of the category's parent. This field controls where the category sits in the tree of categories that organize the catalog.
      name:
        type: string
        description: |
          The name displayed for the category. Name is unique with respect to the category's siblings.
      is_visible:
        type: boolean
        description: |
          Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the category will be displayed. If `false`, the category will be hidden from view.
      url:
        type: string
        description: |
          The custom URL for the category on the storefront.
      children:
        type: array
        description: |
          The list of children of the category.
        items:
          $ref: "#/definitions/CategoryNode"
  CategoryCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Category"
      meta:
        $ref: "#/definitions/CollectionMeta"
  CategoryResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Category"
      meta:
        $ref: "#/definitions/Meta"
  CategoryBase:
    type: object
    description: |
      Common Category properties.
    properties:
      parent_id:
        type: integer
        description: |
          The unique numeric ID of the category's parent. This field controls where the category sits in the tree of categories that organize the catalog.
        x-required:
          - post
      name:
        type: string
        description: |
          The name displayed for the category. Name is unique with respect to the category's siblings.
        x-required:
          - post
        minLength: 1
        maxLength: 50
      description:
        type: string
        description: |
          The product description, which can include HTML formatting.
      views:
        type: integer
        description: |
          Number of views the category has on the storefront.
      sort_order:
        type: integer
        description: |
          Priority this category will be given when included in the menu and category pages. The lower the number, the closer to the top of the results the category will be.
        minimum: -2147483648
        maximum: 2147483647
      page_title:
        type: string
        description: |
          Custom title for the category page. If not defined, the category name will be used as the meta title.
        minLength: 0
        maxLength: 255
      search_keywords:
        type: string
        description: |
          A comma-separated list of keywords that can be used to locate the category when searching the store.
        minLength: 0
        maxLength: 65535
      meta_keywords:
        type: array
        description: |
          Custom meta keywords for the category page. If not defined, the store's default keywords will be used. Must post as an array like: ["awesome","sauce"].
        items:
          type: string
      meta_description:
        type: string
        description: |
          Custom meta description for the category page. If not defined, the store's default meta description will be used.
        minLength: 0
        maxLength: 65535
      layout_file:
        type: string
        description: |
          The layout template file used to render this category.
        minLength: 0
        maxLength: 500
      is_visible:
        type: boolean
        description: |
          Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the category will be displayed. If `false`, the category will be hidden from view.
      default_product_sort:
        type: string
        description: |
          Determines how the products are sorted on category page load.
        enum:
          - use_store_settings
          - featured
          - newest
          - best_selling
          - alpha_asc
          - alpha_desc
          - avg_customer_review
          - price_asc
          - price_desc
      image_url:
        type: string
        description: |
          Image URL used for this category on the storefront. Images can be uploaded via form file post to `/categories/{categoryId}/image`, or by providing a publicly accessible URL in this field.
        x-url: true
      custom_url:
        $ref: "#/definitions/CustomUrlCategory"
  Category:
    type: object
    description: |
      A BigCommerce category object.
    allOf:
      - $ref: "#/definitions/CategoryBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the category; increments sequentially.
  CategoryPost:
    type: object
    description: |
      The model for a POST to create category.
    allOf:
      - $ref: "#/definitions/CategoryBase"
  CategoryPut:
    type: object
    description: |
      The model for a PUT to update category.
    allOf:
      - $ref: "#/definitions/CategoryBase"
  BrandCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Brand"
      meta:
        $ref: "#/definitions/CollectionMeta"
  BrandResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Brand"
      meta:
        $ref: "#/definitions/Meta"
  BrandBase:
    type: object
    description: |
      Common Brand properties.
    properties:
      name:
        type: string
        description: |
          The name of the brand. Must be unique.
        x-required:
          - post
          - put
        minLength: 1
        maxLength: 255
      page_title:
        type: string
        description: |
          The title shown in the browser while viewing the brand.
        minLength: 0
        maxLength: 255
      meta_keywords:
        type: array
        items:
          type: string
        description: |
          Comma-separated list of meta keywords to include in the HTML.
      meta_description:
        type: string
        description: |
          A meta description to include.
        minLength: 0
        maxLength: 65535
      search_keywords:
        type: string
        description: |
          A comma-separated list of keywords that can be used to locate this brand.
        minLength: 0
        maxLength: 65535
      image_url:
        type: string
        description: |
          Image URL used for this category on the storefront. Images can be uploaded via form file post to `/brands/{brandId}/image`, or by providing a publicly accessible URL in this field.
        x-url: true
      custom_url:
        $ref: "#/definitions/CustomUrlBrand"

  Brand:
    type: object
    allOf:
      - $ref: "#/definitions/BrandBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the brand; increments sequentially.
            x-nullable: true
  BrandPost:
    type: object
    description: |
      The model for a POST to create brand.
    allOf:
      - $ref: "#/definitions/BrandBase"
  BrandPut:
    type: object
    description: |
      The model for a PUT to update brand.
    allOf:
      - $ref: "#/definitions/BrandBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the brand; increments sequentially.
            x-nullable: true
  SubscriberCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Subscriber"
      meta:
        $ref: "#/definitions/CollectionMeta"
  SubscriberResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Subscriber"
      meta:
        $ref: "#/definitions/Meta"
  SubscriberBase:
    type: object
    description:
      Common Subscriber properties.
    properties:
      id:
        type: integer
        description: |
          The unique numeric ID of the subscriber; increments sequentially.
        x-required:
          - put
      email:
        type: string
        description: |
          The email of the subscriber. Must be unique.
        x-required:
          - post
      first_name:
        type: string
        description: |
          The first name of the subscriber.
        minLength: 0
        maxLength: 255
      last_name:
        type: string
        description: |
          The last name of the subscriber.
        minLength: 0
        maxLength: 255
      source:
        type: string
        description: |
          The source of the subscriber. Values are: `storefront`, `order`, or `custom`.
        minLength: 0
        maxLength: 255
      order_id:
        type: integer
        description: |
          The ID of the source order, if source was an order.
        x-nullable: true
        minimum: 1
        maximum: 2147483647
  Subscriber:
    type: object
    allOf:
      - $ref: "#/definitions/SubscriberBase"
      - type: object
        properties:
          date_modified:
            type: string
            format: date-time
            description: |
              The date on which the subscriber was modified.
          date_created:
            type: string
            format: date-time
            description: |
              The date of which the subscriber was created.
  SubscriberPost:
    type: object
    description: |
      The model for a POST to create a subscriber.
    allOf:
      - $ref: "#/definitions/SubscriberBase"
  SubscriberPut:
    type: object
    description: |
      The model for a PUT to update a subscriber.
    allOf:
      - $ref: "#/definitions/SubscriberBase"
  VariantCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Variant"
      meta:
        $ref: "#/definitions/CollectionMeta"
  VariantResponse:
    description: |
      Successful response.
    type: object
    properties:
      data:
        $ref: "#/definitions/Variant"
      meta:
        $ref: "#/definitions/Meta"
  VariantBase:
    type: object
    description:
      Common Variant properties.
    properties:
      cost_price:
        type: number
        format: double
        description: The cost price of the variant. Not affected by Price List prices.
        x-nullable: true
        minimum: 0
      price:
        type: number
        format: double
        description: This variant's base price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is `null`, the product's default price (set in the Product resource's `price` field) will be used as the base price.
        x-nullable: true
        minimum: 0
      sale_price:
        type: number
        format: double
        description: This variant's sale price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's sale price (set in the Product resource's `price` field) will be used as the sale price.
        x-nullable: true
        minimum: 0
      retail_price:
        type: number
        format: double
        description: This variant's retail price on the storefront. If a Price List ID is used, the Price List value will be used. If a Price List ID is not used, and this value is null, the product's retail price (set in the Product resource's `price` field) will be used as the retail price.
        x-nullable: true
        minimum: 0
      weight:
        type: number
        format: double
        description: This variant's base weight on the storefront. If this value is null, the product's default weight (set in the Product resource's weight field) will be used as the base weight.
        x-nullable: true
        minimum: 0
      width:
        type: number
        format: double
        description: |
          Width of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default width (set in the Product resource's `width` field) will be used as the base width.
        x-nullable: true
        minimum: 0
      height:
        type: number
        format: double
        description: |
          Height of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default height (set in the Product resource's `height` field) will be used as the base height.
        x-nullable: true
        minimum: 0
      depth:
        type: number
        format: double
        description: |
          Depth of the variant, which can be used when calculating shipping costs. If this value is `null`, the product's default depth (set in the Product resource's `depth` field) will be used as the base depth.
        x-nullable: true
        minimum: 0
      is_free_shipping:
        type: boolean
        description: |
          Flag used to indicate whether the variant has free shipping. If `true`, the shipping cost for the variant will be zero.
      fixed_cost_shipping_price:
        type: number
        format: double
        description: |
          A fixed shipping cost for the variant. If defined, this value will be used during checkout instead of normal shipping-cost calculation.
        x-nullable: true
        minimum: 0
      purchasing_disabled:
        type: boolean
        description: If `true`, this variant will not be purchasable on the storefront.
      purchasing_disabled_message:
        type: string
        description: If `purchasing_disabled` is `true`, this message should show on the storefront when the variant is selected.
        minLength: 0
        maxLength: 255
      image_url:
        type: string
        description: The image that will be displayed when this variant is selected on the storefront. When updating a SKU image, send the publicly accessible URL. Supported image formats are JPEG, PNG, and GIF. Generic product images not specific to the variant should be stored on the product.
        x-url: true
      upc:
        type: string
        description: The UPC code used in feeds for shopping comparison sites and external channel integrations.
        x-nullable: true
      inventory_level:
        type: integer
        description: Inventory level for the variant, which is used when the product's inventory_tracking is set to `variant`.
        x-nullable: true
      inventory_warning_level:
        type: integer
        description: When the variant hits this inventory level, it is considered low stock.
        x-nullable: true
      bin_picking_number:
        type: string
        description: Identifies where in a warehouse the variant is located.
        x-nullable: true
        minLength: 0
        maxLength: 255
  Variant:
    type: object
    allOf:
      - $ref: "#/definitions/VariantBase"
      - type: object
        properties:
          id:
            type: integer
          product_id:
            type: integer
          sku:
            type: string
          sku_id:
            type: integer
            description: Read-only reference to v2 API's SKU ID. Null if it is a base variant.
            x-nullable: true
          option_values:
            type: array
            items:
              $ref: "#/definitions/OptionValueVariant"
            description: Array of option and option values IDs that make up this variant. Will be empty if the variant is the product's base variant.
          calculated_price:
            type: number
            format: double
            description: |
              The price of the variant as seen on the storefront. This price takes into account `sale_price` and any price adjustment rules that are applicable to this variant.
  VariantPost:
    type: object
    description: |
      The model for a POST to create variants on a product.
    allOf:
      - $ref: "#/definitions/VariantBase"
      - type: object
        properties:
          product_id:
            type: integer
            x-required:
              - post
          sku:
            type: string
            x-required:
              - post
            minLength: 1
            maxLength: 255
          option_values:
            type: array
            items:
              $ref: "#/definitions/OptionValueVariantPost"
            description: Array of option and option values IDs that make up this variant. Will be empty if the variant is the product's base variant.
            x-required:
              - post
  VariantPut:
    type: object
    description: |
      The model for a PUT to update variants on a product.
    allOf:
      - $ref: "#/definitions/VariantBase"
      - type: object
        properties:
          id:
            type: integer
            x-required:
              - put
  VariantProductPost:
    type: object
    description: |
      The model for a POST to create variants on a product.
    allOf:
      - $ref: "#/definitions/VariantBase"
      - type: object
        properties:
          product_id:
            type: integer
          sku:
            type: string
            x-required:
              - post
            minLength: 1
            maxLength: 255
          option_values:
            type: array
            items:
              $ref: "#/definitions/OptionValueProductPost"
            x-required:
              - post
  VariantProductPut:
    type: object
    description: |
      The model for a PUT to update variants on a product.
    allOf:
      - $ref: "#/definitions/VariantBase"
      - type: object
        properties:
          product_id:
            type: integer
          sku:
            type: string
            minLength: 1
            maxLength: 255
  OptionValueProductBase:
    type: object
    description:
      Common OptionValueProduct properties.
    properties:
      option_display_name:
        type: string
        description: |
          The name of the option.
        x-required:
          - post
        minLength: 1
        maxLength: 255
      label:
        type: string
        description: |
          The label of the option value.
        x-required:
          - post
        minLength: 1
        maxLength: 255
  OptionValueProductPost:
    type: object
    description: |
      The model for a POST to create option values on a product.
    allOf:
      - $ref: "#/definitions/OptionValueProductBase"
  OptionValueVariant:
    type: object
    allOf:
      - $ref: "#/definitions/OptionValueProductBase"
      - type: object
        properties:
          id:
            type: integer
          option_id:
            type: integer
  OptionValueVariantPost:
    type: object
    description: |
      The model for a POST to create option values on a variant.
    properties:
      id:
        type: integer
        x-required:
          - post
      option_id:
        type: integer
        x-required:
          - post
  OptionValueCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/OptionValue"
      meta:
        $ref: "#/definitions/CollectionMeta"
  OptionValueResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/OptionValue"
      meta:
        $ref: "#/definitions/Meta"
  OptionValueBase:
    type: object
    description:
      Common OptionValue properties.
    properties:
      is_default:
        type: boolean
        description: |
          The flag for preselecting a value as the default on the storefront. This field is not supported for swatch options/modifiers.
      label:
        type: string
        description: |
          The text display identifying the value on the storefront.
        x-required:
          - post
      sort_order:
        type: integer
        description: |
          The order in which the value will be displayed on the product page.
        minimum: -2147483648
        maximum: 2147483647
        x-required:
          - post
      value_data:
        type: object
        description: |
          Extra data describing the value, based on the type of option or modifier with which the value is associated. The `swatch` type option can accept an array of `colors`, with up to three hexidecimal color keys; or an `image_url`, which is a full image URL path including protocol. The `product list` type option requires a `product_id`. The `checkbox` type option requires a boolean flag, called `checked_value`, to determine which value is considered to be the checked state.
  OptionValue:
    type: object
    allOf:
      - $ref: "#/definitions/OptionValueBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the value; increments sequentially.
  OptionValuePost:
    type: object
    description: |
      The model for a POST to create option values on a product.
    allOf:
      - $ref: "#/definitions/OptionValueBase"
  OptionValuePut:
    type: object
    description: |
      The model for a PUT to update option values on a product.
    allOf:
      - $ref: "#/definitions/OptionValueBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the value; increments sequentially.
            x-required:
              - put
  ProductImageCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ProductImage"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ProductImageResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ProductImage"
      meta:
        $ref: "#/definitions/Meta"
  ProductImageBase:
    type: object
    description: |
      Common ProductImage properties.
    properties:
      is_thumbnail:
        description: |
          Flag for identifying whether the image is used as the product's thumbnail.
        type: boolean
      sort_order:
        type: integer
        description: |
          The order in which the image will be displayed on the product page. Higher integers give the image a lower priority. When updating, if the image is given a lower priority, all images with a `sort_order` the same as or greater than the image's new `sort_order` value will have their `sort_order`s reordered.
        minimum: -2147483648
        maximum: 2147483647
      description:
        description: |
          The description for the image.
        type: string
  ProductImage:
    type: object
    description: |
      The full ProductImage model.
    allOf:
      - $ref: "#/definitions/ProductImageBase"
      - type: object
        properties:
          id:
            description: |
              The unique numeric ID of the image; increments sequentially.
            type: integer
          product_id:
            description: |
              The unique numeric identifier for the product with which the image is associated.
            type: integer
          image_file:
            description: |
              The local path to the original image file uploaded to BigCommerce.
            type: string
          url_zoom:
            description: |
              The zoom URL for this image. By default, this is used as the zoom image on product pages when zoom images are enabled.
            type: string
          url_standard:
            description: |
              The standard URL for this image. By default, this is used for product-page images.
            type: string
          url_thumbnail:
            description: |
              The thumbnail URL for this image. By default, this is the image size used on the category page and in side panels.
            type: string
          url_tiny:
            description: |
              The tiny URL for this image. By default, this is the image size used for thumbnails beneath the product image on a product page.
            type: string
          date_modified:
            format: date-time
            description: |
              The date on which the product image was modified.
            type: string
  ProductImagePost:
    type: object
    description: |
      The model for a POST to create an image on a product.
    allOf:
      - $ref: "#/definitions/ProductImageBase"
      - type: object
        properties:
          image_url:
            description: |
              Must be a fully qualified URL path, including protocol.
            type: string
          image_file:
            description: |
              Must be sent as a multipart/form-data field in the request body.
            type: string
  ProductImagePut:
      type: object
      description: |
        The model for a PUT to update applicable ProductImage fields.
      allOf:
        - $ref: "#/definitions/ProductImageBase"
  ProductVideoCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ProductVideo"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ProductVideoResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ProductVideo"
      meta:
        $ref: "#/definitions/Meta"
  ProductVideoBase:
    type: object
    description:
      Common ProductVideo properties.
    properties:
      title:
        type: string
        description: |
          The title for the video. If left blank, this will be filled in according to data on a host site.
        minLength: 0
        maxLength: 255
      description:
        type: string
        description: |
          The description for the video. If left blank, this will be filled in according to data on a host site.
      sort_order:
        type: integer
        description: |
          The order in which the video will be displayed on the product page. Higher integers give the video a lower priority. When updating, if the video is given a lower priority, all videos with a `sort_order` the same as or greater than the video's new `sort_order` value will have their `sort_order`s reordered.
        minimum: -2147483648
        maximum: 2147483647
      type:
        type: string
        description: |
          The video type (a short name of a host site).
        enum:
          - youtube
  ProductVideo:
    type: object
    description: |
      A product video model.
    allOf:
      - $ref: "#/definitions/ProductVideoBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the product video; increments sequentially.
          video_id:
            description: |
              The ID of the video on a host site.
            type: string
          product_id:
            description: |
              The unique numeric identifier for the product with which the image is associated.
            type: integer
          length:
            description: |
              Length of the video. This will be filled in according to data on a host site.
            type: string
  ProductVideoPost:
    type: object
    description: |
      The model for a POST to create a video on a product.
    allOf:
      - $ref: "#/definitions/ProductVideoBase"
      - type: object
        properties:
          video_id:
            type: string
            description: |
              The ID of the video on a host site.
            x-required:
              - post
            minLength: 0
            maxLength: 25
  ProductVideoPut:
    type: object
    description: |
      The model for a PUT to update a video on a product.
    allOf:
      - $ref: "#/definitions/ProductVideoBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the product video; increments sequentially.
            x-required:
              - put
  ProductReviewCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ProductReview"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ProductReviewResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ProductReview"
      meta:
        $ref: "#/definitions/Meta"
  ProductReviewBase:
    type: object
    description:
      Common ProductReview properties.
    properties:
      title:
        type: string
        description: |
          The title for the product review.
        minLength: 0
        maxLength: 255
      text:
        type: string
        description: |
          The text for the product review.
      status:
        type: string
        description: |
          The status of the product review. Must be one of `approved`, `disapproved` or `pending`.
      rating:
        type: integer
        description:
          The rating of the product review. Must be one of 0, 1, 2, 3, 4, 5.
      email:
        type: string
        description:
          The email of the reviewer. Must be a valid email, or an empty string.
      name:
        type: string
        description:
          The name of the reviewer.
        minLength: 0
        maxLength: 255
      date_reviewed:
        type: string
        format: date-time
        description: |
          Date the product was reviewed.
  ProductReview:
    type: object
    description: |
      A product review model.
    allOf:
      - $ref: "#/definitions/ProductReviewBase"
      - type: object
        properties:
          id:
            description: |
              The unique numeric ID of the product review; increments sequentially.
            type: integer
          product_id:
            description: |
              The unique numeric identifier for the product with which the review is associated.
            type: integer
          date_created:
            type: string
            format: date-time
            description: |
              Date the product review was created.
          date_modified:
            type: string
            format: date-time
            description: |
              Date the product review was modified.
  ProductReviewPost:
    type: object
    description: |
      The model for a POST to create a product review.
    allOf:
      - $ref: "#/definitions/ProductReviewBase"
  ProductReviewPut:
    type: object
    description: |
      The model for a PUT to update a product review.
    allOf:
      - $ref: "#/definitions/ProductReviewBase"
  ImageResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ResourceImage"
      meta:
        $ref: "#/definitions/Meta"
  ResourceImage:
    type: object
    description: |
      An object containing a publicly accessible image URL, or a form post that contains an image file.
    properties:
      image_url:
        type: string
        description: |
          A public URL for a GIF, JPEG, or PNG image.
  ProductCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Product"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ProductResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Product"
      meta:
        $ref: "#/definitions/Meta"
  ProductBase:
    type: object
    description: |
      Common Product properties.
    properties:
      name:
        type: string
        description: |
          The product name.
        x-required:
          - post
        minLength: 1
        maxLength: 255
      type:
        type: string
        description: |
          The product type. One of: `physical` - a physical stock unit, `digital` - a digital download.
        x-required:
          - post
        enum:
          - physical
          - digital
      sku:
        type: string
        description: |
          User defined product code/stock keeping unit (SKU).
        minLength: 0
        maxLength: 255
      description:
        type: string
        description: |
          The product description, which can include HTML formatting.
      weight:
        type: number
        format: double
        description: |
          Weight of the product, which can be used when calculating shipping costs.
        x-required:
          - post
        minimum: 0
        maximum: 9999999999
      width:
        type: number
        format: double
        description: |
          Width of the product, which can be used when calculating shipping costs.
        minimum: 0
        maximum: 9999999999
      depth:
        type: number
        format: double
        description: |
          Depth of the product, which can be used when calculating shipping costs.
        minimum: 0
        maximum: 9999999999
      height:
        type: number
        format: double
        description: |
          Height of the product, which can be used when calculating shipping costs.
        minimum: 0
        maximum: 9999999999
      price:
        type: number
        format: double
        description: |
          The price of the product. The price should include or exclude tax, based on the store settings.
        x-required:
          - post
        minimum: 0
      cost_price:
        type: number
        format: double
        description: |
          The cost price of the product. Stored for reference only; it is not used or displayed anywhere on the store.
        minimum: 0
      retail_price:
        type: number
        format: double
        description: |
          The retail cost of the product. If entered, the retail cost price will be shown on the product page.
        minimum: 0
      sale_price:
        type: number
        format: double
        description: |
          If entered, the sale price will be used instead of value in the price field when calculating the product's cost.
        minimum: 0
      tax_class_id:
        type: integer
        description: |
          The ID of the tax class applied to the product. (NOTE: Value ignored if automatic tax is enabled.)
        minimum: 0
        maximum: 1000000000
      product_tax_code:
        type: string
        description: |
          Accepts AvaTax System Tax Codes, which identify products and services that fall into special sales-tax categories. By using these codes, merchants who subscribe to BigCommerce's Avalara Premium integration can calculate sales taxes more accurately. Stores without Avalara Premium will ignore the code when calculating sales tax. Do not pass more than one code. The codes are case-sensitive. For details, please see Avalara's documentation.
        minLength: 0
        maxLength: 255
      categories:
        type: array
        description: |
          An array of IDs for the categories to which this product belongs. When updating a product, if an array of categories is supplied, all product categories will be overwritten. Does not accept more than 1,000 ID values.
        items:
          type: integer
        x-required:
          - post
      brand_id:
        type: integer
        description: |
          The ID associated with the product's brand.
        minimum: 0
        maximum: 1000000000
      inventory_level:
        type: integer
        description: |
          Current inventory level of the product. Simple inventory tracking must be enabled (See the `inventory_tracking` field) for this to take any effect.
        minimum: 0
        maximum: 1000000000
      inventory_warning_level:
        type: integer
        description: |
          Inventory warning level for the product. When the product's inventory level drops below the warning level, the store owner will be informed. Simple inventory tracking must be enabled (see the `inventory_tracking` field) for this to take any effect.
        minimum: 0
        maximum: 1000000000
      inventory_tracking:
        type: string
        description: |
          The type of inventory tracking for the product. Values are: `none` - inventory levels will not be tracked; `product` - inventory levels will be tracked using the `inventory_level` and `inventory_warning_level` fields; `variant` - inventory levels will be tracked based on variants, which maintain their own warning levels and inventory levels.
        enum:
          - none
          - product
          - variant
      fixed_cost_shipping_price:
        type: number
        format: double
        description: |
          A fixed shipping cost for the product. If defined, this value will be used during checkout instead of normal shipping-cost calculation.
        minimum: 0
      is_free_shipping:
        type: boolean
        description: |
          Flag used to indicate whether the product has free shipping. If `true`, the shipping cost for the product will be zero.
      is_visible:
        type: boolean
        description: |
          Flag to determine whether the product should be displayed to customers browsing the store. If `true`, the product will be displayed. If `false`, the product will be hidden from view.
      is_featured:
        type: boolean
        description: |
          Flag to determine whether the product should be included in the `featured products` panel when viewing the store.
      related_products:
        type: array
        description: |
          An array of IDs for the related products.
        items:
          type: integer
      warranty:
        type: string
        description: |
          Warranty information displayed on the product page. Can include HTML formatting.
        minLength: 0
        maxLength: 65535
      bin_picking_number:
        type: string
        description: |
          The BIN picking number for the product.
        minLength: 0
        maxLength: 255
      layout_file:
        type: string
        description: |
          The layout template file used to render this product.
        minLength: 0
        maxLength: 500
      upc:
        type: string
        description: |
          The product UPC code, which is used in feeds for shopping comparison sites and external channel integrations.
        minLength: 0
        maxLength: 255
      search_keywords:
        type: string
        description: |
          A comma-separated list of keywords that can be used to locate the product when searching the store.
        minLength: 0
        maxLength: 65535
      availability:
        type: string
        enum:
          - available
          - disabled
          - preorder
        description: |
          Availability of the product. Availability options are: `available` - the product can be purchased on the storefront; `disabled` - the product is listed in the storefront, but cannot be purchased; `preorder` - the product is listed for pre-orders.
      availability_description:
        type: string
        description: |
          Availability text displayed on the checkout page, under the product title. Tells the customer how long it will normally take to ship this product, such as: 'Usually ships in 24 hours.'
        minLength: 0
        maxLength: 255
      gift_wrapping_options_type:
        type: string
        enum:
          - any
          - none
          - list
        description: |
          Type of gift-wrapping options. Values: `any` - allow any gift-wrapping options in the store; `none` - disallow gift-wrapping on the product; `list` – provide a list of IDs in the `gift_wrapping_options_list` field.
      gift_wrapping_options_list:
        type: array
        description: |
          A list of gift-wrapping option IDs.
        items:
          type: integer
      sort_order:
        type: integer
        description: |
          Priority to give this product when included in product lists on category pages and in search results. Lower integers will place the product closer to the top of the results.
        minimum: -2147483648
        maximum: 2147483647
      condition:
        type: string
        description: |
          The product condition. Will be shown on the product page if the `is_condition_shown` field's value is `true`. Possible values: `New`, `Used`, `Refurbished`.
        enum:
          - New
          - Used
          - Refurbished
      is_condition_shown:
        type: boolean
        description: |
          Flag used to determine whether the product condition is shown to the customer on the product page.
      order_quantity_minimum:
        type: integer
        description: |
          The minimum quantity an order must contain, to be eligible to purchase this product.
        minimum: 0
        maximum: 1000000000
      order_quantity_maximum:
        type: integer
        description: |
          The maximum quantity an order can contain when purchasing the product.
        minimum: 0
        maximum: 1000000000
      page_title:
        type: string
        description: |
          Custom title for the product page. If not defined, the product name will be used as the meta title.
        minLength: 0
        maxLength: 255
      meta_keywords:
        type: array
        description: |
          Custom meta keywords for the product page. If not defined, the store's default keywords will be used.
        items:
          type: string
      meta_description:
        type: string
        description: |
          Custom meta description for the product page. If not defined, the store's default meta description will be used.
        minLength: 0
        maxLength: 65535
      view_count:
        type: integer
        description: |
          The number of times the product has been viewed.
        minimum: 0
        maximum: 1000000000
      preorder_release_date:
        type: string
        format: date-time
        description: |
          Pre-order release date. See the `availability` field for details on setting a product's availability to accept pre-orders.
        x-nullable: true
      preorder_message:
        type: string
        description: |
          Custom expected-date message to display on the product page. If undefined, the message defaults to the storewide setting. Can contain the `%%DATE%%` placeholder, which will be substituted for the release date.
        minLength: 0
        maxLength: 255
      is_preorder_only:
        type: boolean
        description: |
          If set to `false`, the product will not change its availability from `preorder` to `available` on the release date. Otherwise, on the release date the product's availability/status will change to `available`.
      is_price_hidden:
        type: boolean
        description: |
          False by default, indicating that this product's price should be shown on the product page. If set to `true`, the price is hidden. (NOTE: To successfully set `is_price_hidden` to `true`, the `availability` value must be `disabled`.)
      price_hidden_label:
        type: string
        description: |
          By default, an empty string. If `is_price_hidden` is `true`, the value of `price_hidden_label` is displayed instead of the price. (NOTE: To successfully set a non-empty string value with `is_price_hidden` set to `true`, the `availability` value must be `disabled`.)
        minLength: 0
        maxLength: 200
      custom_url:
        $ref: "#/definitions/CustomUrlProduct"
      open_graph_type:
        type: string
        description: |
          Type of product, defaults to `product`.
        enum:
          - product
          - album
          - book
          - drink
          - food
          - game
          - movie
          - song
          - tv_show
      open_graph_title:
        type: string
        description: |
          Title of the product, if not specified the product name will be used instead.
      open_graph_description:
        type: string
        description: |
          Description to use for the product, if not specified then the meta_description will be used instead.
      open_graph_use_meta_description:
        type: boolean
        description: |
          Flag to determine if product description or open graph description is used.
      open_graph_use_product_name:
        type: boolean
        description: |
          Flag to determine if product name or open graph name is used.
      open_graph_use_image:
        type: boolean
        description: |
          Flag to determine if product image or open graph image is used.
  Product:
    type: object
    description: |
      A BigCommerce Product object describes a single purchasable unit or a collection of purchasable units.
    allOf:
    - $ref: "#/definitions/ProductBase"
    - type: object
      properties:
        id:
          type: integer
          description: |
            The unique numeric ID of the product; increments sequentially.
        calculated_price:
          type: number
          format: double
          description: |
            The price of the product as seen on the storefront. It will be equal to the `sale_price`, if set, and the `price` if there is not a `sale_price`.
        reviews_rating_sum:
          type: integer
          description: |
            The total rating for the product.
        reviews_count:
          type: integer
          description: |
            The number of times the product has been rated.
        total_sold:
          type: integer
          description: |
            The total quantity of this product sold.
        custom_fields:
          type: array
          items:
            $ref: "#/definitions/CustomField"
        bulk_pricing_rules:
          type: array
          items:
            $ref: "#/definitions/BulkPricingRule"
        date_created:
          type: string
          format: date-time
          description: |
            The date on which the product was created.
        date_modified:
          type: string
          format: date-time
          description: |
            The date on which the product was modified.
        images:
          type: array
          items:
            $ref: "#/definitions/ProductImage"
        videos:
          type: array
          items:
            $ref: "#/definitions/ProductVideo"
        variants:
          type: array
          items:
            $ref: "#/definitions/Variant"
        options:
          type: array
          items:
            $ref: "#/definitions/Option"
        modifiers:
          type: array
          items:
            $ref: "#/definitions/Modifier"
        base_variant_id:
          type: integer
          description: |
            The unique identifier of the base variant associated with a simple product. This value is null for complex products.
  ProductPost:
    type: object
    description: |
      The model for a POST to create a product.
    allOf:
    - $ref: "#/definitions/ProductBase"
    - type: object
      properties:
        custom_fields:
          type: array
          items:
            $ref: "#/definitions/CustomFieldPost"
        bulk_pricing_rules:
          type: array
          items:
            $ref: "#/definitions/BulkPricingRulePost"
        variants:
          type: array
          items:
            $ref: "#/definitions/VariantProductPost"
  ProductPut:
    type: object
    description: |
      The model for a PUT to update a product.
    allOf:
    - $ref: "#/definitions/ProductBase"
    - type: object
      properties:
        id:
          type: integer
          description: |
            The unique numerical ID of the product; increments sequentially.
          x-required:
            - put
        custom_fields:
          type: array
          items:
            $ref: "#/definitions/CustomField"
        bulk_pricing_rules:
          type: array
          items:
            $ref: "#/definitions/BulkPricingRule"
        variants:
          type: array
          items:
            $ref: "#/definitions/VariantProductPut"
  CatalogSummaryResponse:
      description: |
        Response payload for the BigCommerce API.
      type: object
      properties:
        data:
          $ref: "#/definitions/CatalogSummary"
        meta:
          $ref: "#/definitions/Meta"
  CatalogSummary:
      type: object
      description: |
        A BigCommerce Catalog Summary object describes a lightweight summary of the catalog.
      properties:
        inventory_count:
          type: integer
          description: |
            A count of all inventory items in the catalog.
        inventory_value:
          type: number
          format: double
          description: |
            Total value of store's inventory.
        primary_category_id:
          type: integer
          description: |
            ID of the category containing the most products.
        primary_category_name:
          type: string
          description: |
            Name of the category containing the most products.
  MetaFieldCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Metafield"
      meta:
        $ref: "#/definitions/CollectionMeta"
  MetafieldResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Metafield"
      meta:
        $ref: "#/definitions/Meta"
  MetafieldBase:
    type: object
    description: |
      Common Metafield properties.
    properties:
      permission_set:
        type: string
        description: |
          Determines whether the field is completely private to the app that owns the field (`app_only`), or visible to other API consumers (`read`), or completely open for reading and writing to other apps (`write`).
        enum:
          - app_only
          - read
          - write
        x-required:
          - post
      namespace:
        type: string
        description: |
          Namespace for the metafield, for organizational purposes.
        x-required:
          - post
        minLength: 1
        maxLength: 64
      key:
        type: string
        description: |
          The name of the field, for example: `location_id`, `color`.
        x-required:
          - post
        minLength: 1
        maxLength: 64
      value:
        type: string
        description: |
          The value of the field, for example: `1`, `blue`.
        x-required:
          - post
        minLength: 1
        maxLength: 65535
      description:
        type: string
        description: |
          Description for the metafields.
        minLength: 0
        maxLength: 255
      resource_type:
        type: string
        description: |
          The type of resource with which the metafield is associated.
        enum:
          - category
          - brand
          - product
          - variant
        x-required:
          - post
      resource_id:
        type: integer
        description: |
          The unique identifier for the resource with which the metafield is associated.
        x-required:
          - post
        minimum: 0
        maximum: 10000000000
  Metafield:
    type: object
    description: |
      Allows app partners to write custom data to various resources in the API.
    allOf:
      - $ref: "#/definitions/MetafieldBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique identifier for the metafields.
          created_at:
            type: string
            format: date-time
            description: |
              Date and time of the metafield's creation.
          updated_at:
            type: string
            format: date-time
            description: |
              Date and time when the metafield was last updated.
  MetafieldPost:
    type: object
    description: |
      The model for a POST to create metafield.
    allOf:
      - $ref: "#/definitions/MetafieldBase"
  MetafieldPut:
    type: object
    description: |
      The model for a PUT to update metafield.
    allOf:
      - $ref: "#/definitions/MetafieldBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique identifier for the metafields.
            x-required:
              - put
            minimum: 0
            maximum: 10000000000
  ComplexRuleCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ComplexRule"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ComplexRuleResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ComplexRule"
      meta:
        $ref: "#/definitions/Meta"
  ComplexRuleBase:
    type: object
    description: |
      Common ComplexRule properties.
    properties:
      product_id:
        type: integer
        description: |
          The unique numeric ID of the product with which the rule is associated; increments sequentially.
        x-nullable: true
        x-required:
          - post
          - put
      sort_order:
        type: integer
        description: |
          The priority to give this rule when making adjustments to the product properties.
        minimum: -2147483648
        maximum: 2147483647
      enabled:
        type: boolean
        description: |
          Flag for determining whether the rule is to be used when adjusting a product's price, weight, image, or availabilty.
      stop:
        type: boolean
        description: |
          Flag for determining whether other rules should not be applied after this rule has been applied.
      purchasing_disabled:
        type: boolean
        description: |
          Flag for determining whether the rule should disable purchasing of a product when the conditions are applied.
      purchasing_disabled_message:
        type: string
        description: |
          Message displayed on the storefront when a rule disables the purchasing of a product.
        minLength: 0
        maxLength: 255
      purchasing_hidden:
        type: boolean
        description: |
          Flag for determining whether the rule should hide purchasing of a product when the conditions are applied.
      price_adjuster:
        $ref: "#/definitions/Adjuster"
      weight_adjuster:
        $ref: "#/definitions/Adjuster"
  ComplexRule:
    type: object
    description: |
      Apply price, weight, image, or availabilty adjustments to product, based on a set of conditions. A complex rule's condition must either contain more than one modifier value, or else contain a modifier value and a variant ID.
    allOf:
      - $ref: "#/definitions/ComplexRuleBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the rule; increments sequentially.
          image_url:
            type: string
            description: |
              The URL for an image displayed on the storefront when the conditions are applied.
          conditions:
            type: array
            items:
              $ref: "#/definitions/ComplexRuleCondition"
  ComplexRulePost:
    type: object
    description: |
      The model for a POST to create a complex rule on a product.
    allOf:
      - $ref: "#/definitions/ComplexRuleBase"
      - type: object
        properties:
          conditions:
            type: array
            items:
              $ref: "#/definitions/ComplexRuleConditionPost"
            x-required:
              - post
  ComplexRulePut:
    type: object
    description: |
      The model for a PUT to update a complex rule on a product.
    allOf:
      - $ref: "#/definitions/ComplexRuleBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the rule; increments sequentially.
            x-required:
              - put
          conditions:
            type: array
            items:
              $ref: "#/definitions/ComplexRuleConditionPut"
  ConfigurableFieldCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce configurable fields API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/ConfigurableField"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ConfigurableFieldResponse:
    description: |
      Response payload for the BigCommerce single configurable field API.
    type: object
    properties:
      data:
        $ref: "#/definitions/ConfigurableField"
      meta:
        $ref: "#/definitions/Meta"
  CustomFieldCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/CustomField"
      meta:
        $ref: "#/definitions/CollectionMeta"
  CustomFieldResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/CustomField"
      meta:
        $ref: "#/definitions/Meta"
  ConfigurableFieldBase:
    type: object
    description: |
      Common ConfigurableField properties.
    properties:
      name:
        type: string
        description: |
          The name for the configurable field. Will display on the storefront and can be used as a reference point in the Orders API.
        x-required:
          - post
        minLength: 1
        maxLength: 255
      type:
        type: string
        description: |
          The type of the configurable field, which determines what sort of information the field is intended to collect on the storefront. Supported types in include a text input, a multi-line textarea, a checkbox, a file upload, and a dropdown selection.
        enum:
          - text
          - textarea
          - checkbox
          - file
          - select
        x-required:
          - post
      file_allowed_types:
        type: array
        items:
          type: string
        description: |
          For fields of "file" type, this controls the allowed file types for upload.
        x-nullable: true
      file_max_size:
        type: array
        items:
          type: integer
        description: |
          For fields of "file" type, this controls the maximum file size. The platform has a maximum file size of 512MB for all uploads regardless of this setting.
        minimum: 0
        x-nullable: true
      select_options:
        type: array
        items:
          type: string
        description: |
          For fields of "select" type, this is an array of the options which should be presented in the dropdown.
        x-nullable: true
      required:
        type: boolean
        description: |
          Controls whether the field is required to have some input before a product may be added to cart.
        x-required:
          - post
      sort_order:
        type: integer
        description: |
          Controls the sort order of this field relative to other configurable fields on the product, for purposes of ordering them on the storefront.
        minimum: -2147483648
        maximum: 2147483647
        x-required:
          - post
  ConfigurableField:
    type: object
    description: |
      A configurable field, which is a means of collecting information from a shopper about how they'd like their product configured. This information is then stored alongside the product when added to cart and is reference-able on the order for fulfillment purposes. NOTE: Configurable fields are deprecated, as their complete set of functionality is available via Product Options. They may be removed in a future release.
    allOf:
      - $ref: "#/definitions/ConfigurableFieldBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the configurable field; increments sequentially.
            minimum: 1
            x-required:
              - put
  ConfigurableFieldPost:
    type: object
    description: |
      The model for a POST to create a configurable field on a product.
    allOf:
      - $ref: "#/definitions/ConfigurableFieldBase"
  ConfigurableFieldPut:
    type: object
    description: |
      The model for a PUT to update a configurable field on a product.
    allOf:
      - $ref: "#/definitions/ConfigurableField"
  CustomFieldBase:
    type: object
    description: |
      Common CustomField properties.
    properties:
      name:
        type: string
        description: |
          The name of the field, shown on the storefront, orders, etc.
        x-required:
          - post
        minLength: 1
        maxLength: 250
      value:
        type: string
        description: |
          The name of the field, shown on the storefront, orders, etc.
        x-required:
          - post
        minLength: 1
        maxLength: 250
  CustomField:
    type: object
    description: |
      Gets custom fields associated with a product. These allow you to specify additional information that will appear on the product's page, such as a book's ISBN or a DVD's release date.
    allOf:
      - $ref: "#/definitions/CustomFieldBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the custom field; increments sequentially.
            minimum: 1
            x-required:
              - put
  CustomFieldPost:
    type: object
    description: |
      The model for a POST to create a custom field on a product.
    allOf:
      - $ref: "#/definitions/CustomFieldBase"
  CustomFieldPut:
    type: object
    description: |
      The model for a PUT to update a custom field on a product.
    allOf:
      - $ref: "#/definitions/CustomField"
  ComplexRuleConditionBase:
    type: object
    description: |
      Common ComplexRuleCondition properties.
    properties:
      id:
        type: integer
        description: |
          The unique numeric ID of the rule condition; increments sequentially.
        x-nullable: true
      rule_id:
        type: integer
        description: |
          The unique numeric ID of the rule with which the condition is associated.
        x-nullable: true
      modifier_id:
        type: integer
        description: |
          The unique numeric ID of the modifier with which the rule condition is associated.
        x-nullable: true
      modifier_value_id:
        type: integer
        description: |
          The unique numeric ID of the modifier value with which the rule condition is associated.
        x-nullable: true
      variant_id:
        type: integer
        description: |
          The unique numeric ID of the variant with which the rule condition is associated.
        x-nullable: true
  ComplexRuleCondition:
    type: object
    description: |
      Complex rules may return with conditions that apply to one or more variants, or with a single modifier value (if the rules were created using the v2 API or the control panel). Complex rules created or updated in the v3 API must have conditions that either reference multiple `modifier_value_id`'s, or else reference a `modifier_value_id` and a `variant_id`.
    allOf:
      - $ref: "#/definitions/ComplexRuleConditionBase"
      - type: object
        properties:
          combination_id:
            type: integer
            description: |
              (READ-ONLY:) The unique numeric ID of the SKU (v2 API), or Combination, with which the rule condition is associated. This is to maintain cross-compatibility between v2 and v3.
  ComplexRuleConditionPost:
    type: object
    description: |
      The model for a POST to create conditions on a complex rule.
    allOf:
      - $ref: "#/definitions/ComplexRuleConditionBase"
  ComplexRuleConditionPut:
    type: object
    description: |
      The model for a PUT to update conditions on a complex rule.
    allOf:
      - $ref: "#/definitions/ComplexRuleConditionBase"
  CustomUrlProduct:
    type: object
    description: |
      The custom URL for the product on the storefront.
    properties:
      url:
        type: string
        description: |
          Product URL on the storefront.
        x-url: true
      is_customized:
        type: boolean
        description: |
          Returns `true` if the URL has been changed from its default state (the auto-assigned URL that BigCommerce provides).
  CustomUrlBrand:
      type: object
      description: |
        The custom URL for the brand on the storefront.
      properties:
        url:
          type: string
          description: |
            Brand URL on the storefront.
          x-url: true
        is_customized:
          type: boolean
          description: |
            Returns `true` if the URL has been changed from its default state (the auto-assigned URL that BigCommerce provides).
  CustomUrlCategory:
    type: object
    description: |
      The custom URL for the category on the storefront.
    properties:
      url:
        type: string
        description: |
          Category URL on the storefront.
        x-required:
          - post
          - put
        x-url: true
        minLength: 0
        maxLength: 255
      is_customized:
        type: boolean
        description: |
          Returns `true` if the URL has been changed from its default state (the auto-assigned URL that BigCommerce provides).
        x-required:
          - post
          - put
  BulkPricingRuleCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce bulk pricing rules API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/BulkPricingRule"
      meta:
        $ref: "#/definitions/CollectionMeta"
  BulkPricingRuleResponse:
    description: |
      Response payload for the BigCommerce single bulk pricing rule API.
    type: object
    properties:
      data:
        $ref: "#/definitions/BulkPricingRule"
      meta:
        $ref: "#/definitions/Meta"
  BulkPricingRuleBase:
    type: object
    description: |
      Common BulkPricingRule properties
    properties:
      quantity_min:
        type: integer
        description: |
          The minimum inclusive quantity of a product to satisfy this rule. Must be greater than or equal to zero.
        x-required:
          - post
        minimum: 0
      quantity_max:
        type: integer
        description: |
          The maximum inclusive quantity of a product to satisfy this rule. Must be greater than the `quantity_min` value – unless this field has a value of 0 (zero), in which case there will be no maximum bound for this rule.
        x-required:
          - post
        minimum: 0
      type:
        type: string
        description: |
          The type of adjustment that is made. Values: `price` - the adjustment amount per product; `percent` - the adjustment as a percentage of the original price; `fixed` - the adjusted absolute price of the product.
        x-required:
          - post
        enum:
          - price
          - percent
          - fixed
      amount:
        type: number
        format: double
        description: |
          The value of the adjustment by the bulk pricing rule.
        x-required:
          - post
        minimum: 0
  BulkPricingRule:
    type: object
    description: |
      Rules that offer price discounts based on quantity breaks.
    allOf:
      - $ref: "#/definitions/BulkPricingRuleBase"
      - type: object
        properties:
          id:
            type: integer
            description: |
              The ID of the bulk pricing rule.
            minimum: 1
            x-required:
              - put
  BulkPricingRulePost:
    type: object
    description: |
      The model for a POST to create bulk pricing rules on a product.
    allOf:
      - $ref: "#/definitions/BulkPricingRuleBase"
  BulkPricingRulePut:
    type: object
    description: |
      The model for a PUT to update bulk pricing rules on a product.
    allOf:
      - $ref: "#/definitions/BulkPricingRule"
  OptionConfig:
    type: object
    properties:
      default_value:
        type: string
        description: |
          (date, text, multi_line_text, numbers_only_text) The default value. Shown on a date option as an ISO-8601–formatted string, or on a text option as a string.
      checked_by_default:
        type: boolean
        description: |
          (checkbox) Flag for setting the checkbox to be checked by default.
      checkbox_label:
        type: string
        description: |
          (checkbox) Label displayed for the checkbox option.
      date_limited:
        type: boolean
        description: |
          (date) Flag to limit the dates allowed to be entered on a date option.
      date_limit_mode:
        type: string
        description: |
          (date) The type of limit that is allowed to be entered on a date option.
        enum:
          - earliest
          - range
          - latest
      date_earliest_value:
        type: string
        format: date
        description: |
          (date) The earliest date allowed to be entered on the date option, as an ISO-8601 formatted string.
      date_latest_value:
        type: string
        format: date
        description: |
          (date) The latest date allowed to be entered on the date option, as an ISO-8601 formatted string.
      file_types_mode:
        type: string
        description: |
          (file) The kind of restriction on the file types that can be uploaded with a file upload option. Values: `specific` - restricts uploads to particular file types; `all` - allows all file types.
        enum:
          - specific
          - all
      file_types_supported:
        type: array
        description: |
          (file) The type of files allowed to be uploaded if the `file_type_option` is set to `specific`. Values:
            `images` - Allows upload of image MIME types (`bmp`, `gif`, `jpg`, `jpeg`, `jpe`, `jif`, `jfif`, `jfi`, `png`, `wbmp`, `xbm`, `tiff`). `documents` - Allows upload of document MIME types (`txt`, `pdf`, `rtf`, `doc`, `docx`, `xls`, `xlsx`, `accdb`, `mdb`, `one`, `pps`, `ppsx`, `ppt`, `pptx`, `pub`, `odt`, `ods`, `odp`, `odg`, `odf`).
            `other` - Allows file types defined in the `file_types_other` array.
        items:
          type: string
      file_types_other:
        type: array
        description: |
          (file) A list of other file types allowed with the file upload option.
        items:
          type: string
      file_max_size:
        type: integer
        description: |
         (file) The maximum size for a file that can be used with the file upload option.
      text_characters_limited:
        type: boolean
        description: |
          (text, multi_line_text) Flag to validate the length of a text or multi-line text input.
      text_min_length:
        type: integer
        description: |
          (text, multi_line_text) The minimum length allowed for a text or multi-line text option.
      text_max_length:
        type: integer
        description: |
          (text, multi_line_text) The maximum length allowed for a text or multi line text option.
      text_lines_limited:
        type: boolean
        description: |
          (multi_line_text) Flag to validate the maximum number of lines allowed on a multi-line text input.
      text_max_lines:
        type: integer
        description: |
          (multi_line_text) The maximum number of lines allowed on a multi-line text input.
      number_limited:
        type: boolean
        description: |
          (numbers_only_text) Flag to limit the value of a number option.
      number_limit_mode:
        type: string
        description: |
          (numbers_only_text) The type of limit on values entered for a number option.
        enum:
          - ''
          - lowest
          - highest
          - range
      number_lowest_value:
        type: number
        description: |
          (numbers_only_text) The lowest allowed value for a number option if `number_limited` is true.
      number_highest_value:
        type: number
        description: |
          (numbers_only_text) The highest allowed value for a number option if `number_limited` is true.
      number_integers_only:
        type: boolean
        description: |
          (numbers_only_text) Flag to limit the input on a number option to whole numbers only.
      product_list_adjusts_inventory:
        type: boolean
        description: |
          (product_list, product_list_with_images) Flag for automatically adjusting inventory on a product included in the list.
      product_list_adjusts_pricing:
        type: boolean
        description: |
          (product_list, product_list_with_images) Flag to add the optional product's price to the main product's price.
      product_list_shipping_calc:
        type: string
        description: |
          (product_list, product_list_with_images) How to factor the optional product's weight and package dimensions into the shipping quote. Values: `none` - don't adjust; `weight` - use shipping weight only; `package` - use weight and dimensions.
        enum:
          - none
          - weight
          - package
  Adjuster:
    type: object
    properties:
      adjuster:
        type: string
        description: |
          The type of adjuster for either the price or the weight of the variant, when the modifier value is selected on the storefront.
        enum:
          - relative
          - percentage
        x-nullable: true
      adjuster_value:
        type: number
        description: |
          The numeric amount by which the adjuster will change either the price or the weight of the variant, when the modifier value is selected on the storefront.
  PriceListCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/PriceList"
      meta:
        $ref: "#/definitions/CollectionMeta"
  PriceListResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/PriceList"
      meta:
        $ref: "#/definitions/Meta"
  PriceListBase:
    type: object
    description: |
      Common Price List properties.
    properties:
      name:
        type: string
        description: |
          The unique name of the Price List.
        x-required:
          - post
      active:
        type: boolean
        description: |
          Whether or not this `Price List` and its prices are active.  Defaults to `true`.
  PriceList:
    type: object
    allOf:
      - type: object
        properties:
          id:
            type: integer
            description: |
              The unique numeric ID of the `Price List`; increments sequentially.
          date_created:
            type: string
            format: date-time
            description: |
              The date on which the `Price List` was created.
          date_modified:
            type: string
            format: date-time
            description: |
              The date on which the `Price List` was created.
      - $ref: "#/definitions/PriceListBase"
  PriceListPost:
    type: object
    allOf:
      - $ref: "#/definitions/PriceListBase"
    required:
      - name
  PriceListPut:
    type: object
    allOf:
      - $ref: "#/definitions/PriceListBase"
  PriceRecordCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/PriceRecord"
      meta:
        $ref: "#/definitions/CollectionMeta"
  PriceRecordResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/PriceRecord"
      meta:
        $ref: "#/definitions/Meta"
  PriceRecordBase:
    type: object
    description: |
      Common Price Record properties.
    properties:
      price:
        type: number
        format: double
        description: |
          The list price for the variant mapped in a Price List. Overrides any existing or Catalog list price for the variant/product.
        x-required:
          - put
      sale_price:
        type: number
        format: double
        description: |
          The sale price for the variant mapped in a Price List. Overrides any existing or Catalog sale price for the variant/product. If empty, the sale price will be treated as not being set on this variant.
      retail_price:
       type: number
       format: double
       description: |
          The retail price for the variant mapped in a Price List. Overrides any existing or Catalog retail price for the variant/product.  If empty, the retail price will be treated as not being set on this variant.
      map_price:
       type: number
       format: double
       description: |
          The MAP (Manufacturer's Advertised Price) for the variant mapped in a Price List. Overrides any existing or Catalog MAP price for the variant/product. If empty, the MAP price will be treated as not being set on this variant.
      bulk_pricing_tiers:
        type: array
        items:
          $ref: "#/definitions/BulkPricingTier"
      sku:
        type: string
        description: |
          The SKU code associated with this `Price Record` if requested and it exists.
  PriceRecord:
    type: object
    description: |
      The comprehensive Price Record object.
    allOf:
      - type: object
        properties:
          calculated_price:
            type: number
            format: double
            description: |
              The price of the variant as seen on the storefront if a price record is in effect. It will be equal to the `sale_price`, if set, and the `price` if there is not a `sale_price`.  Read only.
          date_created:
            type: string
            format: date-time
            description: |
              The date on which the Price entry was created.
          date_modified:
            type: string
            format: date-time
            description: |
              The date on which the Price entry was created.
          product_id:
            type: integer
            description: |
              The id of the `Product` this `Price Record`'s variant_id is associated with.  Read only.
      - $ref: "#/definitions/PriceRecordBase"
      - $ref: "#/definitions/PriceRecordIdentifiers"
  BulkPricingTier:
    type: object
    properties:
      quantity_min:
        type: integer
        description: |
          The minimum quantity of associated variant in the cart needed to qualify for this tiers pricing.
      quantity_max:
        type: integer
        description: |
          The maximum allowed quantity of associated variant in the cart to qualify for this tiers pricing.
      type:
        type: string
        enum:
          - fixed
          - price
          - percent
        description: |
          The type of adjustment that is made. Acceptable values: price – the adjustment amount per product; percent – the adjustment as a percentage of the original price; fixed – the adjusted absolute price of the product.
      amount:
        type: number
        format: double
        description: |
          The price adjustment amount. This value along with the type will decide the price per variant for the pricing tier.
  PriceRecordPut:
    type: object
    allOf:
      - $ref: "#/definitions/PriceRecordBase"
  PriceRecordCollectionPut:
    type: array
    items:
      $ref: "#/definitions/PriceRecordBatchItem"
  PriceRecordBatchItem:
    type: object
    description: |
      `Price Record` object used in batch create or update.
    allOf:
      - type: object
        properties:
          variant_id:
            type: integer
            description: |
              The variant with which this price set is associated. Either variant_id or sku is required.
          sku:
            type: string
            description: |
              The sku for the variant with which this price set is associated.  Either sku or variant_id is required.
          currency:
            type: string
            format: ISO-4217
            description: |
              The 3-letter currency code with which this price set is associated.
      - $ref: "#/definitions/PriceRecordBase"
  PriceRecordIdentifiers:
    type: object
    description: |
      `Price Record` object used in batch create or update.
    allOf:
      - type: object
        properties:
          price_list_id:
            type: integer
            description: |
              The Price List with which this price set is associated.
          variant_id:
            type: integer
            description: |
              The variant with which this price set is associated. Either variant_id or sku is required.
          sku:
            type: string
            description: |
              The variant with which this price set is associated. Either sku or variant_id is required.
          currency:
            type: string
            format: ISO-4217
            description: |
              The 3-letter currency code with which this price set is associated.
  SuccessBatchResponse:
    type: object
    description: Empty object for Success case for Batch API.
  PriceRecordBatchErrorResponse:
    description: |
      Errors during batch usage for the BigCommerce API.
    type: object
    properties:
      batch_errors:
        type: array
        items:
          $ref: "#/definitions/PriceRecordBatchErrorSet"
  PriceRecordBatchErrorSet:
    description: |
      Error during `Price Record` batch PUT.  Includes data sent in the request and errors.
    type: object
    properties:
      data:
        $ref: "#/definitions/PriceRecordIdentifiers"
      field_errors:
        $ref: "#/definitions/DetailedErrors"
  CollectionMeta:
      type: object
      description: |
        Data about the response, including pagination and collection totals.
      properties:
        pagination:
          $ref: "#/definitions/Pagination"
  Pagination:
      type: object
      description: |
        Data about the response, including pagination and collection totals.
      properties:
        total:
          type: integer
          description: |
            Total number of items in the result set.
        count:
          type: integer
          description: |
            Total number of items in the collection response.
        per_page:
          type: integer
          description: |
            The amount of items returned in the collection per page, controlled by the limit parameter.
        current_page:
          type: integer
          description: |
            The page you are currently on within the collection.
        total_pages:
          type: integer
          description: |
            The total number of pages in the collection.
        links:
          type: object
          description: |
            Pagination links for the previous and next parts of the whole collection.
          properties:
            previous:
              type: string
              description: |
                Link to the previous page returned in the response.
            current:
              type: string
              description: |
                Link to the current page returned in the response.
            next:
              type: string
              description: |
                Link to the next page returned in the response.
  Meta:
    type: object
    description: Empty meta object; may be used later.
  ErrorResponse:
    allOf:
    - $ref: "#/definitions/BaseError"
    - type: object
      properties:
        errors:
          $ref: "#/definitions/DetailedErrors"
  BaseError:
    type: object
    description: |
      Error payload for the BigCommerce API.
    properties:
      status:
        description: |
          The HTTP status code.
        type: integer
      title:
        description: |
          The error title describing the particular error.
        type: string
      type:
        type: string
      instance:
        type: string
  DetailedErrors:
    type: object
    additionalProperties:
      type: string
  NotFound:
    description: |
      Error payload for the BigCommerce API.
    type: object
    properties:
      status:
        description: |
          404 HTTP status code.
        type: integer
      title:
        description: The error title describing the particular error.
        type: string
      type:
        type: string
      instance:
        type: string
  TransactionPost:
      type: object
      description: |
        Payload to create a transaction in BigCommerce.
      required:
        - event
        - amount
        - currency
        - gateway
        - method
      properties:
        event:
          type: string
          description: |
            Store event that created the transaction.
          enum:
            - purchase
            - authorization
            - capture
            - refund
            - void
            - pending
            - settled
        method:
          type: string
          description: |
            The payment method: `credit_card` - a credit-card transaction; `electronic_wallet` - an online wallet; `store_credit` - a transaction using store credit; `gift_certificate` - a transaction using a gift certificate; `custom` - manual payment methods; `token` - payment token; `nonce` - temporary payment token; `offsite` - online payment off the site (e.g., PayPal); `offline` - payment method that takes place offline.
          enum:
            - credit_card
            - electronic_wallet
            - gift_certificate
            - store_credit
            - apple_pay_card
            - apple_pay_token
            - token
            - custom
            - offsite
            - offline
            - nonce
        amount:
          type: number
          format: float
          description: |
            Amount of money in the transaction.
        currency:
          type: string
          format: ISO-4217
          description: |
            Currency used for the transaction.
        gateway:
          type: string
          description: |
            The payment gateway, where applicable.
          enum:
            - 2checkout
            - adyen
            - amazon
            - authorizenet
            - bankdeposit
            - braintree
            - cheque
            - cod
            - custom
            - firstdatagge4
            - giftcertificate
            - hps
            - instore
            - klarna
            - migs
            - moneyorder
            - nmi
            - paypalexpress
            - paypalpaymentsprous
            - paypalpaymentsprouk
            - plugnpay
            - qbmsv2
            - securenet
            - square
            - storecredit
            - stripe
            - testgateway
            - usaepay
        gateway_transaction_id:
          description: |
            The transaction ID returned by the payment gateway for this transaction item.
          type: string
        date_created:
          description: |
            The datetime of the transaction.
          type: string
          format: date-time
        test:
          type: boolean
          description: |
            True if the transaction performed was a test, or if the gateway is in test mode.
        status:
          type: string
          description: |
            Status of the transaction.
          enum:
            - ok
            - error
        fraud_review:
          type: boolean
          description: |
            Result of gateway fraud review, if any. Default is `false`.
        reference_transaction_id:
          type: integer
          description: |
            Identifier for an existing transaction upon which this transaction acts.
        offline:
          $ref: "#/definitions/Offline"
        custom:
          $ref: "#/definitions/Custom"

  TransactionResponse:
    type: object
    description: |
      Response payload for the BigCommerce Order Transactions API single transaction.
    properties:
      data:
        $ref: "#/definitions/Transaction"
      meta:
        type: object
        description: May be used in the future
  TransactionCollectionResponse:
    type: object
    description: |
      Response payload for the BigCommerce Order Transactions API.
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Transaction"
      meta:
        $ref: "#/definitions/CollectionMeta"

  Transaction:
    type: object
    description: |
      A BigCommerce Transaction object describes a single transaction.
    allOf:
      - $ref: "#/definitions/TransactionPost"
      - type: object
        properties:
          id:
            type: integer
            description: |
              Unique identifier for the transaction.
          order_id:
            type: string
            description: |
              Identifier for the BigCommerce Order with which this transaction is associated.
          date_created:
            description: |
              The datetime of the transaction.
            type: string
            format: date-time
          payment_instrument_token:
            type: string
            description: |
              Token for an existing stored Credit Card used for this transaction, if any.
          avs_result:
            $ref: "#/definitions/AVSResult"
          cvv_result:
            $ref: "#/definitions/CVVResult"
          credit_card:
            $ref: "#/definitions/CreditCard"
          gift_certificate:
            $ref: "#/definitions/GiftCertificate"
          store_credit:
            $ref: "#/definitions/StoreCredit"

  CreditCard:
    type: object
    description: |
      A credit-card model.
    properties:
      card_type:
        description: |
          The credit-card type: Visa, MasterCard, etc.
        type: string
      card_iin:
        description: |
          The IIN of a credit-card number.
        type: string
      card_last4:
        description: |
          The last 4 digits of a credit-card number.
        type: string

  StoreCredit:
    type: object
    description: |
      A store credit model.
    properties:
      remaining_balance:
        description: |
          Remaining balance of shopper's store credit.
        type: string

  Custom:
    type: object
    description: |
      Custom payment from manual order.
    properties:
      payment_method:
        description: |
          Text entered for the payment method in the control panel.
        type: string

  Offline:
    type: object
    description: |
      Offline payment (e.g., check or purchase order).
    properties:
      display_name:
        description: |
          Display name for the offline payment.
        type: string

  GiftCertificate:
    type: object
    description: |
      A gift-certificate model.
    properties:
      code:
        description: |
          The gift-certificate code.
        type: string
      original_balance:
        description: |
          The balance on a gift certificate when it was purchased.
        type: number
        format: float
      starting_balance:
        description: |
          The balance on a gift certificate at the time of this purchase.
        type: number
        format: float
      remaining_balance:
        description: |
          The remaining balance on a gift certificate.
        type: number
        format: float
      status:
        description: |
          The status of a gift certificate: `active` - gift certificate is active; `pending` - gift certificate purchase is pending; `disabled` - gift certificate is disabled; `expired` - gift certificate is expired.
        type: string
        enum:
          - active
          - pending
          - disabled
          - expired

  AVSResult:
    description: Address Verification Service (AVS) result from the payment gateway.
    type: object
    properties:
      code:
        description: AVS code.
        type: string
      message:
        description: AVS message.
        type: string
      street_match:
        description: AVS Code for street matching result.
        type: string
      postal_match:
        description: AVS Code for postal matching result.
        type: string

  CVVResult:
    description: Card Verification Value result from the payment gateway.
    type: object
    properties:
      code:
        description: CVV code.
        type: string
      message:
        description: CVV message.
        type: string

  NoContent:
    description: |
      No-content response for the BigCommerce API.
    type: object
    properties:
      status:
        description: |
          204 HTTP status code.
        type: integer
      title:
        description: The error title describing the situation.
        type: string
      type:
        type: string
      instance:
        type: string
  Job:
    description: A job.
    type: object
    properties:
      errors:
        description: The errors.
        type: array
        items:
          type: object
          properties:
            error:
              description: The error.
              type: string
            message:
              description: The message.
              type: string
      id:
        description: The identifier.
        type: string
      percent_complete:
        description: The percent complete.
        type: number
      result:
        description: The result.
        type: object
        additionalProperties:
          type: string
      status:
        description: The status.
        type: string
      time:
        description: The time.
        type: string
      warnings:
        description: The warnings.
        type: array
        items:
          type: object
          properties:
            message:
              description: The message.
              type: string
            warning:
              description: The warning.
              type: string
  Theme:
    description: A theme.
    type: object
    properties:
      variations:
        description: The variations.
        type: array
        items:
          $ref: "#/definitions/Variation"
      uuid:
        description: The identifier.
        type: string
      name:
        description: The theme name identifier.
        type: string
      is_private:
        description: Flag to identify private themes.
        type: boolean
  Variation:
    description: A variation.
    type: object
    properties:
      description:
        description: The description.
        type: string
      external_id:
        description: The external identifier.
        type: string
      name:
        description: The name.
        type: string
      uuid:
        description: The identifier.
        type: string
  JobId:
    description: The job identifier.
    type: object
    properties:
      job_id:
        description: The job identifier.
        type: string
  Activate:
    description: Request definition for activation endpoint.
    required:
      - variation_id
      - which
    properties:
      variation_id:
        description: The identifier for the variation to activate.
        type: string
      which:
        description: Which configuration to use.
        type: string
        enum:
          - original
          - last_activated
          - last_created
  ThemesCollectionResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        type: array
        items:
          $ref: "#/definitions/Theme"
      meta:
        $ref: "#/definitions/CollectionMeta"
  ThemeResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Theme"
      meta:
        $ref: "#/definitions/Meta"
  JobResponse:
    description: |
      Response payload for the BigCommerce API.
    type: object
    properties:
      data:
        $ref: "#/definitions/Job"
      meta:
        $ref: "#/definitions/Meta"
  WhichThemeToDownload:
      type: object
      description: |
        An object specifying which theme to download. One of: `original`: the original Marketplace or uploaded custom theme; `last_activated`: the theme version most recently applied to the store; `last_created`: the theme version most recently created.
      allOf:
        - type: object
          properties:
            which:
              description: Which revision to use.
              type: string
              enum:
                - original
                - last_activated
                - last_created
  CustomersSettings:
    title: ChannelSettings
    type: object
    properties:
      data:
        type: object
        properties:
          privacy_settings:
            type: object
            properties:
              ask_shopper_for_tracking_consent:
                type: boolean
              policy_url:
                type: string
              ask_shopper_for_tracking_consent_on_checkout:
                type: boolean
          customer_group_settings:
            type: object
            properties:
              guest_customer_group_id:
                type: integer
              default_customer_group_id:
                type: integer
          allow_global_logins:
            type: boolean
  CustomerCollectionResponse:
    description: Customer Collection Response
    type: object
    properties:
      data:
        type: array
        items:
          $ref: '#/definitions/Customer'
      meta:
        $ref: '#/definitions/CollectionMeta'
  Customer:
    title: Customer
    type: object
    properties:
      email:
        description: The email of the customer. Must be unique.
        type: string
        minLength: 3
        maxLength: 255
      first_name:
        description: The first name of the customer.
        type: string
        minLength: 1
        maxLength: 100
      last_name:
        description: The last name of the customer.
        type: string
        minLength: 1
        maxLength: 100
      company:
        description: The company of the customer.
        type: string
        minLength: 0
        maxLength: 255
      phone:
        description: The phone number of the customer.
        type: string
        minLength: 0
        maxLength: 50
      registration_ip_address:
        description: The IP address from which this customer was registered.
        type: string
        minLength: 0
        maxLength: 30
      notes:
        description: The customer notes.
        type: string
      tax_exempt_category:
        description: The tax exempt category code for the customer.
        type: string
        minLength: 0
        maxLength: 255
      customer_group_id:
        description: Id of the group which this customer belongs to.
        type: integer
        format: int32
      id:
        description: The unique numeric ID of the customer.
        type: integer
        format: int32
      date_modified:
        description: The date on which the customer was modified.
        type: string
        format: date-time
      date_created:
        description: The date of which the customer was created.
        type: string
        format: date-time
      address_count:
        description: Total number of customer addresses
        type: integer
        format: int32
      attribute_count:
        description: Total number of customer attributes
        type: integer
        format: int32
      authentication:
        title: Customer Authentication Base
        example:
          force_password_reset: true
        type: object
        properties:
          force_password_reset:
            description: 'If `true`, this customer will be forced to change password on next login.'
            type: boolean
      addresses:
        description: Array of customer addresses. Limited to 10
        type: array
        maxItems: 10
        items:
          title: Address
          type: object
          properties:
            first_name:
              description: The first name of the customer address.
              type: string
              minLength: 1
              maxLength: 255
            last_name:
              description: The last name of the customer address.
              type: string
              minLength: 1
              maxLength: 255
            company:
              description: The company of the customer address.
              type: string
              minLength: 0
              maxLength: 255
            address1:
              description: The address 1 line.
              type: string
            address2:
              description: The address 2 line.
              type: string
            city:
              description: The city of the customer address.
              type: string
              minLength: 0
              maxLength: 100
            state_or_province:
              description: The state or province name
              type: string
              minLength: 0
              maxLength: 100
            postal_code:
              description: The postal code of the customer address.
              type: string
              minLength: 0
              maxLength: 30
            country_code:
              description: The country code of the customer address.
              type: string
              minLength: 2
              maxLength: 2
            phone:
              description: The phone number of the customer address.
              type: string
              minLength: 0
              maxLength: 50
            address_type:
              title: Address Type
              description: The address type. Residential or Commercial
              example: residential
              type: string
              enum:
                - residential
                - commercial
            customer_id:
              description: The customer ID.
              type: integer
              format: int32
            id:
              description: The unique numeric ID of the address.
              type: integer
              format: int32
            country:
              description: The country name of the customer address.
              type: string
            form_fields:
              description: Array of form fields. Controlled by `formfields` parameter.
              type: array
              items:
                title: 'Form Field Value'
                type: object
          required:
            - first_name
            - last_name
            - address1
            - city
            - state_or_province
            - postal_code
            - country_code
            - customer_id
            - id
      attributes:
        description: Array of customer attributes. Limited to 10
        type: array
        maxItems: 10
        items:
          title: Customer Attribute Value
          type: object
          properties:
            attribute_id:
              description: Attribute ID.
              type: integer
              format: int32
            value:
              description: 'Attribute value. This will always be a string, regardless of the attributes type.'
              type: string
              minLength: 0
              maxLength: 255
            id:
              description: Attribute value ID.
              type: integer
              format: int32
            customer_id:
              description: Customer ID.
              type: integer
              format: int32
            date_modified:
              description: The date on which the customer attribute value was modified.
              type: string
              format: date-time
            date_created:
              description: The date of which the customer attribute value was created.
              type: string
              format: date-time
          required:
            - attribute_id
            - value
            - customer_id
      form_fields:
        description: Array of form fields. Controlled by `formfields` parameter.
        type: array
        items:
          title: 'Form Field Value'
          type: object
      store_credit_amounts:
        $ref: '#/definitions/storeCreditAmounts'
      accepts_product_review_abandoned_cart_emails:
        type: boolean
        description: It determines if the customer is signed up to receive either product review or abandoned cart emails or recieve both emails.
      channel_ids:
        $ref: '#/definitions/customerChannelIds'
  storeCreditAmounts:
    description: 'Store credit.'
    type: array
    format: double
    items:
      type: object
      properties:
        amount:
          type: number
          format: float
          example: 43.18
  customerChannelIds:
    type: array
    title: customerChannelIds
    description: Array of channel ids the Customer has access to.
    items:
      type: integer