Start building
Developers The reference

An API you can hold the whole shape of.

Idempotent, versioned and typed end to end. Seven native SDKs, signed webhooks that retry, and a sandbox that returns the same status codes as production. Read three lines and you've made a payment.

01 Quickstart

Charge a card in three lines.

checkout.ts
import { Velta } from "@veltapay/node";
const velta = new Velta(process.env.VELTA_KEY);

const session = await velta.checkout.create({
  amount: 4200, currency: "eur", mode: "payment",
  success_url: "https://app.acme.io/done"
});
res.redirect(session.url);
checkout.py
import veltapay
velta = veltapay.Client(os.environ["VELTA_KEY"])

session = velta.checkout.create(
  amount=4200, currency="eur", mode="payment",
  success_url="https://app.acme.io/done",
)
return redirect(session.url)
checkout.go
velta := veltapay.New(os.Getenv("VELTA_KEY"))

session, _ := velta.Checkout.Create(&veltapay.CheckoutParams{
  Amount: 4200, Currency: "eur", Mode: "payment",
  SuccessURL: "https://app.acme.io/done",
})
http.Redirect(w, r, session.URL, 303)
shell
curl https://api.veltapay.com/v3/checkout \
  -u "$VELTA_KEY:" \
  -d amount=4200 \
  -d currency=eur \
  -d mode=payment \
  -d success_url="https://app.acme.io/done"
02 API surface

The endpoints, grouped by job.

Payments

POST/v3/checkout
POST/v3/payments
POST/v3/refunds
GET/v3/payments/:id

Accounts & KYC

POST/v3/accounts
POST/v3/accounts/:id/documents
GET/v3/accounts/:id
DEL/v3/accounts/:id

Balance & payouts

GET/v3/balance
POST/v3/payouts
GET/v3/payouts/:id
POST/v3/transfers

Risk & disputes

GET/v3/risk/:payment_id
POST/v3/rules
GET/v3/disputes
POST/v3/disputes/:id/evidence
03 Webhooks & events

Events that actually arrive.

Every state change emits a signed event. Verify the signature in one line, get an idempotency key for free, and rely on retries with exponential backoff for up to three days if your endpoint is down.

The dashboard shows delivery rate, latency and a full replay log — so when your CTO asks whether the webhook fired, the answer is on a chart, not in a guess.

  • Signed payloads — HMAC-SHA256, verify with the SDK helper.
  • Retries with backoff — up to 72 hours, with a replay button.
  • Delivery analytics — rate and p95 latency per endpoint.
// verify + handle in one route
app.post("/webhooks", (req, res) => {
  const evt = velta.webhooks.verify(
    req.body, req.headers["velta-signature"]
  );

  switch (evt.type) {
    case "payment.succeeded":
      fulfill(evt.data.id); break;
    case "account.verified":
      activate(evt.data.account); break;
    case "dispute.opened":
      notify(evt.data.dispute); break;
  }
  res.sendStatus(200);
});
EVTpayment.succeededmoney captured
EVTaccount.verifiedKYC passed
EVTpayout.paidbank credited
EVTdispute.openedchargeback in
04 SDKs

Typed clients in seven languages.

TSNode
PYPython
GOGo
RBRuby
PHPPHP
JVJava
NET.NET
Build

Sandbox keys in under five minutes.

No sales call between you and your first request. Grab a test key, mirror production in the sandbox, and flip to live when the code is green.