## Обновить единицу измерения

`PATCH /v1/catalog-measures/:id`

Частично обновляет существующую единицу измерения в справочнике торгового каталога. Передаются только изменяемые поля, тело плоское — без обёртки `fields`.

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `id` (path) | number | да | Идентификатор единицы измерения. Список: [`GET /v1/catalog-measures`](/docs/entities/catalog-measures/list) |

## Поля запроса (body)

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| `code` | number | нет | Код единицы по Общероссийскому классификатору единиц измерения (ОКЕИ), целое число. Уникален на портале. `null` не принимается |
| `measureTitle` | string | нет | Название единицы измерения |
| `symbol` | string \| null | нет | Краткое обозначение. `null` очищает поле |
| `symbolIntl` | string \| null | нет | Международное обозначение. `null` очищает поле |
| `symbolLetterIntl` | string \| null | нет | Международное буквенное обозначение. `null` очищает поле |
| `isDefault` | string | нет | Единица по умолчанию: `Y` или `N`. `null` не принимается |
| `id` | number | нет | `RO`. Идентификатор задаётся только в пути. В теле отклоняется с `400 READONLY_FIELD` |

Очистка через `null` работает только в одиночном запросе — об ограничении пакетной записи см. [Единицы измерения каталога](/docs/entities/catalog-measures).

## Примеры

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/catalog-measures/17" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "measureTitle": "Тест документации 2"
  }'
```

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/catalog-measures/17" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "measureTitle": "Тест документации 2"
  }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-measures/17', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    measureTitle: 'Тест документации 2',
  }),
})

const { success, data } = await res.json()
console.log('Measure title:', data.measureTitle)
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-measures/17', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    measureTitle: 'Тест документации 2',
  }),
})

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

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

Возвращается запись целиком после обновления, включая поля, которые не менялись.

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data.id` | number | Идентификатор единицы измерения |
| `data.code` | number | Код единицы по ОКЕИ |
| `data.measureTitle` | string \| null | Название единицы измерения |
| `data.symbol` | string \| null | Краткое обозначение |
| `data.symbolIntl` | string \| null | Международное обозначение |
| `data.symbolLetterIntl` | string \| null | Международное буквенное обозначение |
| `data.isDefault` | string | `Y` — единица по умолчанию, `N` — нет |
| `meta.warnings` | array | Приходит, только если в теле есть поле, которого нет среди полей единицы измерения. Элемент — `code: "UNRECOGNIZED_WRITE_FIELD"`, `field` с именем поля и `message`. Объект `fields` на маршруте, который сам оборачивает карту полей и где схема не объявляет `fields`, отклоняется с `400 NESTED_FIELDS_ENVELOPE`; передавайте поля плоско в корне JSON. |

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

```json
{
  "success": true,
  "data": {
    "code": 9917,
    "id": 17,
    "isDefault": "N",
    "measureTitle": "Тест документации 2",
    "symbol": "тд",
    "symbolIntl": "td",
    "symbolLetterIntl": "TDC"
  }
}
```

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

404 — единицы измерения с таким `id` нет:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "measure does not exist."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | Единицы измерения с таким `id` нет на портале |
| 400 | `INVALID_PARAMS` | `id` в пути — не целое неотрицательное число. Сообщение `id must be a non-negative integer` |
| 400 | `INVALID_PARAMS` | `code` — не целое число, например `1.5` |
| 400 | `INVALID_PARAMS` | В `code` или `isDefault` передан `null` |
| 400 | `INVALID_PARAMS` | `isDefault` отличается от `Y` и `N` |
| 400 | `EMPTY_UPDATE_BODY` | Тело запроса пустое — передайте хотя бы одно поле |
| 400 | `NESTED_FIELDS_ENVELOPE` | В теле передан объект `fields` вместо корневых полей; единица не обновляется |
| 400 | `READONLY_FIELD` | В теле передан `id` |
| 422 | `BITRIX_ERROR` | Новый `code` уже занят другой единицей на портале. Сообщение `Duplicate entry for key [code]`, в ответе также приходит `error.b24Code` |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `catalog` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |

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

## Известные особенности

**Неизвестное скалярное поле не останавливает запрос.** Если в теле есть только неизвестное скалярное поле, ответ приходит со статусом `200`, запись не меняется, а о пропущенном поле говорит предупреждение в `meta.warnings`. Объект `fields` отклоняется с `400 NESTED_FIELDS_ENVELOPE` до обновления: передавайте поля в корне JSON. Сверяйте имена с [`GET /v1/catalog-measures/fields`](/docs/entities/catalog-measures/fields), а успех проверяйте по значениям в `data`, а не только по `success`.

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

- [Получить единицу измерения](/docs/entities/catalog-measures/get)
- [Создать единицу измерения](/docs/entities/catalog-measures/create)
- [Список единиц измерения](/docs/entities/catalog-measures/list)
- [Удалить единицу измерения](/docs/entities/catalog-measures/delete)
- [Поля единицы измерения](/docs/entities/catalog-measures/fields)
- [Batch](/docs/batch)
- [Лимиты и оптимизация](/docs/optimization)
