
## Обновить валюту

`PATCH /v1/currencies/:id`

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

> `base` и `BASE` — только для чтения. Попытка передать их в обновлении возвращает `400 READONLY_FIELD` до вызова Битрикс24. Смена базовой валюты через API не поддерживается — только в интерфейсе Битрикс24.

## Параметры пути

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

## Параметры тела запроса

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `amount` | number | нет | Курс обмена |
| `amountCnt` | number | нет | Количество единиц для курса |
| `sort` | number | нет | Порядок сортировки |
| `fullName` | string | нет | Название валюты |
| `formatString` | string | нет | Шаблон отображения, например `# ₽` |
| `decimals` | number | нет | Число знаков после запятой |
| `decPoint` | string | нет | Десятичный разделитель |
| `thousandsSep` | string | нет | Разделитель тысяч |

> **Локализуемые поля можно передавать плоско.** `fullName`, `formatString`, `decimals`, `decPoint`, `thousandsSep` API упаковывает в локализацию **вашего** языка (языка API-ключа), поэтому плоское обновление сохраняется и читается обратно. Сырой объект `LANG` в теле передавать **нельзя** — поле только для чтения, вернётся `400 READONLY_FIELD`. Задание разных значений сразу для нескольких языков через API пока не поддерживается.

## Примеры

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/currencies/USD" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 94.2}'
```

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/currencies/USD" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount": 94.2}'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/USD', {
  method: 'PATCH',
  headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({ amount: 94.2 }),
})
const { success, data } = await res.json()
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/USD', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ amount: 94.2 }),
})
const { success, data } = await res.json()
```

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

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data` | object | Валюта со всеми полями после записи |
| `data.id` | string | Код валюты (RUB, USD, EUR) |
| `data.amountCnt` | number | Количество единиц для курса |
| `data.amount` | number | Курс обмена |
| `data.sort` | number | Сортировка |
| `data.base` | boolean | Базовая валюта |
| `data.fullName` | string | Название (руб., $) |
| `data.lid` | string | Идентификатор сайта, к которому привязана валюта |
| `data.formatString` | string | Формат отображения |
| `data.decPoint` | string | Разделитель дробной части |
| `data.thousandsSep` | string | Разделитель тысяч |
| `data.decimals` | number | Знаков после запятой |
| `data.dateUpdate` | datetime | Дата последнего изменения |
| `data.lang` | object | Настройки отображения по языкам — формат, название, разделители. Ключ объекта — идентификатор языка, например `ru` |

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

Объект `lang` сокращён до одного языка.

```json
{
  "success": true,
  "data": {
    "id": "USD",
    "fullName": "Доллар США",
    "amount": 94.2,
    "amountCnt": 1,
    "base": false,
    "sort": 200,
    "lid": "ru",
    "formatString": "$#",
    "decimals": 2,
    "decPoint": ".",
    "thousandsSep": ",",
    "dateUpdate": "2024-11-12T07:20:08.000Z",
    "lang": {
      "ru": {
        "FORMAT_STRING": "$#",
        "FULL_NAME": "Доллар США",
        "DEC_POINT": ".",
        "THOUSANDS_SEP": ",",
        "DECIMALS": "2",
        "THOUSANDS_VARIANT": "C",
        "HIDE_ZERO": "Y"
      }
    }
  }
}
```


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

404 — валюты с таким кодом нет:

```json
{
  "success": false,
  "error": { "code": "ENTITY_NOT_FOUND", "message": "Currency is not found" }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | Валюта не найдена |
| 400 | `READONLY_FIELD` | В теле передано поле только для чтения, например `LANG` или `dateUpdate`. Имя поля указано в `message` |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |

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

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

- [Получить валюту](/docs/entities/currencies/get)
- [Описание полей](/docs/entities/currencies/fields)
- [Валюты](/docs/entities/currencies)
