Developers

Build in aweekend.Ship on Monday.

Full REST API. Instant sandbox. No sales call needed. Webhooks, idempotency, typed SDKs — everything you expect from a modern payments API.

Get your API key
REST
API style
< 60s
Sandbox setup
HMAC
Webhook signing
SDKs
JS · Python · Go

API Reference

Every endpoint.
One consistent API.

create-charge.js
Payment Processor
POST /v1/charges
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.checkoutUrl
send-transfer.js
Global Transfer
POST /v1/transfers
const 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 SETTLED
get-balance.js
Treasury
GET /v1/balances
const 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

Know the moment
anything happens.

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-chain
transfer.settledCross-border transfer landed
balance.updatedWallet balance changed
charge.expiredPayment window closed
webhook-handler.js
import { 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 });
});

API key in 60 seconds.

No approval process. No sales call. Sandbox ready instantly.

Get started free