Skip to content

Create or replace a product composition

PUT
/v1/organizations/{organizationId}/products/{productId}/composition

API key scope: products:write.

productId
required
string
X-Request-Id
string

Optional client request id returned in structured errors.

Media typeapplication/json
object
kind
required
string
Allowed values: kit bundle
Example
kit
status
string
default: active
Allowed values: active archived
components
required
Array<object>
>= 1 items
object
componentProductId
required

Component product id.

string
quantityInBaseUnits
required

Quantity of the component product required in base units for one assembled product.

number
>= 1
metadata
object
Example
{
"sellableAs": "bundle"
}

Product composition created or replaced.

Media typeapplication/json
object
id
required
string format: uuid
organizationId
required
string format: uuid
environment
required
string
Allowed values: live test
productId
required
string format: uuid
kind
required
string
Allowed values: kit bundle
status
required
string
Allowed values: active archived
metadata
object
key
additional properties
any
components
required
Array<object>
object
id
required
string format: uuid
organizationId
required
string format: uuid
environment
required
string
Allowed values: live test
compositionId
required
string format: uuid
componentProductId
required
string format: uuid
quantityInBaseUnits
required
number
>= 1
componentProduct
object
id
required
string format: uuid
name
required
string
sku
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
Example
{
"id": "23232323-2323-4232-8232-232323232323",
"organizationId": "11111111-1111-4111-8111-111111111111",
"environment": "test",
"productId": "22222222-2222-4222-8222-222222222222",
"kind": "kit",
"status": "active",
"metadata": {
"sellableAs": "bundle"
},
"components": [
{
"id": "24242424-2424-4242-8242-242424242424",
"organizationId": "11111111-1111-4111-8111-111111111111",
"environment": "test",
"compositionId": "23232323-2323-4232-8232-232323232323",
"componentProductId": "25252525-2525-4252-8252-252525252525",
"quantityInBaseUnits": 2,
"componentProduct": {
"id": "25252525-2525-4252-8252-252525252525",
"name": "Bundle component",
"sku": "COMPONENT-001"
},
"createdAt": "2026-07-03T10:00:00.000Z",
"updatedAt": "2026-07-03T10:00:00.000Z"
}
],
"createdAt": "2026-07-03T10:00:00.000Z",
"updatedAt": "2026-07-03T10:00:00.000Z"
}

The organization has exhausted its monthly public API request quota.

Media typeapplication/json
Example
{
"error": {
"code": "PLAN_LIMIT_EXCEEDED",
"message": "Plan limit exceeded for api_requests",
"requestId": "req_123",
"details": {
"entitlementKey": "api_requests",
"scope": "environment",
"environment": "live",
"configured": true,
"limit": "50000",
"used": "50000",
"requested": "1",
"currentPlan": {
"code": "free",
"version": 1
},
"requiredPlan": {
"code": "starter",
"version": 1,
"requiresOverride": false
}
}
}
}