## Записать локализации валюты

`PUT /v1/currencies/:id/localizations`

Создаёт или изменяет настройки отображения валюты для указанных языков. Обновляются только переданные языки и поля.

Скоуп: `crm`.

## Параметры

| Параметр | Тип | Обяз. | По умолч. | Описание |
|----------|-----|:-----:|-----------|----------|
| `id` (path) | string | да | — | Код валюты из [Списка валют](/docs/entities/currencies/list). Пробелы по краям удаляются, буквы приводятся к верхнему регистру |

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

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|----------|
| `localizations` | object | да | Непустая карта языков. Другие поля верхнего уровня не принимаются |
| `localizations.{lang}` | object | да | Непустой объект настроек языка `{lang}`, например `en` или `ru`. В каждом объекте передайте хотя бы одно поле ниже |
| `localizations.{lang}.fullName` | string | нет | Полное название валюты |
| `localizations.{lang}.formatString` | string | нет | Шаблон отображения суммы, `#` — место для числа |
| `localizations.{lang}.decPoint` | string | нет | Разделитель дробной части |
| `localizations.{lang}.thousandsVariant` | string | нет | Вариант разделителя тысяч |
| `localizations.{lang}.thousandsSep` | string \| null | нет | Символ разделителя тысяч. Сохраняемое значение зависит от `thousandsVariant` |
| `localizations.{lang}.decimals` | number | нет | Количество знаков после разделителя дробной части |
| `localizations.{lang}.hideZero` | boolean | нет | Скрывать незначащие нули дробной части |

## Примеры

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

```bash
curl -X PUT "https://vibecode.bitrix24.tech/v1/currencies/QVC/localizations" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"localizations":{"en":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false},"ru":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false}}}'
```

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

```bash
curl -X PUT "https://vibecode.bitrix24.tech/v1/currencies/QVC/localizations" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"localizations":{"en":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false},"ru":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false}}}'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/QVC/localizations', {
  method: 'PUT',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"localizations":{"en":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false},"ru":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false}}}),
})
const { success, data } = await res.json()
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/QVC/localizations', {
  method: 'PUT',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"localizations":{"en":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false},"ru":{"fullName":"Example currency","formatString":"# QVC","decimals":2,"hideZero":false}}}),
})
const { success, data } = await res.json()
```

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

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | Всегда `true` при успехе |
| `data` | boolean | Всегда `true`. Результат подтверждён повторным чтением локализаций |

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

HTTP `200 OK`:

```json
{
  "success": true,
  "data": true
}
```

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

422 — сохранённые значения не совпали с переданными. Например, `thousandsVariant` равен `B`, а в `thousandsSep` передан пробел:

```json
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "Bitrix24 did not apply the requested currency localizations"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 400 | `MISSING_REQUIRED_FIELDS` | Нет непустого `localizations`, переданы другие поля верхнего уровня, пустой код языка или пустой объект его настроек |
| 400 | `UNKNOWN_FIELD` | Передано неизвестное поле локализации |
| 400 | `INVALID_FIELD_VALUE` | Вместо скалярного значения передан объект или массив |
| 400 | `INVALID_ID` | Код валюты после удаления пробелов пуст |
| 404 | `ENTITY_NOT_FOUND` | Валюта с указанным кодом не найдена |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запись, сообщил о неудаче или повторное чтение не подтвердило переданные значения |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ работает в режиме `READONLY` |
| 403 | `BITRIX_ACCESS_DENIED` | У пользователя нет прав на операцию в Битрикс24 |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов Битрикс24 |
| 502 | `BITRIX_RESPONSE_INVALID` | Получен ответ неожиданной структуры |
| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 недоступен |

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

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

Запись не транзакционная: ошибка не отменяет уже сохранённые значения. Перед повтором прочитайте текущие настройки методом [Получить локализации валюты](/docs/entities/currencies/localizations/get) и сравните их с нужными настройками.

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

- [Получить локализации валюты](/docs/entities/currencies/localizations/get)
- [Поля локализаций валюты](/docs/entities/currencies/localizations/fields)
- [Удалить локализации валюты](/docs/entities/currencies/localizations/delete)
