PATCH
/hyax-api/v1/products/:idUpdate 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
| Field | Required | Description |
|---|---|---|
title | No | |
slug | No | Send null to clear it; the product then addresses by id |
description | No | |
type | No | `DIGITAL` | `PHYSICAL` | `COURSE` | `EVENT` | `MEMBERSHIP` | `MEETING` | `WEBINAR` |
pricingType | No | `SINGLE` | `SUBSCRIPTION` | `PAY_WHAT_YOU_WANT` | `FREE` |
price | No | Number or null |
currency | No | Default team currency |
isActive | No | Boolean |
hasVariants | No | Boolean. Turning it off on a digital product hides variants without deleting them |
unitsGranted | No | Wallet units credited per purchase, or null |
showVariantDiscount | No | Boolean. Whether shoppers see per-variant savings |
allowMultipleQuantity | No | Boolean |
membershipDuration | No | `MONTH` | `YEAR` | `LIFETIME` |
trialDays | No | Number |
membershipBenefits | No | Array of strings |
productSpecs | No | Array of spec sections |
categoryId | No | Category 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"
}
}