Crypto Payment Exchange Rate Risk and How a Rate Lock Helps
How to manage exchange rate risk when accepting crypto. USD-priced invoices, the rate lock, TRX vs USDT volatility and how late payments are re-priced.

Exchange rate risk in crypto payments is the uncertainty that comes from a coin's price moving between the moment a customer pays and the moment you actually use that money. The good news is that the right pricing model and a rate lock make most of that risk manageable. This article explains how USD-priced invoices work, when the rate is locked, and why the difference between TRX and USDT matters so much.
Where crypto payment exchange rate risk comes from
With card payments, your product price and the amount collected are in the same currency. With crypto you usually juggle two units: you price in dollars (or another fiat currency) and the customer pays in a coin.
That gap creates risk at three points:
- Pricing time. Which rate was used to convert your price into the coin?
- Payment window. A customer may take minutes, sometimes hours, to open the invoice and send funds, and the rate can move in the meantime.
- Holding period. Between receiving funds and withdrawing or using them, the coin's value can change.
You handle the first two with your invoice model, and the third with the coins you accept and how often you withdraw.
TRX vs USDT: very different volatility
MercanPay supports two coins on TRON: TRX and USDT (TRC20). They behave very differently when it comes to rate risk.
| USDT (TRC20) | TRX | |
|---|---|---|
| What it is | Stablecoin pegged to the US dollar | Freely traded coin |
| Price movement | Usually close to 1 USD, low | Can move noticeably within a day |
| On a USD-priced invoice | Amount is very close to the dollar price | Amount is calculated from the live rate |
| Risk while holding a balance | Low (stablecoins carry their own risks) | Higher |
Many merchants lean on USDT to keep rate risk low, while TRX is convenient for customers who already live in the TRON ecosystem. Offering both and letting the customer choose is a common approach. To see how USDT differs across chains, read what USDT is and how TRC20, ERC20 and BEP20 compare.
Note: this article is for information only. Which coins you hold and when you withdraw are your decisions. Nothing here is investment advice.
How USD-priced invoices and the rate lock work
MercanPay supports two invoice types:
- Coin-priced invoice. You set the amount directly in a coin, for example "25 USDT", and the customer pays exactly that.
- USD-priced invoice. You set the price in dollars, for example "25 USD". If you don't fix a coin, the customer picks TRX or USDT on the payment page and the amount is calculated at the current rate.
The key point is that the rate is locked when the customer picks the coin. The amount shown on the payment page stays fixed for the life of the invoice. As long as the customer sends that amount, the invoice counts as paid even if the market moves afterwards.
Invoices stay open for at most 24 hours. Setting a shorter expiry narrows the window during which the locked rate applies.
Creating a USD-priced invoice with the API
With the Python library, an invoice where the customer chooses the coin looks like this:
import os
from mercanpay import MercanPay
zp = MercanPay("https://mercanpay.com", os.environ["MERCANPAY_API_KEY"])
# Price in USD, customer chooses TRX or USDT
invoice = zp.create_invoice(
price_usd="49.90",
tokens=["USDT", "TRX"],
order_id="order-2045",
expires_in_minutes=60,
)
print(invoice["payment_url"])
# Current USD rates, e.g. {"TRX": "0.33", "USDT": "1"}
print(zp.rates())
In PHP the equivalent is createUsdInvoice('49.90', ['order_id' => 'order-2045']). All parameters are listed in the documentation. For full walkthroughs, see our Python crypto payment integration and PHP crypto payment integration guides.
Late payments and re-pricing
Sometimes a customer pays after the invoice has expired. On MercanPay, late payments aren't lost. They are credited to your balance. But because the rate lock only lasts as long as the invoice, there's one detail to know:
- A late TRX payment on a USD-priced invoice is re-priced at the current rate. That way, if the market moved after expiry, the payment isn't valued at a stale rate.
- The
data.payment.latefield in the webhook tells you a payment arrived late, so your order logic can treat those cases separately.
We cover late, partial and overpayments in handling underpayments, overpayments and late payments.
Practical ways to reduce rate risk
- Price in USD. Keeping catalogue prices in dollars rather than coins simplifies accounting and reporting.
- Keep expiry reasonable. For instant purchases, 30–60 minutes is enough for most customers. The shorter the window, the less the locked rate can drift from the market.
- Feature USDT. If minimising rate risk is your priority, show USDT first or restrict the invoice to USDT with
tokens. - Match the webhook to the order. Before fulfilling, check that the coin and amount in the webhook match what you expected.
- Decide on a balance policy. If you'd rather not hold TRX, consider withdrawing on a regular schedule. The minimum withdrawal is 10 USD worth and the withdrawal fee is 1–3 USD.
How fees fit into the calculation
Fees belong in the picture too. MercanPay commission starts from 0.4% and varies per merchant. USDT invoices include a 1 USDT network fee paid by the customer, so it doesn't come out of your amount. The minimum invoice is 10 USD.
FAQ
When exactly is the rate locked?
On a USD-priced invoice, the rate locks the moment the customer picks a coin on the payment page, and the displayed amount stays valid until the invoice expires. If you fix the coin yourself (for example token="TRX" together with price_usd), the conversion happens when the invoice is created.
What if TRX drops while the customer is paying?
Within the invoice's lifetime, the invoice is paid as long as the customer sends the locked amount. Market moves during that window don't change its status.
Is there zero rate risk with USDT?
USDT is a dollar-pegged stablecoin and usually trades close to 1 USD, but no asset is entirely risk-free. This is not investment advice, so do your own assessment.
Which rate applies to a payment on an expired invoice?
The payment is still credited. A late TRX payment on a USD-priced invoice is re-priced at the current rate.
Get started with MercanPay
Keep rate risk under control with USD-priced invoices, a rate that locks when the customer picks a coin, and commission starting from 0.4%. Apply for a merchant account and explore the documentation.


