Developers
Go to market in minutes,
not weeks
Simple REST APIs that let you create payment flows without touching blockchain infrastructure.
Create an invoice
One POST request. Set the amount, the token and the network. You get back a checkout slug and a unique deposit address.
Name the token — USDT or USDC — and the customer pays in exactly that. Register your payout wallet in the dashboard first: until you do, this returns 400.
curl -X POST https://api.vorixpay.com/api/v1/invoices \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Order #123",
"amount": 50,
"currency": "USDT",
"chain": "bsc-testnet"
}'{
"slug": "xfmzFA9g4qXr",
"txRef": "VXP_abc123...",
"status": "PENDING",
"depositAddress": "0x7a3F..."
}Customer pays
Redirect them to vorixpay.com/pay/{slug}. They pay from their wallet, or send the exact token on the named network to the address shown.
Vorixpay reads new blocks every few seconds. Payments are detected automatically — no manual confirmation from anyone.
Verify & fulfill
Your webhook receives invoice.completed. Check the signature, then confirm with a single GET call. If status === "COMPLETED", deliver the goods.
Always verify on your server. Never trust client-side data.
// Raw body: the signature is over the exact bytes sent.
app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
const rawBody = req.body.toString("utf8");
if (!verifySignature(req.headers["vorixpay-signature"], rawBody)) {
return res.status(401).send("Invalid signature"); // see the docs
}
const event = JSON.parse(rawBody);
if (event.type === "invoice.completed") {
fulfillOrder(event.data.txRef);
}
res.status(200).send("OK");
});Webhook events
| Event | When it fires |
|---|---|
| payment.detected | A transfer was seen on-chain, not yet deep enough to trust |
| payment.confirmed | Past the confirmation depth. For invoices, act on invoice.completed instead |
| payment.orphaned | A chain reorganisation reversed it. Undo any credit given |
| invoice.completed | Paid in full (within any tolerance), or accepted short by you. Fulfil on this |
| invoice.underpaid | Money arrived, but not enough yet |
| invoice.overpaid | Paid in full and then some. Sent alongside completed |
| invoice.expired | The deadline passed without enough arriving |
| invoice.cancelled | You cancelled it |
| sweep.completed | Funds were collected into your payout wallet |
| wallet.registered | A payout wallet was registered on a chain |
| wallet.change_requested | A change was requested. Cancel it if it was not you |
| wallet.change_applied | The change took effect after its timelock |
| wallet.change_cancelled | A pending change was cancelled |