One quote, real fees
Total cost shown upfront (fee, spread, FX, and network combined), not three separate surprises later. No dark spreads.
The money movement module routes deposits, transfers, conversions, and payouts across the providers and rails you have enabled. Routing weighs cost, eligibility, availability, and observed performance for each transaction. Today the proof rail is on-ramp and off-ramp aggregation: one all-in quote, a success-probability score, and a fallback path when the first route drops.
Total cost shown upfront (fee, spread, FX, and network combined), not three separate surprises later. No dark spreads.
Routing weighs cost, the user's eligibility and jurisdiction, current provider availability, and observed performance over recent transactions.
If the first route drops after submission, routing retries the next eligible path without losing the user's verified state, where providers support it.
Expose the route, the all-in rate, and the underlying fee components through the SDK, or collapse to a single total. Your choice.
Routing is the module in the platform. On-ramp and off-ramp aggregation is the rail that proves it works today.
A 2024 industry on-ramp benchmark found on-ramp success rates of roughly 50% for single-provider integrations, rising materially when routed through an aggregator that scores per card BIN, country, and KYC re-use. The reason is simple: each provider has coverage gaps: card BIN restrictions, per-country limits, intermittent compliance holds. Checking eligibility in parallel at the moment of intent, against the same risk and compliance signals, closes most of the gap.
Routing inputs (refreshed on a short interval per provider):
Settlement timing is near-real-time where supported by the selected provider, destination institution, and jurisdiction. As more rails connect beneath the module (bank rails, EMI payouts, digital-asset rails), the same routing policy applies to all of them, and each routed transaction feeds settlement and reconciliation downstream.
const quote = await ovaal.routing.quote({
partnerUserId: 'user_abc123',
direction: 'on-ramp',
fiatCurrency: 'EUR',
fiatAmount: 500,
asset: 'USDC',
targetChain: 'base',
targetAddress: '0x...',
});
// Returns:
// {
// selectedProviderId: 'prov_a_v2',
// allInRate: { total: 0.0287, fee: 0.0135, spread: 0.0102, fx: 0.0050 },
// successProbability: 0.93,
// expectedDeliveryMs: 180_000,
// fallbackProviderIds: ['prov_b', 'prov_c'],
// sessionUri: 'https://route.ovaal.io/session/...'
// }