Infusionsoft (Keap) Products API

The Products API from Infusionsoft (Keap) — 9 operation(s) for products.

Operations 25

GET /rest/v2/products List Products #
POST /rest/v2/products Create a Product #
POST /rest/v2/products/{product_id}:adjustInventory Adjust Inventory of a Product #
GET /rest/v2/products/{product_id}/options List Product Options #
POST /rest/v2/products/{product_id}/options Create a Product Option #
POST /rest/v2/products/{product_id}/options/{product_option_id}/listItems Add a Product Option List Option Value #
POST /rest/v2/products/{product_id}/images Create the Product Image #
DELETE /rest/v2/products/{product_id}/images Delete the Product Image #
GET /rest/v2/products/{product_id} Get a Product #
DELETE /rest/v2/products/{product_id} Delete a Product #
PATCH /rest/v2/products/{product_id} Update a Product #
GET /rest/v2/products/{product_id}/options/{product_option_id} Get Product Option #
DELETE /rest/v2/products/{product_id}/options/{product_option_id} Delete a Product Option #
PATCH /rest/v2/products/{product_id}/options/{product_option_id} Updates a Product Option #
DELETE /rest/v2/products/{product_id}/options/{product_option_id}/listItems/{item_id} Delete a Product Option List Item #
PATCH /rest/v2/products/{product_id}/options/{product_option_id}/listItems/{item_id} Updates a Product Option List Option Value #
GET /rest/v2/products/{product_id}/images/legacyImageData Retrieve Product Legacy Image Data #
GET /v2/products List Products #
POST /v2/products Create a Product #
GET /v2/products/{product_id} Get a Product #
DELETE /v2/products/{product_id} Delete a Product #
PATCH /v2/products/{product_id} Update a Product #
POST /v2/products/{product_id}/images Create the Product Image #
DELETE /v2/products/{product_id}/images Delete the Product Image #
POST /v2/products/{product_id}:adjustInventory Adjust Inventory of a Product #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/infusionsoft-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

infusionsoft-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Infusionsoft Products API
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  version: '1.0'
  description: 'Operations tagged Products across 4 of this provider''s published API definitions: infusionsoft-keap-sdk-v2-swagger-original.yml, infusionsoft-rest-v2-2025-11-05-openapi-original.json, infusionsoft-rest-v2-openapi-original.json, infusionsoft-rest-v2-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.keap.com/crm
