Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.getovra.com/llms.txt

Use this file to discover all available pages before exploring further.

Accounts is the money-holding pillar. Wallets hold EUR balances, transfers move them between Ovra wallets or out to external IBANs via SEPA, and beneficiaries are saved external recipients. Multi-wallet per organization is supported, and wallets can be hierarchical (parent → child) for cost-center splits.
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

FieldDescription
idwal_*
name / purposeFree text
currencyAlways EUR
balanceEurosNumeric, EUR
iban / bicDedicated IBAN per wallet (sandbox: deterministic per index)
parentWalletIdOptional — supports hierarchical wallets
isDefaultExactly one wallet per org is the default
statusactive · frozen · closed
metadataArbitrary JSON

Operations

EndpointPurpose
GET /wallets, GET /wallets/:idList + detail
POST /walletsCreate (multiple per org allowed)
PATCH /wallets/:idUpdate name / purpose / default
DELETE /wallets/:idClose (terminal)
The same surface is mirrored under /accounts/* for clients that prefer the business term.

Create a wallet

curl -X POST https://api.getovra.com/wallets \
  -H "Authorization: Bearer $OVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "Marketing budget",
    "purpose": "Q2 ad spend",
    "currency": "EUR"
  }'

Beneficiaries — saved external recipients

FieldDescription
idben_*
name, iban, bic, country, emailRecipient detail
ibanMaskedDisplay-safe masked form
statusactive etc.
curl -X POST https://api.getovra.com/beneficiaries \
  -H "Authorization: Bearer $OVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme GmbH",
    "iban": "DE89370400440000001234",
    "country": "DE"
  }'
IBANs are validated by format check (full mod-97 happens server-side at the banking partner). Bank URLs are SSRF-checked.

Transfers

FieldDescription
sourceWalletIdOrigin
destinationTypewallet or beneficiary (discriminated union)
destinationWalletId / destinationBeneficiaryIdTarget
amountEurosEUR
transferMethodSEPA or SEPAINST (SEPA Instant)
purposeFree text
groupIdFor split transfers
curl -X POST https://api.getovra.com/transfers \
  -H "Authorization: Bearer $OVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "sourceWalletId": "wal_...",
    "destinationType": "beneficiary",
    "destinationBeneficiaryId": "ben_...",
    "amountEuros": 199.00,
    "transferMethod": "SEPAINST",
    "purpose": "Invoice 2026-042"
  }'

Split transfers

Atomic 1-to-N split with mixed percentage and fixed-amount legs (sum of percentages ≤ 100):
curl -X POST https://api.getovra.com/transfers/split \
  -H "Authorization: Bearer $OVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "sourceWalletId": "wal_...",
    "totalAmountEuros": 1000,
    "purpose": "Q2 royalties",
    "legs": [
      { "destinationType": "wallet", "destinationWalletId": "wal_a", "percentage": 60 },
      { "destinationType": "wallet", "destinationWalletId": "wal_b", "percentage": 30 },
      { "destinationType": "beneficiary", "destinationBeneficiaryId": "ben_x", "percentage": 10 }
    ]
  }'

Funding

POST /fund tops up a wallet. In sandbox, use simulate: true for instant balance:
curl -X POST https://api.getovra.com/fund \
  -H "Authorization: Bearer $OVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "walletId": "wal_...", "amountEuros": 500, "simulate": true }'
v1.3+ adds real SEPA inbound via the dedicated wallet IBAN.

Ledger

Every money movement appends one or more rows to ledger_entries:
FieldDescription
accountTypewallet · card · overdraft
accountIdWallet, card, or owner
amountEurosSigned (debit negative, credit positive)
typepayment, transfer, mpp_payment, etc.
referenceCross-link to transaction or transfer
correlationIdWorkflow correlation
Append-only — never updated, never deleted.

Plan-tier volume

PlanVolume €/mo
Free150
Starter2,000
Business5,000
EnterpriseUnlimited
Overage is a soft cap with a 0.3–0.5% fee on volume above the limit. No hard block.

Webhooks

  • wallet.created
  • wallet.funded
  • wallet.credited
  • transfer.completed
  • transfer.failed
  • transfer.split.completed

Surfaces

SurfaceCapability
REST/wallets, /accounts, /transfers, /beneficiaries, /fund
SDKovra.wallets, ovra.transfers, ovra.beneficiaries
MCPovra_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.