Miridia
Portal
Catalogue

Product groups

The product groups operations of the Core API.

Base URL: https://api.miridia.io. Read Authentication and Conventions before you call these operations.

MethodPathOperation
GET/api/v1/products/groups/{groupId}Get product group
PUT/api/v1/products/groups/{groupId}Update product group
DELETE/api/v1/products/groups/{groupId}Delete product group
POST/api/v1/products/{parentProductId}/groupsCreate product group
POST/api/v1/products/groups/{groupId}/membersAdd member
DELETE/api/v1/products/groups/{groupId}/members/{productId}Remove member

Get product group

GET/api/v1/products/groups/{groupId}

Access. Send a bearer token or an API key. The caller needs the Products view permission.

Parameters

NameInTypeRequiredDescription
groupIdpathstring (uuid)Yes

Response

200. Returns a SingleResult envelope. The data field is ProductGroupResponse.

Request
curl -X GET "https://api.miridia.io/api/v1/products/groups/{groupId}" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID"
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "description": "string",
    "optionAxes": [
      "string"
    ],
    "primaryProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "externalGroupId": "string",
    "members": [
      {}
    ],
    "dateCreated": "2026-09-29T08:00:00Z"
  },
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Update product group

PUT/api/v1/products/groups/{groupId}

Access. Send a bearer token or an API key. The caller needs the Products modify permission.

Parameters

NameInTypeRequiredDescription
groupIdpathstring (uuid)Yes

Request body

Send JSON with the shape UpdateProductGroupCommand.

FieldTypeRequiredDescription
idstring (uuid)No
namestringYes
descriptionstringNo
optionAxesstring[]No
primaryProductIdstring (uuid)No

Response

200. Returns a SingleResult envelope. The data field is ProductGroupResponse.

Request
curl -X PUT "https://api.miridia.io/api/v1/products/groups/{groupId}" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "description": "string",
  "optionAxes": [
    "string"
  ],
  "primaryProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}'
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "description": "string",
    "optionAxes": [
      "string"
    ],
    "primaryProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "externalGroupId": "string",
    "members": [
      {}
    ],
    "dateCreated": "2026-09-29T08:00:00Z"
  },
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Delete product group

DELETE/api/v1/products/groups/{groupId}

Access. Send a bearer token or an API key. The caller needs the Products delete permission.

Parameters

NameInTypeRequiredDescription
groupIdpathstring (uuid)Yes

Response

200. Returns a SingleResult envelope. The data field is boolean.

Request
curl -X DELETE "https://api.miridia.io/api/v1/products/groups/{groupId}" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID"
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": true,
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Create product group

POST/api/v1/products/{parentProductId}/groups

Access. Send a bearer token or an API key. The caller needs the Products modify permission.

Parameters

NameInTypeRequiredDescription
parentProductIdpathstring (uuid)Yes

Request body

Send JSON with the shape CreateProductGroupCommand.

FieldTypeRequiredDescription
parentProductIdstring (uuid)NoThe product the group is spun off from; auto-added as the family primary. Set from the route.
namestringYes
descriptionstringNo
optionAxesstring[]No
parentOptionValuesmap<string, string>NoPer-axis values for the parent member (e.g. {"Size":"500ml"}). Empty if omitted.
membersCreateProductGroupMember[]No

Response

200. Returns a SingleResult envelope. The data field is ProductGroupResponse.

Request
curl -X POST "https://api.miridia.io/api/v1/products/{parentProductId}/groups" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "parentProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "description": "string",
  "optionAxes": [
    "string"
  ],
  "parentOptionValues": {
    "key": "string"
  },
  "members": [
    {
      "productId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "newProduct": {},
      "optionValues": {
        "key": "string"
      },
      "position": 0
    }
  ]
}'
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "description": "string",
    "optionAxes": [
      "string"
    ],
    "primaryProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "externalGroupId": "string",
    "members": [
      {}
    ],
    "dateCreated": "2026-09-29T08:00:00Z"
  },
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Add member

POST/api/v1/products/groups/{groupId}/members

Access. Send a bearer token or an API key. The caller needs the Products modify permission.

