К содержимому

Основы криптоплатежей

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

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

Главное

  • Создайте платёж с 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, который оплатят на следующий день; короткий ограничивает, насколько рынок успеет сдвинуться, пока сумма зафиксирована. Для волатильных активов вроде биткоина ставьте срок, близкий к времени, которое нужно плательщику, плюс время на подтверждения. Счета с долгой отсрочкой лучше выставлять в стейблкоине.

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

Нет. Спред конвертации — надбавка к рыночному курсу при пересчёте фиатной цены в криптовалюту. 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». До выбора у такой монеты вместо оценки написано «Курс обновляется», и её всё равно можно выбрать. Платёж со старой ценой не создаётся.

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

  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. Старый курс не пересчитывается: покрывает ли поздний платёж заказ по сегодняшним ценам, решаете вы с клиентом. Если клиент готов оплатить заново, создайте новый платёж — у него будет новый курс. Все случаи разобраны в статье про недоплату, переплату и поздние платежи.

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

Платёж с ценой в долларах, USDT в сети TRON выбран сразу: курс фиксируется в этом же запросе, и в ответе приходит точная сумма для показа. Подпись запроса — в гайде для Node.js.

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.

Параметр Цена в 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 через короткую паузу или создайте платёж в криптовалюте. Платёж по устаревшему курсу не создаётся.

Термины на странице

Читать дальше

Начните с тестового платежа

Создайте аккаунт, попросите у поддержки доступ к тестовой среде и посмотрите, как платёж проходит путь от pending до paid в тестовой сети.