From sign-up to first payment
in seven steps
The dashboard's setup wizard does most of the work. Your developer writes about 50 lines of server code.
-
2 minutes
Sign up
In the dashboard, click “Sign up” and enter your business name, email and password. Then confirm your email using the link we send you.
-
1 minute
Turn on two-factor authentication
Required for everyone: an authenticator app (TOTP). The setup wizard starts once it's enabled. You can add passkeys later.
-
10 minutes
Add receiving wallets
This is where payments land. We only need public data: never enter your seed phrase or private keys, here or anywhere else.
- Bitcoin, Litecoin, TRON: your account xpub/zpub from Ledger Live, Sparrow, Trust Wallet and similar. We'll show the first few addresses so you can check them against your wallet.
- Ethereum, BSC, Polygon, Base, Arbitrum: a collection wallet (ideally a Safe multisig).
- Solana: a receiving address.
-
1 minute
Choose assets
Pick which coins and networks to offer customers. Stablecoins USDT and USDC are the easiest place to start: pegged 1:1 to the dollar, no exchange-rate risk.
-
2 minutes
Create an API key and webhook
Under “Keys & webhooks,” the key secret and webhook secret are shown only once. Store them right away in a secrets manager or your server's environment variables.
-
1 evening
Integrate and test in the sandbox
Invoice creation, a redirect and a webhook handler. The sandbox has its own dashboard and keys, with no real money involved. Run through the scenarios: exact payment, underpayment plus top-up, overpayment, expired invoice, webhook retry.
- Quickstart: code for Node.js, PHP, Python and Go
- Sandbox: test payments at the click of a button
-
after review
Submit for approval and go live
The wizard submits your application for review. Once approved, issue a separate production key and work through the go-live checklist.
What you'll need
- Wallets you controlA hardware wallet or multisig is safer for a business than a mobile wallet.
- A server with HTTPSWebhooks are delivered only to
https://on port 443 (pluslocalhostin the sandbox). - A synced clockRequest signatures are valid for ±5 minutes, so enable NTP.
- A place for secretsA secrets manager or environment variables. Not git, not the browser, not a mobile app.
All the code in one sketch
# 1. The customer clicked “Pay”
invoice = client.createInvoice({order_id, price_amount: "49.99", price_currency: "USD",
return_url}, idempotencyKey = "order-" + order_id)
redirect(invoice.checkout_url)
# 2. Coinetic sent a webhook (raw body!)
event = verifyWebhook(WEBHOOK_SECRET, headers, rawBody) # otherwise 400/401
if seen(event.id): return 200 # duplicate delivery
inv = client.getInvoice(event.data.invoice_id) # status from the API only
if inv.status in ["paid", "overpaid"]: grantOnce(inv.order_id)
return 200
Ready to start?
Sign-up is free, and so is the sandbox.