Parameters

NameInTypeRequiredDescription
groupIdpathstring (uuid)Yes

Request body

Send JSON with the shape AddProductGroupMemberCommand.

FieldTypeRequiredDescription
groupIdstring (uuid)No
productIdstring (uuid)No
newProductCreateProductRequestNo
optionValuesmap<string, string>No
positioninteger (int32)No

Response

200. Returns a SingleResult envelope. The data field is ProductGroupResponse.

Request
curl -X POST "https://api.miridia.io/api/v1/products/groups/{groupId}/members" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "groupId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "productId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "newProduct": {
    "sku": "string",
    "title": "string",
    "description": "string",
    "body": "string",
    "price": {
      "subTotal": 0,
      "totalPrice": 0,
      "totalTax": 0,
      "totalDiscount": 0,
      "discount": 0,
      "discountType": "Percentage",
      "taxIncluded": true,
      "taxRate": 0,
      "taxType": "Sales"
    },
    "geometry": {
      "weight": 0,
      "width": 0,
      "length": 0,
      "height": 0,
      "lengthType": "Centimeter",
      "weightType": "Kilogram"
    },
    "productType": "FinishedGood",
    "status": "Active",
    "unit": "Each",
    "barcode": "string",
    "upc": "string",
    "ean": "string",
    "mpn": "string",
    "purchasable": true,
    "isSellable": true,
    "isPurchasable": true,
    "isTaxable": true,
    "requiresShipping": true,
    "tags": [
      "string"
    ],
    "imageIds": [
      "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "imageUrls": [
      "string"
    ],
    "defaultImageUrl": "string",
    "groupAssignment": {
      "groupId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "optionValues": {
        "key": "string"
      },
      "position": 0
    },
    "supplierId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "dateCreated": "2026-09-29T08:00:00Z",
    "metadata": {
      "key": "string"
    }
  },
  "optionValues": {
    "key": "string"
  },
  "position": 0
}'
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "description": "string",
    "optionAxes": [
      "string"
    ],
    "primaryProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "externalGroupId": "string",
    "members": [
      {}
    ],
    "dateCreated": "2026-09-29T08:00:00Z"
  },
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Remove member

DELETE/api/v1/products/groups/{groupId}/members/{productId}

Access. Send a bearer token or an API key. The caller needs the Products delete permission.

Parameters

NameInTypeRequiredDescription
groupIdpathstring (uuid)Yes
productIdpathstring (uuid)Yes

Response

200. Returns a SingleResult envelope. The data field is boolean.

Request
curl -X DELETE "https://api.miridia.io/api/v1/products/groups/{groupId}/members/{productId}" \
  -H "Authorization: Bearer $MIRIDIA_TOKEN" \
  -H "X-Business-Id: $MIRIDIA_BUSINESS_ID"
Response
{
  "message": "string",
  "messages": [
    {
      "title": "string",
      "message": "string",
      "level": "Standard",
      "icon": "SyncAlert",
      "code": "string"
    }
  ],
  "data": true,
  "statusCode": "OK",
  "canRead": true,
  "canEdit": true,
  "canDelete": true
}

Models

The operations on this page use these object types. Select a type to see its fields.

CreateProductGroupMember

A member to place in a new group: EITHER an existing product (productId) OR a brand-new product to mint (newProduct). Exactly one must be set.

