
## Поля цены

`GET /v1/catalog-prices/fields`

Возвращает справочник полей цены товара с типами, признаками «только для чтения» и «допускает `null`», а также список операций, доступных в пакетном запросе.

## Примеры

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

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

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

```bash
curl "https://vibecode.bitrix24.tech/v1/catalog-prices/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/catalog-prices/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/catalog-prices/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

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

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

`data.fields` — объект, ключ которого совпадает с именем поля, а значение содержит `type` (тип поля), `readonly` (`true` — поле нельзя передать при создании и обновлении), `nullable` (присутствует, если поле может прийти со значением `null`), `label` (отображаемое название поля) и `description` (краткое описание). Значения `label`/`description` локализованы: по-русски на `.tech`, по-английски на `.com`. `data.batch` — список операций, которые принимает [пакетный запрос](/docs/batch).

| Поле | Тип | RO | Описание |
|------|-----|:--:|---------|
| `id` | number | да | Идентификатор записи цены |
| `catalogGroupId` | number | нет | Тип цены. Базовая цена — `1`. Какие типы заведены на портале, видно по значениям `catalogGroupId` в [списке цен](./list.md) |
| `currency` | string | нет | Валюта цены, например `RUB`. Список: [`GET /v1/currencies`](/docs/entities/currencies) |
| `price` | number | нет | Значение цены |
| `productId` | number | нет | ID товара, к которому относится цена. Список: [`GET /v1/catalog-products`](/docs/entities/catalog-products) |
| `quantityFrom` | number \| null | нет | Нижняя граница количественного диапазона. В ответах `null`, если цена не зависит от количества |
| `quantityTo` | number \| null | нет | Верхняя граница количественного диапазона. В ответах `null`, если цена не зависит от количества |
| `priceScale` | number | да | Цена в базовой валюте портала. Заполняется системой |
| `extraId` | number \| null | да | Идентификатор наценки (`catalog_extra`). Устаревшее поле Битрикс24. Заполняется системой. `null`, если наценка не задана |
| `timestampX` | datetime | да | Дата и время последнего изменения записи цены в формате ISO 8601 (UTC) |

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data.fields.<имя>.type` | string | Тип поля: `number`, `string`, `datetime` |
| `data.fields.<имя>.readonly` | boolean | `true` — поле заполняется системой и не принимается при создании и обновлении |
| `data.fields.<имя>.nullable` | boolean | `true` — поле может прийти со значением `null`. Ключ присутствует только у таких полей |
| `data.fields.<имя>.label` | string | Отображаемое название поля (локализовано: ru на `.tech`, en на `.com`) |
| `data.fields.<имя>.description` | string | Краткое описание поля (локализовано) |
| `data.batch` | string[] | Операции цены, доступные в [пакетном запросе](/docs/batch): `create`, `update`, `delete` |

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

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "ID", "description": "Идентификатор записи цены каталога." },
      "catalogGroupId": { "type": "number", "readonly": false, "label": "Тип цены", "description": "Идентификатор типа цены; базовая цена — 1." },
      "currency": { "type": "string", "readonly": false, "label": "Валюта", "description": "Код валюты цены." },
      "price": { "type": "number", "readonly": false, "label": "Цена", "description": "Числовое значение цены." },
      "productId": { "type": "number", "readonly": false, "label": "Товар", "description": "ID товара, к которому относится цена." },
      "quantityFrom": { "type": "number", "readonly": false, "nullable": true, "label": "Количество от", "description": "Нижняя граница диапазона количества." },
      "quantityTo": { "type": "number", "readonly": false, "nullable": true, "label": "Количество до", "description": "Верхняя граница диапазона количества." },
      "priceScale": { "type": "number", "readonly": true, "label": "Базовая цена", "description": "Цена в базовой валюте портала." },
      "extraId": { "type": "number", "readonly": true, "nullable": true, "label": "Идентификатор наценки", "description": "Идентификатор наценки (catalog_extra)." },
      "timestampX": { "type": "datetime", "readonly": true, "label": "Дата изменения", "description": "Дата и время последнего изменения цены." }
    },
    "batch": ["create", "update", "delete"]
  }
}
```

Системные поля `priceScale`, `extraId` и `timestampX` заполняются Битрикс24 и доступны только для чтения — передать их при создании или обновлении нельзя.

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

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

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

## Ошибки

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

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

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

- [Список цен](/docs/entities/catalog-prices/list)
- [Создать цену](/docs/entities/catalog-prices/create)
- [Поиск цен](/docs/entities/catalog-prices/search)
- [Товары каталога](/docs/entities/catalog-products)
- [Справочник сущностей](/docs/entities-index)
