Sandbox-only today. SEPA-out is simulated end-to-end with deterministic IBANs (
DE89370400440{N}). v1.3+ wires real SEPA settlement through the banking partner.The wallet model
| Field | Description |
|---|---|
id | wal_* |
name / purpose | Free text |
currency | Always EUR |
balanceEuros | Numeric, EUR |
iban / bic | Dedicated IBAN per wallet (sandbox: deterministic per index) |
parentWalletId | Optional — supports hierarchical wallets |
isDefault | Exactly one wallet per org is the default |
status | active · frozen · closed |
metadata | Arbitrary JSON |
Operations
| Endpoint | Purpose |
|---|---|
GET /wallets, GET /wallets/:id | List + detail |
POST /wallets | Create (multiple per org allowed) |
PATCH /wallets/:id | Update name / purpose / default |
DELETE /wallets/:id | Close (terminal) |
/accounts/* for clients that prefer the business term.
Create a wallet
Beneficiaries — saved external recipients
| Field | Description |
|---|---|
id | ben_* |
name, iban, bic, country, email | Recipient detail |
ibanMasked | Display-safe masked form |
status | active etc. |
Transfers
| Field | Description |
|---|---|
sourceWalletId | Origin |
destinationType | wallet or beneficiary (discriminated union) |
destinationWalletId / destinationBeneficiaryId | Target |
amountEuros | EUR |
transferMethod | SEPA or SEPAINST (SEPA Instant) |
purpose | Free text |
groupId | For split transfers |
Split transfers
Atomic 1-to-N split with mixed percentage and fixed-amount legs (sum of percentages ≤ 100):Funding
POST /fund tops up a wallet. In sandbox, use simulate: true for instant balance:
Ledger
Every money movement appends one or more rows toledger_entries:
| Field | Description |
|---|---|
accountType | wallet · card · overdraft |
accountId | Wallet, card, or owner |
amountEuros | Signed (debit negative, credit positive) |
type | payment, transfer, mpp_payment, etc. |
reference | Cross-link to transaction or transfer |
correlationId | Workflow correlation |
Plan-tier volume
| Plan | Volume €/mo |
|---|---|
| Free | 150 |
| Starter | 2,000 |
| Business | 5,000 |
| Enterprise | Unlimited |
Webhooks
wallet.createdwallet.fundedwallet.creditedtransfer.completedtransfer.failedtransfer.split.completed
Surfaces
| Surface | Capability |
|---|---|
| REST | /wallets, /accounts, /transfers, /beneficiaries, /fund |
| SDK | ovra.wallets, ovra.transfers, ovra.beneficiaries |
| MCP | ovra_account, ovra_payment, ovra_vendor |
| Dashboard | /dashboard/accounts (wallets, transfers, beneficiaries in one tabbed view) |
Next
Collect
Inbound payment requests against your wallets.
Funding
How EUR enters Ovra in sandbox vs live.
Compliance
Where the funds live — partner posture.
