← Home
PATCH/hyax-api/v1/products/:id

Update product

Partial update — only the fields you send change. Setting `isActive: true` runs the same publish-readiness gate as the dashboard and returns `400` with the blocking reasons if the product is not sellable. Variants and options have their own endpoints; this does not touch course modules or media.

Base URL: https://platform.hyax.com · Replace YOUR_API_KEY with your team API key.

Request body

FieldRequiredDescription
titleNo
slugNoSend null to clear it; the product then addresses by id
descriptionNo
typeNo`DIGITAL` | `PHYSICAL` | `COURSE` | `EVENT` | `MEMBERSHIP` | `MEETING` | `WEBINAR`
pricingTypeNo`SINGLE` | `SUBSCRIPTION` | `PAY_WHAT_YOU_WANT` | `FREE`
priceNoNumber or null
currencyNoDefault team currency
isActiveNoBoolean
hasVariantsNoBoolean. Turning it off on a digital product hides variants without deleting them
unitsGrantedNoWallet units credited per purchase, or null
showVariantDiscountNoBoolean. Whether shoppers see per-variant savings
allowMultipleQuantityNoBoolean
membershipDurationNo`MONTH` | `YEAR` | `LIFETIME`
trialDaysNoNumber
membershipBenefitsNoArray of strings
productSpecsNoArray of spec sections
categoryIdNoCategory ID or null to clear

Request

curl -X PATCH 'https://platform.hyax.com/hyax-api/v1/products/clx_example_id' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Response

{
  "success": true,
  "data": {
    "id": "clx…",
    "title": "Pro plan",
    "slug": "pro-plan",
    "type": "MEMBERSHIP",
    "pricingType": "SUBSCRIPTION",
    "price": 99,
    "currency": "USD",
    "isActive": true,
    "isArchived": false,
    "createdAt": "2025-01-15T12:00:00.000Z",
    "updatedAt": "2025-01-16T08:00:00.000Z"
  }
}