For AI agents: markdown of this page — /docs-content-en/entities/catalog-products/fields.md documentation index — /llms.txt

Catalog product fields

GET /v1/catalog-products/fields

Returns the product field reference with labels, field types, read/write availability and nullable flags, descriptions and enum dictionaries where the value set is fixed, plus the list of fields available for aggregation and the operations available in a batch request.

Examples

curl — personal key

Terminal
curl "https://vibecode.bitrix24.com/v1/catalog-products/fields" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth application

Terminal
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

javascript
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

javascript
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 the type, the write-access flags, a display label and — for fields with a fixed set of values — their dictionary. The full set of keys is broken down in the table after the field list. data.aggregatable lists the fields for which aggregation works. data.batch lists the operations available in a batch request.

Request headers do not switch the language of labels and descriptions. Enum values carry an English label.

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. You can find the ID from existing products: GET /v1/catalog-products
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>.label string Short field label in English
data.fields.<name>.description string Extended field description: what it is for, where to get the list of allowed values, write-time behavior. The key is present on fields that have something to add to the label
data.fields.<name>.readonly boolean true — the field is filled by the system and is not accepted on create or update
data.fields.<name>.writeOnly boolean true — the field is accepted on write but never returned in responses
data.fields.<name>.notReturned boolean true — the field name is absent from every read response and unsupported in select
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.fields.<name>.enum array Dictionary of allowed values: an array of { value, label }. The key is present on fields with a fixed set — previewTextType and detailTextType (text and html). Send valuelabel is meant for display
data.aggregatable string[] Fields for which aggregation works
data.batch string[] Product operations available in a batch request: create, update, delete

Response example

JSON
{
  "success": true,
  "data": {
    "fields": {
      "id": {
        "type": "number",
        "readonly": true,
        "label": "Product identifier"
      },
      "iblockId": {
        "type": "number",
        "readonly": false,
        "createOnly": 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."
      },
      "purchasingPrice": {
        "type": "number",
        "readonly": false,
        "nullable": true,
        "label": "Purchase price",
        "description": "Purchase price of the product; 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"
          }
        ]
      }
    },
    "aggregatable": [
      "purchasingPrice",
      "quantity",
      "iblockSectionId"
    ],
    "batch": [
      "create",
      "update",
      "delete"
    ]
  }
}

The example is trimmed to five fields — one each for readonly, createOnly, and nullable, one carrying the writeOnly + notReturned pair, and one carrying a machine-readable enum dictionary. The response returns all forty-two fields.

Error response example

403 — no scope:

JSON
{
  "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
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

Writing depends on inventory management. The quantity, purchasingPrice, and purchasingCurrency fields are marked as writable in the reference, but when inventory management is enabled in the Bitrix24 account they are not applied on create or update — stock and purchase prices are managed by inventory 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. In the list and search responses, a property is returned when it is named in select by its own name.

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.

See also