configured in the Bitrix24 account. Every field carries a label, a type, and a read-only "> configured in the Bitrix24 account. Every field carries a label, a type, and a read-only "> configured in the Bitrix24 account. Every field carries a label, a type, and a read-only ">

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

CRM product fields

GET /v1/products/fields

Returns the product field schema: 22 standard fields and the custom catalog properties of the form PROPERTY_<N> configured in the Bitrix24 account. Every field carries a label, a type, and a read-only flag. Fields that need further explanation also carry a description, and fields with a fixed value set carry an enum dictionary.

Standard fields

Each field is described by an object { type, readonly }. The writeOnly: true marker identifies a write-only name, while notReturned: true identifies a name absent from responses. The list, get, search, create, and update responses use canonical camelCase names. currencyId is a write alias: response data carries the currency under currency. If both names are present, currency wins. An explicit select=currencyId is rejected with 400 SELECT_FIELD_NOT_RETURNED. Use select=currency for reads. The native Bitrix24 name select=CURRENCY_ID remains valid and also returns the value under the canonical currency key.

Field Bitrix24 Type RO Description
Fieldid Bitrix24ID Typenumber ROyes DescriptionProduct identifier
Fieldname Bitrix24NAME Typestring RO DescriptionProduct name
Fieldactive Bitrix24ACTIVE Typeboolean RO DescriptionWhether the product is active
Fieldprice Bitrix24PRICE Typenumber RO DescriptionProduct price
FieldcurrencyId Bitrix24CURRENCY_ID Typestring RO DescriptionWrite alias of currency. Marked writeOnly: true and notReturned: true
Fieldcurrency Bitrix24CURRENCY_ID Typestring RO DescriptionCanonical name of the price currency. If both names are present, currency wins. List: GET /v1/currencies
FieldsectionId Bitrix24SECTION_ID Typenumber RO DescriptionCatalog section. List: GET /v1/product-sections
FieldcatalogId Bitrix24CATALOG_ID Typenumber RO DescriptionCatalog identifier. List: GET /v1/catalogs
Fieldmeasure Bitrix24MEASURE Typenumber RO DescriptionMeasurement unit identifier
Fielddescription Bitrix24DESCRIPTION Typestring RO DescriptionProduct description
FielddescriptionType Bitrix24DESCRIPTION_TYPE Typestring RO DescriptionDescription format — text or html
Fieldsort Bitrix24SORT Typenumber RO DescriptionSort order. A lower value places the product higher
Fieldcode Bitrix24CODE Typestring RO DescriptionSymbolic product code
FieldxmlId Bitrix24XML_ID Typestring RO DescriptionExternal identifier for synchronization
FieldvatId Bitrix24VAT_ID Typenumber RO DescriptionVAT rate identifier
FieldvatIncluded Bitrix24VAT_INCLUDED Typeboolean RO DescriptionWhether VAT is included in the price
FieldpreviewPicture Bitrix24PREVIEW_PICTURE Typeobject ROyes DescriptionImage for the list
FielddetailPicture Bitrix24DETAIL_PICTURE Typeobject ROyes DescriptionImage for the card
FieldcreatedBy Bitrix24CREATED_BY Typenumber ROyes DescriptionCreator identifier. List: GET /v1/users
FieldmodifyBy Bitrix24MODIFIED_BY Typenumber ROyes DescriptionIdentifier of the last editor. List: GET /v1/users
FieldcreatedAt Bitrix24DATE_CREATE Typedatetime ROyes DescriptionCreation date
FieldupdatedAt Bitrix24TIMESTAMP_X Typedatetime ROyes DescriptionLast modification date

Custom properties

Catalog properties come back as additional keys of the form PROPERTY_<N> with the type product_property. Each is described by an object { type, readonly, label }, where label is the property name in the Bitrix24 account language. The property set depends on the catalog settings: one Bitrix24 account may return "SKU", "Manufacturer", and "Color", while another returns a list of its own. The values of these properties are returned in the GET /v1/products/:id response, and in list and search responses when you include the property name in select.

