v1 — live on Fraxtal

On- and off-ramp infrastructurefor the Fraxtal network.

Drop the widget into any app to buy frxUSD with fiat or pay out back to a bank account or wallet. No registration, no secrets — just one React component pointed at our hosted API.

~ 30s
Credit
REST
API surface
1 of 3
You pay
You receive · after all fees
Why Frax Ramp

Built for developers, operated like a payment rail.

Buy & sell

One React component covers both directions — fiat-to-frxUSD on-ramp and frxUSD-to-fiat payouts to bank or wallet.

No registration

Anonymous embed. Mint a session from your backend or directly from the client and you're done.

Typed contracts

Shared TypeScript contracts across the Next.js application, API routes, and Prisma-backed session store.

Fully customizable

Inherits your shadcn theme tokens by default, or scope an isolated frax- theme — colors, radius, and type, all yours.

Developers

One component. Buy, sell, or lock the route.

Install @iqai/ramp-react and pass a destination address to buy, or connect a verified sender wallet and an onOfframpDeposit callback to let users sell frxUSD and receive bank or wallet payouts. For non-React apps, use the hosted iframe and listen for postMessage events.

<iframe
  id="frax-ramp"
  src="https://www.fraxramp.xyz/embed?cryptoAsset=FRXUSD&fiatCurrency=USD&parentOrigin=https%3A%2F%2Fapp.example.com"
  style="width: 420px; height: 640px; border: 0"
></iframe>

const iframe = document.getElementById('frax-ramp');

window.addEventListener('message', async (event) => {
  if (event.origin !== 'https://www.fraxramp.xyz') return;
  if (event.source !== iframe.contentWindow) return;
  if (event.data?.source !== 'frax-ramp') return;

  if (event.data.type === 'order_status_changed') {
    console.log(event.data.status);
  }

  // For SELL, set senderAddress and ownerAddress in the iframe URL.
  if (event.data.type === 'sell_session_requested') {
    const { requestId, message } = event.data;
    wallet.validateRampSession(message);
    const signature = await wallet.signMessage(message);
    iframe.contentWindow.postMessage(
      { source: 'frax-ramp-host', version: 1, type: 'sell_session_result', requestId, signature },
      'https://www.fraxramp.xyz'
    );
  }

  // Validate the deposit, broadcast it, then return the hash immediately.
  if (event.data.type === 'sell_deposit_requested') {
    const { requestId, request } = event.data;
    wallet.validateRampDeposit(request);
    const txHash = await wallet.sendErc20(request.token, request.receiver, request.amount);
    iframe.contentWindow.postMessage(
      { source: 'frax-ramp-host', version: 1, type: 'sell_deposit_result', requestId, txHash },
      'https://www.fraxramp.xyz'
    );
  }
});