Цены можно держать в долларах, евро, гривнах, фунтах или канадских долларах, а оплату получать в биткоине, 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, который оплатят на следующий день; короткий ограничивает, насколько рынок успеет сдвинуться, пока сумма зафиксирована. Для волатильных активов вроде биткоина ставьте срок, близкий к времени, которое нужно плательщику, плюс время на подтверждения. Счета с долгой отсрочкой лучше выставлять в стейблкоине.
Есть ли спред конвертации?
Нет. Спред конвертации — надбавка к рыночному курсу при пересчёте фиатной цены в криптовалюту. CryptoLike её не добавляет: amount_crypto — это цена, делённая на rate_locked (рыночную котировку), с округлением вверх до минимальной единицы актива. Округление — не больше одной единицы, например 0,00000001 BTC, и в вашу пользу.
Без спреда движение рынка, пока сумма зафиксирована, остаётся на вас: курс не меняется до конца срока, а цена актива меняется. Для волатильных активов держите срок коротким или выставляйте цену в стейблкоине. Платёж в самом активе — currency: "USDT" или "BTC" — пересчитывать не нужно: amount_crypto равен вашей сумме, а rate_locked остаётся null. Комиссия платформы — единственная плата CryptoLike за платёж с ценой в фиате; как складываются комиссии, объясняет статья из чего состоит комиссия за криптоплатёж, а действующие ставки — на странице тарифов.
В каких фиатных валютах можно выставить цену
Цену в 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». До выбора у такой монеты вместо оценки написано «Курс обновляется», и её всё равно можно выбрать. Платёж со старой ценой не создаётся.
Что делать в интеграции:
- Повторить запрос с паузой. Курсы восстанавливаются без вашего участия; отправьте тот же запрос с тем же
Idempotency-Key. - Перейти на цену в криптовалюте, если заказ не может ждать: пересчитайте цену сами и создайте платёж в активе или в USDT.
- Оставить выбор плательщику, если конкретный актив не важен: создайте платёж без
coin_id— курс зафиксируется позже, на странице оплаты, где плательщик сможет повторить выбор.
GET /v1/rates?fiat=USD возвращает текущие котировки с полями rate, at и признаком stale — по нему можно проверить курс, прежде чем показывать цену в криптовалюте где-то ещё в вашем продукте.
Что если клиент отправил не ту сумму или опоздал
Зафиксированный платёж сравнивает пришедшее с payer_amount в криптовалюте. Фиатная цена на этом этапе уже не участвует: рынок мог сдвинуться, но сумма долга не меняется. Небольшая недостача в пределах допуска вашего аккаунта засчитывается как paid; большая переводит платёж в underpaid, и плательщик может доплатить разницу на тот же адрес до конца срока.
После срока платёж закрывается: expired, если подтверждённых поступлений не было, или окончательный underpaid, если пришла часть суммы. Деньги, пришедшие позже, всё равно зачисляются — по фактической сумме в криптовалюте, с late_payment: true и вебхуком invoice.late_payment. Старый курс не пересчитывается: покрывает ли поздний платёж заказ по сегодняшним ценам, решаете вы с клиентом. Если клиент готов оплатить заново, создайте новый платёж — у него будет новый курс. Все случаи разобраны в статье про недоплату, переплату и поздние платежи.
Пример: платёж с ценой в долларах
Платёж с ценой в долларах, USDT в сети TRON выбран сразу: курс фиксируется в этом же запросе, и в ответе приходит точная сумма для показа. Подпись запроса — в гайде для Node.js.
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.
| Параметр | Цена в USD или EUR | Цена в USDT или USDC |
|---|---|---|
| Чем может заплатить клиент | Монетами, доступными для инвойсов, или теми, что перечислены в allowed_coin_ids |
Этим стейблкоином в сетях, где вы его принимаете |
| Движение рынка во время фиксации | На вас, до срока платежа | Нет |
503 из-за устаревшего курса |
Возможен | Не применяется |
| Что оказывается на балансе | Актив, выбранный плательщиком, со своим курсом | Долларовый стейблкоин |
| Кому подходит | Магазинам, которые хотят принимать биткоин и другие активы | Счетам, B2B, ценам, которые уже в долларах |
Баланс остаётся в том активе, который прислал плательщик: CryptoLike не обменивает его на фиат. В выписках для каждой проводки записана фиатная оценка на момент проводки — это то, что нужно для учёта. Бизнес-сторона счетов в фиате — на странице счета в криптовалюте для B2B.
Вопросы и ответы
Когда фиксируется курс?
В момент, когда известен актив платежа: при создании платежа с 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 через короткую паузу или создайте платёж в криптовалюте. Платёж по устаревшему курсу не создаётся.