## Создать единицу измерения

`POST /v1/catalog-measures`

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

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

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| `code` | number | да | Код единицы по Общероссийскому классификатору единиц измерения (ОКЕИ), целое число. Уникален на портале. Занятые коды — в [`GET /v1/catalog-measures`](/docs/entities/catalog-measures/list) |
| `measureTitle` | string | да | Название единицы измерения |
| `symbol` | string | нет | Краткое обозначение, например `уп` |
| `symbolIntl` | string | нет | Международное обозначение |
| `symbolLetterIntl` | string | нет | Международное буквенное обозначение, например `PCE` |
| `isDefault` | string | нет | Единица по умолчанию: `Y` или `N`. Если поле не передано, создаётся единица с `N` |

Полный список полей — [`GET /v1/catalog-measures/fields`](/docs/entities/catalog-measures/fields).

## Примеры

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-measures" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": 9917,
    "measureTitle": "Тест документации",
    "symbol": "тд",
    "symbolIntl": "td",
    "symbolLetterIntl": "TDC"
  }'
```

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-measures" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "code": 9917,
    "measureTitle": "Тест документации",
    "symbol": "тд",
    "symbolIntl": "td",
    "symbolLetterIntl": "TDC"
  }'
```

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

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

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

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

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

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

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

Ответ приходит со статусом `201` и содержит созданную запись целиком.

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data.id` | number | Идентификатор созданной единицы. Его передают в поле `measure` товара |
| `data.code` | number | Код единицы по ОКЕИ |
| `data.measureTitle` | string | Название единицы измерения |
| `data.symbol` | string \| null | Краткое обозначение. `null`, если не передано |
| `data.symbolIntl` | string \| null | Международное обозначение. `null`, если не передано |
| `data.symbolLetterIntl` | string \| null | Международное буквенное обозначение. `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": "Тест документации",
    "symbol": "тд",
    "symbolIntl": "td",
    "symbolLetterIntl": "TDC"
  }
}
```

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

400 — дробный код единицы, запись не создана:

```json
{
  "success": false,
  "error": {
    "code": "INVALID_PARAMS",
    "message": "Field \"code\" must be an integer; Bitrix24 silently truncates fractional values."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `MISSING_REQUIRED_FIELDS` | Не передан `code` или `measureTitle`. Сообщение называет первое отсутствующее поле, например `Body field "code" is required to create catalogMeasure.` |
| 400 | `NESTED_FIELDS_ENVELOPE` | В теле передан объект `fields` вместо корневых полей; единица не создаётся |
| 400 | `INVALID_PARAMS` | `code` — не целое число, например `9917.5` |
| 400 | `INVALID_PARAMS` | `isDefault` отличается от `Y` и `N` |
| 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).

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

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

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

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