For AI agents: markdown of this page — /docs-content-en/entities/catalog-skus/fields.md documentation index — /llms.txt
SKU fields
GET /v1/catalog-skus/fields
Returns the parent product field reference with labels, types, read and write availability flags, descriptions and enum dictionaries where the value set is fixed, the list of fields for grouping in aggregation, and the operations available in a batch request.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
iblockId (query) |
number | no | Product catalog ID from GET /v1/catalogs. With it, the reference is extended with the catalog properties propertyNNN and the priceType field. Without it, and also with the iblockId of an offer catalog or of a nonexistent catalog, the response has 24 static fields and the fields_partial warning in meta.warnings |
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/catalog-skus/fields?iblockId=25" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/catalog-skus/fields?iblockId=25" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus/fields?iblockId=25', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus/fields?iblockId=25', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Response fields
data.fields is an object whose key matches the field name, and whose value contains the type, the write-access flags, a display label and — for fields with a fixed set of values — their dictionary. The set of keys is broken down in the table after the field list. data.aggregatable lists the fields for groupBy in aggregation. data.batch lists the operations available in a batch request.
| Field | Type | RO | Description |
|---|---|---|---|
id |
number | yes | Parent product identifier |
name |
string | no | Parent product name. Required on create |
active |
boolean | no | Whether the product is active |
iblockId |
number | no¹ | Product catalog ID. List: GET /v1/catalogs. Required on create, set on create only |
iblockSectionId |
number | null | no | Primary catalog section ID. null — the product is not linked to a section. List: GET /v1/catalog-sections |
available |
boolean | yes | Whether the product is available for purchase. Computed by Bitrix24 |
bundle |
boolean | yes | Whether the product is a bundle. Computed by Bitrix24 |
dateActiveFrom |
datetime | no | Activity start date |
dateActiveTo |
datetime | no | Activity end date |
createdBy |
number | yes | ID of the user who created the product. List: GET /v1/users |
modifiedBy |
number | yes | ID of the user who last modified the product. List: GET /v1/users |
dateCreate |
datetime | yes | Creation date |
timestampX |
datetime | yes | Last modification date |
code |
string | null | no | Product symbolic code. null if not set |
xmlId |
string | no | External code |
previewText |
string | no | Preview text |
detailText |
string | no | Detailed description |
previewTextType |
string | no | Preview text format: text or html |
detailTextType |
string | no | Detailed description format: text or html |
sort |
number | no | Sort order |
previewPicture |
object | null | no | Preview image. Returned as an object { id, url, urlMachine } or null. The field cannot be used for filtering or sorting |
detailPicture |
object | null | no | Detail image, same format. The field cannot be used for filtering or sorting |
iblockSection |
object | no | Array of IDs of all product sections. Accepted on create and update. In the get, create and update responses it arrives as an array or null. It is not returned by the list and search endpoints and is not supported in select — the name triggers the UNKNOWN_SELECT_FIELD warning. List: GET /v1/catalog-sections |
type |
number | yes | Product type, computed by Bitrix24: 6 — a parent product without offers, 3 — with offers. The filter accepts one exact number, 3 or 6 |
¹ iblockId is writable on create only — in the reference it comes back with readonly: false and createOnly: true.
With the iblockId of a product catalog, data.fields gains the priceType field of type char and the catalog properties propertyNNN of type productproperty. Property names and types are returned by GET /v1/catalog-product-properties.
Request headers do not switch the language of labels and descriptions. Enum values carry an English label.
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data.fields.<name>.type |
string | Field type: number, string, boolean, datetime, object. For catalog properties — productproperty |
data.fields.<name>.label |
string | Field label. For static fields — in English, for catalog properties it matches the field name |
data.fields.<name>.description |
string | Extended field description: what it is for, where to get the list of allowed values, write-time behavior |
data.fields.<name>.readonly |
boolean | true — the field is filled by the system and is not accepted on create or update |
data.fields.<name>.required |
boolean | true — the field is required on create (name, iblockId). The key is present only on such fields |
data.fields.<name>.createOnly |
boolean | true — the field is accepted on create only. On PATCH it is rejected with READONLY_FIELD (present on iblockId) |
data.fields.<name>.writeOnly |
boolean | true — the field is accepted on write and is not returned in the list and search (present on iblockSection) |
data.fields.<name>.notReturned |
boolean | true — the name is not supported in select (present on iblockSection) |
data.fields.<name>.nullable |
boolean | true — the field can come back as null. The key is present only on such fields |
data.fields.<name>.multiple |
boolean | true — the catalog property stores several values and arrives as an array. The key is present only on such properties |
data.fields.<name>.enum |
array | Dictionary of allowed values: an array of { value, label }. The key is present on previewTextType and detailTextType. Send value — label is meant for display |
data.aggregatable |
string[] | Fields for groupBy in aggregation: iblockSectionId |
data.batch |
string[] | Parent product operations available in a batch request: create, update, delete |
meta.warnings |
array | Returned when the request has no product catalog iblockId: an element { code: "fields_partial", message } — the response has only the static fields |
Response example
{
"success": true,
"data": {
"fields": {
"id": {
"type": "number",
"readonly": true,
"label": "Product identifier",
"description": "Unique identifier of the catalog product."
},
"iblockId": {
"type": "number",
"readonly": false,
"createOnly": true,
"required": true,
"label": "Catalog ID",
"description": "Catalog the product belongs to. Available values: GET /v1/catalogs. Set on create only — changing it via PATCH is rejected, a product cannot be moved between catalogs."
},
"code": {
"type": "string",
"readonly": false,
"nullable": true,
"label": "Symbolic code",
"description": "Symbolic product code; null when not set."
},
"iblockSection": {
"type": "object",
"readonly": false,
"writeOnly": true,
"notReturned": true,
"label": "Catalog sections",
"description": "Array of catalog section IDs the product belongs to. Accepted on create and update only — on read the primary section arrives as the scalar iblockSectionId. Available values: GET /v1/catalog-sections."
},
"previewTextType": {
"type": "string",
"readonly": false,
"label": "Preview text format",
"description": "Format of previewText.",
"enum": [
{ "value": "text", "label": "Plain text" },
{ "value": "html", "label": "HTML" }
]
},
"type": {
"type": "number",
"readonly": true,
"label": "Bitrix24 product type",
"description": "Computed by Bitrix24. A newly created SKU starts as an empty SKU and changes type when offers are linked. Filtering accepts only exact type 3 or 6."
},
"property293": {
"type": "productproperty",
"readonly": false,
"multiple": true,
"label": "property293"
}
},
"aggregatable": [
"iblockSectionId"
],
"batch": [
"create",
"update",
"delete"
]
}
}
The example is trimmed to seven fields — one each for the readonly flag, createOnly with required, nullable, the writeOnly + notReturned pair, the enum dictionary, the computed type, and a catalog property with multiple. The response returns all 24 static fields, and with the iblockId of a product catalog — also priceType and all catalog properties.
Error response example
403 — the key does not have the catalog scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'catalog' scope",
"hint": "This request needs the 'catalog' scope, which the calling key does not carry. Add 'catalog' to this key in the developer cabinet (or through the management API), then repeat the call.",
"cause": "key_scope_missing",
"requiredScope": "catalog",
"keyScopes": ["task", "im"],
"fix": { "action": "edit_key_scopes", "via": "cabinet" },
"userMessage": "The app's API key lacks the “Product catalog” permission. You can add it in the key settings in the developer cabinet."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 403 | SCOPE_DENIED |
The API key does not have the catalog scope |
| 401 | MISSING_API_KEY |
The X-Api-Key header was not passed |
| 429 | RATE_LIMITED |
Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the x-ratelimit-limit header (the cap is divided across replicas). Retry after the delay in the Retry-After header |
Full list of common API errors — Errors.
Known specifics
Some fields are not returned in the list by default. The symbolic code code, the external code xmlId, the sort order sort, the texts previewText and detailText with their formats, and the images are not returned in the GET /v1/catalog-skus response without an explicit select. List the names you need in select to get them in the list. In the single-product response GET /v1/catalog-skus/:id they are always returned.