
## Поля каталога

`GET /v1/catalogs/fields`

Возвращает справочник полей торгового каталога с типами. Все поля доступны только для чтения.

## Примеры

### curl — личный ключ

```bash
curl "https://vibecode.bitrix24.tech/v1/catalogs/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth-приложение

```bash
curl "https://vibecode.bitrix24.tech/v1/catalogs/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — личный ключ

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalogs/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Полей:', Object.keys(data.fields).length)
```

### JavaScript — OAuth-приложение

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

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

## Поля ответа

`data.fields` — объект, ключ которого совпадает с именем поля, а значение содержит `type` (тип поля), `readonly` (`true` — поле нельзя передать при создании и обновлении), `label` (отображаемое название) и `description` (краткое описание). Значения `label`/`description` приходят на русском языке.

| Поле | Тип | RO | Описание |
|------|-----|:--:|---------|
| `id` | number | да | Идентификатор каталога. Совпадает с `iblockId` |
| `iblockId` | number | да | ID информационного блока каталога. По нему фильтруются [`GET /v1/catalog-products`](/docs/entities/catalog-products), [`GET /v1/catalog-sections`](/docs/entities/catalog-sections), [`GET /v1/catalog-prices`](/docs/entities/catalog-prices) |
| `iblockTypeId` | string | да | Тип информационного блока, например `CRM_PRODUCT_CATALOG` |
| `lid` | string | да | ID сайта, к которому привязан каталог |
| `name` | string | да | Название каталога |
| `productIblockId` | number | да | У каталога предложений — `iblockId` связанного каталога товаров. У базового каталога товаров — `null` |
| `skuPropertyId` | number | да | У каталога предложений — ID свойства связи предложения с товаром. У базового каталога — `null` |
| `subscription` | string | да | Признак каталога подписок: `Y` или `N` |
| `vatId` | number | да | ID ставки НДС по умолчанию для товаров каталога |
| `yandexExport` | boolean | да | Признак выгрузки каталога в Яндекс.Маркет (`true` / `false`) |

## Пример ответа

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "ID", "description": "Уникальный идентификатор торгового каталога." },
      "iblockId": { "type": "number", "readonly": true, "label": "Информационный блок", "description": "ID информационного блока, на котором построен каталог; нужен для /v1/catalog-products и /v1/catalog-sections." },
      "iblockTypeId": { "type": "string", "readonly": true, "label": "Тип информационного блока", "description": "Символьный код типа информационного блока." },
      "lid": { "type": "string", "readonly": true, "label": "Сайт", "description": "Символьный код сайта, которому принадлежит каталог." },
      "name": { "type": "string", "readonly": true, "label": "Название", "description": "Название каталога, отображаемое пользователю." },
      "productIblockId": { "type": "number", "readonly": true, "label": "Инфоблок товаров", "description": "ID информационного блока товаров для каталога с торговыми предложениями." },
      "skuPropertyId": { "type": "number", "readonly": true, "label": "Свойство привязки предложений", "description": "ID свойства, связывающего торговые предложения с родительским товаром." },
      "subscription": { "type": "string", "readonly": true, "label": "Подписка", "description": "Является ли каталог каталогом подписки (Y/N)." },
      "vatId": { "type": "number", "readonly": true, "label": "Ставка НДС", "description": "ID ставки НДС, применяемой к каталогу по умолчанию." },
      "yandexExport": { "type": "boolean", "readonly": true, "label": "Экспорт в Яндекс.Маркет", "description": "Выгружается ли каталог в Яндекс.Маркет." }
    }
  }
}
```

Все поля помечены `readonly: true` — изменить каталог через API нельзя.

## Пример ответа при ошибке

403 — нет скоупа:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'catalog' scope"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `catalog` |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Смотрите также

- [Список каталогов](/docs/entities/catalogs/list)
- [Получить каталог](/docs/entities/catalogs/get)
- [Товары каталога](/docs/entities/catalog-products)
- [Синтаксис фильтрации](/docs/filtering)
- [Справочник сущностей](/docs/entities-index)
