Accept USDT and USDC payments with one API call
Create a payment request for an order or an invoice, send your customer to a hosted payment page or show the address in your own checkout, and get a webhook when it is paid. Stablecoin payments on Ethereum, BNB Chain and Polygon, priced in dollars.
- A fresh address and a hosted payment page for every order
- USDT and USDC, priced in dollars
- A webhook the moment the payment is paid
- Request created
- Customer pays to the address
- Marked as paid
A crypto payment gateway for stablecoin checkout
A one-time payment is a request for one exact amount: an order in your shop, an invoice, a top-up. Each request gets its own fresh address, so a transfer to it can only belong to that payment. There are no memos, no matching by amount and no checking a block explorer by hand.
You set the price in dollars and choose USDT or USDC and a network. A stablecoin is worth one dollar, so the customer sends exactly the amount you asked for and the price does not move between checkout and confirmation.
The payment starts as pending and becomes paid when one transfer brings the full amount to its address. Your server hears about it through a webhook, and the hosted payment page updates on its own.
What One-Time Payments gives you
A unique address per payment
Every request gets a fresh address, so each incoming transfer maps to exactly one order or invoice.
Hosted payment page
A ready-made checkout page shows the amount, the address with a QR code, the network and the time left, and confirms the payment by itself.
Priced in dollars
Set the amount in dollars and get paid in USDT or USDC. No exchange rates to quote and no volatility to absorb.
Choose what you receive
Set what the customer pays, or set what you want to receive after the fee and let the API work out the customer's amount.
Payment webhooks with retries
Your server gets a webhook when the payment is paid, with the amount received, the fee and your order id.
Your order id attached
Send your own id with the request and get it back in the API and in the webhook, so a payment always matches an order.
How it works
From sign-up to the first call in a few minutes.
- 1
Create a One-Time Payments project
Sign up, open the One-Time Payments project in the dashboard and copy its API key.
- 2
Create a payment for the order
Send the network, USDT or USDC, the amount in dollars and your order id. You get back the payment with its own address.
- 3
Send the customer to pay
Redirect them to lirchain.com/pay/<payment id>, or show the address and amount in your own checkout. The customer has one hour to pay.
- 4
Fulfil the order when it is paid
Once the transfer is confirmed the payment becomes paid, the money is on your balance and your webhook is called.
curl https://api.lirchain.com/merchant/one-time-payment/create \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"network": "polygon",
"asset": "USDT",
"amount": 49.5,
"external_id": "order-1042"
}'{
"id": "ccf1c790-9d3d-4cda-98a9-5cd590a102df",
"external_id": "order-1042",
"network": "polygon",
"address": "0x20d5b8802fc43b24cdbc9cdaa59dd6690626ad2c",
"asset": "USDT",
"amount": 49.5,
"pay_amount": 49.5,
"receive_amount": "49.2525",
"status": "pending",
"fee": "0",
"created_ms": 1791503932667,
"expire_ms": 1791507532667
}{
"type": "one-time-payment",
"payment": {
"id": "ccf1c790-9d3d-4cda-98a9-5cd590a102df",
"external_id": "order-1042",
"project_id": "3d6b1130-da92-4ddf-bad2-93f898993c39",
"network": "polygon",
"address": "0x20d5b8802fc43b24cdbc9cdaa59dd6690626ad2c",
"asset": "USDT",
"contract": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
"amount": 49.5,
"pay_amount": 49.5,
"receive_amount": "49.2525",
"received": "49.5",
"status": "paid",
"fee": "0.2475",
"created_ms": 1791503932667,
"expire_ms": 1791507532667
}
}Every endpoint and field is in the One-Time Payments API reference.
Networks and stablecoins for payments
One-time payments are paid in USDT or USDC. You choose the network and the stablecoin for each payment.
| Network | Coins and tokens |
|---|---|
| Ethereum | USDTUSDC |
| BNB Chain | USDTUSDC |
| Polygon | USDTUSDC |
What teams use One-Time Payments for
Online stores and checkout
Add a pay-with-crypto option to your checkout: create a payment per order and redirect the buyer to the hosted page.
Invoices
Bill clients in USDT or USDC with a payment link, and see each invoice turn to paid without chasing transaction hashes.
Digital goods and SaaS
Deliver a licence, a download or a subscription period automatically from the paid webhook.
Bots and mini apps
Sell access or credits inside a Telegram or Discord bot with one API call per purchase.
Cross-border sales
Take stablecoin payments from customers anywhere, with the same flow and the same fee for every country.
Services and bookings
Collect a deposit or the full price for a booking and confirm it the moment the payment is paid.
One-Time Payments pricing
Creating a payment is free. The fee is charged only when it is paid: the percentage of your plan, at least $0.10.
| Plan | Free | Starter | Business | Enterprise |
|---|---|---|---|---|
| Price per month | Free | $19.99 | $49.99 | $249.99 |
| Payments per 30 days | 100 | 10,000 | 200,000 | 10,000,000 |
| Fee per paid payment | 1% | 0.5% | 0.375% | 0.25% |
Every plan includes all four products. Compare the plans
One-Time Payments: questions and answers
- How do I accept USDT payments on my website?
- Create a One-Time Payments project, then create a payment through the API for each order with its amount in dollars. Send the customer to the hosted payment page or show the address in your checkout, and fulfil the order when the paid webhook arrives.
- Which stablecoins and networks can customers pay with?
- USDT and USDC on Ethereum (ERC-20), BNB Chain (BEP-20) and Polygon. You pick the stablecoin and the network for each payment.
- Do I have to build a payment page?
- No. Every payment has a hosted page at lirchain.com/pay/<payment id> that shows the amount, the address, a QR code and a countdown, and updates by itself when the payment is received. You can also build your own with the API.
- How do I know a crypto payment was paid?
- Set a webhook URL in the project and a one-time-payment webhook is sent when the payment becomes paid. If your server does not answer with a 2xx status, the same webhook is sent again every minute, up to 20 times, each time with the same x-webhook-id header so you can ignore one you already handled. You can also read the payment's status from the API at any time.
- What does it cost to accept crypto payments?
- Creating a payment is free. A paid payment costs the percentage of your plan (1% on Free, 0.5% on Starter, 0.375% on Business, 0.25% on Enterprise), at least $0.10. The Free plan includes 100 payments per 30 days and Starter includes 10,000.
- Can I set the amount I receive after the fee?
- Yes. Send receive_amount instead of amount and the API works out what the customer has to pay so that you receive exactly that after the fee.
- How long does the customer have to pay?
- One hour from the moment the payment is created. The hosted payment page shows the time left.
Works with the rest of LirChain
One account, one balance and one API for all four products.
Start with One-Time Payments for free
New accounts start on the Free plan, with every product included and no card needed.