Developers
Full REST API. Instant sandbox. No sales call needed. Webhooks, idempotency, typed SDKs — everything you expect from a modern payments API.
API Reference
const res = await fetch(
"https://api.payvelora.com/v1/charges",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
amount: "49.99",
currency: "USD",
coins: ["USDC", "USDT"],
networks: ["ethereum", "polygon"],
metadata: { orderId: "order_123" }
})
}
);
const { charge } = await res.json();
// → redirect to charge.checkoutUrlconst res = await fetch(
"https://api.payvelora.com/v1/transfers",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
amount: "25000.00",
sourceCurrency: "USD",
destinationCurrency: "EUR",
recipient: {
name: "Acme GmbH",
iban: "DE89370400440532013000",
country: "DE"
},
reference: "invoice-2026-081"
})
}
);
const { transfer } = await res.json();
// transfer.status → "PROCESSING"
// transfer.arrival → "<60s"
// Webhook fires on SETTLEDconst res = await fetch(
"https://api.payvelora.com/v1/balances",
{
headers: {
"Authorization": "Bearer YOUR_KEY"
}
}
);
const { balances } = await res.json();
// balances → [
// { currency: "USDC", amount: "142500.00" },
// { currency: "USDT", amount: "38200.00" },
// { currency: "EUR", amount: "12450.00" },
// ]Webhooks
Every state change fires a signed webhook. HMAC-SHA256 signatures on every payload. Automatic retries with exponential backoff. Full delivery log in the dashboard.
charge.confirmedPayment received on-chaintransfer.settledCross-border transfer landedbalance.updatedWallet balance changedcharge.expiredPayment window closedimport { verifyWebhook } from "@velora/sdk/webhook";
app.post("/webhooks/velora", (req, res) => {
const sig = req.headers["x-velora-signature"];
const event = verifyWebhook(
req.rawBody,
sig,
process.env.WEBHOOK_SECRET
);
if (!event) {
return res.status(400).send("Invalid signature");
}
switch (event.type) {
case "charge.confirmed":
await fulfillOrder(event.data.metadata.orderId);
break;
case "transfer.settled":
await markPayoutComplete(event.data.id);
break;
}
res.json({ received: true });
});No approval process. No sales call. Sandbox ready instantly.