> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shoppex.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create product

> Developer API operation for POST /dev/v1/products.



## OpenAPI

````yaml /openapi.json post /dev/v1/products
openapi: 3.0.3
info:
  title: Shoppex Developer API
  description: Mintlify-compatible Developer API reference for Shoppex.
  version: 1.0.0
  contact:
    name: Shoppex Support
    email: support@shoppex.io
    url: https://shoppex.io
servers:
  - url: https://api.shoppex.io
security:
  - bearerAuth: []
paths:
  /dev/v1/products:
    post:
      tags:
        - Products
      summary: Create product
      description: Developer API operation for POST /dev/v1/products.
      operationId: postDevV1Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - title
                - price
                - type
              properties:
                title:
                  type: string
                price:
                  type: number
                cost:
                  type: number
                  nullable: true
                description:
                  type: string
                description_tabs:
                  type: array
                  items:
                    type: object
                    required:
                      - title
                      - content
                    properties:
                      title:
                        type: string
                      content:
                        type: string
                metadata:
                  type: object
                  description: >-
                    Merchant-defined public key/value pairs surfaced on the
                    storefront product wire. Flat strings only; at most 50 keys.
                    Send {} to clear.
                  nullable: true
                  additionalProperties:
                    type: string
                currency:
                  type: string
                gateways:
                  type: array
                  items:
                    type: string
                type:
                  type: string
                  enum:
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                    - INFO_CARD
                    - SUBSCRIPTION
                    - GAMING_RCON
                    - SUBSCRIPTION_V2
                subtype:
                  type: string
                  nullable: true
                  enum:
                    - SINGLE
                    - MULTIPLE
                    - RANDOM
                    - REPLACEMENT
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                serials:
                  type: array
                  items:
                    type: string
                serialsRemoveDuplicates:
                  type: boolean
                serials_remove_duplicates:
                  type: boolean
                serviceText:
                  type: string
                service_text:
                  type: string
                stock:
                  type: number
                dynamicWebhook:
                  type: string
                  nullable: true
                dynamic_webhook:
                  type: string
                  nullable: true
                dynamicWebhookSecret:
                  type: string
                dynamic_webhook_secret:
                  type: string
                fileIds:
                  type: array
                  nullable: true
                  items:
                    type: string
                file_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                stockDelimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                stock_delimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                quantity:
                  type: object
                  properties:
                    min:
                      type: number
                    max:
                      type: number
                quantity_min:
                  type: number
                quantity_max:
                  type: number
                deliveryText:
                  type: string
                delivery_text:
                  type: string
                customFields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                custom_fields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                deliveryInstructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                delivery_instructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                cryptoConfirmationsNeeded:
                  type: number
                crypto_confirmations_needed:
                  type: number
                crypto_confirmations:
                  type: number
                maxRiskLevel:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                max_risk_level:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                unlisted:
                  type: boolean
                private:
                  type: boolean
                blockVpnProxies:
                  type: boolean
                block_vpn_proxies:
                  type: boolean
                sortPriority:
                  type: number
                sort_priority:
                  type: number
                webhooks:
                  type: array
                  items:
                    type: string
                onHold:
                  type: boolean
                on_hold:
                  type: boolean
                termsOfService:
                  type: string
                  nullable: true
                terms_of_service:
                  type: string
                  nullable: true
                warrantyDays:
                  type: number
                warranty_days:
                  type: number
                warrantyText:
                  type: string
                  nullable: true
                warranty_text:
                  type: string
                  nullable: true
                volumeDiscounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                volume_discounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                recurringInterval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurring_interval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurringIntervalCount:
                  type: number
                  nullable: true
                recurring_interval_count:
                  type: number
                  nullable: true
                trialPeriod:
                  type: number
                  nullable: true
                trial_period:
                  type: number
                  nullable: true
                discountPercent:
                  type: number
                discount_percent:
                  type: number
                deliveryTime:
                  type: number
                  nullable: true
                delivery_time:
                  type: number
                  nullable: true
                deliveryTimeUnit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                delivery_time_unit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                categoryId:
                  type: string
                  format: uuid
                  nullable: true
                category_id:
                  type: string
                  format: uuid
                  nullable: true
                video_link:
                  type: string
                  nullable: true
                watermarkEnabled:
                  type: boolean
                watermark_enabled:
                  type: boolean
                watermarkText:
                  type: string
                  nullable: true
                watermark_text:
                  type: string
                  nullable: true
                redirectLink:
                  type: string
                  nullable: true
                redirect_link:
                  type: string
                  nullable: true
                redirectTime:
                  type: number
                  nullable: true
                redirect_time:
                  type: number
                  nullable: true
                variants:
                  type: array
                  nullable: true
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                      description:
                        type: string
                        nullable: true
                      price:
                        type: number
                      cost:
                        type: number
                        nullable: true
                      stock:
                        type: number
                        nullable: true
                      quantity_min:
                        type: number
                        nullable: true
                      quantityMin:
                        type: number
                        nullable: true
                      quantity_max:
                        type: number
                        nullable: true
                      quantityMax:
                        type: number
                        nullable: true
                      serials:
                        type: string
                        nullable: true
                      license_period:
                        type: number
                        nullable: true
                      licensePeriod:
                        type: number
                        nullable: true
                      sort_order:
                        type: number
                      sortOrder:
                        type: number
                      option_values:
                        type: object
                        additionalProperties: true
                      optionValues:
                        type: object
                        additionalProperties: true
                      is_default:
                        type: boolean
                      isDefault:
                        type: boolean
                      is_featured:
                        type: boolean
                      isFeatured:
                        type: boolean
                      file_id:
                        type: string
                        nullable: true
                      fileId:
                        type: string
                        nullable: true
                      dynamic_webhook:
                        type: string
                        nullable: true
                      dynamicWebhook:
                        type: string
                        nullable: true
                    additionalProperties: true
                discordIntegration:
                  type: boolean
                discord_integration:
                  type: boolean
                discordSetRole:
                  type: boolean
                discord_set_role:
                  type: boolean
                discordServerId:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discord_server_id:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discordRoleId:
                  type: string
                  nullable: true
                discord_role_id:
                  type: string
                  nullable: true
                discordRequiredRoleId:
                  type: string
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                discord_required_role_id:
                  type: string
                  description: >-
                    Existing Discord role required before purchase, independent
                    of delivery. A numeric unsigned 64-bit Discord snowflake
                    (maximum 18446744073709551615). Requires discord_server_id.
                    Clear with null or an empty string. Buyers must sign in to
                    the hosted shop and connect Discord in their account.
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                additionalRoleIds:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                additional_role_ids:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                discordRemoveRole:
                  type: boolean
                discord_remove_role:
                  type: boolean
                payWhatYouWant:
                  type: boolean
                pay_what_you_want:
                  type: boolean
                affiliateRevenuePercent:
                  type: number
                affiliate_revenue_percent:
                  type: number
                affiliateCustomerDiscountMode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliate_customer_discount_mode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliateCustomerDiscountPercent:
                  type: number
                  nullable: true
                affiliate_customer_discount_percent:
                  type: number
                  nullable: true
                discordOptional:
                  type: boolean
                discord_optional:
                  type: boolean
                licensingEnabled:
                  type: boolean
                licensing_enabled:
                  type: boolean
                licensePeriod:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                license_period:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                label_singular:
                  type: string
                label_plural:
                  type: string
                slug:
                  type: string
                  nullable: true
              example:
                title: Created Product
                price: 19.99
                type: DYNAMIC
                dynamic_webhook: https://example.com/hook
                delivery_instructions:
                  required: true
                  label: Discord username
                custom_fields:
                  - name: Invite
                    type: text
                    required: true
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - title
                - price
                - type
              properties:
                title:
                  type: string
                price:
                  type: number
                cost:
                  type: number
                  nullable: true
                description:
                  type: string
                description_tabs:
                  type: array
                  items:
                    type: object
                    required:
                      - title
                      - content
                    properties:
                      title:
                        type: string
                      content:
                        type: string
                metadata:
                  type: object
                  description: >-
                    Merchant-defined public key/value pairs surfaced on the
                    storefront product wire. Flat strings only; at most 50 keys.
                    Send {} to clear.
                  nullable: true
                  additionalProperties:
                    type: string
                currency:
                  type: string
                gateways:
                  type: array
                  items:
                    type: string
                type:
                  type: string
                  enum:
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                    - INFO_CARD
                    - SUBSCRIPTION
                    - GAMING_RCON
                    - SUBSCRIPTION_V2
                subtype:
                  type: string
                  nullable: true
                  enum:
                    - SINGLE
                    - MULTIPLE
                    - RANDOM
                    - REPLACEMENT
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                serials:
                  type: array
                  items:
                    type: string
                serialsRemoveDuplicates:
                  type: boolean
                serials_remove_duplicates:
                  type: boolean
                serviceText:
                  type: string
                service_text:
                  type: string
                stock:
                  type: number
                dynamicWebhook:
                  type: string
                  nullable: true
                dynamic_webhook:
                  type: string
                  nullable: true
                dynamicWebhookSecret:
                  type: string
                dynamic_webhook_secret:
                  type: string
                fileIds:
                  type: array
                  nullable: true
                  items:
                    type: string
                file_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                stockDelimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                stock_delimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                quantity:
                  type: object
                  properties:
                    min:
                      type: number
                    max:
                      type: number
                quantity_min:
                  type: number
                quantity_max:
                  type: number
                deliveryText:
                  type: string
                delivery_text:
                  type: string
                customFields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                custom_fields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                deliveryInstructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                delivery_instructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                cryptoConfirmationsNeeded:
                  type: number
                crypto_confirmations_needed:
                  type: number
                crypto_confirmations:
                  type: number
                maxRiskLevel:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                max_risk_level:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                unlisted:
                  type: boolean
                private:
                  type: boolean
                blockVpnProxies:
                  type: boolean
                block_vpn_proxies:
                  type: boolean
                sortPriority:
                  type: number
                sort_priority:
                  type: number
                webhooks:
                  type: array
                  items:
                    type: string
                onHold:
                  type: boolean
                on_hold:
                  type: boolean
                termsOfService:
                  type: string
                  nullable: true
                terms_of_service:
                  type: string
                  nullable: true
                warrantyDays:
                  type: number
                warranty_days:
                  type: number
                warrantyText:
                  type: string
                  nullable: true
                warranty_text:
                  type: string
                  nullable: true
                volumeDiscounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                volume_discounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                recurringInterval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurring_interval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurringIntervalCount:
                  type: number
                  nullable: true
                recurring_interval_count:
                  type: number
                  nullable: true
                trialPeriod:
                  type: number
                  nullable: true
                trial_period:
                  type: number
                  nullable: true
                discountPercent:
                  type: number
                discount_percent:
                  type: number
                deliveryTime:
                  type: number
                  nullable: true
                delivery_time:
                  type: number
                  nullable: true
                deliveryTimeUnit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                delivery_time_unit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                categoryId:
                  type: string
                  format: uuid
                  nullable: true
                category_id:
                  type: string
                  format: uuid
                  nullable: true
                video_link:
                  type: string
                  nullable: true
                watermarkEnabled:
                  type: boolean
                watermark_enabled:
                  type: boolean
                watermarkText:
                  type: string
                  nullable: true
                watermark_text:
                  type: string
                  nullable: true
                redirectLink:
                  type: string
                  nullable: true
                redirect_link:
                  type: string
                  nullable: true
                redirectTime:
                  type: number
                  nullable: true
                redirect_time:
                  type: number
                  nullable: true
                variants:
                  type: array
                  nullable: true
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                      description:
                        type: string
                        nullable: true
                      price:
                        type: number
                      cost:
                        type: number
                        nullable: true
                      stock:
                        type: number
                        nullable: true
                      quantity_min:
                        type: number
                        nullable: true
                      quantityMin:
                        type: number
                        nullable: true
                      quantity_max:
                        type: number
                        nullable: true
                      quantityMax:
                        type: number
                        nullable: true
                      serials:
                        type: string
                        nullable: true
                      license_period:
                        type: number
                        nullable: true
                      licensePeriod:
                        type: number
                        nullable: true
                      sort_order:
                        type: number
                      sortOrder:
                        type: number
                      option_values:
                        type: object
                        additionalProperties: true
                      optionValues:
                        type: object
                        additionalProperties: true
                      is_default:
                        type: boolean
                      isDefault:
                        type: boolean
                      is_featured:
                        type: boolean
                      isFeatured:
                        type: boolean
                      file_id:
                        type: string
                        nullable: true
                      fileId:
                        type: string
                        nullable: true
                      dynamic_webhook:
                        type: string
                        nullable: true
                      dynamicWebhook:
                        type: string
                        nullable: true
                    additionalProperties: true
                discordIntegration:
                  type: boolean
                discord_integration:
                  type: boolean
                discordSetRole:
                  type: boolean
                discord_set_role:
                  type: boolean
                discordServerId:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discord_server_id:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discordRoleId:
                  type: string
                  nullable: true
                discord_role_id:
                  type: string
                  nullable: true
                discordRequiredRoleId:
                  type: string
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                discord_required_role_id:
                  type: string
                  description: >-
                    Existing Discord role required before purchase, independent
                    of delivery. A numeric unsigned 64-bit Discord snowflake
                    (maximum 18446744073709551615). Requires discord_server_id.
                    Clear with null or an empty string. Buyers must sign in to
                    the hosted shop and connect Discord in their account.
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                additionalRoleIds:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                additional_role_ids:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                discordRemoveRole:
                  type: boolean
                discord_remove_role:
                  type: boolean
                payWhatYouWant:
                  type: boolean
                pay_what_you_want:
                  type: boolean
                affiliateRevenuePercent:
                  type: number
                affiliate_revenue_percent:
                  type: number
                affiliateCustomerDiscountMode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliate_customer_discount_mode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliateCustomerDiscountPercent:
                  type: number
                  nullable: true
                affiliate_customer_discount_percent:
                  type: number
                  nullable: true
                discordOptional:
                  type: boolean
                discord_optional:
                  type: boolean
                licensingEnabled:
                  type: boolean
                licensing_enabled:
                  type: boolean
                licensePeriod:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                license_period:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                label_singular:
                  type: string
                label_plural:
                  type: string
                slug:
                  type: string
                  nullable: true
              example:
                title: Created Product
                price: 19.99
                type: DYNAMIC
                dynamic_webhook: https://example.com/hook
                delivery_instructions:
                  required: true
                  label: Discord username
                custom_fields:
                  - name: Invite
                    type: text
                    required: true
          multipart/form-data:
            schema:
              type: object
              required:
                - title
                - price
                - type
              properties:
                title:
                  type: string
                price:
                  type: number
                cost:
                  type: number
                  nullable: true
                description:
                  type: string
                description_tabs:
                  type: array
                  items:
                    type: object
                    required:
                      - title
                      - content
                    properties:
                      title:
                        type: string
                      content:
                        type: string
                metadata:
                  type: object
                  description: >-
                    Merchant-defined public key/value pairs surfaced on the
                    storefront product wire. Flat strings only; at most 50 keys.
                    Send {} to clear.
                  nullable: true
                  additionalProperties:
                    type: string
                currency:
                  type: string
                gateways:
                  type: array
                  items:
                    type: string
                type:
                  type: string
                  enum:
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                    - INFO_CARD
                    - SUBSCRIPTION
                    - GAMING_RCON
                    - SUBSCRIPTION_V2
                subtype:
                  type: string
                  nullable: true
                  enum:
                    - SINGLE
                    - MULTIPLE
                    - RANDOM
                    - REPLACEMENT
                    - SERIALS
                    - FILE
                    - SERVICE
                    - DYNAMIC
                serials:
                  type: array
                  items:
                    type: string
                serialsRemoveDuplicates:
                  type: boolean
                serials_remove_duplicates:
                  type: boolean
                serviceText:
                  type: string
                service_text:
                  type: string
                stock:
                  type: number
                dynamicWebhook:
                  type: string
                  nullable: true
                dynamic_webhook:
                  type: string
                  nullable: true
                dynamicWebhookSecret:
                  type: string
                dynamic_webhook_secret:
                  type: string
                fileIds:
                  type: array
                  nullable: true
                  items:
                    type: string
                file_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                stockDelimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                stock_delimiter:
                  type: string
                  enum:
                    - comma
                    - newline
                    - ','
                quantity:
                  type: object
                  properties:
                    min:
                      type: number
                    max:
                      type: number
                quantity_min:
                  type: number
                quantity_max:
                  type: number
                deliveryText:
                  type: string
                delivery_text:
                  type: string
                customFields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                custom_fields:
                  type: array
                  items:
                    type: object
                    required:
                      - name
                      - type
                      - required
                    properties:
                      name:
                        type: string
                      type:
                        type: string
                      required:
                        type: boolean
                      collect_after_payment:
                        type: boolean
                      default:
                        type: string
                      placeholder:
                        type: string
                      regex:
                        type: string
                deliveryInstructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                delivery_instructions:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    required:
                      type: boolean
                    label:
                      type: string
                    placeholder:
                      type: string
                      nullable: true
                    help_text:
                      type: string
                      nullable: true
                    max_length:
                      type: number
                cryptoConfirmationsNeeded:
                  type: number
                crypto_confirmations_needed:
                  type: number
                crypto_confirmations:
                  type: number
                maxRiskLevel:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                max_risk_level:
                  type: number
                  description: Risk score ceiling, 0-100. 100 lets every buyer through.
                unlisted:
                  type: boolean
                private:
                  type: boolean
                blockVpnProxies:
                  type: boolean
                block_vpn_proxies:
                  type: boolean
                sortPriority:
                  type: number
                sort_priority:
                  type: number
                webhooks:
                  type: array
                  items:
                    type: string
                onHold:
                  type: boolean
                on_hold:
                  type: boolean
                termsOfService:
                  type: string
                  nullable: true
                terms_of_service:
                  type: string
                  nullable: true
                warrantyDays:
                  type: number
                warranty_days:
                  type: number
                warrantyText:
                  type: string
                  nullable: true
                warranty_text:
                  type: string
                  nullable: true
                volumeDiscounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                volume_discounts:
                  type: array
                  items:
                    type: object
                    required:
                      - quantity
                      - value
                      - type
                    properties:
                      quantity:
                        type: number
                      value:
                        type: number
                      type:
                        type: string
                        enum:
                          - PERCENTAGE
                          - FIXED
                recurringInterval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurring_interval:
                  type: string
                  nullable: true
                  enum:
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                recurringIntervalCount:
                  type: number
                  nullable: true
                recurring_interval_count:
                  type: number
                  nullable: true
                trialPeriod:
                  type: number
                  nullable: true
                trial_period:
                  type: number
                  nullable: true
                discountPercent:
                  type: number
                discount_percent:
                  type: number
                deliveryTime:
                  type: number
                  nullable: true
                delivery_time:
                  type: number
                  nullable: true
                deliveryTimeUnit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                delivery_time_unit:
                  type: string
                  enum:
                    - minutes
                    - hours
                    - days
                categoryId:
                  type: string
                  format: uuid
                  nullable: true
                category_id:
                  type: string
                  format: uuid
                  nullable: true
                video_link:
                  type: string
                  nullable: true
                watermarkEnabled:
                  type: boolean
                watermark_enabled:
                  type: boolean
                watermarkText:
                  type: string
                  nullable: true
                watermark_text:
                  type: string
                  nullable: true
                redirectLink:
                  type: string
                  nullable: true
                redirect_link:
                  type: string
                  nullable: true
                redirectTime:
                  type: number
                  nullable: true
                redirect_time:
                  type: number
                  nullable: true
                variants:
                  type: array
                  nullable: true
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                      description:
                        type: string
                        nullable: true
                      price:
                        type: number
                      cost:
                        type: number
                        nullable: true
                      stock:
                        type: number
                        nullable: true
                      quantity_min:
                        type: number
                        nullable: true
                      quantityMin:
                        type: number
                        nullable: true
                      quantity_max:
                        type: number
                        nullable: true
                      quantityMax:
                        type: number
                        nullable: true
                      serials:
                        type: string
                        nullable: true
                      license_period:
                        type: number
                        nullable: true
                      licensePeriod:
                        type: number
                        nullable: true
                      sort_order:
                        type: number
                      sortOrder:
                        type: number
                      option_values:
                        type: object
                        additionalProperties: true
                      optionValues:
                        type: object
                        additionalProperties: true
                      is_default:
                        type: boolean
                      isDefault:
                        type: boolean
                      is_featured:
                        type: boolean
                      isFeatured:
                        type: boolean
                      file_id:
                        type: string
                        nullable: true
                      fileId:
                        type: string
                        nullable: true
                      dynamic_webhook:
                        type: string
                        nullable: true
                      dynamicWebhook:
                        type: string
                        nullable: true
                    additionalProperties: true
                discordIntegration:
                  type: boolean
                discord_integration:
                  type: boolean
                discordSetRole:
                  type: boolean
                discord_set_role:
                  type: boolean
                discordServerId:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discord_server_id:
                  type: string
                  description: >-
                    Discord server (guild) id. On PATCH, changing this value
                    clears stored primary, required and additional role IDs
                    unless replacements are supplied in the same request.
                  nullable: true
                discordRoleId:
                  type: string
                  nullable: true
                discord_role_id:
                  type: string
                  nullable: true
                discordRequiredRoleId:
                  type: string
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                discord_required_role_id:
                  type: string
                  description: >-
                    Existing Discord role required before purchase, independent
                    of delivery. A numeric unsigned 64-bit Discord snowflake
                    (maximum 18446744073709551615). Requires discord_server_id.
                    Clear with null or an empty string. Buyers must sign in to
                    the hosted shop and connect Discord in their account.
                  nullable: true
                  pattern: ^(?:[1-9][0-9]*|)$
                additionalRoleIds:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                additional_role_ids:
                  type: array
                  description: Additional Discord role ids (max 20).
                  items:
                    type: string
                discordRemoveRole:
                  type: boolean
                discord_remove_role:
                  type: boolean
                payWhatYouWant:
                  type: boolean
                pay_what_you_want:
                  type: boolean
                affiliateRevenuePercent:
                  type: number
                affiliate_revenue_percent:
                  type: number
                affiliateCustomerDiscountMode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliate_customer_discount_mode:
                  type: string
                  enum:
                    - USE_STORE_DEFAULT
                    - CUSTOM
                    - DISABLED
                affiliateCustomerDiscountPercent:
                  type: number
                  nullable: true
                affiliate_customer_discount_percent:
                  type: number
                  nullable: true
                discordOptional:
                  type: boolean
                discord_optional:
                  type: boolean
                licensingEnabled:
                  type: boolean
                licensing_enabled:
                  type: boolean
                licensePeriod:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                license_period:
                  nullable: true
                  anyOf:
                    - type: string
                    - type: number
                label_singular:
                  type: string
                label_plural:
                  type: string
                slug:
                  type: string
                  nullable: true
              example:
                title: Created Product
                price: 19.99
                type: DYNAMIC
                dynamic_webhook: https://example.com/hook
                delivery_instructions:
                  required: true
                  label: Discord username
                custom_fields:
                  - name: Invite
                    type: text
                    required: true
      responses:
        '201':
          description: Response for status 201
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: object
                    required:
                      - additional_role_ids
                      - discord_required_role_id
                      - discord_server_id
                      - license_period
                    properties:
                      additional_role_ids:
                        type: array
                        description: Additional Discord role ids (max 20).
                        items:
                          type: string
                      discord_required_role_id:
                        type: string
                        nullable: true
                      discord_server_id:
                        type: string
                        nullable: true
                      license_period:
                        nullable: true
                        anyOf:
                          - type: string
                          - type: number
                      license_mode:
                        type: string
                        enum:
                          - LIFETIME
                          - PERIOD
                          - INHERIT
                      license_period_days:
                        type: number
                        nullable: true
                    additionalProperties: true
                additionalProperties: true
                example:
                  data:
                    id: prod_db_1
                    uniqid: prod_created
                    shop_id: shop_1
                    slug: null
                    type: DYNAMIC
                    subtype: null
                    title: Created Product
                    currency: USD
                    price: 19.99
                    price_display: 19.99
                    cost: null
                    cost_display: null
                    discount_percent: 0
                    pay_what_you_want: false
                    description: Product description
                    description_tabs:
                      - title: Features
                        content: <p>Instant delivery, 24/7 support.</p>
                    gateways:
                      - PAYPAL
                    custom_fields:
                      - name: Invite
                        type: text
                        required: true
                    delivery_instructions:
                      enabled: true
                      required: true
                      label: Discord username
                    volume_discounts: []
                    quantity_min: 1
                    quantity_max: -1
                    quantity_warning: 0
                    stock: 0
                    available_stock: 0
                    stock_delimiter: |+

                    unlisted: false
                    private: false
                    on_hold: false
                    sort_priority: 0
                    crypto_confirmations: 1
                    max_risk_level: 100
                    block_vpn_proxies: false
                    delivery_text: ''
                    delivery_time: null
                    service_text: ''
                    dynamic_webhook: https://example.com/hook
                    terms_of_service: null
                    warranty_days: 0
                    warranty_text: null
                    watermark_enabled: true
                    watermark_text: null
                    redirect_link: null
                    video_link: null
                    image_id: null
                    image_url: null
                    file_id: null
                    recurring_interval: null
                    recurring_interval_count: null
                    trial_period: null
                    licensing_enabled: false
                    license_period: null
                    affiliate_revenue_percent: 0
                    affiliate_customer_discount_mode: USE_STORE_DEFAULT
                    affiliate_customer_discount_percent: null
                    category_id: null
                    variants: []
                    created_at: 1711965600
                    updated_at: 1711965600
        '400':
          description: Response for status 400
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '401':
          description: Response for status 401
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '403':
          description: Response for status 403
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '404':
          description: Response for status 404
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '409':
          description: Response for status 409
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '422':
          description: Response for status 422
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '429':
          description: Response for status 429
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
        '500':
          description: Response for status 500
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - doc_url
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      doc_url:
                        type: string
                      details:
                        type: array
                        items:
                          type: object
                          required:
                            - field
                            - message
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                          additionalProperties: true
                      subcode:
                        type: string
                    additionalProperties: true
                additionalProperties: true
      deprecated: false
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: Use your Shoppex API key in the Authorization header.

````