Para agentes de IA: markdown desta página — /docs-content-en/entities/catalog-skus.md índice da documentação — /llms.txt
Os artigos da documentação estão disponíveis atualmente em inglês.
Catalog SKUs
An SKU, or parent product, is the shared card of a product with offers: it has one name, description, and catalog section, while sizes, colors, and other variants are stored in catalog offers. The methods in this section create, read, update, and delete parent products.
Bitrix24 API: catalog.product.sku.*
Scope: catalog
Create an SKU
POST /v1/catalog-skus
Creates a parent product in the product catalog — a shared card to which offers are then linked. Fields are passed flat at the root of the JSON.
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
Fieldname |
Typestring | Requiredyes | DescriptionParent product name |
FieldiblockId |
Typenumber | Requiredyes | DescriptionProduct catalog ID. List: GET /v1/catalogs. An offer catalog — one with productIblockId filled in — is not accepted |
Fieldactive |
Typeboolean | Requiredno | DescriptionWhether the product is active. Defaults to true |
FieldiblockSectionId |
Typenumber | Requiredno | DescriptionID of the main catalog section. List: GET /v1/catalog-sections |
FieldiblockSection |
Typenumber[] | Requiredno | DescriptionArray of IDs of all sections the product is linked to. List: GET /v1/catalog-sections |
Fieldcode |
Typestring | Requiredno | DescriptionProduct symbolic code |
FieldxmlId |
Typestring | Requiredno | DescriptionExternal code. If omitted, Bitrix24 sets it to the product id as a string |
Fieldsort |
Typenumber | Requiredno | DescriptionSort order. Defaults to 500 |
FielddateActiveFrom |
Typedatetime | Requiredno | DescriptionActivity start date |
FielddateActiveTo |
Typedatetime | Requiredno | DescriptionActivity end date |
FieldpreviewText |
Typestring | Requiredno | DescriptionPreview text |
FieldpreviewTextType |
Typestring | Requiredno | DescriptionPreview text format: text or html. Defaults to text |
FielddetailText |
Typestring | Requiredno | DescriptionDetailed description |
FielddetailTextType |
Typestring | Requiredno | DescriptionDetailed description format: text or html. Defaults to text |
FieldpreviewPicture |
Typeobject | Requiredno | DescriptionPreview picture: { "fileData": ["name.png", "<base64>"] } |
FielddetailPicture |
Typeobject | Requiredno | DescriptionDetail picture, same format |
FieldpropertyNNN |
Typestring | Requiredno | DescriptionCatalog property value, where NNN is the property id from GET /v1/catalog-product-properties: "property301": "cotton" |
The type, available, and bundle fields are computed by Bitrix24 — in the request body they are rejected with 400 READONLY_FIELD.
Examples
curl — personal key
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-skus" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Basic T-shirt",
"iblockId": 25,
"active": true
}'
curl — OAuth application
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-skus" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Basic T-shirt",
"iblockId": 25,
"active": true
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Basic T-shirt',
iblockId: 25,
active: true,
}),
})
const { success, data } = await res.json()
console.log('Parent product ID:', data.id)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Basic T-shirt',
iblockId: 25,
active: true,
}),
})
const { success, data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typeobject | DescriptionFull object of the created parent product. The field set is the same as for GET /v1/catalog-skus/:id |
Response example
The main fields are shown; propertyNNN properties are omitted. A newly created parent product has type equal to 6.
{
"success": true,
"data": {
"id": 7203,
"iblockId": 25,
"iblockSectionId": null,
"iblockSection": null,
"name": "Basic T-shirt",
"type": 6,
"active": true,
"available": false,
"bundle": false,
"code": null,
"xmlId": "7203",
"sort": 500,
"previewText": null,
"previewTextType": "text",
"detailText": null,
"detailTextType": "text",
"createdBy": 1295,
"modifiedBy": 1295,
"dateCreate": "2026-10-08T18:45:34.000Z",
"timestampX": "2026-10-08T18:45:34.000Z"
}
}
Error response example
400 — a required field was not passed:
{
"success": false,
"error": {
"code": "MISSING_REQUIRED_FIELDS",
"message": "Body field \"name\" is required to create catalogSku."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeMISSING_REQUIRED_FIELDS |
DescriptionThe required field name or iblockId was not passed — the message names it. The request is rejected before it reaches Bitrix24 |
| HTTP400 | CodeREADONLY_FIELD |
DescriptionA read-only field was passed in the body: type, available, bundle |
| HTTP422 | CodeBITRIX_ERROR |
DescriptioniblockId points to an offer catalog (productType is not allowed for this catalog) |
| HTTP422 | CodeBITRIX_ERROR |
DescriptioniblockId is not a catalog (iblock is not catalog) |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the catalog scope |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header was not passed |
Full list of common API errors — Errors.
Known specifics
The type changes once an offer is linked. A new parent product has type: 6. When the first offer is linked to it — POST /v1/catalog-offers with parentId — the type becomes 3. There is no need to change the type separately, and it cannot be passed.