§Developer Platform
Payments as an API you can reason about.
Resources with clear states, writes that are safe to retry, webhooks you can verify, versions that never change under your feet — and a sandbox that behaves like production, minus the money.
Base URL in sandbox: http://localhost:4610/v1
curl http://localhost:4610/v1/payment_intents \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: order-1042-attempt-1" \
-H "Veyra-Version: 2026-10-01" \
-H "Content-Type: application/json" \
-d '{
"amount": 12000,
"currency": "EUR",
"description": "Order #1042",
"metadata": { "order_id": "1042" }
}'- Style
- REST, JSON, OpenAPI 3
- Auth
- Bearer secret keys, scoped keys
- Version header
- Veyra-Version: 2026-10-01
- SDK
- TypeScript available
01Design principles
The contract between your code and ours.
- 01
Idempotent by default
Keys are kept for 24 hours. Reusing a key with a different body returns 409 idempotency_mismatch instead of guessing what you meant.
- Idempotency-Key header
- 24-hour retention
- Body mismatch detected
- 02
Errors that tell you what to do
Every error has the same shape, a stable machine-readable code and a message written for humans.
- { error: { code, message, details } }
- Stable codes
- Request ID on every response
- 03
Webhooks you can trust
Signed with HMAC-SHA256 and a timestamp, retried with exponential backoff for about three days, replayable from the dashboard.
- Veyra-Signature header
- 5-minute tolerance
- Replay any event
- 04
Money without floats
Amounts are integers in minor units with an ISO 4217 currency. 12.30 euro is 1230 — and JPY has no decimals at all.
- Integer minor units
- Per-currency exponent
- No rounding surprises
02SDKs and plugins
Libraries, honestly labelled.
| Library | Status |
|---|---|
| TypeScript / Node.js | Available |
| Python | Foundations — in progress |
| PHP | Foundations — in progress |
| Java | Foundations — in progress |
| Dart / Flutter | Foundations — in progress |
| Go | Foundations — in progress |
| WooCommerce plugin | Architecture defined, subject to platform requirements — not yet available |
| Shopify app | Architecture defined, subject to platform requirements — not yet available |
03Start here
Documentation
- OverviewVEYRA is an API-first payment platform. These guides explain the concepts once, clearly, so the reference makes sense.
- QuickstartCreate a sandbox account, get a test key and take your first payment — in about ten minutes.
- AuthenticationHow API keys work, which key to use where, and why some dashboard actions ask you to confirm it is really you.
- IdempotencyHow to retry any request safely, without ever creating a payment twice.
- ErrorsOne error shape, stable codes, and what to do about each of them.
- Amounts and currenciesWhy every amount is an integer, and how to convert it correctly for display.
- API versioningDated versions mean your integration keeps working while the API improves.
- WebhooksReceive events, verify their signature, and rely on retries and replay.
- TestingTest cards and test IBANs that reproduce success, declines, authentication, disputes and returned payouts.
- SDKsOfficial libraries and their honest status.
- PluginsE-commerce platform plugins: what is planned and what is not available yet.
- API referenceEndpoints, parameters and schemas, generated from the live OpenAPI specification of the sandbox.
- ChangelogEvery release of the sandbox API, newest first.
?FAQ
Questions, answered
Is there an OpenAPI specification?
Yes. The sandbox API publishes its specification at /openapi.json, and the API reference on this site is generated from it.
How do I test webhooks locally?
Expose a local endpoint with a tunnel of your choice, register it in the dashboard, and use “Send test event” or replay a real sandbox event.
Are there rate limits?
Yes. When you exceed them you receive 429 rate_limited with a Retry-After header. Limits in the sandbox are generous enough for automated tests.
Get a test key and make your first call.
Your sk_test_ key is waiting in the dashboard.

