Authentication
Every request to /api/v1/* (except Collect checkout) requires an API key in the Authorization header:
Authorization: Bearer vltro_live_xxxxxxxxxxxxxxxxxxxx
Create and revoke keys from Dashboard → API keys. Keys are shown once at creation — Veltro only stores a SHA-256 hash, never the raw key.
Scopes​
Each key carries one or more scopes, set at creation time:
| Scope | Grants |
|---|---|
read | GET endpoints — list/read your own resources |
write | read + POST endpoints — create payment links, invoices, payouts, etc. |
admin | everything, including endpoints that would otherwise require a specific higher scope |
A key with only read will get a 403 on any POST endpoint.
Collect keys — a separate, narrower key type​
vltro_pk_... Collect keys are a different trust tier, meant to be embedded in public client-side code (a checkout widget on your own site). They:
- only work against
POST /api/v1/collect/checkout, - can never read account data or perform any other action,
- are safe to expose in a browser bundle — a normal
vltro_live_...server key is not.
Example​
curl https://veltro.online/api/v1/payment-links \
-H "Authorization: Bearer vltro_live_xxxxxxxxxxxx"
const res = await fetch("https://veltro.online/api/v1/payment-links", {
headers: { Authorization: `Bearer ${process.env.VELTRO_API_KEY}` },
});
const { data } = await res.json();
Never commit an API key to source control or expose a vltro_live_... key in client-side code — use a Collect key for that instead.