One-line API
Create an invoice in a single call and redirect to its pay URL. Fiat mode locks a rate per coin; crypto mode fixes the amount.
A hosted checkout and a one-line API for 50 coins. Fiat-priced or crypto invoices, shareable payment links, and signed webhooks you can trust.
0% to accept — you only pay the on-chain network fee.
The payer covers the network fee on an incoming payment. You pay 0% to accept on every plan.
Open a real USDT checkoutThe demo mints a throwaway invoice on a real address. No payment is expected, and anything you send there is a real on-chain transfer — please don't.
One API call creates the invoice, the hosted checkout takes the payment, and a signed webhook tells your server it is final.
Create an invoice in a single call and redirect to its pay URL. Fiat mode locks a rate per coin; crypto mode fixes the amount.
Redirect customers to a clean, mobile-first checkout — they pick a coin, scan a QR or open their wallet, and the page confirms live.
Every event is HMAC-SHA256 signed with idempotency keys — verify before you credit an order.
The same call, one parameter apart. Choose per invoice.
Price in fiat, USD by default. The payer picks any coin enabled on your account, and the rate is locked per coin at checkout.
mode "fiat" amount "9.99" fiat_currency "USD"
Best for stores with prices in fiat.
Fix the coin and the exact amount up front. The checkout opens straight on the address, QR and amount.
mode "crypto" amount "25" currency "USDT_TRON"
Best for top-ups, deposits and amounts agreed in crypto.
Generate a link from your dashboard and send it anywhere — no integration required.
BTC, Gram (TON), ETH & EVM chains, Tron, Solana, LTC, DOGE, BCH plus USDT/USDC on every major network.
Install a ready module for WooCommerce, PrestaShop, Magento 2, OpenCart, WHMCS and more, or drop one PHP file into anything custom.
English, Russian, Ukrainian, Spanish and German. The checkout opens in the language you pass with the invoice.
A partial or excess payment is recorded on the append-only ledger, so nothing is lost and nothing is credited twice.
Send an Idempotency-Key with the invoice call: a retried request returns the same invoice instead of creating a second one.
Every payment is credited to your Payora balance the moment it confirms on-chain. Withdraw to any external wallet: 1.5% on Free (0.75% Pro, 0.5% Business) plus the coin's network fee, a $50 minimum, up to 10 business days.
<?php
require 'Payora.php';
$payora = new Payora('https://api.payora.money', $apiKey, $apiSecret);
// fiat-priced: the payer picks the coin at checkout
// (crypto-priced: 'mode' => 'crypto', 'currency' => 'USDT_TRON')
$inv = $payora->createInvoice([
'order_id' => '42',
'mode' => 'fiat',
'amount' => '9.99',
]);
header('Location: ' . $inv['pay_url']);
// webhook: verify over the RAW body, then credit once
$event = $payora->verifyWebhook(file_get_contents('php://input'), getallheaders());
if ($event && $event['status'] === 'paid') {
creditOrder($event['order_id']);
}const Payora = require('./payora');
const payora = new Payora('https://api.payora.money', KEY, SECRET);
// fiat-priced invoice → hosted checkout
const inv = await payora.createInvoice({ order_id: '42', mode: 'fiat', amount: '9.99' });
res.redirect(inv.pay_url);
// webhook: pass the RAW body, not parsed JSON
app.post('/payora/webhook', express.raw({ type: '*/*' }), (req, res) => {
const event = payora.verifyWebhook(req.body, req.headers);
if (event && event.status === 'paid') creditOrder(event.order_id);
res.sendStatus(200);
});from payora import Payora
payora = Payora('https://api.payora.money', KEY, SECRET)
# fiat-priced invoice → hosted checkout
inv = payora.create_invoice({'order_id': '42', 'mode': 'fiat', 'amount': '9.99'})
return redirect(inv['pay_url'])
# webhook: verify the raw body before crediting
event = payora.verify_webhook(request.get_data(), request.headers)
if event and event['status'] == 'paid':
credit_order(event['order_id'])# signature = HMAC-SHA256(api_secret, timestamp + "." + raw_body)
BODY='{"order_id":"42","mode":"fiat","amount":"9.99"}'
TS=$(date +%s)
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)
curl -X POST https://api.payora.money/v1/invoice \
-H "X-Payora-Key: $KEY" -H "X-Payora-Timestamp: $TS" \
-H "X-Payora-Signature: $SIG" -H 'Idempotency-Key: order-42' \
-H 'Content-Type: application/json' -d "$BODY"Straight answers, including the uncomfortable ones: custody, fees and what happens when something goes wrong.
Help centreCreate an invoice with one API call (order ID plus a fiat or crypto amount), then redirect the customer to the returned pay URL. Payora hosts a mobile-first checkout where they pick a coin, pay, and see live confirmation. When the payment reaches finality, Payora sends your server a signed webhook so you can mark the order paid.
50 assets across 22 networks: Bitcoin, Ethereum and EVM chains (BNB, Polygon, Arbitrum, Base, Optimism, Avalanche), TON, Tron, Solana, Litecoin, Dogecoin, Bitcoin Cash, XRP and Stellar — plus USDT and USDC on every network that carries them. One integration covers them all; the payer chooses at checkout.
Payora charges 0% to accept. You only ever pay the on-chain network fee on an incoming payment, and the payer covers it. There is no setup fee and no monthly fee. Platform fees apply only when you move money out: 1.5% on Free, 0.75% on Pro and 0.5% on Business — the same rate for payouts, internal transfers and withdrawals — and a withdrawal or payout also costs the network fee of the coin being sent. The minimum withdrawal is the equivalent of $50.
By default, yes. Receive addresses are derived from keys held by Payora, payments land there, and your share is credited to your balance; you withdraw to your own wallet (1.5% on Free, 0.75% Pro, 0.5% Business, plus the network fee, $50 minimum, up to 10 business days). If you would rather Payora never held your funds at all, vetted merchants can request derivation from their own xPub — then payments settle straight to wallets only you control. Ask support to enable it for your account.
Every webhook is signed with HMAC-SHA256 over the timestamp and raw body using your api_secret, with a timestamp to prevent replay and an idempotency key to prevent double-processing. Recompute the signature with a constant-time compare before crediting the order — the one-file SDK does this for you.
Create an account, add your site, paste one API call or install a plugin. Accepting stays 0% on every plan.