FieldTypeDescription
productIdstring (uuid)
newProductCreateProductRequest
optionValuesmap<string, string>
positioninteger (int32)
CreateProductPriceRequest
FieldTypeDescription
subTotalnumber (double)Limits: minimum 0.
totalPricenumber (double)Limits: minimum 0.
totalTaxnumber (double)Limits: minimum 0.
totalDiscountnumber (double)Limits: minimum 0.
discountnumber (double)Limits: minimum 0.
discountTypeenum DiscountTypeOne of: None, Percentage, FixedValue.
taxIncludedboolean
taxRatenumber (double)Limits: minimum 0, maximum 100.
taxTypeenum TaxTypeOne of: None, Sales, Vat, Gst, Pst, Hst, Qst, Ist, Ust, Cst.
CreateProductRequest
FieldTypeDescription
skustring
titlestringLimits: maximum 100 characters.
descriptionstringProvides a summary of the product Limits: maximum 1000 characters.
bodystring
priceCreateProductPriceRequest
geometryProductDimensionRequest
productTypeenum ProductTypeOne of: FinishedGood, RawMaterial, Component, Consumable, Service.
statusenum ProductStatusOne of: Active, Inactive, Discontinued.
unitenum UnitOfMeasureOne of: Each, Kilogram, Gram, Litre, Millilitre, Metre, Centimetre, SquareMetre, CubicMetre, Pair, Pack, Box, Roll, Sheet.
barcodestring
upcstring
eanstring
mpnstring
purchasableboolean
isSellableboolean
isPurchasableboolean
isTaxableboolean
requiresShippingboolean
tagsstring[]
imageIdsstring (uuid)[]Images which have been uploaded via the FileController.
imageUrlsstring[]
defaultImageUrlstring
groupAssignmentProductGroupAssignmentRequest
supplierIdstring (uuid)
dateCreatedstring (date-time)When the product was created. Optional; defaults to now. Lets seeded/synthetic catalogs show products appearing over time rather than all on seed day.
metadatamap<string, string>
CurrencyResponse
FieldTypeDescription
iso4217string
utf8Symbolstring
currencyCodeenum CurrencyCodeOne of: Invalid, Eur, Usd, Gbp, Zar, Zmw.
ProductDimensionRequest
FieldTypeDescription
weightnumber (double)Limits: minimum 0.
widthnumber (double)Limits: minimum 0.
lengthnumber (double)Limits: minimum 0.
heightnumber (double)Limits: minimum 0.
lengthTypeenum LengthTypeOne of: Unknown, Centimeter, Meter, Inch, Foot.
weightTypeenum WeightTypeOne of: Unknown, Kilogram, Tonne, Pound, Stone, UsTon, ImperialTon, Gram.
ProductGroupAssignmentRequest

Create-time membership of a product in an existing product group.

FieldTypeDescription
groupIdstring (uuid)
optionValuesmap<string, string>Per-axis values for this member, e.g. {"Pack Size": "4-pack"}.
positioninteger (int32)Display order within the group; appended (0) when omitted.
ProductGroupMemberResponse
FieldTypeDescription
productIdstring (uuid)
skustring
titlestring
totalAvailableQuantitynumber (double)
currentPriceProductPriceDetailsResponse
optionValuesmap<string, string>
positioninteger (int32)
isPrimaryboolean
ProductGroupResponse
FieldTypeDescription
idstring (uuid)
namestring
descriptionstring
optionAxesstring[]
primaryProductIdstring (uuid)
externalGroupIdstringNull = merchant-owned.
membersProductGroupMemberResponse[]
dateCreatedstring (date-time)
ProductPriceDetailsResponse
FieldTypeDescription
subTotalnumber (double)
totalPricenumber (double)
totalTaxnumber (double)
totalDiscountnumber (double)
discountnumber (double)
discountTypeenum DiscountTypeOne of: None, Percentage, FixedValue.
taxIncludedboolean
taxRatenumber (double)
taxTypeenum TaxTypeOne of: None, Sales, Vat, Gst, Pst, Hst, Qst, Ist, Ust, Cst.
currencyCurrencyResponse
idstring (uuid)
purchasableboolean
priceTypeenum PriceTypeOne of: Selling, Purchase, Cost.
sourceenum PriceSourceOne of: Manual, SupplierUpdate, Import, Sync, Migration.
notesstring
effectiveDatestring (date-time)
currencyMetadataCurrencyResponse
priceUnitenum UnitOfMeasureOne of: Each, Kilogram, Gram, Litre, Millilitre, Metre, Centimetre, SquareMetre, CubicMetre, Pair, Pack, Box, Roll, Sheet.
pricePackQuantitynumber (double)
pricePerUnitnumber (double)
basisenum PriceResolutionBasisOne of: FixedItem, PeggedItem, ListRule.
adjustmentTypeenum PriceAdjustmentTypeOne of: Percentage, Amount.
adjustmentValuenumber (double)