For AI agents: markdown of this page — /docs-content-en/entities/catalog-products/fields.md documentation index — /llms.txt
Product fields
GET /v1/catalog-products/fields
Returns the product field reference with field types, read-only and nullable flags, the list of fields available for aggregation, and the operations available in a batch request.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/catalog-products/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/catalog-products/fields" \
-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-products/fields', {
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-products/fields', {
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 type (the field type), readonly (true — the field cannot be passed on create or update) and nullable (present when the field can come back as null). data.aggregatable lists the fields for which aggregation works. data.batch lists the operations available in a batch request.
| Field | Type | RO | Description |
|---|---|---|---|
id |
number | yes | Product identifier |
name |
string | no | Product name |
active |
boolean | no | Whether the product is active |
iblockId |
number | no¹ | Catalog ID. List: GET /v1/catalogs. Set on create only; changing it via PATCH is rejected — a product cannot be moved between catalogs |
iblockSectionId |
number | null | no | Catalog section ID. null — the product is not linked to a section. List: GET /v1/catalog-sections |
purchasingPrice |
number | null | no | Purchase price. null if not set |
purchasingCurrency |
string | null | no | Purchase price currency, for example USD. null if the purchase price is not set. List: GET /v1/currencies |
quantity |
number | null | no | Stock balance. null if not set |
weight |
number | null | no | Weight of a product unit. null if not specified |
measure |
number | no | Unit of measure ID |
available |
boolean | yes | Whether the product is available for purchase. Computed by Bitrix24 |
vatIncluded |
boolean | no | VAT included in the price |
bundle |
boolean | yes | Whether the product is a bundle. Computed by Bitrix24 |
canBuyZero |
boolean | no | Allow purchase when stock is zero |
quantityTrace |
boolean | no | Quantity tracking enabled |
subscribe |
boolean | no | Allow subscription to the product |
barcodeMulti |
boolean | no | Allow separate barcodes for product units |
withoutOrder |
boolean | no | Available for ordering without stock on hand |
dateActiveFrom |
datetime | no | Product activity start date |
dateActiveTo |
datetime | no | Product activity end date |
createdBy |
number | yes | ID of the user who created the product. Filled by the system |
modifiedBy |
number | yes | ID of the user who modified the product. Filled by the system |
dateCreate |
datetime | yes | Product creation date |
timestampX |
datetime | yes | Last modification date |
code |
string | null | no | Product symbolic code. null if not set |
xmlId |
string | no | External identifier |
sort |
number | no | Sort order |
vatId |
number | no | Default VAT rate ID |
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 |
previewPicture |
object | no | Preview image |
detailPicture |
object | no | Detail image |
iblockSection |
object | no | In the /fields reference the type is object. Accepts an array of section IDs on create and update. Not returned on read — the primary section is available as the scalar iblockSectionId. List: GET /v1/catalog-sections |
width |
number | no | Product width |
height |
number | no | Product height |
length |
number | no | Product length |
quantityReserved |
number | null | no | Reserved quantity. null if there is no reserve |
recurSchemeLength |
number | no | Payment period length. Available only in on-premise Bitrix24 for content sales |
recurSchemeType |
string | no | Payment period time unit: H — hour, D — day, W — week, M — month, Q — quarter, S — half-year, Y — year. Available only in on-premise Bitrix24 for content sales |
trialPriceId |
number | no | ID of the product used for a trial payment. Available only in on-premise Bitrix24 for content sales |
¹ iblockId is writable on create only (createOnly) — in the reference it comes back with readonly: false and createOnly: true.
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data.fields.<name>.type |
string | Field type: number, string, boolean, datetime, object |
data.fields.<name>.readonly |
boolean | true — the field is filled by the system and is not accepted on create or update |
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>.nullable |
boolean | true — the field can come back as null. The key is present only on such fields |
data.aggregatable |
string[] | Fields for which aggregation works |
data.batch |
string[] | Product operations available in a batch request: create, update, delete |
Response example
{
"success": true,
"data": {
"fields": {
"id": { "type": "number", "readonly": true },
"name": { "type": "string", "readonly": false },
"active": { "type": "boolean", "readonly": false },
"iblockId": { "type": "number", "readonly": false, "createOnly": true },
"iblockSectionId": { "type": "number", "readonly": false, "nullable": true },
"purchasingPrice": { "type": "number", "readonly": false, "nullable": true },
"purchasingCurrency": { "type": "string", "readonly": false, "nullable": true },
"quantity": { "type": "number", "readonly": false, "nullable": true },
"weight": { "type": "number", "readonly": false, "nullable": true },
"measure": { "type": "number", "readonly": false },
"available": { "type": "boolean", "readonly": true },
"vatIncluded": { "type": "boolean", "readonly": false },
"bundle": { "type": "boolean", "readonly": true },
"canBuyZero": { "type": "boolean", "readonly": false },
"quantityTrace": { "type": "boolean", "readonly": false },
"subscribe": { "type": "boolean", "readonly": false },
"barcodeMulti": { "type": "boolean", "readonly": false },
"withoutOrder": { "type": "boolean", "readonly": false },
"dateActiveFrom": { "type": "datetime", "readonly": false },
"dateActiveTo": { "type": "datetime", "readonly": false },
"createdBy": { "type": "number", "readonly": true },
"modifiedBy": { "type": "number", "readonly": true },
"dateCreate": { "type": "datetime", "readonly": true },
"timestampX": { "type": "datetime", "readonly": true },
"code": { "type": "string", "readonly": false, "nullable": true },
"xmlId": { "type": "string", "readonly": false },
"sort": { "type": "number", "readonly": false },
"vatId": { "type": "number", "readonly": false },
"previewText": { "type": "string", "readonly": false },
"detailText": { "type": "string", "readonly": false },
"previewTextType": { "type": "string", "readonly": false },
"detailTextType": { "type": "string", "readonly": false },
"previewPicture": { "type": "object", "readonly": false },
"detailPicture": { "type": "object", "readonly": false },
"iblockSection": { "type": "object", "readonly": false },
"width": { "type": "number", "readonly": false },
"height": { "type": "number", "readonly": false },
"length": { "type": "number", "readonly": false },
"quantityReserved": { "type": "number", "readonly": false, "nullable": true },
"recurSchemeLength": { "type": "number", "readonly": false },
"recurSchemeType": { "type": "string", "readonly": false },
"trialPriceId": { "type": "number", "readonly": false }
},
"aggregatable": ["purchasingPrice", "quantity", "iblockSectionId"],
"batch": ["create", "update", "delete"]
}
}
Error response example
403 — no scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'catalog' scope"
}
}
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 |
Full list of common API errors — Errors.
Known specifics
Writing depends on warehouse management. The quantity, purchasingPrice, and purchasingCurrency fields are marked as writable in the reference, but when warehouse management is enabled in the Bitrix24 account they are not applied when creating or updating a product — stock and purchase prices are managed by warehouse documents.
Some fields are not returned in the list by default. The symbolic code code, dimensions width, height, length, texts previewText, detailText, sort order sort, and a number of other fields from the reference are not returned in the GET /v1/catalog-products response without an explicit ?select=. List them in ?select= to get them in the list — these fields are also available for filtering and sorting. In the single-product response GET /v1/catalog-products/:id they are always returned.
Images and section binding are not filterable. previewPicture and detailPicture are set on create and update and are returned in responses — in GET /v1/catalog-products/:id and in the list via an explicit ?select= — but they do not support filtering or sorting. The iblockSection field accepts an array of section IDs on create and update, but is not returned by GET /v1/catalog-products/:id or the list endpoint. The scalar iblockSectionId, containing the primary section ID, is available for reading, filtering, and sorting.
The GET /:id response contains fields beyond the reference. A request for a single product additionally returns the product type type and custom catalog properties of the form propertyNNN. They are not part of the field reference GET /v1/catalog-products/fields and are not available for filtering and sorting.
The product catalog (iblockId) is immutable. The catalog is chosen on create; Bitrix24 does not move a product between catalogs on update. A PATCH that changes iblockId is rejected with 400 READONLY_FIELD — previously such a request returned 200 while the product stayed in its original catalog (a false success).
Audit fields are protected. createdBy and modifiedBy are filled by Bitrix24 and are not accepted on create or update — passing them is rejected with 400 READONLY_FIELD.