# Цена в долларах, оплата в криптовалюте: как работает фиксация курса

> Как CryptoLike переводит цену в USD, EUR, UAH, GBP или CAD в точную сумму в криптовалюте, сколько держится курс, почему нет спреда и что с оплатой после срока.

Source: https://cryptolike.net/ru/blog/fiat-priced-crypto-payments
Published: 2026-09-24 · Updated: 2026-10-11 · Author: CryptoLike team

Главное:

- Создайте платёж с currency USD, EUR, UAH, GBP или CAD: курс фиксируется, как только известен актив, и держится до срока платежа.
- Сумма в криптовалюте — это цена по зафиксированному рыночному курсу без спреда, округлённая вверх до минимальной единицы актива; точная сумма приходит в ответе.
- Котировка старше 5 минут не используется: запрос отвечает 503 unavailable — повторите его или выставьте цену в криптовалюте.
- Зафиксированная сумма не пересчитывается. Деньги после срока зачисляются по фактически полученной сумме в криптовалюте.

Цены можно держать в долларах, евро, гривнах, фунтах или канадских долларах, а оплату получать в биткоине, USDT или другом активе. Создайте платёж CryptoLike с `currency: "USD"` — как только станет известен актив, курс фиксируется, и точная сумма в криптовалюте не меняется до конца срока платежа. Плательщик отправляет эту сумму, и после подтверждения платёж получает статус `paid`. Ниже — когда именно фиксируется курс, из чего складывается сумма и что происходит, если клиент опоздал.

## Как цена в долларах превращается в сумму в криптовалюте

CryptoLike пересчитывает фиатную цену в криптовалюту один раз — в момент, когда известен актив платежа, — и больше к этому платежу не возвращается. Берётся текущий рыночный курс без спреда, а результат округляется вверх до минимальной единицы актива, чтобы плательщик не отправил меньше цены.

| Шаг | Что происходит | Где это видно |
|---|---|---|
| 1. Вы создаёте платёж | `amount: "49.90"`, `currency: "USD"` | `amount`, `currency` в ответе |
| 2. Становится известен актив | При создании с `coin_id` или когда плательщик выбирает актив на странице оплаты | `coin_id`, `ticker`, `network` |
| 3. Фиксируется курс | Последняя рыночная котировка не старше 5 минут | `rate_locked`, `rate_locked_at` |
| 4. Фиксируется сумма | Цена ÷ курс, округление вверх до знаков актива; без спреда | `amount_crypto`; `payer_amount`, если комиссию платит плательщик |
| 5. Курс держится | До конца срока платежа | `ttl_expires_at` |

Сверено с API CryptoLike 09.10.2026. Фиатная сумма и валюта остаются в платеже в полях `amount_fiat` и `fiat_currency` — в учёте видны обе цены.

## В какой момент фиксируется курс

Курс фиксируется, когда становится известен актив, и таких моментов два. Если передать `coin_id` при создании платежа, фиксация происходит в том же запросе: в ответе уже есть адрес и точная сумма. Если `coin_id` не передавать, актив выбирает плательщик на странице оплаты — из монет, доступных для инвойсов, или только из перечисленных в `allowed_coin_ids`, — и курс фиксируется в момент этого выбора.

Для интернет-магазинов обычно удобнее второй вариант: покупатель платит тем, что у него есть. Выбрать актив можно один раз, пока платёж в статусе `new` и срок не истёк. До выбора поля `coin_id`, `address`, `amount_crypto` и `rate_locked` равны `null`. Страница показывает цену в фиате и рядом с каждой монетой ориентировочную сумму со знаком ≈ — она считается так же, как считалась бы фиксация в эту минуту. Это ещё не фиксация: при выборе платёж пересчитывается заново, поэтому зафиксированная сумма может немного отличаться от увиденной оценки.

`rate_locked_at` — это время рыночной котировки, а не нажатия кнопки. Котировки регулярно обновляются, и CryptoLike берёт котировку, только если ей не больше 5 минут. Поэтому `rate_locked_at` может быть на несколько минут раньше самой фиксации.

## Сколько держится зафиксированный курс

Курс держится до `ttl_expires_at` — срока платежа; отдельного таймера у фиксации нет. Срок задаётся для каждого платежа параметром `ttl_seconds`: от 60 секунд до 30 дней. Без него действует значение по умолчанию для аккаунта — 30 минут, если его не меняли. На странице оплаты рядом с суммой плательщик видит «Курс зафиксирован на N мин: 1 BTC = … USD».

