Both directions, one product
Buy and sell are two tabs of the same flow, not two products. A user who came in through the on-ramp already knows how to leave — same layout, same breakdown, opposite direction.
Instant SEPA out
The off-ramp lands in a bank account, not a queue: USDC sold becomes euros by instant SEPA, arriving the same day. Cash out is a transfer, not a support ticket.
No hidden spread
The rate and the €0.50 fee are itemized before the user commits, and the receipt matches the quote. The number on the confirm button is the number that arrives.
Built for partners
The widget drops into exchanges, wallets, and consumer apps that need fiat rails without building them. The host keeps its brand and its users; Ramp does the conversion underneath.
A standalone app as well
Ramp also ships as its own mobile product, with complete buy and sell flows ready to use. Going direct doesn't require a host product — the standalone flows are the same ones the widget runs.
One set of rails
Widget and standalone quote the same rate, charge the same fee, and settle the same way. Packaging is a distribution choice, not a pricing tier.
Familiar ways in
The buy leg takes a saved card — Mastercard •••• 4417 in the demo — or Apple Pay. A first-time user needs a payment method they already have, not a crypto balance to start from.
Verification, credited on screen
Who verifies is printed on the flow. The demo footers read KYC by a named provider on the standalone app and KYC by partner inside the embed. Users learn who checks their documents before they upload anything.
Cancelled means uncharged
An order abandoned before commitment moves no money, and the history says so in writing: cancelled, no charge made. The edge case is answered where the user goes looking for it.
USDC on three networks
The crypto side runs USDC on Base, Ethereum, and Solana. The network is part of the quote and part of the history row — never a surprise on the receipt.
A partner back office
Partners get their own surface: orders, payouts, reports, and a developers tab, scoped to their traffic. The demo shows NovaDEX seeing NovaDEX — nothing else.
Keys that rotate
The widget mounts with a publishable key, and the key rotates in one click the day it leaks into a repo. Rotation is a routine, not an incident.
Origins that fail closed
The allowlist is enforcement, not documentation: the widget refuses to mount on any origin not listed. A copied embed on a lookalike domain renders nothing.
Theme follows the host
Light, dark, or auto — and auto reads the host page's theme attribute, so the widget matches the product around it without a stylesheet handshake.
Currencies as toggles
Fiat currencies switch on per partner — EUR as the default, RON alongside in the demo, others off until wanted. Rolling out a market is a toggle, not a build.
Events for the host
The developers tab carries the integration surface: order lifecycle events delivered to the host's systems, so a partner learns about a completed buy without polling for it.
One allowance, both directions
The monthly limit counts buys and sells together against one allowance, and the meter sits on the user's screen with its reset date printed. Nobody discovers a limit by hitting it.
Statuses that tell the truth
Orders carry their real state: processing while SEPA is in flight, completed when settled, cancelled when abandoned. A sell reads processing until the euros land — not a premature checkmark.
Quotes hold or re-quote
A quote is priced when shown and honored when confirmed. If it can no longer hold, the flow re-quotes and shows the new number before anything moves — it never silently substitutes one.