The self-hosted crypto checkout for serious merchants
Hosted checkout, invoices and an API that settle into a double-entry ledger. Choose who pays the fee, put your own brand on the checkout, and screen every incoming payment before it is credited.
Overview
Live · sample data| Invoice | Asset | Amount | Status |
|---|---|---|---|
| A-20419 | $249.00 | Paid | |
| A-20418 | $1,180.00 | Confirming | |
| A-20417 | $89.90 | Paid | |
| A-20416 | $420.00 | Expired |
14 cryptocurrencies · 29 assets across 15 networks
A checkout your customers already understand
Customers pick a coin, scan a QR code or pay in one click from a browser wallet such as MetaMask. The rate is locked for the invoice, memos and destination tags are handled, and you see status changes as they happen.
Example on a 100.00 USDT invoice at the 1% fee. Set it per store, or per invoice through the API.
Everything you need to get paid in crypto
One-click wallet pay
EVM payments straight from MetaMask, Rabby, Coinbase Wallet or any injected browser wallet, with the chain switched automatically.
Flexible fee payer
Absorb the 1% fee or pass it on to the customer, per store or per invoice.
White-label checkout
Your logo, colours and name on the payment page. Coinvex branding can be removed.
Double-entry ledger
Every credit and fee is booked as balanced ledger entries, so balances are always auditable.
Your keys, your choice
Use custodial deposit addresses or connect your own wallet with an xpub for non-custodial payouts.
12 pricing currencies
Price invoices in USD, EUR, GBP and more; the crypto amount is quoted at checkout.
Controls that protect your balance
Risk checks run on every incoming payment before it is credited. Each decision is stored with its score and reasons, giving your compliance team a complete record.
Payment screening
Sender blocklists, amount and velocity rules. Risky payments are held for review.
Signed API requests
HMAC-SHA256 signatures, timestamp checks, read-only keys and IP allowlists.
Signed webhooks
Every webhook is signed and retried with backoff; private network targets are blocked.
Idempotent by design
Idempotency keys and duplicate-transaction checks prevent double credits.
Explore every coin and network
14 cryptocurrencies, 29 assets, 15 networks — taken directly from what is enabled on the platform.
Integrate in an afternoon
A REST API with signed requests and idempotency keys, plus webhooks for every status change. Integrations built for the legacy v1 signing scheme keep working unchanged.
- REST API v1: invoices, currencies, rates and balances
- Signed webhooks for paid, partial, expired and cancelled invoices
- Hosted checkout URL returned with every invoice
# Create an invoice curl -X POST https://www.coinvex-demo.aucip.com/api/v1/invoices \ -H "X-Api-Key: pk_live_…" -H "X-Signature-Version: 2" \ -H "X-Timestamp: $TS" -H "X-Signature: $SIG" \ -d '{"amount":"249","currency":"USD","fee_payer":"customer"}'# Create an invoice (v2 signature: HMAC-SHA256 of "ts METHOD path body") curl -X POST https://www.coinvex-demo.aucip.com/api/v1/invoices \ -H "X-Api-Key: pk_live_…" \ -H "X-Signature-Version: 2" \ -H "X-Timestamp: $TS" -H "X-Signature: $SIG" \ -H "Idempotency-Key: order-20419" \ -d '{"amount":"249","currency":"USD","fee_payer":"customer"}' # 201 Created → { "status": "new", "checkout_url": "https://www.coinvex-demo.aucip.com/pay/9f2c…" } $body = json_encode(['amount' => '249', 'currency' => 'USD', 'fee_payer' => 'customer']); $ts = (string) time(); $sig = hash_hmac('sha256', "$ts POST /api/v1/invoices $body", $secret); $res = Http::withHeaders([ 'X-Api-Key' => $key, 'X-Timestamp' => $ts, 'X-Signature' => $sig, 'X-Signature-Version' => '2', ])->withBody($body, 'application/json')->post('https://www.coinvex-demo.aucip.com/api/v1/invoices'); redirect($res['data']['checkout_url']); import crypto from 'node:crypto'; const body = JSON.stringify({ amount: '249', currency: 'USD', fee_payer: 'customer' }); const ts = String(Math.floor(Date.now() / 1000)); const sig = crypto.createHmac('sha256', SECRET) .update(`${ts} POST /api/v1/invoices ${body}`).digest('hex'); const res = await fetch('https://www.coinvex-demo.aucip.com/api/v1/invoices', { method: 'POST', body, headers: { 'X-Api-Key': KEY, 'X-Timestamp': ts, 'X-Signature': sig, 'X-Signature-Version': '2' }, }); const { data } = await res.json(); // data.checkout_url import hmac, hashlib, json, time, requests body = json.dumps({"amount": "249", "currency": "USD", "fee_payer": "customer"}) ts = str(int(time.time())) sig = hmac.new(SECRET.encode(), f"{ts} POST /api/v1/invoices {body}".encode(), hashlib.sha256).hexdigest() res = requests.post("https://www.coinvex-demo.aucip.com/api/v1/invoices", data=body, headers={ "X-Api-Key": KEY, "X-Timestamp": ts, "X-Signature": sig, "X-Signature-Version": "2", }) print(res.json()["data"]["checkout_url"])
Simple, transparent pricing
No setup fee and no monthly fee. Network fees on withdrawals are passed through at cost.
Create an account- Hosted and white-label checkout
- One-click browser-wallet payments
- Choose who pays the fee
- Custodial or xpub wallets
- Screening of incoming payments
- REST API and signed webhooks
Start accepting crypto today
Create an account, add your store, and share your first payment link.