- url: https://api.infusionsoft.com/crm/rest
- url: https://api.infusionsoft.com/crm
tags:
- name: Products
paths:
  /rest/v2/products:
    get:
      tags:
      - Products
      summary: List Products
      description: Retrieves a list of Products
      operationId: listProducts
      parameters:
      - name: filter
        in: query
        description: 'Filter to apply, allowed fields are:

          - (String) `name` - Wildcard matching allowed

          - (String) `sku` - Wildcard matching allowed

          - (String) `description` - Wildcard matching allowed

          - (String) `short_description` - Wildcard matching allowed

          - (String) `product_id` - supports comparison operators: `==`, `>`, `<`, `>=`, `<=`

          - (List[String]) `product_ids` - accepts a comma-separated list of product IDs


          You will need to apply the `==` operator to check the equality of one of the filters with your searched

          word, in the encoded form `%3D%3D`.


          For fields which allow wildcard matching, you may use the * wildcard character (or its encoded form %2A)

          for case-insensitive partial matching on text fields. Example of a valid pattern of wildcard usage:

          - `field==foo*` finds anything in `field` that begins with `foo`


          For the filters listed above, here are some examples:

          - `filter=name%3D%3Dtestsearch`

          - `filter=name%3D%3Dtest*` (starts with "test")

          - `filter=sku%3D%3Dtestsearch`

          - `filter=sku%3D%3DSKU*` (starts with "SKU")

          - `filter=product_id>5` (product ID greater than 5)

          - `filter=product_id>=10` (product ID greater than or equal to 10)

          - `filter=product_id%3D%3D42` (product ID equals 42)

          - `filter=product_ids%3D%3D1,2,3,4,5` (products with IDs 1, 2, 3, 4, or 5)

          - `filter=name%3D%3Dtestsearch%3Bsku%3D%3Dtestsearch`

          '
        required: false
        schema:
          type: string
      - name: order_by
        in: query
        description: 'Attribute and direction to order items.

          One of the following fields:

          - `name`

          - `sku`

          - `last_updated_time`


          One of the following directions:

          - `asc`

          - `desc`'
        required: false
        schema:
          type: string
      - name: page_size
        in: query
        description: Total number of items to return per page
        required: false
        schema:
          type: integer
          format: int32
          maximum: 1000
          minimum: 0
        example: 0
      - name: page_token
        in: query
        description: Page token
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListProductsResponse_List'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    post:
      tags:
      - Products
      summary: Create a Product
      description: Creates a new product
      operationId: createProduct
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductRequest_Detail'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestV2Product_Detail'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}:adjustInventory:
    post:
      tags:
      - Products
      summary: Adjust Inventory of a Product
      description: Increase or decrease the quantity of the Product
      operationId: adjustInventory
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductInventoryRequest_Detail'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestV2Product_Detail'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}/options:
    get:
      tags:
      - Products
      summary: List Product Options
      description: Retrieves all options of a Product
      operationId: listProductOptions
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListProductOptionsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    post:
      tags:
      - Products
      summary: Create a Product Option
      description: Creates a new product option
      operationId: createProductOption
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductOptionRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductOption'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}/options/{product_option_id}/listItems:
    post:
      tags:
      - Products
      summary: Add a Product Option List Option Value
      description: Adds product option values to a product option of type LIST
      operationId: addProductOptionListOptionValue
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      - name: product_option_id
        in: path
        description: product_option_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateProductOptionListOption'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductOption'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}/images:
    post:
      tags:
      - Products
      summary: Create the Product Image
      description: Creates the Product Image file and uploads it to the specified Product
      operationId: createProductImage
      parameters:
      - name: product_id
        in: path
        description: The product ID
        required: true
        schema:
          type: string
      - name: legacy
        in: query
        description: Set to 'true' if the product image should also be used in legacy cart features. Only one image is allowed. If an image already exists, it will be replaced by the current image.
        required: false
        schema:
          type: boolean
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The image file to upload
              required:
              - file
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    delete:
      tags:
      - Products
      summary: Delete the Product Image
      description: Deletes the Product Image from the specified Product
      operationId: deleteProductImage
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: No Content
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}:
    get:
      tags:
      - Products
      summary: Get a Product
      description: Gets a single Product
      operationId: getProduct
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestV2Product_Detail'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    delete:
      tags:
      - Products
      summary: Delete a Product
      description: Deletes a single product
      operationId: deleteProduct
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: No Content
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    patch:
      tags:
      - Products
      summary: Update a Product
      description: Updates a product
      operationId: updateProduct
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      - name: update_mask
        in: query
        description: An optional list of properties to be updated. If set, only the provided properties will be updated and others will be skipped.
        required: false
        schema:
          type: array
          items:
            type: string
            enum:
            - active
            - name
            - description
            - price
            - sku
            - shippable
            - short_description
            - subscription_only
            - storefront_hidden
            - weight
            - taxable
            - country_taxable
            - city_taxable
            - state_taxable
            - inventory_limit
            - out_of_stock_enabled
            - email_for_inventory_notifications
            - top_html
            - bottom_html
            - is_package
            - needs_digital_delivery
            - delivery_description
          uniqueItems: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductRequest_Detail'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestV2Product_Detail'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    servers:
    - url: https://api.keap.com/crm
  /rest/v2/products/{product_id}/options/{product_option_id}:
    get:
      tags:
      - Products
      summary: Get Product Option
      description: Retrieves a Product Option
      operationId: getProductOption
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      - name: product_option_id
        in: path
        description: product_option_id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductOption'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    delete:
      tags:
      - Products
      summary: Delete a Product Option
      description: Deletes a single product option
      operationId: deleteProductOption
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      - name: product_option_id
        in: path
        description: product_option_id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: No Content
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '501':
          description: Method Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - oauth2: []
    patch:
      tags:
      - Products
      summary: Updates a Product Option
      description: Updates a product option
      operationId: updateProductOption
      parameters:
      - name: product_id
        in: path
        description: product_id
        required: true
        schema:
          type: string
      - name: product_option_id
        in: path
        description: product_option_id
        required: true
        schema:
          type: string
      - name: update_mask
        in: query
        description: An optional list of properties to be updated. If set, only the provided properties will be updated and others will be skipped.
        required: false
        schema:
          type: array
          items:
            type: string
            enum:
            - option_label
            - display_order
            - required
            - minimum_characters
            - maximum_characters
            - allow_spaces
            - only_starts_with
            - only_ends_with
            - only_contains
            - error_message
          uniqueItems: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductOptionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductOption'
        '400':
          description: Bad Re

# --- truncated at 32 KB (258 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/infusionsoft/refs/heads/main/openapi/infusionsoft-products-api-openapi.yml