Длинный срок удобен для счёта B2B, который оплатят на следующий день; короткий ограничивает, насколько рынок успеет сдвинуться, пока сумма зафиксирована. Для волатильных активов вроде биткоина ставьте срок, близкий к времени, которое нужно плательщику, плюс время на [подтверждения](https://cryptolike.net/ru/blog/crypto-payment-confirmations). Счета с долгой отсрочкой лучше выставлять в стейблкоине.

## Есть ли спред конвертации?

Нет. Спред конвертации — надбавка к рыночному курсу при пересчёте фиатной цены в криптовалюту. CryptoLike её не добавляет: `amount_crypto` — это цена, делённая на `rate_locked` (рыночную котировку), с округлением вверх до минимальной единицы актива. Округление — не больше одной единицы, например 0,00000001 BTC, и в вашу пользу.

Без спреда движение рынка, пока сумма зафиксирована, остаётся на вас: курс не меняется до конца срока, а цена актива меняется. Для волатильных активов держите срок коротким или выставляйте цену в стейблкоине. Платёж в самом активе — `currency: "USDT"` или `"BTC"` — пересчитывать не нужно: `amount_crypto` равен вашей сумме, а `rate_locked` остаётся `null`. [Комиссия платформы](https://cryptolike.net/ru/glossary/platform-fee) — единственная плата CryptoLike за платёж с ценой в фиате; как складываются комиссии, объясняет статья [из чего состоит комиссия за криптоплатёж](https://cryptolike.net/ru/blog/crypto-payment-fees-explained), а действующие ставки — на странице [тарифов](https://cryptolike.net/ru/pricing).

## В каких фиатных валютах можно выставить цену

Цену в CryptoLike можно указать в пяти фиатных валютах, и все пять включены для каждого аккаунта по умолчанию: USD, EUR, UAH, GBP и CAD. Поле `currency` принимает и тикер монеты — тогда пересчёта нет.

| Код | Валюта | Знаков после точки в `amount` |
|---|---|---|
| USD | доллар США | 2 |
| EUR | евро | 2 |
| UAH | украинская гривна | 2 |
| GBP | фунт стерлингов | 2 |
| CAD | канадский доллар | 2 |

Сумма с большим числом знаков, например `10.005` в GBP, вернёт `400 validation_error`. `GET /v1/fiat-currencies` возвращает список для вашего аккаунта: каждый код с `decimals` и `invoice_enabled` — можно ли создать платёж в этой валюте. Проверено по API CryptoLike 2026-10-11.

Когда пару котируют два источника, CryptoLike сравнивает их при каждом обновлении курсов. Если они расходятся больше допустимого предела, курс пары не обновляется, и платёж в этой валюте за эту монету отвечает `503 unavailable`, пока источники снова не сойдутся: CryptoLike отказывает, а не угадывает. Нужна другая валюта — напишите в поддержку: валюту добавляем, только когда её курс дают два независимых источника.

## Что будет, если свежего курса нет

CryptoLike не фиксирует устаревший курс. Если последней котировке актива больше 5 минут или источники курса расходятся по паре, создание платежа в фиате с `coin_id` вернёт `503 unavailable` с сообщением «exchange rate unavailable right now; retry later or create the invoice in crypto», а выбор актива плательщиком на странице оплаты — `503` с сообщением «exchange rate unavailable, try again shortly». До выбора у такой монеты вместо оценки написано «Курс обновляется», и её всё равно можно выбрать. Платёж со старой ценой не создаётся.

Что делать в интеграции:

1. **Повторить запрос с паузой.** Курсы восстанавливаются без вашего участия; отправьте тот же запрос с тем же `Idempotency-Key`.
2. **Перейти на цену в криптовалюте**, если заказ не может ждать: пересчитайте цену сами и создайте платёж в активе или в USDT.
3. **Оставить выбор плательщику**, если конкретный актив не важен: создайте платёж без `coin_id` — курс зафиксируется позже, на странице оплаты, где плательщик сможет повторить выбор.

`GET /v1/rates?fiat=USD` возвращает текущие котировки с полями `rate`, `at` и признаком `stale` — по нему можно проверить курс, прежде чем показывать цену в криптовалюте где-то ещё в вашем продукте.

## Что если клиент отправил не ту сумму или опоздал

Зафиксированный платёж сравнивает пришедшее с `payer_amount` в криптовалюте. Фиатная цена на этом этапе уже не участвует: рынок мог сдвинуться, но сумма долга не меняется. Небольшая недостача в пределах допуска вашего аккаунта засчитывается как `paid`; большая переводит платёж в `underpaid`, и плательщик может доплатить разницу на тот же адрес до конца срока.

После срока платёж закрывается: `expired`, если подтверждённых поступлений не было, или окончательный `underpaid`, если пришла часть суммы. Деньги, пришедшие позже, всё равно зачисляются — по фактической сумме в криптовалюте, с `late_payment: true` и вебхуком `invoice.late_payment`. Старый курс не пересчитывается: покрывает ли поздний платёж заказ по сегодняшним ценам, решаете вы с клиентом. Если клиент готов оплатить заново, создайте новый платёж — у него будет новый курс. Все случаи разобраны в статье про [недоплату, переплату и поздние платежи](https://cryptolike.net/ru/blog/underpaid-crypto-payments).

## Пример: платёж с ценой в долларах

Платёж с ценой в долларах, USDT в сети TRON выбран сразу: курс фиксируется в этом же запросе, и в ответе приходит точная сумма для показа. Подпись запроса — в [гайде для Node.js](https://cryptolike.net/ru/guides/accept-crypto-payments-nodejs).

```json
POST /v1/invoices
Idempotency-Key: bill-2026-0917

{
  "amount": "1200.00",
  "currency": "USD",
  "coin_id": "<id USDT в сети tron из GET /v1/currencies>",
  "ttl_seconds": 86400,
  "description": "Счёт 2026-0917, дизайн-услуги"
}
```

В ответе — `amount_fiat: "1200.00"`, `fiat_currency: "USD"`, `rate_locked`, `rate_locked_at`, `amount_crypto`, `payer_amount`, `address`, `checkout_url` и `ttl_expires_at`. Без `coin_id` эти поля заполнятся, когда плательщик выберет актив. Ошибка `400 validation_error` по полю `currency` означает, что кода нет среди фиатных валют вашего аккаунта (таблица выше).

## Цена в фиате или в стейблкоине

Если ваши цены в долларах, конвертацию можно не использовать вовсе и выставлять платёж в USDT или USDC. У платежа с `currency: "USDT"` нет курса и движения рынка между фиксацией и оплатой; сеть — TRON или Ethereum — плательщик выбирает на странице оплаты. Разница между сетями — в статье [USDT TRC20 или ERC20](https://cryptolike.net/ru/blog/usdt-trc20-vs-erc20).

| Параметр | Цена в USD или EUR | Цена в USDT или USDC |
|---|---|---|
| Чем может заплатить клиент | Монетами, доступными для инвойсов, или теми, что перечислены в `allowed_coin_ids` | Этим стейблкоином в сетях, где вы его принимаете |
| Движение рынка во время фиксации | На вас, до срока платежа | Нет |
| `503` из-за устаревшего курса | Возможен | Не применяется |
| Что оказывается на балансе | Актив, выбранный плательщиком, со своим курсом | Долларовый стейблкоин |
| Кому подходит | Магазинам, которые хотят принимать биткоин и другие активы | Счетам, B2B, ценам, которые уже в долларах |

Баланс остаётся в том активе, который прислал плательщик: CryptoLike не обменивает его на фиат. В выписках для каждой проводки записана фиатная оценка на момент проводки — это то, что нужно для учёта. Бизнес-сторона счетов в фиате — на странице [счета в криптовалюте для B2B](https://cryptolike.net/ru/use-cases/invoicing).

## Вопросы и ответы

### Когда фиксируется курс?

В момент, когда известен актив платежа: при создании платежа с coin_id или когда плательщик выбирает актив на странице оплаты. С этого момента сумма в криптовалюте не меняется до срока платежа — ttl_expires_at.

### Может ли плательщик потерять зафиксированный курс?

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

### Почему сумма в криптовалюте бывает чуть больше, чем цена, делённая на курс?

Только из-за округления. Спреда конвертации CryptoLike не добавляет: rate_locked — чистая рыночная котировка, а цена, делённая на неё, округляется вверх до минимальной единицы актива, чтобы плательщик не отправил меньше цены. Адрес ждёт amount_crypto, а если комиссию платформы платит плательщик — payer_amount.

### В каких фиатных валютах можно выставлять цену?

В USD, EUR, UAH, GBP и CAD — все пять включены для каждого аккаунта по умолчанию; currency принимает и тикер монеты. Код вне списка вашего аккаунта вернёт 400 validation_error по полю currency, а плагины для CMS покажут, что оплата криптовалютой для валюты магазина недоступна. Другую валюту добавляем, только когда её курс дают два независимых источника: чтобы попросить её, напишите в поддержку.

### Что значит 503 unavailable при создании платежа в USD?

Для актива не нашлось котировки свежее 5 минут или два источника курса разошлись по паре больше допустимого предела, поэтому курс нельзя зафиксировать. Повторите запрос с тем же Idempotency-Key через короткую паузу или создайте платёж в криптовалюте. Платёж по устаревшему курсу не создаётся.
