Payment acceptance — crypto and cards

Your customer pays however they like. You get exactly what you asked for.

At checkout your buyer picks any coin and network — bitcoin, ether, USDT, USDC — or pays with an ordinary card. You are credited in the currency you chose. The payment link goes on your site without a single line of code; the API is only needed when the amount comes from a cart.

1.5% per payment. Your dashboard opens right away; accepting payments starts after review.

  1. 01BuyerPays with a coin or a card at your checkout
  2. 02NetworkTransfer shows up, confirmations accumulate
  3. 03ConversionWhat arrived is exchanged into your currency
  4. 04Your balanceState settled — ship the order

01 / Getting connected

Two routes, and they don't rule each other out

A button with a link covers most cases. The API is for when the price is calculated on your side.

No code

Price tag

Create it in the dashboard, copy the link, put it on your site as a button. The price is either fixed or entered by the buyer.

A price tag can be reusable — for a catalogue item, or single-use — for one person's invoice. A single-use tag closes the moment the first buyer proceeds to pay: two people who opened the link at once won't pay twice for one item.

<a href="https://api.priem.io/pay/YOUR-PRICE-TAG">
  Pay with crypto
</a>

When the amount comes from a cart

API

Your server creates a payment for the amount it needs and sends the buyer to the link it gets back. The project is identified by the key, so there is no need to name it in the body.

POST https://api.priem.io/v1/payments
Authorization: Bearer priem_…

{
  "amount": "49.00",
  "currency": "USD",
  "idempotencyKey": "order-12345"
}

Take the idempotency key from your order number, not from the clock and not at random. A repeated request with the same key returns the same payment instead of issuing a second invoice. A key built from Date.now() protects against nothing.

Card payment works at the same checkout and needs no setup from you. The buyer buys bitcoin from the provider, it lands straight on the invoice address, and the payment goes through like any other.

The card minimum is 10 dollars. Below that the button isn't shown at all, and the buyer is told why.

02 / Money

What it costs — all of it

There are three fees and only one of them is ours. The network takes the other two, and we show them here rather than after you've signed up.

To us, per payment

1.5%

Withheld on crediting and shown in the callback as its own field.

To the network, on payout

~1 USDT

Flat on TRON, paid by you. Accumulating and withdrawing at once is cheaper than per payment.

To the network, on payment

Paid by the buyer

On top of your price. It doesn't scale with the amount, so on a small order it shows.

The network surcharge the buyer sees before confirming
Paying with$5 order$30 order$100 order
USDT on BSC+1.3%+0.5%+0.3%
USDT on TON+9.3%+1.8%+0.8%
USDT on TRON+16.3%+3.0%+1.1%
USDT on Ethereum+19.5%+3.5%+1.3%

Caveat Selling for under 10 dollars through crypto is hard. On a three-dollar order even a cheap network eats a visible share, and TRON or Ethereum add a quarter of the price. If your plans are small, sell them in bundles. We say this before you connect, not after the first abandoned orders.

03 / Developers

An evening's integration

Create a payment, wait for the callback, verify the signature, ship on settled. Nothing else is required.

Callback handler · Node
// raw body, before parsing JSON:
// the signature is computed over bytes
const expected = createHmac('sha256', secret)
  .update(`${timestamp}.${rawBody}`)
  .digest('hex');

if (!timingSafeEqual(a, b)) return res.sendStatus(401);

markOrderPaid(event.paymentId, event.creditedAmount);
res.sendStatus(200);
  • Signature — HMAC-SHA256 of {timestamp}.{body}, headers X-Priem-Timestamp and X-Priem-Signature.
  • Retries — seven attempts over a day and a half: after a minute, 5 minutes, 30 minutes, 2 hours, 6 hours and a day.
  • PollingGET /v1/payments/{id} always returns the current state. Don't rely on the callback alone.

Payment states

  • createdCreated, no coin chosen yet
  • awaiting_paymentCoin chosen, awaiting transfer
  • onramp_pendingPaying by card, buying crypto
  • detectedTransfer visible on the network
  • confirmingConfirmations accumulating
  • convertingExchanging into your currency
  • settledMoney is on your balance
  • underpaidLess than required arrived
  • expiredThe invoice ran out of time
  • refundedReturned to the buyer

Ship the order on settled and on nothing else.

04 / Reliability

What happens while you trade

The work you never see from the dashboard, and whose absence is what loses money.

Nightly reconciliation

Every night we square everything we owe merchants against what actually sits with the provider. A shortfall stops payouts automatically — until it's explained, not until morning.

A day on payout addresses

A new wallet address becomes usable a day after it is added. It is the only thing standing between a hijacked dashboard and an empty balance. It's inconvenient exactly once.

Underpayment on us

The rate moved, the wallet kept its cut — slightly less arrived. Within tolerance (1% by default) the payment still closes and you receive the full price of the tag. We cover the difference.

Audit log and lockout

Logins, keys, addresses, payouts and price tags are written to a log ordered by a running number. Five failed login attempts lock the account for fifteen minutes.

05 / Before you decide

Worth knowing in advance

Acceptance doesn't start immediately
The dashboard opens the moment you register, but taking payments begins after a business review — it takes a few hours and up. This isn't bureaucracy: your customers' money moves through our account with the provider, and answering for who trades through us falls to us. You can set up the project, keys, callback and price tags right away; acceptance switches itself on with nothing further from you.
The network on a payout address is mandatory
USDT on TRON and USDT on BSC are different addresses. Sending to the wrong network loses the money for good, and nobody can bring it back.
Make your first live payment $20–30
Not two dollars: at that size the network fee adds about forty percent and you'll conclude something is broken. Nothing will be — a flat fee on a tiny order simply looks absurd.
The API key is shown once
There is nowhere to recover it from — you can only issue a new one and revoke the old. Keep it on your server: in a browser it creates payments in your name.
The dashboard and docs are in Russian
This page is translated; the dashboard, checkout and documentation are still Russian-only. If that's an obstacle, tell us when you sign up — we order the translation queue by who it's holding up.

Priem.
Do you copy?

Registration takes a minute, setup about half an hour, and nearly all of that goes into the callback handler.