Examples

curl — personal key

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

curl — OAuth application

Terminal
curl "https://vibecode.bitrix24.com/v1/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/products/fields', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})

const { success, data } = await res.json()
console.log('Total fields:', Object.keys(data.fields).length)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/products/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()

Response fields

The label and description field captions are returned in English, while the ones the platform takes straight from the Bitrix24 account come in the account language. Request headers do not switch the language. Enum values carry an English label.

Field Type Description
Fieldsuccess Typeboolean DescriptionAlways true on success
Fielddata.fields Typeobject DescriptionField map. The key is the field name, and the value is { type, readonly, label }. Write-only fields also carry writeOnly, non-returned fields carry notReturned, and some fields carry description or enum

Response example

A subset of fields is shown. The actual number of PROPERTY_<N> properties depends on the catalog settings in the Bitrix24 account.

JSON
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "Product identifier" },
      "name": { "type": "string", "readonly": false, "label": "Product name" },
      "active": { "type": "boolean", "readonly": false, "label": "Active", "description": "Whether the product is active." },
      "price": { "type": "number", "readonly": false, "label": "Product price" },
      "currencyId": {
        "type": "string",
        "readonly": false,
        "writeOnly": true,
        "notReturned": true,
        "label": "Price currency (alias)",
        "description": "Write alias of currency. Responses return the value under currency. If both names are present, currency wins. List: GET /v1/currencies."
      },
      "currency": {
        "type": "string",
        "readonly": false,
        "label": "Price currency",
        "description": "Currency of the price. Write alias: currencyId. If both names are present, currency wins. Available values: GET /v1/currencies."
      },
      "descriptionType": {
        "type": "string",
        "readonly": false,
        "label": "Description format",
        "description": "Format of the description field: plain text or HTML markup.",
        "enum": [
          { "value": "text", "label": "Plain text" },
          { "value": "html", "label": "HTML" }
        ]
      },
      "vatIncluded": { "type": "boolean", "readonly": false, "label": "VAT included", "description": "Whether the VAT is already included in the price." },
      "createdAt": { "type": "datetime", "readonly": true, "label": "Creation date" },

      "PROPERTY_301": { "type": "product_property", "readonly": false, "label": "SKU" },
      "PROPERTY_303": { "type": "product_property", "readonly": false, "label": "Manufacturer" },
      "PROPERTY_307": { "type": "product_property", "readonly": false, "label": "Color" }
    }
  }
}

Error response example

403 — no scope:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'crm' scope"
  }
}

Errors

HTTP Code Description
HTTP403 CodeSCOPE_DENIED DescriptionThe API key lacks the crm scope
HTTP401 CodeMISSING_API_KEY DescriptionThe X-Api-Key header is missing
HTTP429 CodeRATE_LIMITED DescriptionRate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the x-ratelimit-limit header. Retry after the delay in the Retry-After header

For the full list of common API errors, see Errors.

Known specifics

The same product in the catalog has more fields. The product with the same id is available via GET /v1/catalog-products, where it has a wider field set — stock, warehouse, and variations.

A PROPERTY_<N> descriptor carries the property name only — it holds no list options. The descriptor object is exactly { type: "product_property", readonly, label }: no items, no values, no list of allowed values whatsoever. So this endpoint tells you that property 301 is called "SKU", but nothing here resolves the selected option's identifier into its text.

Where to go for the values:

Task Call
TaskReadable text of a property on a single product CallGET /v1/catalog-products/:id — the text arrives ready-made in propertyNNN.valueEnum
TaskAll options of a list property (a dropdown, a filter, an export) CallGET /v1/catalog-product-property-enums?filter[propertyId]=NNN&limit=1000
TaskThe property type (propertyType, listType, multiple) CallGET /v1/catalog-product-properties/:id

Here NNN is the number from the PROPERTY_<N> key: it is the same value, the catalog property id. All three catalog calls require the catalog scope — a key carrying only crm gets 403 SCOPE_DENIED.

See also