Internal Ovra-to-Ovra works today. External SEPA inbound matching is on the roadmap and is currently rejected by the
/settle endpoint. See the status table below.Why this matters
If your agent does work that someone else paid for — services, goods, microtransactions, API calls — you need a way to collect. Without Collect, “agent payments” is a one-way street. With it, agents can run businesses.The payment-request model
Operations
The pillar is named Collect but the routes still mount under
/claim/*. The route rename is upcoming tech-debt; the URL contract is stable.Create a request
Settle path matrix
- Internal (Ovra → Ovra)
- External (SEPA inbound)
Counterparty has an Ovra wallet. Pass
counterpartyOwnerId in the create call. The counterparty calls POST /claim/requests/:id/settle with sourceWalletId. We run the debit and credit in a single transaction:- SQL
BEGIN UPDATE wallets SET balance_euros = balance_euros - amount WHERE id = :src AND balance_euros >= amountUPDATE wallets SET balance_euros = balance_euros + amount WHERE id = :dst- INSERT
ledger_entries(debit + credit),transfersrow, mark requestpaid COMMIT- Fire
claim.request.paidwebhook
Surfaces
Webhooks
Subscribe to these events to react in real time:claim.request.createdclaim.request.paidclaim.request.expiredclaim.request.cancelled
Next
Accounts
Wallets, IBANs, transfers — where the funds live.
Webhooks
Fire-and-forget delivery for
claim.request.* events.